跳转至

什么是ElGamal

来源:密码学引论 / digital_signature/ElGamal/什么是ElGamal.md

Q:什么是ElGamal签名

ElGamal 签名是一种基于离散对数困难问题的数字签名算法。它和 ElGamal 加密同源,思想也类似:在有限域乘法群里,利用私钥生成签名,别人用公钥验证签名。

参数生成

选择一个大素数 p,以及模 p 下的生成元 (g)。

私钥为:

\[ x \]

公钥为:

\[ y \equiv g^x \pmod p \]

所以公钥是:

\[ (p,g,y) \]

签名过程

假设消息为 (m),一般先计算哈希:

\[ H(m) \]

签名者随机选一个临时随机数 (k),要求:

\[ \gcd(k,p-1)=1 \]

然后计算:

\[ r \equiv g^k \pmod p \]

再计算:

\[ s \equiv k^{-1}(H(m)-xr) \pmod{p-1} \]

最终签名为:

\[ (r,s) \]

验证过程

验证者检查:

\[ g^{H(m)} \equiv y^r r^s \pmod p \]

如果等式成立,则签名有效。


为什么验证公式成立?

因为:

\[ y = g^x \]
\[ r = g^k \]

所以:

\[ y^r r^s \equiv (g^x)^r (g^k)^s \pmod p \]

即:

\[ y^r r^s \equiv g^{xr} g^{ks} \pmod p \]

又因为签名时:

\[ s \equiv k^{-1}(H(m)-xr) \pmod{p-1} \]

所以:

\[ ks \equiv H(m)-xr \pmod{p-1} \]

因此:

\[ xr+ks \equiv H(m) \pmod{p-1} \]

于是:

\[ g^{xr+ks} \equiv g^{H(m)} \pmod p \]

所以验证公式成立。