密码学:生日攻击

原文链接:http://blog.csdn.net/ddk3001/article/details/52647990

1 生日攻击

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

生日攻击的理论描述有些复杂,不易理解,请参考相关资料。
本文以实例方式介绍生日攻击方法和防范方法。

关于生日问题的简单说明:
如果输出是256位,我们随机地选择输入,并计算哈希值,在检验第 2256 2 256 +1个输入之前便很可能找到碰撞。
实际上,如果我们随机选择 2130 2 130 +1个输入,找到至少两个相同哈希值的概率为99.8%。
仅仅通过检验可能输出数量的平方根次数,便大体能找到碰撞,这在概率论中称为生日悖论(birthday paradox)。

2 实例场景

2.1 场景说明

A要对一个合同文件进行签名,然后把合同文件和签名一起发送给接收者。
签名的方法:计算文件的哈希值(m位),然后使用A的私钥对这个哈希值进行加密。

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

  • 接收到的合同文件是A发送的 (因为:可以使用A的公钥对加密的哈希值进行解密)
  • 合同文件未被修改过 (因为:解密的哈希值与合同文件的哈希值相同)

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

  • 接收到的合同文件是A发送的 (要求:必须能用A的公钥对加密的哈希值进行解密)
  • 合同文件未被修改过 (要求:解密的哈希值与合同文件的哈希值相同)

2.2 攻击方法

B先准备 2m/2 2 m / 2 个有效合同文件(集合X),每个文件包含与原合同文件相同的意思。
B再准备 2m/2 2 m / 2 个伪造合同文件(集合Y),每个文件也都是希望的伪造合同的意思。

注:要产生包含相同意思的许多文件,其实不难做到。
例如要生成 232 2 32 个文件,方法是:
在文件中找到32个地方,每个地方使用两种方式表达相同意思,这样组合起来,就有了 232 2 32 个文件,这些文件要表达的意思都相同。

然后比较集合X和集合Y,找到哈希值相同的两个文件,一份是有效合同,一份是伪造合同。

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

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

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

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

因为伪造合同与有效合同的哈希值相同,所以它们产生相同的签名。
这样,即使B不知道A的私钥,他也能成功!!!

我们再来看一下,攻击者如何使接收者仍然相信:

  • 接收到的合同文件是A发送的 (因为:仍然是原签名,所以,接收者仍然可以用A的公钥对加密的签名进行解密。)
  • 合同文件未被修改过 (因为:解密的哈希值与合同文件的哈希值相同,实际上已经替换为伪造合同,但伪造合同与有效合同的哈希值相同。)

2.3 遭遇失败

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

这样,B的计划就失败了。
B面临的问题是:找到一个伪造合同,与新的合同文件具有相同的哈希值。
这几乎是不可能的!!!

3 防范方法

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

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

  • 改动文件:在为文件签名之前,对文件做少许改动。这样,攻击者必须找出具有特定哈希值的伪造文件,这非常困难。

  • 22
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值