Chƣơng 2: ĐỘ AN TOÀN CỦA SƠ ĐỒ CHỮ KÝ SỐ
2.2. CHỮ KÝ SỐ ELGAMAL.
2.2.1. Sơ đồ.
Sơ đồ chữ ký ElGamal đƣợc đề xuất năm 1985, gần nhƣ đồng thời với sơ đồ hệ mật mã ElGamal, cũng dựa trên độ khó của bài toán logarit rời rạc. Sơ đồ đƣợc thiết kế đặc biệt cho mục đích ký trên các văn bản điện tử.
Sơ đồ chữ ký là S = (P, A, K, S, V),
trong đó P = Zp , A = Z*p x Zp –1 với p là một số nguyên tố sao bài toán lôgarit rời rạc trên Zp* là rất khó.
Tập K gồm các cặp khoá K = (K‟, K‟‟), với K‟ = a, a Zp*. K‟‟ = (p, , ), Zp là phần tử nguyên thuỷ và a (mod p).
K‟ là khoá bí mật dùng để ký, và K‟‟ là khoá công khai dùng để kiểm thử chữ ký.
Thuật toán ký nhƣ sau:
Với thông báo x, để tạo chữ ký trên x ta chọn số ngẫu nhiên k Z*p – 1, chữ ký là: sigK‟(x, k) = (, ), trong đó: = k mod p (2.2)
= (x - a) k-1 mod (p -1) (2.3)
Chú ý:
Sơ đồ chữ ký đƣợc định nghĩa nhƣ trên là hợp thức. Vì nếu sigK‟(x, k) = (, ), thì ta có:
.a. k mod p x (mod p). Tức là thoả mãn điều kiện (2.4).
Chƣơng trình ký trên ký tự C và kiểm tra chữ ký.
Readln(p); Readln(); Readln(a); Readln(k); :=Mu_To(, a, p); Readln(c); Nhập ký tự C Procedure KY_ELGAMAL; Begin x:=ord(c) – 64; := Mu_To(, k, p); :=Nghich_dao(k)*(x-a*)mod(p-1); Writeln(, ); Chữ ký sigk(x, k) = (, ) End;
Readln(, ); If (Mu_To(, , p) * Mu_To(, , p)) = Mu_To(, x, p) Then Xác nhận chữ ký là hợp lệ Else Xác nhận chữ ký là không hợp lệ End; Ví dụ:
Giả sử cho p = 467, = 2, a = 127, khi đó: = a (mod p) = 2127 mod 467 = 132.
Cần ký lên bức điện x = 100, hãy chọn số ngẫu nhiên k = 123. (chú ý UCLN (213, 466) = 1 và 213-1 mod 467 = 431). * Chữ ký là ( , ):
= 2213 mod 467 = 29.
= (100 – 127 * 29) 413 mod 467 = 51. * Xác minh chữ ký bằng cách kiểm tra:
13229 2951 189 mod 467 và 2100 189 mod 467. Vì thế chữ ký là hợp lệ.
2.2.2. Độ an toàn.
* Ƣu điểm.
+ Sơ đồ chữ ký số ELGAMAL là một trong những sơ đồ mạnh và hiện nay đã đƣợc nhiều nƣớc trên thế giới ứng dụng làm chuẩn chữ ký số.
+ Điểm mạnh và an toàn của chữ ký số ELGAMAL là dựa trên tính “khó” giải của bài toán logarit rời rạc trên trƣờng hữu hạn Zp, đây là bài toán mà cho đến nay chƣa có thuật toán “nhanh” để giải nó.
* Độ an toàn.
Sơ đồ chữ ký ElGamal đƣợc xem là an toàn, nếu chữ ký trên văn bản là không thể giả mạo đƣợc. Nói cách khác, không thể có ngƣời nào ngoài chủ thể hợp pháp có thể giả mạo chữ ký của chủ thể đó trên văn bản bất kỳ. Vì vậy, việc giữ bí mật khoá K‟ = a (dùng để tạo chữ ký) là có ý nghĩa quyết định đối với việc bảo đảm tính an toàn của chữ ký.
1). Khả năng để lộ khoá mật K’ = a.
a/. Để lộ tham số ngẫu nhiên k.
Khoá bí mật a có thể bị phát hiện trong trƣờng hợp để lộ số ngẫu nhiên k ở một lần ký nào đó, hoặc sử dụng cùng một số ngẫu nhiên k ở hai lần ký khác nhau. Nếu số ngẫu nhiên k đƣợc sử dụng khi ký trên văn bản x bị lộ, thì khoá bí mật K‟ = a đƣợc tính theo công thức (2.3) là
a = (x - k ). 1 mod (p-1).
b/. Dùng tham số ngẫu nhiên k cho hai lần ký.
Ta xét trƣờng hợp dùng cùng tham số ngẫu nhiên k cho hai lần ký khác nhau, chẳng hạn ký trên x1 và x2.
Giả sử chữ ký trên x1 là (, 1), chữ ký trên x2 là (, 2), với thành phần thứ nhất bằng nhau (và bằng = k mod p), và các chữ ký đó thoả mãn
. 1 x1 (mod p), . 2 x2 (mod p)
Từ đó ta có x1x2 12 k(12) (mod p) (theo (2.2)). Điều đó tƣơng đƣơng với x1 – x2 k (1 - 2) (mod (p-1)).
Đặt d = gcd(1 - 2, p-1). Cả ba số 1 - 2, p-1 và x1 – x2 đều chia hết cho d, ta đặt x‟ = d x x1 2 , ‟ = d 2 1 , p‟ = d p1.
Khi đó đồng dƣ thức ở trên trở thành x‟ k. ‟ (mod p‟).
Vì gcd ( ‟, p‟) = 1, nên có thể tính = ( ‟)-1 mod p‟, và sau đó giá trị k theo mod p‟: k = x‟. mod p‟, tức là
với i là một giá trị nào đó, 0 i d-1.
Thử lần lƣợt điều kiện = k mod p với các giá trị đó của i, ta sẽ tìm đƣợc k. Sau đó từ k, tính đƣợc a cần tìm theo trƣờng hợp a/.
2).Khả năng giả mạo chữ ký trên văn bản cho trước.
Giả sử chủ thể A chọn sơ đồ chữ ký ElGamal với cặp khoá K = (K‟, K‟‟), trong đó K‟ = a là khoá bí mật. Một ngƣời không biết khoá bí mật K‟ = a, mà muốn giả mạo chữ ký của A trên văn bản x, thì phải có khả năng tạo ra đƣợc chữ ký (, ).
Có hai cách: hoặc chọn trƣớc rồi tìm tƣơng ứng, hoặc ngƣợc lại, chọn trƣớc rồi tìm tƣơng ứng.
Nếu chọn trƣớc rồi tìm , thì theo (2.3) phải là:
= (x - a)k-1 mod (p-1) = ((x-a))log mod (p-1) = log (x ).log x mod (p-1);
Đó là bài toán logarit rời rạc, mà ta biết rằng rất khó.
. xmod p
Ta chƣa biết có cách giải hữu hiệu nào không, nhƣng chắc là không dễ hơn bài toán tính lôgarit rời rạc.
Nhƣ vậy, ta có thể tin rằng khả năng giả mạo chữ ký trên văn bản cho trƣớc, khi không biết khoá bí mật K‟ = a là rất ít, do đó không có ảnh hƣởng đáng kể đến tính an toàn của sơ đồ chữ ký.
3). Giả mạo chữ ký cùng với văn bản được ký.
a/. Giả mạo cả văn bản x cùng với chữ ký (, ) trên x.
Khả năng đó xảy ra khi kẻ giả mạo chọn đƣợc x và (, ) thoả mãn điều kiện kiểm thử, cụ thể khi chọn đƣợc x, , có dạng sau đây:
= i.j mod p,
= - .j-1 mod (p-1), x = - .i.j-1 mod (p-1),
trong đó i, j là các số nguyên sao cho 0 i, jp -2, gcd(j, p-1) = 1 và j-1 đƣợc tính theo mod (p-1). Thực vậy, khi đó ta có
. (i.j) j1 mod p
. i j1 mod p x mod p.
b/. Có một cách giả mạo khác, nếu họ dùng chữ ký đúng (, ) trên văn bản x có từ trƣớc, để tạo ra chữ ký (,) mới cho văn bản “mới ” x‟ nhƣ sau:
= h. i.j mod p,
= (h- j )-1 mod (p-1),
x‟ = (hx+ i )(h- j )-1 mod (p-1). Trong đó 0 ≤ h, i, j ≤ p-2, (h - j , p-1) = 1.
Có thể thử điều kiện kiểm thử đúng đối với “chữ ký” (,) trên văn bản x‟ tức là
. x' mod p.
Cả hai cách giả mạo nói trên đều cho chữ ký thoả mãn điều hiện kiểm thử đối với văn bản tƣơng ứng, tuy nhiên văn bản đó không phải là văn bản đƣợc chọn theo ý muốn của ngƣời giả mạo, cho nên khả năng sử dụng các cách giả mạo đó trong thực tế cũng không có giá trị, do đó không thể gây nguy hại đáng kể cho tính an toàn của sơ đồ chữ ký nói chung.