您的位置:首页 > 其它

密码学:生日攻击

2016-09-24 09:15 239 查看
原文链接:http://blog.csdn.net/ddk3001/article/details/52647990

1 生日攻击

生日攻击是利用概率论中的生日问题,找到冲突的Hash值,伪造报文,使身份验证算法失效。

生日攻击的理论描述有些复杂,不易理解,请参考相关资料。

本文以实例方式介绍生日攻击方法和防范方法。

2 实例场景

2.1 场景说明

A要对一个合同文件进行签名,然后把合同文件和签名一起发送给接收者。

签名的方法:计算文件的Hash值(m位),然后使用A的私钥对这个Hash值进行加密。

接收者使用A的公钥进行解密,然后比较Hash值,这样他就能确认:

接收到的合同文件是A发送的,并且合同文件未被修改过。

攻击者B想要伪造一份假合同文件,然后发送给接收者,并使接收者仍然相信:

接收到的合同文件是A发送的,并且合同文件未被修改过。

2.2 攻击方法

B先准备 2^m/2 个有效合同文件(集合X),每个文件包含与原合同文件相同的意思。

B再准备 2^m/2 个伪造合同文件(集合Y),每个文件也都是希望的伪造合同的意思。

注1:2^m/2 表示 2 的 m/2 次方。

注2:要产生包含相同意思的许多文件,也不是很难。

例如要生成 2^32 个文件,方法是:在文件中找到32个地方,每个地方使用两种方式表达相同意思,这样组合起来,就有了 2^32 个文件,这些文件要表达的意思都相同。

然后比较集合X和集合Y,找到Hash值相同的两个文件,分别是有效合同和伪造合同。

B成功的概率会大于0.5,如果没有找到匹配的文件,就准备更多的有效文件和伪造文件,直到找到一对匹配的文件。

注3:如果使用64位Hash值,那么只需要2^32个不同文件,这无法防住现代计算机系统。

B把找到的有效合同文件提供A,A看了一下,没什么问题,就做了签名,然后发送给接收者。

在接收者收到消息之前,B截获了这个消息,然后使用伪造合同替换有效合同,再把伪造合同和原签名一起发送给接收者。

因为伪造合同与有效合同的Hash值相同,所以它们产生相同的签名。

这样,即使B不知道A的私钥,他也能成功!!!

2.3 遭遇失败

如果A是一个认真的人,他在对B提供的有效合同文件进行签名之前,又仔细阅读了合同,修改了其中的标点符号问题,然后才对文件进行签名。

这样,B的计划就失败了。

B面临的问题是:找到一个伪造合同,与新的合同文件具有相同的Hash值。

这几乎是不可能的!!!

3 防范方法

使用安全的Hash算法:安全的Hash算法生成的Hash值有足够多的位数。这样,攻击者在寻找两个具有相同Hash值的文件时就会非常困难。

加盐:在为文件签名之前,先向文件添加一个随机值,然后计算Hash值,再将文件、签名和随机值一起发送给接收者。这样,攻击者必须找出具有特定Hash值的伪造文件,这非常困难。

改动文件:在为文件签名之前,对消息或文件做少许改动。这样,攻击者必须找出具有特定Hash值的伪造文件,这非常困难。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: