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

Posted maleping

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了散列函数的应用及其安全性相关的知识,希望对你有一定的参考价值。

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

一.散列函数的具体应用

HASH函数的特点:固定长度的输出,单向不可逆,碰撞约束。

在密码学中的应用:

1.数字签名技术

下图为使用散列函数的签名方案

 

 

 

2消息的完整性认证

为保证文件的完整性,通常需要进行文件完整性的验证。通常的做法是:文件的所有者用Hash算法计算出文件的Hash值,自己保存这个Hash值的一份拷贝,然后他可以把文件存放在一个公开的地方,每当他需要验证数据完整性时(如他需要使用这个文件时),他就用同一个Hash算法计算存储文件的Hash值,和他原来自己保存的Hash值相比较,如果相等,则文件时完整的,没有被改动,否则文件已被改动。

3.一种改进的用户密钥管理方案

利用单项散列函数函数提出了一种改进的用户密钥管理方案。

 

 

正确的应用场景:
    1,数据校验
    HASH函数有类似数据冗余校验类似的功能,但是它比简单的冗余校验碰撞的概率要小得多,顾而在现在密码学中总是用HASH来做关键数据的验证。
    2,单向性的运用
    利用HASH函数的这个特点,我们能够实现口令,密码等安全数据的安全存储。密码等很多关键数据我们需要在数据库中存储,但是在实际运用的过程中,只是作比较操作,顾而我们可以比较HASH结果。
    3,碰撞约束以及有限固定摘要长度
    数字签名正是运用了这些特点来提高效率的。我们知道非对称加密算法速度较低,通过HASH处理我们可以使其仅仅作用于HASH摘要上,从而提高效率。
    4,可以运用HASH到随机数的生成和密码,salt值等的衍生中
    因为HASH算法能够最大限度的保证其唯一性,故而可以运用到关键数据的衍生中(从一个随机的种子数产生,并且不暴露种子本身秘密)。

参考链接:

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

论文:南开大学信息技术科学学院辛运帏等--单向散列函数的原理实现和在密码学中的应用

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

生日攻击

把教室里每个人作为函数的输入x,每个人对应的生日作为函数的输出y,那么可以写成H(x)= y,由于一年有365 天,所以y可以取的值有365种。这时候我们改变输入x取值范围,发现只要当x取值数大于23种时,y碰撞的几率就达到50%以上。

生日攻击就是利用散列函数发生碰撞的可能性,进行n次尝试直到找到一对碰撞的输入。一个40比特长的消息摘要是很不安全的,大约一百万次随机Hash可至少以50%的概率找到一个碰撞。

一直到2005年,MD5和SHA-1这两个函数都在国际密码学界被认为是理想的消息摘要函数,直到山东大学的王小云教授发现了这两个函数的致命缺陷:它们都易受冲撞攻击,对于MD5来说,由于它的摘要信息位数比较短(128 bit),现在用普通的计算机可以在几小时甚至几分钟之内找到冲撞对,这就是相当“廉价”了。而对于SHA-1(160  bit)来说,王小云教授的成果证明可以在2的69次方次尝试后找到冲撞对(这个结果之后在被不断地被改进),但这个计算量仍然过大,以当代的计算机运算能力来说,现实上仍然很难实现(需要的运算量大意味着需要的资金大。对MD5的冲撞攻击是比较容易的,对SHA-1的冲撞攻击相对代价较大,但是随着机算机能力年年的发展正变得越来越容易实现。

散列函数的安全性:

1.单向性:对任何给定的散列码h,找到满足H(x)=h的x在计算上是不可行的。
2.抗弱碰撞性:对任何给定的消息x,找到满足y≠x且H(x)=H(y)的y在计算上是不可行的。
3.抗强碰撞性:找到任何满足H(x)=H(y)的偶对(x,y)在计算上是不可行的。

安全散列函数的发展

1995年公布SHA-1

2002年,公布了SHA-2(SHA-256、SHA-384、SHA-512)
2008年,增加了SHA-224

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

几位密码学家使用“构造前缀碰撞法”来进行攻击(王小云所使用的攻击方法的改进版本)两个程序不同,但他们的MD5确是完全相同的。最终他们得出结论:MD5 算法不应再被用于任何软件完整性检查或代码签名的用途。

验证软件完整性时可能出现的问题:

1.伪造数字签名,简单的说就是我造两份文件(一份正常文件,一份恶意文件)它们有着相同的MD5 hash,而一般数字签名是针对文件的消息摘要而不是文件全文来做的,我就可以拿着正常文件取得消息摘要的签名认证(证明这个文件是合法的),然后我拿着恶意文件和这个取得认证的消息摘要,受攻击者就会的会误认为这个恶意文件是取得签名认证的。

2.感染病毒,木马植入

3.易被攻破,安全性降低,当第三方在验证软件完整性时截取软件代码,使用快速MD5碰撞生成器,在短时间内伪造一份相同的MD5,并恶意篡改软件,那么安全性将会大大下降。

4.文件可能被篡改或损坏

以上是关于散列函数的应用及其安全性的主要内容,如果未能解决你的问题,请参考以下文章

2016012026 管凌波 散列函数的应用及其安全性

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

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

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

2016012003+陈琦+散列函数的应用及其安全性

2016012039+张琪+散列函数的应用及其安全性