密码学:生日攻击
2016-09-24 09:15
239 查看
原文链接:http://blog.csdn.net/ddk3001/article/details/52647990
生日攻击的理论描述有些复杂,不易理解,请参考相关资料。
本文以实例方式介绍生日攻击方法和防范方法。
签名的方法:计算文件的Hash值(m位),然后使用A的私钥对这个Hash值进行加密。
接收者使用A的公钥进行解密,然后比较Hash值,这样他就能确认:
接收到的合同文件是A发送的,并且合同文件未被修改过。
攻击者B想要伪造一份假合同文件,然后发送给接收者,并使接收者仍然相信:
接收到的合同文件是A发送的,并且合同文件未被修改过。
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的私钥,他也能成功!!!
这样,B的计划就失败了。
B面临的问题是:找到一个伪造合同,与新的合同文件具有相同的Hash值。
这几乎是不可能的!!!
加盐:在为文件签名之前,先向文件添加一个随机值,然后计算Hash值,再将文件、签名和随机值一起发送给接收者。这样,攻击者必须找出具有特定Hash值的伪造文件,这非常困难。
改动文件:在为文件签名之前,对消息或文件做少许改动。这样,攻击者必须找出具有特定Hash值的伪造文件,这非常困难。
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值的伪造文件,这非常困难。
相关文章推荐
- [置顶] Mysql学习笔记
- 初学移动开发技术_实验二_任务四_Activity的生命周期测试
- 浅谈Web自适应
- C语言中两种方式表示时间日期值time_t和struct tm类型的相互转换
- java之二维数组
- java之面向对象
- 详解微信小程序开发教程
- list和vector有什么区别?
- 微机原理与接口技术之8086的编程结构
- uva 679 Dropping Balls
- Chapter 1 First Sight——24
- 使用dd命令烧写linux系统到sd卡
- 微信小程序下载工具及调试详解
- ubuntu14.04安装UHD和GNU radio总结
- Linux系统上静态配置路由表
- yii2.0上传
- Codeforces Round #373 (Div. 2) B. Anatoly and Cockroaches 水题
- 什麼是福音的呼召,就是讓一部分人先窮下去。又讓窮下去的一部分人先富起來。
- ffmpeg windows QSV 解码 编译
- 【GIT】git 分支 合并