ElGamal原理

基本原理

密钥生成

选取一个足够大的素数image(十进制位数不低于160),以便于在image上求解离散对数问题是困难的

选取image 的生成元image

随机选取整数image,image ,并计算image

其中私钥为image,公钥为image

签名

A选取随机数image ,并且image,对消息进行签名

image

其中image ,image

验证

如果 image ,那么验证成功,否则验证失败,这里验证成功的原理如下,首先我们

image

又因为

image

所以

image

进而

image

所以

image

所以根据费马定理,可得

image

常见攻击

完全破译攻击

攻击条件

p太小或无大素因子

如果image太小我们可以直接用大部小步算法分解,或者如果其无大的素因子,我们可以采用image

算法计算离散对数即可进而求出私钥

随机数k复用

如果签名者复用了随机数image,那么攻击者就可以轻而易举地计算出私钥,具体的原理如下:

假设目前有两个签名都是使用同一个随机数进行签名的,那么我们有

image

image

image

image

进而有

image

image

两式相减

image

这里image均已知,所以我们可以很容易算出image

当然,如果image的话,可能会存在多个解,这时我们只需要多试一试

进而,我们可以根据image的计算方法得到私钥image,如下

image

通用伪造签名

攻击条件

如果消息image没有取哈希,或者消息image没有指定消息格式的情况下攻击成立

原理

在攻击者知道了某个人Alice的公钥之后,他可以伪造Alice的签名信息,具体原理如下:

这里我们假设,Alice的公钥为image,攻击者可以按照如下方式伪造

选择整数imageimage,其中image

计算签名,image ,image

计算消息,image

那么此时生成的签名与消息就是可以被正常通过验证,具体推导如下:

image

又由于消息image的构造方式,所以

image

需要注意的是,攻击者可以伪造通过签名验证的消息,但是他却无法伪造指定格式的消息,而且,一旦消息进行了哈希

操作,这一攻击就不再可行

已知签名伪造

攻击条件

假设攻击者知道image是消息image的签名.则攻击者可利用它来伪造其它消息的签名

原理

选择整数image且满足image

计算下式 image

可得到imageimage的有效签名

证明如下:

已知Alice对消息image的签名image满足image,所以我们目的为构造出image满足

image

那么,首先我们把image表示为三个已知底image的形式:image,由条件可得

image

那么我们可以得到

image

我们把image的表达式代入一式中

image

我们令两边指数为image,即

image

可以得到

image

其中

image

所以我们得到imageimage的有效签名

此外,我们还可以借助CRT构造image,原理如下:

image

再计算image

显然可以使用CRT求解image,注意到image

所以image是消息image的有效签名

抵抗措施:在验证签名时,检查image

选择签名伪造

攻击条件

如果我们可以选择我们消息进行签名,并且可以得到签名,那么我们可以对一个新的但是我们不能够选择签名的消

息伪造签名

原理

我们知道,最后验证的过程如下

image

那么只要我们选择一个消息image使其和我们所要伪造的消息imageimage同余,然后同时使用消息image的签名即

可绕过

posted @ 2025-06-02 17:33  sevensnight  阅读(26)  评论(0)    收藏  举报