ElGamal加密演算法
簡單介紹
-
EIGamal密碼是除了RSA密碼之外最有代表性的公開密鑰密碼
-
EIGamal是建立在離散對數的困難問題上的一種公鑰體制密碼
密鑰產生
- 選一個素數
p,以及小于p的兩個亂數g和x - 計算 y = g x y = g^x y=gx%p
- 公鑰為
(y, g, p),私鑰為x
演算法加密程序
M為明文
- 選取一個與
p-1互素的整數k - C 1 = g k C_1=g^k C1?=gk%p
- C 2 = y k M C_2=y^kM C2?=ykM%p
- ( C 1 , C 2 ) (C_1,C_2) (C1?,C2?)即為密文
演算法解密程序
解密方法: C 2 C 1 x \frac{C_2}{C_1^x} C1x?C2??%p
證明:

EIGamal 密碼體制安全性
由于私鑰x是通信雙方共享的,別人不知道
所以,當加密完了以后的密文(y, g, p)被別人盜取后,想獲取明文M,只能通過
C
2
=
y
k
M
C_2=y^kM
C2?=ykM%p來獲得,這里面只有k和M是不知道的,所以只要獲得了k就能獲得M,而想獲得k,只有通過
C
1
=
g
k
C_1=g^k
C1?=gk%p來獲取,這里面雖然只有k是未知數,但是求離散對數的程序是很困難的,尤其是對p很大的情,所以EIGamal密碼體制很安全
舉個例子
- 取p=11, g=5, x=2
- 則 y = g x%p = 3
- 取 k 為 7, m為10
- 則C1 = gk%p = 3
- C2 = yk*m % p = 2
- 則C1x%p= 9
- 9在模11下的逆元為5
- 所以 C 2 C 1 x = 2 ? 5 \frac{C_2}{C_1 ^x}=2 * 5 C1x?C2??=2?5%10 =10,所以解密成功
ElGamal簽名演算法
密鑰產生
- 確定一個大素數p
- 取p的一個本原根g
- 在Zp域上選擇一個亂數x
- y = gx
- (y, g, p)為公鑰,x為私鑰
簽名演算法
設待簽名的訊息為m
- C1=gk%p
- C2=(H(m)-x*C_1) * k-1%(p-1)
- 輸出簽名(C1,C2)和訊息m
驗證演算法
- y C 1 ? C 1 C 2 = H ( m ) y^{C_1}*C_1^{C_2}=H(m) yC1??C1C2??=H(m)
正確性證明

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/387787.html
標籤:其他
下一篇:寒假學習計劃
