2016012099+陈杰+散列函数的应用及其安全性

做业五要求:算法

做业题目:散列函数的应用及其安全性。内容要求:(1) 给出散列函数的具体应用。(2) 结合生日攻击、以及200四、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展。问题2的回答能够结合下面给出的第一个连接。(3)结合md5算法中的选择前缀碰撞以及第二个连接中的helloworld.exe和goodbyworld.exe两个可执行文件的md5消息摘要值和两个文件的执行结果说明md5算法来验证软件完整性时可能出现的问题。
连接1:https://www.win.tue.nl/hashclash/
连接2:http://www.win.tue.nl/hashclash/SoftIntCodeSign/
 

一.散列函数的具体应用

散列函数应用

因为散列函数的应用的多样性,它们常常是专为某一应用而设计的。例如,加密散列函数假设存在一个要找到具备相同散列值的原始输入的敌人。一个设计优秀的加密散列函数是一个“单向”操做:对于给定的散列值,没有实用的方法能够计算出一个原始输入,也就是说很难伪造。为加密散列为目的设计的函数,如MD5,被普遍的用做检验散列函数。这样软件下载的时候,就会对照验证代码以后才下载正确的文件部分。此代码有可能由于环境因素的变化,如机器配置或者IP地址的改变而有变更。以保证源文件的安全性。
错误监测和修复函数主要用于辨别数据被随机的过程所扰乱的事例。当散列函数被用于校验和的时候,能够用相对较短的散列值来验证任意长度的数据是否被更改过。

错误校订
使用一个散列函数能够很直观的检测出数据在传输时发生的错误。在数据的发送方,对将要发送的数据应用散列函数,并将计算的结果同原始数据一同发送。在数据的接收方,一样的散列函数被再一次应用到接收到的数据上,若是两次散列函数计算出来的结果不一致,那么就说明数据在传输的过程当中某些地方有错误了。这就叫作冗余校验。
对于错误校订,假设类似扰动的分布接近最小(a distribution of likely perturbations is assumed at least approximately)。对于一个信息串的微扰能够被分为两类,大的(不可能的)错误和小的(可能的)错误。咱们对于第二类错误从新定义以下,假如给定 H(x) 和 x+s,那么只要s足够小,咱们就能有效的计算出x。那样的散列函数被称做错误校订编码。这些错误校订编码有两个重要的分类:循环冗余校验和里德所罗门码。
 
语音识别
对于像从一个已知列表中匹配一个MP3文件这样的应用,一种可能的方案是使用传统的散列函数——例如MD5,可是这种方案会对时间平移、CD读取错误、不一样的音频压缩算法或者音量调整的实现机制等状况很是敏感。使用一些相似于MD5的方法有利于迅速找到那些严格相同(从音频文件的二进制数据来看)的音频文件,可是要找到所有相同(从音频文件的内容来看)的音频文件就须要使用其余更高级的算法了。
那些并不紧随IT工业潮流的人每每能反其道而行之,对于那些微小差别足够鲁棒的散列函数确实存在。现存的绝大多数散列算法都是不够鲁棒的,可是有少数散列算法可以达到辨别从嘈杂房间里的扬声器里播放出来的音乐的鲁棒性。有一个实际的例子是Shazam[1]服务。用户能够用电话机拨打一个特定的号码,并将电话机的话筒靠近用于播放音乐的扬声器。该项服务会分析正在播放的音乐,并将它于存储在数据库中的已知的散列值进行比较。用户就可以收到被识别的音乐的曲名(须要收取必定的费用)
 
信息安全
Hash算法在信息安全方面的应用主要体如今如下的3个方面:
(1)文件校验
咱们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并无抗数据篡改的能力,它们必定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。
MD5 Hash算法的"数字指纹"特性,使它成为目前应用最普遍的一种文件完整性校验和(Checksum)算法,很多Unix系统有提供计算md5 checksum的命令。
(2)数字签名
Hash 算法也是现代密码体系中的一个重要组成部分。因为非对称算法的运算速度较慢,因此在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称"数字摘要"进行数字签名,在统计上能够认为与对文件自己进行数字签名是等效的。并且这样的协议还有其余的优势。
(3) 鉴权协议
以下的鉴权协议又被称做挑战--认证模式:在传输信道是可被侦听,但不可被篡改的状况下,这是一种简单而安全的方法。
 
二. 结合生日攻击、以及200四、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展。问题2的回答能够结合下面给出的第一个连接。
 
1.散列函数的安全性需求有七个:
(1)输入长度可变:H可应用于任意大小的数据块
(2)输出长度固定:H产生定长的输出
(3)效率:对任意给定的x,计算H(x)比较容易,用硬件和软件都可实现
(4)抗原像攻击(单向性):对任意给定的Hash码h,找到知足H(y)=h的y在计算上是不可行的
(5)抗第二原像攻击(抗弱碰撞性):对任意给定的分块x,找到知足y!=x且H(x)=H(y)的y在计算上是不可行的
(6)抗碰撞攻击(抗强碰撞性):找到任何知足H(x)=H(y)的偶对(x,y)在计算上是不可行的
(7)伪随机性:H的输出知足伪随机性测试标准

生日攻击的原理证实了只须要相对不多的数据量就能产生两个哈希值相同的不一样文件,在这个原理之上,王晓云教授给出了在可计算时间内破解md5的方法,让md5不知足散列函数安全性需求的(6),而以后再密码学从事人员的不断努力和计算机计算能力的不断提升,这之中包括连接一中的Marc Stevens,他研究结果是能够在2^{57.5}的计算量内找到sha-1算法下的一组哈希碰撞。而谷歌在2017年对sha-1的破解采用了stevens以前的2^{61}计算量的方法。这些都证实着破解这些散列函数已经愈来愈容易。事实上,随着破解方法的不断改进和机器计算能力的不断提升,这些散列函数也确实愈来愈不安全,而须要更好的是散列函数来代替。数据库

正是基于这些背景,安全散列函数也在不断发展中。安全

目前使用最多的散列函数有MD系列和SHA系列,1990年Ronald L. Rivest 设计的MD4经过3圈的操做将任意长度的消息变换成128位的哈希值。而MD4的前两圈已被Dobbertin等人攻破。以后的MD5是Rivest于1991年对MD4的改进版本。MD5算法被王晓云教授证实是可攻破的,所以已经不安全了。在MD4和MD5的基础上,HAVAL,SHA1,SHA256,SHA384,SHA512等散列算法不断出现对散列函数的安全性有着不断的提升,不过能够预见的,这些散列函数在未来也颇有可能随着破解方法的进步和机器计算能力的提高而面临被破解的风险。
app

 

三.结合md5算法中的选择前缀碰撞以及第二个连接中的helloworld.exe和goodbyworld.exe两个可执行文件的md5消息摘要值和两个文件的执行结果说明md5算法来验证软件完整性时可能出现的问题。函数

 md5算法的选择前缀能够在使用相同前缀的状况下更改少部份内容仍能使两个文件获得相同的md5,而第二个连接中两个内容不一样的exe文件却有着相同的md5,为md5的不安全性提供了实例,在王晓云教授研究结果的基础上,密码学研究者已经研究出了改进版本“构造前缀碰撞法”,而且编写出了快速MD5碰撞生成器,使MD5的破解速度能够达到几秒钟这样的速度。测试

故用md5算法验证软件完整性会出现以下的问题:google

(1)不能确保获得的软件是否被修改过或者被替换编码

(2)不能确保获得的软件中间被人获取过加密

(3)在软件过大时,会使验证时间过长而致使攻击者的成功率增长spa

相关文章
相关标签/搜索