2 Một số ứng dụng của số học trong lý thuyết mật mã
2.3.1 Phân tích Fermat và mở rộng của nó
Phân tích Fermat
Mệnh đề :
Giả sử n là một số nguyên dương lẻ. Khi đó tồn tại tương ứng 1-1 giữa các cách phân tích n dưới dạng n = a.b, a ≥ b > 0 và cách biểu diễn n dưới dạng n = t2 −s2, trong đó t, và s là các số nguyên không âm. Tương ứng trên được cho bởi:
t = a+b 2 , s =
a−b
Chứng minh :
Giả sử ta có phân tích n= a.b. Khi đó:
n = a.b = (a+b 2 ) 2 −(a−b 2 ) 2. Đặt t = a+b 2 , s = a−b
2 , ta được n = t2 −s2. Ngược lại, cho n = t2 −s2, ta có phân tích
n = (t+s)(t−s). Từ mệnh đề trên ta có thuật toán. Thuật toán :
1.Xét d√ne là số nguyên bé nhất lớn hơn hay bằng √n
2. Kiểm tra p
d√ne2 −n có nguyên không?
.Nếu p
d√ne2 −n không nguyên thì quay lại bước 1 và tăng bình phương trong căn.
.Nếu p d√ne2 −n là nguyên với p d√ne2 −n = m thì chuyển sang bước 3. 3. n = l2 −m2 = (l +m)(l −m) = p.q với p= l+m, q = l−m, l = d√ne. Ví Dụ: Phân tích số n = 3228551 Ta có: √n = √ 3228551 ≈1796,81;d√ne = 1797 Do p d√ne −n = √ 17972 −322851 = √
158 không là số nguyên nên ta tính tiếp.
p
(d√ne+ 1)2 −n = √
17982 −3228551 = √
4253 không là nguyên ta lại tính tiếp. p (d√ne+ 2)2 −n = √ 17992 −3228551 = √ 7850 vẫn không nguyên ta lại tính tiếp. p (d√ne+ 3)2 −n= √ 18002 −3228551 = √ 11449 = 107. Vậy 3228551 = (1800-107)(1800+107) = 1693.1907 Phân tích Fermat mở rộng
Nếu ta thấy phân tích Fermat không tìm được p
trong một số bước hữu hạn nào đó (đủ lớn), nhưng ta tìm được p
d√ne2 −n
là bội của n thì ta có thể chọn số nguyên k nào đó và thử liên tiếp.
p
(dkne2 + i)2 −kn (với i= 0, 1 , . . .) cho tới khi nào tìm ra kết quả
p
(dkne+i)2 −kn là một số nguyên. Ví dụ: Phân tích số n = 282133
Ta có d√ne = d√282133e = 532
Nếu xuất phát từ 532, thì sau 82 bước ta mới đến được kết quả
√
6132 −282133 = √
93636 = 306 .Từ đó suy ra 282133 = 307.919 Nhưng nếu xất phát từ d√3ne= d√3.282133e= 920
và tiến hành thử p
d920 +ie2 −3.282133 thì ngay bước đầu với i = 0 ta được: p (920 + 0)2 −3.282133 = 1 Suy ra 3n = 3.282133 = 9202 − 1 = (920 + 1)(920 − 1) = 921.919 = 3.307.919 Vậy n= 282133 = 307.919
(Phân tích Fermat mở rộng cho kết quả nhanh nhất vì 919 ≈ 3.307, hay
p ≈ kq) .
Phân tích Fermat dùng cơ sở
Nhận xét rằng, nếu không tìm được p
d√ne2 −n = √
l2 −n = m là số nguyên (hay l2 −n = m2 là số chính phương) nhưng ta tìm được l, m sao cho l2 ≡m2 (mod n), thì ta có thể phân tích được n.
Thật vậy, ta có (l + m)(l −m)...n, nên nếu (l ±m) không chia hết cho n
thì ta chỉ cần tính (l+ m, n),(l−m, n) để tìm các ước số của n. Ví dụ: Phân tích số n = 1147. Ta có 682 ≡ 62 (mod 1147) ⇒ (68−6)(68 + 6)...1147 Ta tính (68 + 6,1147) = 37,(68−6,1147) = 31. Như vậy 1147 = 37.31 Câu hỏi:
sao tìm được các số b và c sao cho b2 ≡c2 (mod n)?
Y tưởng để giải quyết vấn đề đó như sau. Tìm nhiều số bi sao cho b2i
(mod n)là tích các luỹ thừa nguyên tố nhỏ, đồng thời tích một số b2i nào đó đồng dư với một số chính phương modulo n. Để thực hiện việc đó, ta đưa vào định nghĩa sau:
Định nghĩa
Một cơ sở phân tích là một tập hợp B = {p1, p2, . . .} các số nguyên tố khác nhau, trừ ra p1 có thể là -1. Một số nguyên b được gọi là B− số (Đối với n đã cho) nếu thặng dư tuyệt đối bé nhất b2 (mod n) có thể viết như tích các số thuộc B
Thuật toán
1. Lấy ra một tập hợp số nguyên tố nào đó làm cơ sở phân tích
B = {p1, p2, ...}.
2. Lập biểu đồ tính (d√ne+i)2−n= c2 với i = 0,1,2... (gồm các cột
i, li, phân tích, pi )
rồi sau đó phân tích theo cơ sở đã chọn (trong bảng số nhị phân ở cột nằm dưới các số trong cơ sở phân tích chính là các số mũ trong phân tích, được rút gọn theo modulo 2). Nếu tại bước nào đó ta không phân tích được hoàn toàn (tức là trong phân tích có số nguyên tố nằm ngoài cơ sở ) thì cứ việc bỏ qua và thực hiện bước tiếp theo. Khi nhận thấy có đủ nhiều số được phân tích ta chọn một tập con các số có tích là một số chính phương (Tập con lấy được là tập lấy theo bảng nhị phân ở cuối biểu đồ để lọc ra tập con có tổng từng cột là chẵn.
3. Tính b2 ≡ c2 (mod n).
Kiểm tra b ≡ ±c (mod n) không?
.Nếu sai thì n= p.q với p= (b−c, n), q = (b+c, n).
.Nếu đúng thì quay về bước 1, mở rộng biểu đồ và tìm tập con khác.
Ví dụ: n = 3239 Chọn cơ sở gồm các số nguyên tố nhỏ hơn 12;
i bi c2 = (d√ne+i)2 phân tích 1 3 5 7 11 Ghi chú
0 57 10 2.5 1 0 1 0 0 (1mod2 = 1)
1 58 125 53 0 0 1 0 0 (3mod2 = 1)
2 59 242 2.112 1 0 0 0 0 (2mod2 = 1)
3 60 361 361 phân tích không hoàn toàn
4 61 482 2.241 phân tích không hoàn toàn
Ta có b2 = 572.582.592 = (57.58.59)2 = 1950542
c2 = 22.54.112 = (2.52.11)2 = 5502
Dễ thấy 57.58.59 (mod n) = 714.
2. 52.11 (mod n) = 550.
và 714 6≡550 (mod n) nên ta có kết quả:
p = (714 - 550, n) = 41 ⇒ n = 41.79. Vậy n = 41.79 Nhận xét:
Nếu việc triển khai tính toán các đại lượng (d√ne+i)2 −n, i = 0,1,2, . . .
không đem lại kết quả thì ta có thể chuyển sang tính với (d√2ne+i)2−2n, i = 0,1,2, . . . hoặc là : (d√3ne+i)2 −3n, i = 0,1,2, . . . v.v...
Ví dụ: Phân tích số n = 216449.
Chọn cơ sở gồm các số nguyên tố nhỏ hơn 19;B = {2,3,5,7,11,13,17,19};
d√ne = d465.2e= 466, d√2ne= d657.9e = 658. Ta có bảng:
k (d√r.ne+k)2 −r.n phân tích 1 3 5 7 11 13 19
r =1 0 4662 −n 7.101 phân tích không hoàn toàn
1 4672 −n 23.5.41 phân tích không hoàn toàn
2 4682 −n 52.103 phân tích không hoàn toàn
3 4692 −n 23.439 phân tích không hoàn toàn
r = 2 0 6582 −2n 2.3.11 1 1 0 0 1 0 0
1 6592 −2n 3.461 phân tích không hoàn toàn
2 6602 −2n 2.7.193 phân tích không hoàn toàn
3 6612 −2n 33.149 phân tích không hoàn toàn
4 6622 −2n 2.35.11 1 1 0 7 1 0 0
Đến đây ta thấy có 2 hàng phân tích trong r = 2(ứng với k = 0,4)thoả mãn điều kiện: Ta có b2 = 6582.6622 = (658.662)2 = 4355962.
c2 = 22.36.112 = (2.33.11)2 = 5942. Dễ thấy 658.662 (mod n) = 2698.
2.33.11 (mod n) = 594.
và 2698 6≡ 594 (mod n) nên ta có kết quả:
p = gcd(2698 -594, n) = 263 ⇒ n = 263.823. Vậy n = 263.823