詳解ElGamal加密算法
ElGamal公鑰密碼體制是1984年斯坦福大學(xué)的Tather?ElGamal提出的一種基于離散對數(shù)問題困難性的公鑰體制。1985年,Tather?ElGamal利用ElGamal公鑰密碼體制設(shè)計出ElGamal數(shù)字簽名方案,該數(shù)字簽名是經(jīng)典數(shù)字簽名方案之一,具有高度的安全性與實用性。后來,ElGamal數(shù)字簽名體制的變體被使用于數(shù)字簽名標(biāo)準(zhǔn)DSS中。直到今天,很多新的數(shù)字簽名方案仍然屬于ElGamal數(shù)字簽名體制的變體或擴展。這個就是ElGamal加密算法。
群
群是一個集合G,連同一個運算 "·",它結(jié)合任何兩個元素 a 和 b 而形成另一個元素,記為 a · b。符號 "·" 是對具體給出的運算,比如加法的一般的占位符。要具備成為群的資格,這個集合和運算 (G, ·) 必須滿足叫做群公理的四個要求:
1、封閉性。對于所有G中a、b,運算a · b的結(jié)果也在G中。
2、結(jié)合性。獨于所有的G中的a · b和c,等式(a · b)?· c =?a · (b?· c)成立。
3、單位元。存在G中的一個元素e,使得對與所有G中的元素a,等式?e · a = a · e= a 成立。
4、反元素。對于每個G中的a,存在G中的一個元素b是的a?· b=?b?· ?a?= e,這里的e是單位元。
例如整數(shù)集合 和加法運算,具有以下性質(zhì)
- 對于任何兩個整數(shù) a 和 b,它們的和 a + b 也是整數(shù)。換句話說,在任何時候,把兩個整數(shù)相加都能得出整數(shù)的結(jié)果。這個性質(zhì)叫做在加法下封閉。
- 對于任何整數(shù) a, b 和 c,(a + b) + c =a + (b + c)。用話語來表達,先把 a 加到 b,然后把它們的和加到c,所得到的結(jié)果與把 a 加到 b 與 c 的和是相等的。這個性質(zhì)叫做結(jié)合律。
- 如果 a 是任何整數(shù),那么 0 + a = a + 0 = a。零叫做加法的單位元,因為把它加到任何整數(shù)都得到相同的整數(shù)。
- 對于任何整數(shù) a,存在另一個整數(shù) b 使得 a + b = b +a = 0。整數(shù) b 叫做整數(shù) a 的逆元,記為 ?a。
一個群被稱為有限群,如果它有有限個元素,元素的數(shù)階叫做群 G 的階。
例如,模19下7的階為3,[1, 7, 49, 343, 2401, 16807, 117649, 823543, 5764801...]={1,7,11,1,7,11,1,7,11...}這里的1,7,11循環(huán),實際只有3個元素
循環(huán)群
循環(huán)群是其所有元素都是特定元素 a 的冪的群(在群運算被寫為加法的時候使用術(shù)語倍數(shù))。在乘法符號下,群的元素是:
..., a?3, a?2, a?1, a0 = e,a, a2, a3, ...,這個元素 a叫做這個群的生成元或本原元。
本原元
模n下a的階m=φ(n),m就是n的本原元,如3是19的本原元
19為質(zhì)數(shù),因此φ(19)=18),模19下3的群為:
[1, 3, 9, 27, 81, 243, 729, 2187, 6561, 19683, 59049, 177147, 531441,1594323, 4782969,
14348907, 43046721, 129140163, 387420489, 1162261467, 3486784401L,10460353203L, 31381059609L, 94143178827L...]
用模19來表示
[1, 3, 9, 8, 5, 15, 7, 2, 6, 18, 16, 10, 11, 14, 4, 12, 17, 13, 1, 3, 9L,8L, 5L, 15L]
循環(huán)為1, 3, 9, 8, 5, 15, 7, 2, 6, 18, 16, 10, 11, 14, 4, 12, 17, 13,因此該循環(huán)群階為18與歐拉函數(shù)結(jié)果相等
密鑰生成
首先選擇一個素數(shù)p,兩個隨機數(shù), g 和x,g, x < p, 計算 y = g^x ( mod p ),則其公鑰為 y, g 和p。私鑰是x。g和p可由一組用戶共享。
ElGamal用于數(shù)字簽名。被簽信息為M,首先選擇一個隨機數(shù)k, k與 p - 1互質(zhì),計算 :
a = g^k ( mod p )
再用擴展 Euclidean 算法對下面方程求解b:
M = xa + kb ( mod p - 1 ) ,簽名就是( a, b )。隨機數(shù)k須丟棄。
驗證時要驗證下式:
y^a * a^b ( mod p ) = g^M ( mod p )
同時一定要檢驗是否滿足1<= a < p。否則簽名容易偽造。
ElGamal用于加密。被加密信息為M,首先選擇一個隨機數(shù)k,k與 p - 1互質(zhì),計算 :
a = g^k ( mod p )
b = y^k M ( mod p )
( a, b )為密文,是明文的兩倍長。解密時計算:
M = b / a^x ( mod p )
ElGamal簽名的安全性依賴于乘法群(IFp)* 上的離散對數(shù)計算。素數(shù)p必須足夠大,且p-1至少包含一個大素數(shù)因子以抵抗Pohlig & Hellman算法的攻擊。M一般都應(yīng)采用信息的HASH值(如SHA算法)。ElGamal的安全性主要依賴于p和g,若選取不當(dāng)則簽名容易偽造,應(yīng)保證g對于p-1的大素數(shù)因子不可約。




