2016012067 刘玥 散列函数的应用及其安全性

目录

一、散列函数的具体应用

二、 散列函数的安全性以及目前安全散列函数的发展

三、 md5算法在验证软件完整性时可能出现的问题

一、散列函数的具体应用

(1)数字签名

哈希函数可以提高签名的速度,减少运算,又可以不泄露签名所对应的消息,还可以将消息的签名与加密变换分开处理。

(2)校验

可以校验数据是否被篡改。传输消息之前对消息进行哈希变换,接收者也进行相同的哈希变换,若两个哈希值相同,可以认为消息在传输过程中没有被篡改。

(3)快速访问

散列表的寻址时间复杂度为O(1),在数据存储中运用较多,这里不作详述。

(4)安全访问认证

MD5广泛用于操作系统的登陆认证上,如在Unix系统中用户的密码是以MD5(或其它类似的算法)经Hash运算后存储在文件系统中。当用户登录的时候,系统把用户输入的密码进行MD5 Hash运算,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这可以避免用户的密码被具有系统管理员权限的用户知道。

(5)伪随机数生成

二、散列函数的安全性以及目前安全散列函数的发展

(结合生日攻击、以及2004、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展。 参考链接:https://www.win.tue.nl/hashclash/

 1、生日攻击:

生日攻击是利用概率论中的生日问题,找到冲突的Hash值,伪造报文,使身份验证算法失效。生日攻击方法没有利用Hash函数的结构和任何代数弱性质,它只依赖于消息摘要的长度,即Hash值的长度。这种攻击对Hash函数提出了一个必要的安全条件,即消息摘要必须足够长。

防范方法:

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

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

(3)改动文件:在为文件签名之前,对消息或文件做少许改动。这样,攻击者必须找出具有特定Hash值的伪造文件,这非常困难。

2、MD5安全性

MD5是一种不可逆的加密算法,经md2、md3和md4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。王小云教授的成果集中在加速构造碰撞对。原来理论上构造出一个MD5碰撞对需要2^64次尝试,而现在只需要2^39次,其算法大大加速了这一过程。但从应用场景上来看,它本身并不具备太多的应用价值,因为构造出的碰撞很可能毫无意义。它的价值在于在此算法基础上衍生出来的一系列MD5的算法,能够在部分场景下,构造出一个有意义的伪造信息,并且MD5值保持不变。所以,单单看这个算法本身就说MD5并不安全,入侵者可以通过网站查询与字典暴力破解等多个方法获取MD5密文对应的密码明文,从而轻松入侵系统。

3、SHA-1的安全性

2017年,Google公司宣布实现了对SHA-1算法的攻击。在实际中,安全散列函数永远不应该发生碰撞。然而,如果散列算法有一定的缺陷,如SHA-1,一个资金雄厚的攻击者就可以制造出碰撞。攻击者可以利用碰撞欺骗系统,这些系统根据HASH来接收一个恶意文件,从而代替了它的良性副本。

4、散列函数的安全性

满足以下条件的散列函数一般来说是安全的:

(1)抗原像:已知y属于Y,要找出x属于X,使得h(x)=y是困难的;

(2)抗第二原像(弱抗碰撞):已知x属于X, 找出x'属于X,使得h(x')=h(x)是困难的;

(3)抗碰撞(强抗碰撞):找出x,x'属于X,使得h(x)=h(x')是困难的;

5、目前安全散列函数的发展

目前使用最多的哈希函数有MD(Message-Digest Algorithm)系列(MD4、MD5、HAVAL、RIPEMD)和SHA系列(SHA-1、SHA-256)

MD4

1990年Ronald L. Rivest设计,通过3圈的操作将任意长度的消息变换成128位的哈希值。MD4算法的前两圈已被Dobbertin等人攻破,证明MD4算法是不安全的,但整个算法并没有被攻破过。具体算法详见《MD4算法分析》

MD5

MD5(RFC 1321)是 Rivest 于1991年对MD4的改进版本。它对输入仍以512位分组,经过一系列处理之后,其输出是4个32位字的级联,与 MD4 相同。MD5算法被王小云证明是可攻破的,因此也已经不安全了。

MD5与MD4的区别:MD5用了4轮变换,比MD4多一轮;MD4中第一轮没有常量加,MD5中64步每一步用了一个不同的常量K[i];MD5每轮加上前一步的结果,MD4没有。

HAVAL

HAVAL是MD5的改进版本,其轮数可以是3、4或5(每轮16步),输出长度分别为128、160、192或224位。HAVAL用高非线性的7-变量函数取代了MD5的简单非线性函数。

SHA1

SHA由美国国家标准技术研究所NIST开发,与1993年发表,SHA-1是基于MD4设计的。

输入最大长度为2^64位的数据,输出160位的消息摘要,同样以512位数据块进行处理。具体这里不详述。

SHA-256

输出由SHA-1的160位扩大到256位,迭代次数由SHA-1的80次增加到128次

SHA-384

输出扩大到384位,迭代次数增加到192次

SHA-512

输出扩大到512位,迭代次数增加到256次

三、 md5算法在验证软件完整性时可能出现的问题(结合md5算法中的选择前缀碰撞以及链接:http://www.win.tue.nl/hashclash/SoftIntCodeSign/ 中的helloworld.exe和goodbyworld.exe两个可执行文件的md5消息摘要值和两个文件的执行结果说明md5算法在验证软件完整性时可能出现的问题。)

(1)上面的两个程序序会在屏幕上打印出不同的字符,但是它们的 MD5 都是一样的。

(2)我们不能通过校验MD5来知道网站是否被黑客攻击或者植入病毒木马。

(3)软件或文件过大时,验证时间也会增加,第三方攻击的成功概率也会增加。

(4)第三方在验证软件完整性时截取软件代码,可以使用快速MD5碰撞生成器,在短时间内伪造一份相同的MD5,并篡改软件,使得安全性下降。

猜你喜欢

转载自www.cnblogs.com/bbl00/p/9029640.html