Lược đồ Elgamal được đề xuất năm 1985, sau đó Viện tiêu chuẩn và Công nghệ quốc gia Mỹ sửa đổi thành chuẩn chữ ký số (Digital Signature Standard - DSS). Lược đồ ký Elgamal không tất định giống như hệ mã hóa khóa công khai Elgamal, có nghĩa là có nhiều chữ ký hợp lệ cho một thông điệp bất kỳ. Thuật toán kiểm tra phải có khả năng chấp nhận bất kỳ chữ ký hợp lệ nào khi giải ký. Khác với RSA có thể áp dụng trong mã hóa khóa công khai và chữ ký số, Elgamal chủ yếu được dùng cho bài toán xây ứng dụng chuẩn chữ ký số.
a) Nội dung
cho plà số nguyên tố sao cho bài toán logarit rời rạc trên Zplà khó và cho *
p
z
là phần tử nguyên thủy. Cho pZ*p;AZ*pZ p1 và định nghĩa:
𝐾 = {(𝑝, 𝛼, 𝑎, 𝛽): 𝛽 = 𝛼𝑎𝑚𝑜𝑑 𝑝}
Giá trị p,, là công khai, còn a là bí mật.
Với K p,,a, và một số ngẫu nhiên (bí mật) * 1
Zp k
Định nghĩa Sigk x,k , trong đó:
p k mod và 1mod 1 p k a x
Với *
,y Zp
x và Zp1 ta định nghĩa Verx,,true xmodp
.Ở đây, Z*
p = { 1,2,…,p-1 }, với p là số nguyên tố đủ lớn để cho bài toán lôgarit rới rạc là khó.
b) Thuật toán sinh khóa cho lược đồ ký
Mỗi cá thể trong hệ thống tạo một khóa công khai và một khóa riêng tương ứng và thực hiện:
+ Tạo số nguyên tố lớn p và chọn Zp
+ Chọn số nguyên a:1a p2 + Tính 𝛽 = 𝛼𝑎𝑚𝑜𝑑 𝑝
+ Khóa công khai là (𝑝, 𝛼, 𝛽) khóa bí mật là a
c) Thuật toán sinh chữ ký
Cá thể A ký lên thông điệp m, A thực hiện các bước: + Chọn số nguyên k:1k p2, với gcdk,p11 + Tính rkmodp + Tính 1mod 1 p k + Tính 1 mod 1 p r a m h k s
Chữ ký của A lên thông điệp m là r,s
d) Thuật toán chứng thực chữ ký
B thực hiện các bước sau để chứng thực chữ ký r,s lên m có phải của A hay không:
+ Xác nhận khóa công khai của A là p,,
+ Kiểm tra r:1r p1, nếu không đúng thì từ chối chữ ký của A + Tính 𝑣1 = 𝛽𝑟. 𝑟𝑠𝑚𝑜𝑑 𝑝
+ Tính 𝑣2 = 𝛼ℎ(𝑚)𝑚𝑜𝑑 𝑝
Ví dụ 1.2
Giả sử A cần ký lên thông điệp m có giá trị hàm băm h m 1463 để gửi cho B. Sau đó B thực hiện kiểm tra xem chữ ký đó có phải của A hay không?
- Tạo khóa
+ Chọn số nguyên tố, giả sử p2357 và 2Z2357
+ Chọn a1751,1a p2
+ Tính được 𝛽 = 𝛼𝑎𝑚𝑜𝑑 𝑝 = 21751𝑚𝑜𝑑 2 357 = 1185
Khóa công khai của A là (𝑝, 𝛼, 𝛽) = (2357,2,1185) và khóa bí mật 1751 a - Tạo chữ ký: + Chọn k1529,1k p2 + Tính rkmodp1490 + Tính 1mod( 1)245 p k + Tính s1777
Vậy chữ ký của A lên thông điệp m là 490,1777 và gửi đến B. - Chứng thực chữ ký
Để chứng thực, B thực hiện:
+ Tính 𝑣1 = 𝛽𝑟. 𝑟𝑠𝑚𝑜𝑑 𝑝 = 1072
+ Tính v2 h(m)modp21463mod23571072
Kết luận chữ ký 1490,1777 đúng là của A.