一 中间人攻击
对数字签名的中间人攻击,具体来说就是主动攻击者Mallory介入发送者和接收者的中间,对发送者伪装成接受者,对接收者伪装成发送者,从而能够在无需破解数字签名算法的前提下完成攻击。
要防止中间人攻击,就需要确认自己得到的公钥是否真的属于自己的通信对象。例如,我们假设Bob需要确认自己所得到的是否真的是Alice的公钥,Bob可以给Alice打个电话,问一下自己手上的公钥是不是真的(如果电话通信也被Mallory控制,那这个方法就行不通了)。
要在电话中把公钥的内容都念一遍实在是太难了,这里有一个简单的方法,即Alice和Bob分别用单向散列函数计算出散列值,然后在电话中相互确认散列值的内容即可。实际上,涉及公钥密码的软件都可以显示公钥的散列值,这个散列值称为指纹。指纹的内容就是像下面这样的一串字节序列。
二 对单向散列函数攻击
数字签名中所使用的单向散列函数必须具备抗碰撞性,否则攻击者就可以生成另外一条不同的消息,是其与签名绑定的消息具有相同的散列值。
三 利用数字签名攻击公钥密码
在RSA中,生成签名的公式是:
签名 = 消息的D次方 mod N
这个公式和公钥密码的解密操作是等同的,也就是说可以将“请对消息签名”这一请求理解为“请解密消息”。利用这一点,攻击者可以发动一种巧妙的攻击,即利用数字签名来破译密文。
我们假设现在Alice