2016012012+胡雅馨+散列函数的应用及其安全性

1、散列函数在信息安全方面的具体应用html

 

一、散列函数定义算法

Hash,通常翻译作"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫作预映射),经过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间一般远小于输入的空间,不一样的输入可能会散列成相同的输出,而不可能从散列值来惟一的肯定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。MD5 和 SHA1 能够说是目前应用最普遍的Hash算法,而它们都是以 MD4 为基础设计的。数据库

二、散列函数的具体应用
  (1)文件校验
  咱们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并无抗数 据篡改的能力,它们必定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。
  MD5 Hash算法的"数字指纹"特性,使它成为目前应用最普遍的一种文件完整性校验和(Checksum)算法,很多Unix系统有提供计算md5 checksum的命令。
  (2)数字签名
  Hash 算法也是现代密码体系中的一个重要组成部分。因为非对称算法的运算速度较慢,因此在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称"数字摘要"进行数字签名,在统计上能够认为与对文件自己进行数字签名是等效的。
  (3)鉴权协议
  以下的鉴权协议又被称做"挑战--认证模式:在传输信道是可被侦听,但不可被篡改的状况下,这是一种简单而安全的方法。浏览器

三、正确的应用场景
  (1)数据校验

   HASH函数有相似数据冗余校验相似的功能,可是它比简单的冗余校验碰撞的几率要小得多,故而在现代密码学中老是用HASH来作关键数据的验证。
  (2)单向性的运用
  利用HASH函数的这个特色,咱们可以实现口令,密码等安全数据的安全存储。密码等不少关键数据咱们须要在数据库中存储,可是在实际运用的过程当中,只是作比较操做,故而咱们能够比较HASH结果。
   (3)碰撞约束以及有限固定摘要长度
  数字签名正是运用了这些特色来提升效率的。咱们知道非对称加密算法速度较低,经过HASH处理咱们可使其仅仅做用于HASH摘要上,从而提升效率。
  (4)能够运用HASH到随机数的生成和密码,salt值等的衍生中
  由于HASH算法可以最大限度的保证其惟一性,故而能够运用到关键数据的衍生中(从一个随机的种子数产生,而且不暴露种子自己秘密)。安全

 

 

 

2、结合生日攻击、以及200四、2005年王晓云教授有关MD5安全性和2017年Google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展网络

一、生日攻击(Birthday paradox):

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

 

生日悖论是指,若是一个房间里有23个或23个以上的人,那么至少有两我的的生日相同的几率要大于50%。这就意味着在一个典型的标准小学班级(30人)中,存在两人生日相同的可能性更高。对于60或者更多的人,这种几率要大于99%。从引发逻辑矛盾的角度来讲生日悖论并非一种悖论,从这个数学事实与通常直觉相抵触的意义上,它才称得上是一个悖论。大多数人会认为,23人中有2人生日相同的几率应该远远小于50%。工具

 

二、200四、2005年王晓云教授有关MD5安全性测试

 

MD5是一种不可逆的加密算法,md5的全称是message-digest algorithm 5。在90年代初开发出来,经md二、md3和md4发展而来。它的做用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成必定长的大整数)。网站

MD5是一个较为古老的算法,一度被普遍应用于安全领域。好比在UNIX系统中用户的密码就是以MD5(或其它相似的算法)经加密后存储在文件系统中。当用户登陆的时候,系统把用户输入的密码计算成MD5值,而后再去和保存在文件系统中的MD5值进行比较,进而肯定输入的密码是否正确。

在用户密码的处理方面,MD5总的来看还算是安全的,至少比明文保存密码要好的多,目前破解MD5主要依靠大型字典的方法,将经常使用密码进行MD5后创建数据库,而后和MD5数值进行对比,经过这样的方法来“破解”MD5,所以,一般直接将密码进行MD5处理的话,一些弱密码很容易能够经过这种手段“破解”出来。

不过,若是在散列的过程当中,加入足够长的salt(即干扰字符串),而且salt加入一些动态信息,例如username、随机码等,这样生成的MD5仍是很难被破解的,由于仅仅从数据库没法看到MD5具体的处理过程,必须同时看处处理时的源代码才能够,这就给破解MD5带来至关大的难度。

王晓云教授证实了MD5碰撞的存在,跟破解自己没多大关系。以前人们广泛认为用MD5加密产生的密文至关多,不可能重复,可是王晓云教授可以找到不一样的明文可是它们加密后产生了相同的密文。2004年8月17日在美国加州圣巴巴拉举行了一次国际密码学学术年会(Crypto’2004),当晚来自中国山东大学的王小云教授作了关于破译 MD五、HAVAL-12八、 MD4和RIPEMD算法的报告。

 

三、2017年Google公司SHA-1的安全性

 

Google 的安全团队刚刚创造了计算机加密学在 2017 年的第一个里程碑:他们攻破了SHA-1安全加密算法。

SHA-1 是什么?

SHA-1(全称 Secure Hash Algorithm-1)是一种安全加密算法,最主要的用途是数字签名。

 

 

 

这是由于,使用相似于 SHA-一、MD5 这样的哈希算法,对任何文件,不管文本文档、表格、音乐mp三、PDF、可执行文件等进行计算后,都会得出像上图中这样的字段(哈希值)。在过去只要文件不一样,对应的哈希值都绝对不同,就像是给每一个文件都加上了数字的签名。

对于下载者来讲,原文件的哈希值很重要:当你下载了一个软件,用文件校验工具查看它的 SHA-1/MD5 值,若是和原文件的不同,你就得当心了,由于文件显然被修改过了,而里面可能包含了病毒或其余恶意代码。

SHA-1 和 MD5 是目前世界上最为经常使用的文件校验加密算法。其中,SHA-1 已经诞生 10 年之久,在过去一直被认为是比较安全和可靠的算法——直到今天。

 

此次攻破被命名为 SHAttered attack。研究者提供了两张内容大相径庭,在颜色上存在明显差别,但 SHA-1 哈希值却彻底相同的 PDF 文件做为证实:

 

 

哈希碰撞(hash collision,即两个不一样文件哈希值一致,也有译做哈希冲突)原本不该该发生。但实际上,当哈希算法存在漏洞时,一个有足够实力的攻击者可以制造出碰撞。进而,攻击者能够用去攻击那些依靠哈希值来校验文件的系统,植入错误的文件形成恶果。

 

四、散列函数的安全性

 

生日攻击:生日攻击方法没有利用Hash函数的结构和任何代数弱性质,它只依赖于消息摘要的长度,即Hash值的长度。是对任何HASH都适用的普适的攻击方法,应对方法也很简单,增长HASH的长度,可是很难完成。

 

SHA-1算法:而早在 2014 年,Google 就宣布了逐渐放弃 SHA-1 的决定。去年开始,Google 的 Chrome 浏览器已经再也不支持 SHA-1 证书,会将其标记为不安全。当证书过时以后,浏览器将没法访问这些网站。Google 方面也推荐 IT 人士采用 SHA-256 等更安全的算法。

 

MD5:2004年8月中国密码学家王晓云教授等首次公布了提出一种寻找MD5碰撞的新方法。目前利用该方法用普通微机几分钟内便可找到MD5的碰撞。MD5已经被完全攻破。

 

五、安全散列函数的发展

(1)安全散列函数结构:

由于所需的安全散列长度愈来愈长,所以咱们可使用有限定义域上的散列函数(俗称压缩函数)经过迭代方式拓展为具备无限定义域的散列函数。而最为表明性的就Merkle-Damgard结构。

 

(2)Merkle-Damgard结构:

 

 

 

 

这个结构的好处是,若是压缩函数是抗碰撞的,那通过此结构处理后的散列函数也是抗碰撞的。HMAC就是基于这种结构,由于Merkle-Damgard结构并不能抵抗扩展攻击,所以HMAC引入了Key。

 

 

(3)散列函数发展:

 

安全Hash算法SHA(secure hash algorithm) 由美国标准与技术研究所(NIST)设计并1993年做为联邦信息处理标准(FIPS 180)发布,修改版于1995年发布,一般称之为SHA1,该标准称为安全Hash函数。

MD4是麻省理工学院教授Ronald Rivest于1990 年设计的一种信息摘要算法。它是一种用来测试信息完整性的密码散列函数的实行。其摘要长度为128位。这个算法影响了后来的算法如MD五、SHA 家族和RIPEMD等。MD5算法是1991年发布的一项数字签名加密算法,它当时解决了MD4算法的安全性缺陷,成为应用很是普遍的一种算法。

MD5多年前被设计用于安全用途,是一种计算方便,碰撞几率极低的Hash算法,不过如今已经不安全了。

 

 

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

 

一、md5中的选择前缀碰撞

 

MD5就是这样一个在国内外有着普遍的应用的杂凑函数算法,它曾一度被认为是很是安全的。然而,王小云教授发现,能够很快的找到MD5的“碰撞”,就是两个文件能够产生相同的“指纹”。构造前缀碰撞能够生成两个不一样的文件,而这两文件的md5倒是同样的。这意味着,当你在网络上使用电子签名签署一份合同后,还可能找到另一份具备相同签名但内容迥异的合同,这样两份合同的真伪性便无从辨别。王小云教授的研究成果证明了利用MD5算法的碰撞能够严重威胁信息系统安全,这一发现使目前电子签名的法律效力和技术体系受到挑战。

选择前缀攻击是构造两个不一样的消息s1和s2,他们没必要有共同的前缀,可是通过在尾部附加不一样的“碰撞块”后,两个消息的散列值相同。

 

二、可能出现的问题

 

 

 

这两个不一样功能的程序会在屏幕上打印出不一样的字符,(图中为其中一个的执行结果)可是它们的MD5都是一致的。不一样内容不一样功能的可执行文件能够伪造MD5码,若是仅仅是想要生成 MD5 相同而内容不一样的文件的话,在任何主流配置的电脑上用几秒钟就能够完成了。MD5 算法不该再被用于任何软件完整性检查或代码签名的用途。即md5算法已经不安全,即便验证成功,文件也已经有可能被篡改或者加入木马病毒,则以上体现出的安全问题已经十分严重,便可能出现的问题。

 

参考连接:

http://www.williamlong.info/archives/3229.html

http://security.ctocio.com.cn/securitynews/371/8197871.shtml

https://blog.csdn.net/winner82/article/details/3014030

相关文章
相关标签/搜索