CHƯƠNG I CƠ SỞ TOÁN HỌC CỦA MẬT MÃ HIỆN ĐẠI
I.3 Logarit rời rạc
3.1 Các khái niệm cơ sở
Bài toán logarithm rời rạc:
Giả sử G là một nhóm cyclic có phần tử sinh là g, cho h là một phần tử của G, hãy tìm logarithm cơ số g của h trong G: loggh(mod|G|).
Nghĩa là ta phải tìm phần tử x trong G thỏa mãn h≡gx(mod|G|).
Bài toán logarithm rời rạc có vai trò rất lớn trong ứng dụng của mật mã. Đặc biệt quan trọng trong trường hợp GF(q)*, với q pl, p là số nguyên tố, lN, tức là trong trường Galois, cũng như trong trường hợp G là một nhóm điểm của đường cong Elliptic trong trường hữu hạn.
Ví dụ, G=Z5*, và phần tử sinh là 2, khi đó logarithm rời rạc của 1 là 4 bởi vì 24 ≡ 1 mod 5.
3.2 Thuật toán bước Baby và bước Giant của Shank
Cho p là một số nguyên tố, thuật toán bước Baby bước Giant của Shank là một thuật toán tính logarithm rời rạc của số nguyên h thuộc *
p
Z với cơ số g và theo modulo p. Thuật toán này nhanh hơn thuật toán vét cạn với số phép toán trung bình là
( log )
O p p .
Ý tưởng của thuật toán như sau: Giả sử m p
, khi đó nếu x là logarithm rời rạc của h ta có thể viết x=mq+r với q là số nguyên nào đó và 0 r m . Bởi vậy, ta có đẳng thức:
h = gx = gmqgr(modp) điều này có nghĩa là :
h(g-m)q=gr(modp).
- Tính tất cả các lũy thừa của g theo modulo p: g0, g1, …, gm-1(modp),
- Trước hết, tính g-m(modp), tiếp theo, ta tính h(g-m)q(modp) với q=0, 1, 2, … cho đến khi xuất hiện q thỏa mãn h(g-m)q≡qr(modp) với 0 r m nào đó.
Khi đó, logarithm rời rạc của h trong *
p
Z theo cơ số g bằng x=mq+r.
Ví dụ, chọn p=31, và ta có thể kiểm tra g=3 là phần tử nguyên thủy của * 31
Z . Giả sử ta cần tìm logarithm rời rạc của h=6.
Các bước thực hiện như sau: - Tính m p6
và tính 6 lũy thừa của g: go=1, g1 = 3, g2 = 3, g3 = 27, g4 = 81≡19(mod31), g5 = g4 g≡19*3≡26(mod31).
- Tiếp theo, chúng ta tính g-1=3-1(mod31). Áp dụng thuật toán Euclide mở rộng ta có 3-
1
(mod31)=21. Sau đó, ta tính được 3-6(mod31)=2. Đến đây, ta tính h(g-m)q=6.2q với các giá trị của q chạy từ 0 tăng lên:
h(g-m)0=6.20=6, h(g-m)1=6.21=12, h(g-m)2=6.22=24,
h(g-m)3=6.23≡17(mod31), h(g-m)4=6.24≡3(mod31),
Đến đây ta thấy h(g-m)4=g1(modp). Điều nay có nghĩa là h≡g4m+1≡g4.6+1≡g25. Vậy logarithm rời rạc của h=6 là 25.
3.3 Thuật toán Pollig – Hellman ([3], trang 241-243): Giả sử rằng Giả sử rằng 1 i k c i i n p
ở đây các pi là các số nguyên tố khác nhau. Giá trị alog được xác định duy nhất theo modulo n. Trước hết ta nhận thấy, nếu ta có thể tính được mod ci
i
a p với mọi i thỏa mãn 1 i k , thì ta có thể tính a modn bằng cách áp dụng định lý phần dư Trung quốc.
Giả sử q là số nguyên tố thỏa mãn,
n≡0(modqc) và
n≠0(modqc+1). Chúng ta sẽ trình bày cách tính giá trị
x=a mod qc,
ở đây, 0≤x≤qc -1, chúng ta biểu diễn x theo cơ số q theo cách sau:
1 0 c i i i x a q ,
ở đây 0≤ai≤q-1 với 0≤i≤c-1. Chúng ta có thể biểu diễn a theo cách như sau: a=x+sqc
với s nguyên nào đó. Bởi vậy, chúng ta có thể biểu diễn
1 0 . c i c i i a a q sq
Bước đầu tiên của thuật toán là tính a0. Để tính a0 ta sử dụng nhận xét sau:
0 / / a n q n q
(I.3.1)
Dùng hệ thức (I. 3. 1) ta có thể dễ dàng tính được a0 bằng cách như sau : Trước tiên tính
/ 2
, ,...
n q
cho đến khi tìm được
/
i n q
,
Với i≤q-1 nào đó. Khi điều này xảy ra, chúng ta biết ngay a0=i.
Như vậy, với c=1 ta đã làm xong. Bây giờ ta xét với c>1, chúng ta tiến hành xác định a1, a2, …, ac-1. Quá trình này tương tự như khi xác định a0. Đặt 0= và xác định
1 0 1 1 (a a q ... aj qj ) j
với 1≤j≤c-1. Chúng ta sử dụng biểu thức nhận được từ việc tổng quát quát hóa hệ thức (I. 3. 1) như sau :
1 /
/ j a n qj
n q j
(I. 3. 2)
Khi j=0 thì từ (I. 3. 2) trở thành (I. 3. 1).
Khi đã biết j, ta dễ dàng tính aj từ hệ thức (I. 3. 2).
Bằng công thức truy hồi khi biết aj và j ta có thể tính j+1 : 1 j j a q j j (I. 3. 3) Do đó ta có thể tính a0,1, ,a1 2,...,c1,ac1 bằng cách áp dụng (I.3.1) và (I.3.2).
Sau đây là trình bày dưới dạng giả mã của thuật toán Pohlig – Hellman. Thuật toán Pohlig – Hellman(G, n, , , q, c)
j←0 j← While j≤c-1 1 / / 1 1 j j j n q j in q j a q j j find i suchthat do a i j j Reurn (a0, …, ac-1) Ví dụ
Cho số nguyên tố p = 8101, và phần tử sinh của Z8101 là a = 6. Chúng ta cần tìm x thỏa mãn ax = 7531 mod 8101.
Chúng ta dễ dàng phân tích p-1 = 8100 = (22)(34)(52), là các nhân tử nguyên tố nhỏ. Chúng ta sẽ xác định số x2 ≡ x mod (22), x3 ≡ x mod (34) and x5 ≡ x mod (52).
Xác định x2.
Do x2 là một số tính theo mod 4, nên ta có x2 = c0 + c1 (2), với các hệ số bằng 0 hoặc 1. Chúng ta xác định các hệ số này như sau.
7531(p-1)/2 = 75314050 = -1 và số này = ac0 (p-1)/2, chúng ta có c0 = 1. Bây giờ ta chia 7531 cho ac0 để nhận được
7531(a-1) = 7531(6751) = 8006 mod p.
8006(p-1)/4 = 80062025 = 1 và số này = ac1 (p-1)/2, từ đó c1 = 0. x2 = c0 + c1 (2) = 1 + 0(2) = 1.
Xác định x3
Do x3 tính theo mod 81, ta có x3 = c0 + c1 (3) + c2 (9) + c3 (27), với các hệ số bằng 0, 1 hoặc 2. Chúng có thể tính được a(p-1)/3 = 5883, and a2(p-1)/3 = 2217.
7531(p-1)/3 = 2217, vậy c0 = 2.
Bây giờ ta chia 7531 cho ac0 nhận được 7531(a-2) = 6735 mod p.
6735(p-1)/9 = 1, vậy c1 = 0. Ta chia 6735 cho a3c1 nhận được 6735(a0) = 6735 mod p.
6735(p-1)/27 = 2217, vậy c2 = 2. Chia 6735 cho a9c2 nhận được 6735(a-18) = 6992 mod p.
x3 = 2 + 0(3) + 2(9) + 1(27) = 47.
Xác định x5
Do x5 được tính theo mod 25, x5 = c0 + c1 (5), với các hệ số bằng 0, 1, 2, 3 hoặc 4. Chúng ta cần phải tính a(p-1)/5 = 3547, a2(p-1)/5 = 356, a3(p-1)/5 = 7077, a4(p- 1)/5 = 5221.
7531(p-1)/5 = 5221, vậy c0 = 4. Ta chia 7531 cho ac0 đi đến 7531(a-4) = 7613 mod p.
7613(p-1)/25 = 356, vậy c1 = 2. x5 = 4 + 2(5) = 14.
Xác định x.
Chúng ta sử dụng định lý phần dư Trung quốc để tìm nghiệm của hệ phương trình đồng dư sau, x ≡ 1 mod 4 x ≡ 47 mod 81 x ≡ 14 mod 25. M1 = 8100/(4) = 2025 y1 = M1-1 mod 4, y1 = 1. M2 = 8100/81 = 100 y2 = M2-1 mod 81, y2 = 64. M3 = 8100/25 = 324 y3 = M3-1 mod 25, y3 = 24.
CHƯƠNG 2: NGHIÊN CỨU SỰ AN TOÀN CỦA MỘT SỐ HỆ MẬT MÃ HIỆN ĐẠI Các hệ mật RSA, Elgamal và hệ mật trên đường cong Elliptic hiện đang là ba hệ mật hiện đại được sử dụng rộng rãi trong thực tế. Trên thế giới, đã có nhiều công trình nghiên cứu về sự an toàn của ba hệ mật này. Trong đó phải kể đến các công trình nghiên cứu về thám mã từ đó đưa ra các giải pháp nhằm nâng cao việc bảo mật khi sử dụng các hệ mật trên.
Đối với RSA, sự an toàn của nó phụ thuộc vào độ khó của bài toán phân tích n thành thừa số nguyên tố p, q. Hiện nay có nhiều thuật toán để giải bài toán này. Trong đó chạy nhanh nhất phải kế đến thuật toán sàng trường số của Pollard. Như vậy phải luôn cải tiến song song với việc đánh giá sự an toàn của RSA để đảm bảo an toàn cho việc sử dụng dữ liệu của mình.
Đối với mật mã Elgamal và mật mã trên đường cong Elliptic, tuy còn non trẻ so với RSA nhưng đang ngày càng có nhiều ứng dụng thực tiễn vì kích thước khóa nhỏ hơn rất nhiều so với RSA khi có cùng mức độ an toàn. Sự an toàn của hai hệ mật mã này phụ thuộc vào bài toán logarit rời rạc. Bài toán Logarit rời rạc hiện là đối tượng trong nhiều công trình nghiên cứu và được xem là bài toán khó nếu p được chọn cẩn thận. Hiện nay không có thuật toán thời gian đa thức nào để giải bài toán logarit rời rạcViệc lựa chọn các tham số phù hợp sao cho bài toán logarit rời rạc trở nên khó giải đã đảm bảo an toàn cho các hệ mật mã này.
Ở Việt Nam các hệ mật mã RSA, Elgamal và mật mã trên đường cong Elliptic đã được sử dụng trong nhiều ứng dụng bảo mật trên máy tính. Tuy nhiên chưa có nhiều công trình nghiên cứu được công bố về sự an toàn của ba hệ mật mã này. Do vậy đánh giá sự an toàn của ba hệ mật này là vấn đề cần thiết. Việc nghiên cứu các vấn đề liên quan đến sự an toàn của các hệ mật trên có bài báo: “Sai phạm trong sử dụng mật mã khóa công khai” đăng trên tạp chí an toàn thông tin 4/2012. Trong Bài báo này giới thiệu những số liệu khảo sát liên quan tới các modulus RSA là yếu tố ảnh hưởng nhiều tới tính an toàn của các khóa công khai.
II.1 Mật mã RSA
2.1 Các cuộc tấn công vào RSA
Nếu các cuộc tấn công được biết tới trước đây tập trung chủ yếu vào việc khai thác những sơ hở do việc sử dụng RSA không đúng cách, tức là không nhằm mục đích phá vỡ cấu trúc của RSA mà chủ yếu đi phân tích các sơ hở có thể tạo ra lỗi, từ đó tấn công vào nó. Khoảng 4 năm trở lại đây, giới công nghệ đã được chứng kiến những kết quả vĩ đại trong việc phá mã RSA. Đó là kết quả của việc phá vỡ RSA với độ dài khóa 768 bit và mới đây nhất là 1024 bit. Những kết quả vĩ đại đó cũng cho thấy một điều
rằng, để đảm bảo an toàn cho dữ liệu thì việc chọn khóa có độ dài đủ lớn là vô cùng quan trọng.
2.1.1 Factoring RSA-768([13], trang 6-19)
Vào 02/2010, các nhà khoa học Thorsten Kleinjung cùng các cộng sự là: Kazumaro Aoki , Jens Franke, Arjen K. Lenstra, Emmanuel Thomé, Joppe W. Bos, Pierrick Gaudry, Alexander Kruppa, Peter L. Montgomery, Dag Arne Osvik, Herman te Riele, Andrey Timofeev, Và Paul Zimmermann đã công bố phương pháp phá vỡ được RSA- 768-bit, tương đương 232 chữ số thập phân bằng phương pháp sàng trường số- Number field sieve (NFS).
Đây là kết quả kỷ lục đối với phân tích nhân tử số nguyên nói chung. Tại thời điểm đó người ta tin rằng việc phá vỡ RSA-1024 bits khó hơn việc phá RSA-768 bits 1000 lần và phá RSA-768 bits khó hơn 1000 lần so với RSA-512 bits được phá vỡ từ thập kỷ trước.
Để thực hiện phá vỡ được modulos này, các nhà khoa học đã tốn khoảng nửa năm và chạy trên 80 bộ vi xử lý khác nhau để thực hiện việc chọn đa thức. Việc sàng là bước quan trọng nhất và thực hiện trên hàng trăm chiếc máy tính và mất gần hai năm.
Nếu việc này làm trên một bộ vi xử lý 2,2 GHz AMD Opteron có 1 lõi với 2
GB RAM thì sẽ mất 1.500 năm. Chuẩn bị dữ liệu sàng cho bước ma trận mất một vài
tuần trên một vài bộ vi xử lý.
Ở đây sử dụng số N lấy từ danh sách thách đố của RSA Laboratories được treo giải 50.000 USD.
2.1.1.1 Lý thuyết liên quan đến cuộc tấn công
Phương pháp đồng dư bình phương
Số nguyên n có thể phân tích thành tích của hai số x, y bằng cách tính x2 y2 mod n, và mong muốn n có thể phân tích thành gcd(x- y, n). gcd(x+ y, n).
Phương pháp tiếp cận Morrison-Brillhart:
Sử dụng kết hợp với đồng dư bình phương để giải phương trình x2 y2 mod n Khái niệm mịn:
Ta gọi một số nguyên là ‘mịn’ nếu như nó phân tích được thành tích của các số nguyên tố nhỏ
2.1.2.2 Các bước của thuật toán a/. Lựa chọn đa thức:
Cho n là số nguyên. Trong NFS, mối quan hệ được xác định bởi cặp nguyên tố
của số nguyên (a, b) với b> 0 sao cho hai giá trị v1(a,b) và v2(a, b) phụ thuộc vào số a, b mịn. v1(a,b) với ràng buộc b1 và v2(a,b) với ràng buộc b2.
Giá trị v1(a,b), v2(a,b) định nghĩa như sau:
Cho f1(X) , f2(X) Z[X] là hai đa thức rút gọn của d1 và d2. Sao cho
f1(m) f2(m) … 0 mod n.
Cho Q( k) = Q[X]/ (fk(X)) với k = 1, 2 là hai trường đại số. Phần tử a- b k thuộc Z[ k] có dạng vk(a, b) và Q( k).
Mục đích chính trong Q( k) là ánh xạ đến cặp (p, r mod p) với p là số nguyên tố và fk(r) 0 mod p. Loại trừ các phân tích của fk có dạng p được tạo bởi p và r- k
Bởi vì fk(m) 0 mod n nên Z[ k] Z/nZ với k= 1, 2
Từ i (với ai Z) nên i mod n và 1(a- b 1) 2(a- b 2) mod n. Tìm hai vecto v1(a, b) và v2(a, b) sao cho b1-mịn, b2-mịn.
Một tập con s được xây dựng sao cho là σk trong Q( k)
với k = 1 và k= 2.
Với 1(σ1) 2(σ2) mod n sau đó tính τk = Q( k) với k = 1,2 để tìm giá trị x= 1(τ1) và y = 2(τ2) với x2 y2 mod n.
Từ đó có thể dễ dàng tìm được đa thức f1, f 2.
Cho n .Với d1 N có bậc ( )1/3 và d2 = 1, cho m là số nguyên nhỏ hơn và Cho n= mi với 0 ni < m là cơ số m của n
Từ đó f1(X)= Xi và f2(X)= X- m có hệ số là n0(1) với n .
Chọn giá trị đặc biệt a, b của d1, đó là các giá trị đủ nhỏ đủ để cho f1(a/b) và f2(a/b) có hệ số là n0(1)
Chọn các số mịn b1, b2, bl của các vùng tìm kiếm S cho a, b và có nhiều số nằm giữa b1 và b2 và bL . Với RSA 768 bits, sử dụng b1= 11. 108, b2= 2. 108 và bL =240, sử dụng Ram 2GB. . Và để thực hiện phép sàng này, nhóm nghiên cứu đã tốn nửa năm. Chạy trên 80 bộ vi xử lý để thực hiện việc chọn đa thức.
b/. Sàng
Sàng bằng vector:
Cho vk(a, b) = bdkfk(a/b). Thực hiện lại ý tưởng của phương pháp sàng bằng thuật toán của Pollard làm tăng trọng số của v1(a, b) bởi cặp (a,b) với a, b chia hết cho q(q là số nguyên tố lớn). cho s mod q sao cho a sb mod q, xây dựng một cơ sở giảm
(u,v) của ma trận sao cho (a,b) Z2 thì a sb mod q. Vấn đề là ta phải tìm tất cả các
cặp (I, j) mà - I/2 i< I/2, 0 < j < J với các phép chia phổ biến như v1(a, b)/q và v2(a, b) là mịn. Với (a, b)= iu+ jv.
cơ sở giảm của mạng Γp các cặp (i, j) mà vk(a, b) cho tương ứng cặp(a, b) là chia hết
cho p. Sử dụng cho p lớn để xác định một cơ sở B = (α, β), (γ, δ) của Γp với những
thuộc tính sau đây
β và δ là không âm
-I <α ≤ 0 ≤ γ <I và γ - α ≥ I
Giả sử rằng Γp bao gồm tất cả cặp (i, j) mà i ≡ ρj mod p, trong đó 0 <ρ <p. trường hợp ρ = 0 và trường hợp Γp bao gồm tất cả (i, j) mà p không chia hết cho j, bởi vì (0, 1) và (1, 0), tương ứng, là các cặp nguyên tố cùng nhau.
Với p> I, ta có : (i0, j0)= (-p, 0), (i1, j1) = (ρ, 1) và cho (il+1, jl+1)= (il-1, jl-1)+ r(il, jl) với r= với r không âm và jl tăng. Quá trình này được dừng lại trước l với | il| <I. Nếu l là số lẻ, đặt (α, β) = (il+1, jl+1)= (il-1, jl-1)+ r(il, jl). r là số nguyên nhỏ nhất trong đó α> -I. Đặt (γ, δ)= (il+1, jl+1)= (il-1, jl-1)+ r(il, jl) r là số nguyên nhỏ nhất trong đó γ < I Trong cả hai trường hợp, các phần tử của B = (α, β), (γ, δ) chưa được mô tả là cho bởi (i1, j1)
Để giải thích làm thế nào để sử dụng sàng hiệu quả với các đặc tính này cho (i, j) ∈ Γp sao cho -I / 2 ≤ i <I / 2. tìm (il, jl) ∈ Γp. Sao cho -I / 2 ≤ il <I / 2, jl> J, và jl là rất nhỏ. Khi B là một cơ sở của Γp, Có số nguyên d và e với (il, c)− (i, j ) = d(α, β) + e(γ, δ)
Nếu d, e #0, sau đó điều kiện b trên B sẽ kéo theo các thành phần đầu tiên của phía bên
tay phải có giá trị tuyệt đối ≥ I
Với jl - j, β, và δ là không âm, chúng ta có d ≥ 0 và e ≥ 0. Do vậy