Prodesse Quam Conspici

Elgamal


前一篇讲了RSA,这一篇介绍下另一个经典的公钥系统,Elgamal。与RSA基于大数分解不同,Elgamal基于离散对数问题(DLP-Discrete Logarithm Problem)。

1 Discrete Logarithm Problem

对于\(q\)阶乘法循环群\(G\),已知其生成元\(g\)及元素\(h\),求\(x\)使得\(h=g^x \pmod{q}\)是困难的。

2 Algorithms

2.1 Key Generation

假设\(G\)是一个\(q\)阶循环群,\(g\)是其生成元,\(x\)\(Z_q^*\)上的一个随机数,则

\[PK=\{G,q,g,h=g^x mod\ q\}, SK=\{x\}\]

2.2 Encryption

\[c=<c_1,c_2>=<g^y,m\cdot h^y>\]

其中,\(y\)\(Z_q^*\)上的一个随机数。

2.3 Decryption

\[m=c_2/c_1^x\]

3 intrinsic random

与RSA不同,Elgmal本身就是随机的,RSA则要借助于random padding实现probabilistic encryption。

4 Elgamal Signature

由于Elgamal没有RSA那种加解密间的对称性,上述算法不能直接用于签名,但是可以简单修改得到一个签名算法。

\[Sign(m)=(r,s), r=g^k \pmod{q}, s=(m-xr)k^{-1}\pmod{q-1}\]

\[Verify(m, (r,s))=\ g^m=?y^rr^s \pmod{q}\]

5 Homomorphic encryption

Elgamal本身是乘法同态的,

\[E(m_1)E(m_2)=(c_1'c_1'',c_2'c_2'')=(g^{y_1+y_2},(m_1m_2)h^{y_1+y_2})=E(m_1m_2)\]

使用\(g^m\)作为映射函数也可以将Elgamal变成加法同态:

\[E(m)=(c_1,c_2)=(g^y,g^m\cdot h^y)\]

\[E(m_1)E(m_2)=(c_1'c_1'',c_2'c_2'')=(g^{y_1+y_2},g^{m_1+m_2}h^{y_1+y_2})=E(m_1+m_2)\]

可以预先打表缓存\((m, g^m)\),解密时反查。

Tags: cryptography.