Professional Documents
Culture Documents
Chap2p - Thuat Toan ELGAMAL
Chap2p - Thuat Toan ELGAMAL
------
Là thuật toán mã hoá khoá công khai, ElGamal được đề xuất năm 1985, dựa
vào độ phức tạp của bài toán lôgarit rời rạc.
Tạo khoá
Chọn số nguyên tố p, phần tử sinh g của Z*p
Chọn ngẫu nhiên x [1, p-1]; hay 1 ≤ x ≤ p − 2
Tính h = gx mod p
Khóa bí mật là KSA = (p, g, x)
Khóa công khai là KPA = (p, g, h)
Ví dụ:
G =Z*29 , p=29, g=8
x=15
Tính h=gx mod p, h=815 mod 29 = 21
Khoá bí mật: KSA=(29,8,15); Khoá công khai: KPA=(29,8,21)
Mã hoá (thông điệp m gửi cho A)
Biết khóa công khai là KPA = (p, g, h)
Chọn ngẫu nhiên y [1, p-1]
Tính khóa chung c1 = gy mod p và s = hy mod p = (gx)y mod p
c2 = m.s
Bản mã: c = (c1, c2) = (gy, ms)
Gửi ciphertext c = (c1,c2) to A.
Ví dụ:
KPA=(29,8,21), m=10
y=7, s = 217 mod 29 = 12
c1=gy = 87 mod 29 = 17
c2=m.s = 10.12 mod 29 = 4
c=(c1,c2) = (17,4)
Giải mã (giải mã bởi A)
- Bản mã c = (c1, c2)
- Dùng khóa bí mật là KSA = (p, g, x)
- Tính khóa chung s = c1x
- Bản rõ: m = c2s-1
Ví dụ:
c = (17,4)
KSA = (29,8,15)
s=c1x= 1715 mod 29 = 12
s-1 = 12-1 mod 29 = 17
m=c2s-1 = 4.17 mod 29 = 10
Hệ mã hóa ELGAMAL
* Thuật toán sinh khóa:
+ Sinh ngẫu nhiên số nguyên tố lớn p và α là phần tử sinh của Z*p.
+ Chọn ngẫu nhiên số nguyên a, 1 ≤ a ≤ p-2, tính h = αa mod p.
+ Khóa công khai là (p, α, αa ). Khóa bí mật là (a).
* Thuật toán mã hóa:
(i) Lập mã:
+ Lấy khóa công khai (p, α, αa ) theo thuật toán trên.
+ Chọn một bản rõ x, trong khoảng [0, p-1].
+ Chọn ngẫu nhiên số nguyên k, 1 ≤ k ≤ p-2.
+ Tính γ = αk mod p và δ = x.(h)k mod p.
+ Nhận được bản mã là (γ, δ).
(ii) Giải mã:
+ Sử dụng khóa bí mật (a) và tính γp-1-a mod p. (note: γp−1−a = γ−a = α−ak)
+ Lấy bản rõ: x = δ.(γa )-1 mod p.
γ-a · δ ≡ α-ak x αak ≡ m (mod p)
Ví dụ:
Chọn số nguyên tố p = 2579 và một phần tử sinh α = 2 của tâp Z*2579.
Chọn khóa bí mật a = 765 và tính αa mod p = 2765 mod 2579 = 949.
Khóa công khai (p = 2579, α = 2, αa = 949).
(i) Lập mã: Mã hóa bản rõ x = 1299, chọn số nguyên k = 853.
γ = 2853 mod 2579 = 435.
δ = 1299 * 949853 mod 2579 = 2396.
Bản mã là: (435, 2396).
(ii) Giải mã: tinh s = γk = 435765 mod 2579 = 2424
x = (453-765) * 2396 mod 2579 = 1299.
x = 2396 * (435765)-1 mod 2579
= 2396*(2424)-1 mod 2579
= 2396*1980 mod 2579 =1299
LƯỢC ĐỒ KÝ SỐ ELGAMAN
1. Tạo khoá
Chọn số nguyên tố p, phần tử sinh g của Z*p
Chọn ngẫu nhiên x [1, p-1]
Tính h = gx mod p
Khóa bí mật là KSA = (p, g, x)
Khóa công khai là KPA = (p, g, h)
Ví dụ:
G*29 q=28, g=8
Chọn x=15
Tính h=gx mod p = 815 mod 29 = 21
KSA = (29,8,15); KPA = (29,8,21)
2. Ký số (bởi Alice)
Thông điệp m, sử dụng KSA = (p, g, x)
1. Sinh ngẫu nhiên: 1<k <p-1; gcd(k,p-1)=1
2. Tính r=gk (mod p)
3. Tính s = (m-xr)k-1 (mod p-1)
4. Nếu s=0 thì trở lại bước 1
5. Chữ kí số lên thông điệp m là (r,s)
Ví dụ:
Cho m=10; KSA = (29,8,15)
k=11;
tính r= gk mod p = 811 mod 29 = 3
s = (m-xr)k-1 (mod p-1)
= (10-15.3).11-1 mod 28
= (10-15*3)*23 mod 28 = 7
sign(10) = (3,7)
3. Kiểm tra chữ ký (bất kỳ ai)
Thông điệp m, sử dụng KPA = (p, g, h)
1. Kiểm tra: 0< r <p; 0< s <p-1
2. Kiểm tra: gm = hrrs (mod p)
Cơ chế:
s = (m-xr)k-1 (mod p-1)
=> m = xr + sk (mod p-1)
=> gm = gxr+sk = gxrgsk = hrrs mod p
Ví dụ:
m=10; sign(3,7); KPA = (29,8, 21)
hr*rs mod p = 213 * 37 mod 29 = 4
gm = 810 mod 29 = 4