Lược đồ chữ ký Elgamal được giới thiệu năm 1985, kể từ khi giới thiệu đến nay, nó được đưa vào sử dụng trong nhiều ứng dụng. Sự an toàn của lược đồ chữ ký ElGamal loại dựa vào độ khó của bài toán DLP. Mỗi chương trình ký số Elgamal sử dụng một hàm băm và tạo chữ ký ngẫu nhiên thông qua cách sử dụng tham số một lần duy nhất cho mỗi thông điệp. Do vậy cần cẩn thận trong việc chọn tham số một lần duy nhất.
Các nhà khoa học H. Kuwakado and H. Tanaka đã đưa ra thuật toán chạy trong thời gian đa thức gọi là thuật toán KT để khôi phục lại khóa bí mật của lược đồ chữ ký
số nếu như hai chữ ký với tham số sử dụng một lần duy nhất với giới hạn 0< k1, k2 <
O( ) Trong đó q là kích thước của nhóm nhân xây dựng cho lược đồ ký số. Dựa trên
phương pháp KT, các nhà khoa học đã để xuất phương pháp mới dựa trên phương
pháp KT để khôi phục khóa bí mật của lược đồ ký số Elgamal gọi là “Phân rã số nguyên”
Sau đây tôi sẽ trình bày cách thức tấn công này
2.2.1.1 Lý thuyết liên quan phục vụ cho phương pháp tấn công a/. Tổng quát về lược đồ ký số Elgamal:
Tạo khóa:
Chọn p, q sao cho q chia hết cho p- 1
Chọn một phần tử g nguyên tố của trường GF(p) tạo ra nhóm cyclic bậc q
Chọn một số ngẫu nhiên x và Y gx mod p, x là khóa bí mật của người ký, p, q và Y được công khai
Tạo chữ ký:
Với mỗi thông điệp M cần ký, chọn ngẫu nhiên một số k được gọi là tham số dùng một lần. Chọn k trong đoạn [1, q-1]. Do đó lược đồ chữ ký Elgamal là (M, r, s) với r= gk (mod p) và s (H(M)- xr)/k (mod q).
Kiểm tra chữ ký:
Để kiểm tra chữ ký, kiểm tra hàm gH(M) Yrrs (mod p) là đúng thì chấp nhận chữ ký
đó. Hầu hết các biến thể của lược đồ ký số Elgamal sử dụng các tham số hệ thống và tham số sử dụng một lần thay đổi sau bước sinh khóa và kiểm tra chữ ký.
Ở lược đồ chữ ký số Elgamal đơn giản ta sử dụng hàm
u xv+ kw (mod q) để kiểm tra.
Với u = H(M), v = r và w= s là một phần của chữ ký . Kết quả của chữ ký là H(M) xr + ks (mod q)
b/. Thuật toán KT:
Chọn tham số sử dụng một lần k ngẫu nhiên trong khoảng 1< k q- 1
Ngược lại, giả sử chúng ta có chữ ký cho hai thông điệp m1 và m2 với tham số sử dụng một lần tương ứng k1 và k2.
Sau đó, từ phương trình u xv + kw (mod q) ta có hệ phương trình sau đây: u1 xv1 + k1w1 (mod q)
u2 xv2 + k2w2 (mod q)
Sau khi loại bỏ x, chúng ta có được một phương trình đồng dư không xác định
u1v2 – u2v1 k1(w1v2) + k2 (-v1w2) (mod q)
Thuật toán KT là để giải quyết phương trình này và có thể được tóm tắt bằng ba bước sau:
Bước 1: Tìm một vecto ( 1, 2) Z Z thỏa mãn:
1 w(w1v2) (mod q) và 2 w(-v1w2) (mod q) với mọi w Z
0 1, 2 O( )
1, 2 là hai số nguyên tố cùng nhau
Bước 2:
Cho K1, K2 là số nguyên sao cho K1 1 + K2 2 = 1. Đặt 3 w(u1v2 – u2v1) (mod q)
Bước 3:
Thực hiện tìm kiếm k’ sao cho (gk’ mod p) từ phương trình
S= {(lq + 3) K1 + 2t | l, t Z}
Lý do tìm k’ trong S là. Từ phương trình
u1v2 – u2v1 k1(w1v2) + k2 (-v1w2) (mod q) đối với w.
Ta có
3 k1 1 + k2 2 (mod q). Do vậy ta có:
lq+ 3 = k1 1 + k2 2 với mọi số nguyên l. Nhân hai vế phương trình với K1 ta được:
k1 = lq+ 3 ) K1 + 2 (k1 K2 – k2 K1 )
Vì mục đích phải chọn được k1 duy nhất nên thay t= k1K2 – k2 K1 và đi tìm giá trị t
đúng.
Các điều kiện kiểm tra (gk’ mod p)
Trong bước 3 có thể thay đổi với các lược đồ chữ ký số. Ở đây xét lược đố ký số Elgamal đơn giản. Khi một giá trị đơn k’ trong bước 3 được tìm thấy chúng ta có:
u1 x v1 + k’ w1 (mod q)
Từ đó, khóa bí mật là:
x (u1 - k’w1) (mod q)
2.2.1.2 Trình bày thuật toán
Thuật toán tấn công bằng phương pháp phân rã số nguyên chính là cải tiến của thuật toán KT. Cụ thể là cải tiến bước 1 của KT
H. Kuwakado and H. Tanaka tiếp tục sử dụng phân số để tìm ( 1, 2) trong bước 1. Họ sử dụng hàm heurictic để tìm kích thước của vecto nhưng không thành công.
Sau đó Gallant đã đề xuất phương pháp tìm từng đoạn ngắn trong vecto bằng cách sử dụng thuật toán Eculid mở rộng.Với những vecto ngắn này thì có thể hoàn toàn kiểm soát được kích thước của nó, cụ thể kích thước đó giới hạn bởi và dễ dàng thay đổi khi cần thiết.
Với thuật toán cải tiến này, họ cải tiến bước 1 của thuật toán KT và kết hợp với phương pháp mà Gallant đã đề xuất.
* Giải thích phương pháp của Gallant đã đề xuất: Giả sử cho q là một số nguyên tố và một số nguyên < q. Trong thuật toán Eculid mở rộng cần tìm UCLN(q, ) .Ta xây dựng
siq + ti = r i với i= 0, 1, 2….
Trong đó s0 = 1, t0 = 0, r0 = q và s1 = 1, t1 = 1, r1 = . si, ti, r i đáp ứng điều kiện sau đây:
r i > r i+1 0, i 0; < , i 1; < , i 0;
r i-1 + r i = q , i 1;
r i giảm cho đến giá trị 1, khi đó tồn tại m sao cho r m+1 < r m Mặt khác từ mối quan hệ r m + r m+1 = q ta có < Do đó, luôn có r m+1, thỏa mãn: s m+1q + = r m+1 và - < r m+1, < Ta có bổ đề sau đây: Bổ đề 2.1:
Cho q là một số nguyên tố và số nguyên dương < q. Tồn tại r, t sao cho 0< r, < và r- t 0 (mod q)
Bằng cách sử dụng bồ đề 2.1 ta có cải tiến bước 1 của phương pháp KT như sau:
Định lý 2.2:
Cho q là số nguyên tố và 0 < x, y < q là các số nguyên cho trước. Khi đó tồn tại w, 1, 2 với 0< 1, sao cho
wx 1 và wy 2 (mod q), khi đó 1, 2 là hai số nguyên tố cùng nhau
Với q là một số nguyên tố, khi đó có hai số nguyên a1, a2 thỏa mãn a1x 1
(mod q) và a2y 1 (mod q). Sử dụng bổ đề 2.1 cho q và = (-a2 mod q), lấy hai số
nguyên 1, 2 sao cho
1+ 2 0 (mod q) và 0 < 1, <
Sau đó w =( a1 1 mod q) = ( a2 2 mod q) thỏa mãn wx 1 và wy 2 (mod q)
Giả sử rằng 1, 2 không nguyên tố cùng nhau, sau đó ta thay ( , ) = ( 1/d,
2/d). Với d = gcd( 1, 2). Chú ý rằng + 0 (mod q)
Do đó đặt
w’ a1 a2 0 (mod q)
Khi đó vẫn có w’x và w’y (mod q) với giá trị nhỏ nhất của , Độ phức tạp của thuật toán là O((log2p)3)
2.2.1.3 Ví dụ minh họa ([12], trang 7):
Sử dụng thật toán cải tiến của thuật toán KT cho quá trình sinh khóa. Tham số chọn ở đây p là một số nguyên tố 1024 bits
p =
FFFFFFFF FFFFFFFF CB47A437 683930DF 5FFE707F 0146C929 1E11DAF4 C4F04CA4802C8962 FBDDCBEF 95C64EC5 5E6E2DE4 34C15608 988B0DE0 BB67C6F1 897E35247 AE4F8E2 357C5C6F 846D66A6 BE2E9535 03865E6A 584B6D90 E08E529F 1BEED0CF 39340EB4 09A229F3 4AB4E9AE 84573A2C 25C103DC 252DAE89 FFFFFFFF FFFFFFFF
Chọn phần tử g của GF(p) với bậc q g=
F673E579 5E963571 89F8BABC 9DCB3D2F 77D69D82 A3AC49FA 1983830F 8767B079 C653E71B 921AA8FA 31538E5F 471905C6 16C51043 2FEF992B 96CAE38E C1A2CA9A E0A31D48 577F1CD8 A4A13D55 C4659186 D1120112 D1A02156 06EC8E23 66B972EA D563400A 964D8607 9DA15F95 BA48C849 27D02FA4 74F588FF 9E13ABDA C8178DFC
Khi đó
q = 97B16FBB 1F6E9D93 0DAC5350 C07043F9 558A7F45 là một số nguyên tố 160 bits chia hết cho p-1 .
Khóa bí mật của người ký
x = 5669EE54 FCC7D19B 17D23994 CFC675E7 BE00C7B6 Ở ví dụ này tạo ra hai chữ ký sử dụng tham số dùng một lần
k1 = 1DC28733 53DC818B 082FDB0D và k2 = 0B8905F7 8E33061F 90296997
được giới hạn bởi B , với B = 213
sử dụng phương trình u xv + kw (mod q) để tạo ra chữ ký. Khi đó ta được
u1 = 86E4155E D4B08E2A 59701A89 9A482A3F C73DE59E v1 = 4D668963 08F04FEC DD8DB68D 097C6894 64EE4A73 w1 = 873E9323 35A095B0 51031574 371D6771 E299B227 và
u2 = 743C6A82 E7BBA6FE C9E6A392 0B6FFB83 43139DC4 v2 = 450C542D D97DAD8D 0B493D98 FDDB6013 DA1ABECD w2 = 66EC0899 26D0DA6E 1F5B14C7 C910042F 626DC2CE.
Bây giờ ta có hai chữ ký từ việc sử dụng tham số sử dụng một lần. Áp dụng các bước của thuật toán KT. Trước hết sử dụng thuật toán Eculid ta có
w = 8348484A 7D88CFAF 47923F2B A2BC58DB 079F944E và
1= 0000116A 481ECCD8 7CB58C19
2= 00050F9F 9431606F FFBA0C91.
Khi chạy thuật toán Eculid, giới hạn là 2 > (trong thực tế 6.57) Bước tiếp theo tìm
K1 = 0000A093 261A8813 CB5DE1B4 K2 = - 00000228 8B0622EE ED41F6E3.
Trong bước tìm kiếm cuối cùng giới hạn không gian của S là
{(lq+ 3)K1 + 2t | ( 1 + 2 )B và }, với t0 = -
Kết quả tìm được k1 = (lq + )K1 + 2t với l= 26096 và t= t0 – 1505
2.2.1.4 Đánh giá phương pháp:
Như vậy qua cách tấn công trên ta có thể thấy thám mã lợi dụng sơ hở khi dùng số k, nếu bị lộ số k thì thám mã sẽ tìm được khóa bí mật.
Ngoài ra khi sử dụng lại số k nhiều lần cho các lần lập mã khác nhau thì thám mã nếu một lần biết được cả bản rõ thì sẽ dễ dàng có được bản rõ trong các lần sau
Để chống lại tấn công này cần cẩn thận không để lộ số k được dùng, tránh dùng một số k cho nhiều lần lập mã khác nhau.