散列函数安全性的知识扩展

要求:git

(1)给出散列函数的具体应用。算法

(2)结合生日攻击、以及200四、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展。问题2的回答能够结合下面给出的第一个连接。数据库

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

 

1、散列函数的具体应用安全

 

Hash(散列函数),通常翻译作"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫作预映射, pre-image),经过散列算法,变换成固定长度的输出,该输出就是散列值。因为散列函数的应用的多样性,它们常常是专为某一应用而设计的。正确的应用场景:
    1,数据校验
    HASH函数有相似数据冗余校验相似的功能,可是它比简单的冗余校验碰撞的几率要小得多,顾而在如今密码学中老是用HASH来作关键数据的验证。
    2,单向性的运用
    利用HASH函数的这个特色,咱们可以实现口令,密码等安全数据的安全存储。密码等不少关键数据咱们须要在数据库中存储,可是在实际运用的过程当中,只是做比较操做,顾而咱们能够比较HASH结 果。这一点相信在银行等系统中有所运用,不然咱们真的要睡不着觉了:)
    3,碰撞约束以及有限固定摘要长度
    数字签名正是运用了这些特色来提升效率的。咱们知道非对称加密算法速度较低,经过HASH处理咱们可使其仅仅做用于HASH摘要上,从而提升效率。
    4,能够运用HASH到随机数的生成和密码,salt值等的衍生中
    由于HASH算法可以最大限度的保证其惟一性,故而能够运用到关键数据的衍生中(从一个随机的种子数产生,而且不暴露种子自己秘密)。编程语言

 

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

 

缘由:哈希碰撞:两个不一样的输入,通过哈希算法后,获得了一样的哈希值,就叫作哈希碰撞。google

因为一般的哈希算法中,哈希值的空间远小于输入的空间,这就意味着信息熵有丢失。加密

一个空间较大的集合(输入)经过哈希算法映射到一个空间较小的集合(哈希值),必然会形成多个输入映射到一个哈希值上,这就是所谓的哈希碰撞。spa

例子:生日攻击

首先理解生日悖论:

生日悖论:若是一个房间里有23个或23个以上的人,那么至少有两我的的生日相同的几率要大于50%。对于60人以上,这种几率要大于99%。

严格意义上,这并非一个悖论,称之为悖论是因为跟人们的常识相悖。
生日攻击是以几率论中的生日问题为数据基础的一种密码学攻击方法。

根据生日悖论,若是哈希值的位数太短,很容易能够找到一组(两个)哈希值相同的输入,这就是一种最经常使用的生日攻击的应用。

使用一个64位的哈希函数,大约有 1.8 × 10^19 个不一样的哈希值。
若是产生每一个哈希值的可能性是相同的,那么只需大约 5.1 x 10^9 次(51亿次)暴力尝试就能够获得一次哈希碰撞。

例子:王晓云破解MD5

MD5最大的问题在于,经过我国的王晓云教授等学者的工做,md5已经被证实能够进行碰撞攻击。也就是说,攻击者能够产生两个应用程序,内容不同,可是哈希值彻底同样。

  在云存储的应用场合中,这种危害表现为攻击者能够伪造一个Windows 的安装光盘,在其中嵌入木马,经过上述手段让MD5哈希值和微软官方发布的光盘一致,抢先上传到分享类网盘中。若是该网盘采用MD5检查重复文件(例如离线下载服务), 木马就会被植入到但愿下载原版光盘用户的电脑中。

  这种攻击形式不是天方夜谈,根据微软官方的报告,一款名为Flame的木马就用了相似的手段。固然,这种方式目前仍是很是高级的攻击手段。

散列函数的发展:

 MD5 和 SHA1 是目前应用最普遍的Hash算法

 SHA1是由NIST NSA设计为同DSA一块儿使用的,它对长度小于2^64位的输入,产生长度为160bit的散列值,所以抗穷举(brute-force)性更好。

最新的发展为:在使用安全哈希算法时,考虑使用SHA-2系列算法乃至更高级别算法,而不是MD5

 

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

MD5:用于确保信息传输完整一致。是计算机普遍使用的杂凑算法之一,主流编程语言广泛已有MD5实现。将数据(如汉字)运算为另外一固定长度值,是杂凑算法的基础原理,MD5的前身有MD二、MD3和MD4。

  MD5算法具备如下特色:

  (1)压缩性:任意长度的数据,算出的MD5值长度都是固定的。

  (2)容易计算:从原数据计算出MD5值很容易。

  (3)抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所获得的MD5值都有很大区别。

  (4)强抗碰撞:已知原数据和其MD5值,想找到一个具备相同MD5值的数据(即伪造数据)是很是困难的。

  MD5的做用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成必定长的十六进制数字串)。除了MD5之外,其中比较有名的还有sha-一、RIPEMD以及Haval等。

  MD5的用处主要有一下几个场景:

  (1)数据完整性校验:检查数据有没有被篡改过,这里取个例子。当用Android手机进行OTA升级的时候,下载完升级包(无论是全升包仍是增量包),紧接着就是用该升级包的标准MD5进行验证,若是校验的结果等于标准的MD5值,那么就证实这个升级包没有被篡改过。

  (2)不可逆的加密: 

像Unix系统中,用户用用户名和密码登录系统,因为系统中存放的是用户名和密码组合MD5校验值,因此登录框将会把用户名和密码进行MD5算法从而生成用户名和密码组合的MD5校验值,系统由此能够知道能不能登录成功。

  选择前缀碰撞:将碰撞合并到一对文件中时,除了构成碰撞的相对较小的随机查找字节块以外,构造碰撞的原始方法要求文件彻底相等。前缀冲突只有在碰撞文件应该彻底相等的要求。以前发现碰撞的两个文件的碰撞能够是任何事情:咱们的选择前缀碰撞查找方法老是会产生一个碰撞,该碰撞能够合并到两个文件中,而无论在碰撞以前存在什么数据。

可能出现的问题:若是有第三方在验证软件完整性时截取软件代码,使用快速MD5碰撞生成器,在短期内伪造一份相同的MD5,并恶意篡改软件,那么安全性将会大大降低。当软件过大时,在验证过程当中所需的时间也会大大增长,对于第三方而言,攻击的成功几率也会增长。没法定位给定的散列值,并生成一个(有意义的)输入位串哈希到给定的值。

以上即是个人我的对散列函数内容的整理和理解,其中包含网上百科内容,因为我的能力有限,请你们见谅!

相关文章
相关标签/搜索