ElGamal原理
基本原理
密钥生成
选取一个足够大的素数(十进制位数不低于160),以便于在
上求解离散对数问题是困难的
选取 的生成元
随机选取整数,
,并计算
其中私钥为,公钥为
签名
A选取随机数 ,并且
,对消息进行签名
其中 ,
验证
如果 ,那么验证成功,否则验证失败,这里验证成功的原理如下,首先我们
有
又因为
所以
进而
所以
所以根据费马定理,可得
常见攻击
完全破译攻击
攻击条件
p太小或无大素因子
如果太小我们可以直接用大部小步算法分解,或者如果其无大的素因子,我们可以采用
算法计算离散对数即可进而求出私钥
随机数k复用
如果签名者复用了随机数,那么攻击者就可以轻而易举地计算出私钥,具体的原理如下:
假设目前有两个签名都是使用同一个随机数进行签名的,那么我们有
进而有
两式相减
这里均已知,所以我们可以很容易算出
当然,如果的话,可能会存在多个解,这时我们只需要多试一试
进而,我们可以根据的计算方法得到私钥
,如下
通用伪造签名
攻击条件
如果消息没有取哈希,或者消息
没有指定消息格式的情况下攻击成立
原理
在攻击者知道了某个人Alice的公钥之后,他可以伪造Alice的签名信息,具体原理如下:
这里我们假设,Alice的公钥为,攻击者可以按照如下方式伪造
选择整数,
,其中
计算签名, ,
计算消息,
那么此时生成的签名与消息就是可以被正常通过验证,具体推导如下:
又由于消息的构造方式,所以
需要注意的是,攻击者可以伪造通过签名验证的消息,但是他却无法伪造指定格式的消息,而且,一旦消息进行了哈希
操作,这一攻击就不再可行
已知签名伪造
攻击条件
假设攻击者知道是消息
的签名.则攻击者可利用它来伪造其它消息的签名
原理
选择整数且满足
计算下式
可得到是
的有效签名
证明如下:
已知Alice对消息的签名
满足
,所以我们目的为构造出
满足
那么,首先我们把表示为三个已知底
的形式:
,由条件可得
那么我们可以得到
我们把的表达式代入一式中
我们令两边指数为,即
可以得到
其中
所以我们得到是
的有效签名
此外,我们还可以借助CRT构造,原理如下:
再计算
显然可以使用CRT求解,注意到
所以是消息
的有效签名
抵抗措施:在验证签名时,检查
选择签名伪造
攻击条件
如果我们可以选择我们消息进行签名,并且可以得到签名,那么我们可以对一个新的但是我们不能够选择签名的消
息伪造签名
原理
我们知道,最后验证的过程如下
那么只要我们选择一个消息使其和我们所要伪造的消息
模
同余,然后同时使用消息
的签名即
可绕过