2016012010 赵瑞雪 散列函数的应用及其安全性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2016012010 赵瑞雪 散列函数的应用及其安全性相关的知识,希望对你有一定的参考价值。
作业题目:散列函数的应用及其安全性
内容要求:(1) 给出散列函数的具体应用
(2) 结合生日攻击、以及2004、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展。问题2的回答可以参考下面给出的第一个链接
(3) 结合md5算法中的选择前缀碰撞以及第二个链接中的helloworld.exe和goodbyworld.exe两个可执行文件的md5消息摘要值和两个文件的执行结果说明md5算法在验证软件完整性时可能出现的问题
什么是散列函数(Hash函数)?
Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数
一、散列函数的具体应用
1.消息认证
(1)消息认证概念:消息认证是用来验证消息完整性的一种机制和服务。消息认证确保收到的消息和发送时是一样的,同时确保发送方声称的身份是真实有效的,当Hash函数用于提供消息认证功能时,被称为消息摘要
(2)使用Hash函数的本质:发送者根据待发送的消息使用该函数计算一组Hash值,然后将Hash值和消息一起发送过去。接收者收到后对于消息执行同样Hash计算,并将结果与收到的Hash值进行对比。如果不匹配,则接收者推断出消息(或Hash值)遭到了篡改
(3)Hash码能够通过如下不同方法提供消息认证:
a.使用对称密码算法加密消息和Hash码
b.使用对称密码算法只对Hash码进行加密
c.不使用加密算法,仅使用Hash函数实现消息认证。(假设通信双方共享私密值S)
d.通过将整个消息和Hash值加密,能够在c的基础上提供保密性
(4)一般情况,消息认证是通过MAC实现的。通信双方基于共享的同一密钥来认证彼此之间交互的信息时,就会使用MAC。MAC是Hash函数和加密函数操作的结合。并且提供了安全保护,用以抵抗不知道密钥的攻击者的攻击
2.数字签名
(1)数字签名简述:数字签名的操作与MAC相似,在进行数字签名过程中使用用户的私钥加密消息的Hash值,其他人任何知道该用户公钥的人都能够通过数字签名来验证消息的完整性。数字签名的应用比消息认证更为广泛
(2)Hash码用于提供数字签名的方案:
a.使用发送方的私钥,利用公钥密码算法仅对Hash码进行加密
b.先用发送方私钥对Hash码加密,再用对称密码中的密钥对消息和公钥算法加密结果加密
3.其他应用
(1)产生单向口令文件。当用户输入口令时,操作系统将比对输入口令的Hash值和存储在口令文件中的Hash值
(2)入侵检测和病毒检测。将每个文件的Hash值H(F)存储在安全系统中,随后就能够通过重新计算H(F)来判断文件是否被修改过
(3)密码学Hash函数能够用于构建随机函数PRF或用作伪随机数发生器。基于Hash函数的PRF可用于对称密码中的密钥产生
二、结合生日攻击、以及2004、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展
1.生日攻击:
生日攻击原理:
我们可以将它用在碰撞,得到不同Message有着相同tag。
假设:取样次数为N,M:M1-Mn,取值在tag:1-B中,并且假设分布随机均匀相互独立。
取样次数n与B的关系,n=1.2*B^0.5(这是生日悖论中最坏的情况。)
证明:M2不等于M1的概率为(B-1)/B,同理可得M3为(B-2)/B,M4为(B-3)/B...Mn为(B-n+1)/B。
因此,其中有碰撞的概率为:1-(1-1/B)(1-2/B).....(1-(k-1)/B)>= (1-e)^(-n^2/2B)
因为n=1.2*B^0.5,因此(1-e)^(-n^2/2B)=1-e^-0.72=0.53>50%
结论,因此使用生日攻击,我们只需2^(n/2)次寻找,就有50%概率能找到相同tag的两个不同Message
(1)通过“生日悖论”模型来分析散列碰撞的安全性。生日攻击的基本原理为假定散列函数H有种可能输出(即输出为位),H作用于k个随机输入,则时至少有一个重复出现,发生碰撞现象。生日攻击隐含着消息摘要的长度的一个下界。一个40比特长的消息摘要是很不安全的,因为仅仅用220(大约一百万)次随机Hash可至少以1/2的概率找到一个碰撞。为了抵抗生日攻击,通常建议消息摘要的长度至少应取为128比特,此时生日攻击需要约264次Hash。安全的Hash标准的输出长度选为160比特是出于这种考虑
(2) 防范方法:
-
使用安全的Hash算法:安全的Hash算法生成的Hash值有足够多的位数。这样,攻击者在寻找两个具有相同Hash值的文件时就会非常困难
-
加盐:在为文件签名之前,先向文件添加一个随机值,然后计算Hash值,再将文件、签名和随机值一起发送给接收者。这样,攻击者必须找出具有特定Hash值的伪造文件,这非常困难
-
改动文件:在为文件签名之前,对消息或文件做少许改动。这样,攻击者必须找出具有特定Hash值的伪造文件,这非常困
2.MD5安全性和SHA-1的安全性:
2004年8月中国密码学家王小云教授等首次公布了提出一种寻找MD5碰撞的新方法。目前利用该方法用普通微机几分钟内即可找到MD5的碰撞。MD5已经被彻底攻破。在2017年,Google公司宣布实现了对SHA-1算法的攻击。SHA-1算法宣告攻破。不过需要注意的是,这次SHA-1算法破解的计算量相当于单个CPU计算6500年和单个GPU计算110年,因此就目前的PC硬件来看,依靠一台电脑完成破解是不现实的。然而密码学家认为,如果利用云计算技术来破解的话,这件事情将简单很多,可能只需要17万美元的预算即可完成,因此尽快改用安全性更高的SHA-2或SHA-3算法才是正确的做法
3.散列函数的安全性
(1)通过对于生日攻击的了解,散列函数的安全性是有待提高的。生日攻击并没有利用任何HASH函数的性质,是对任何HASH都适用的普适的攻击方法,应对方法也很简单,增加HASH的长度,但是很难完成。
(2)有两种方法可以攻击安全散列函数:密码分析法和暴力攻击法。散列函数抵抗暴力攻击的强度完全依赖于算法生成的散列码长度。
(3)安全散列函数结构
因为所需的安全散列长度越来越长,因此我们可以使用有限定义域上的散列函数(俗称压缩函数)通过迭代方式拓展为具有无限定义域的散列函数。而最为代表性的就Merkle-Damgard结构
4.散列函数的发展
(1)MD2 Rivest在1989年开发出MD2算法。在这个算法中,首先对信息进行数据补位,使信息的字节长度是16的倍数。然后,以一个16位的检验和追加到信息末尾。并且根据这个新产生的信息计算出散列值。
(2)MD4 MD4是麻省理工学院教授Ronald Rivest于1990年设计的一种信息摘要算法。它是一种用来测试信息完整性的密码散列函数的实行。通过三圈的操作将任意长度的消息变换成128位的哈希值。
(3)MD5 Rivest于1991年对MD4的改进版本。运用了四轮变换,并且每轮加上前一轮的结果。
(4)HAVAL 为MD5的改进版本。轮数可以为3、4或5,输出长度分别为128、160、192或224位。
(5)SHA系列 SHA (Secure Hash Algorithm,译作安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院 (NIST) 发布的一系列密码散列函数,经历了SHA-0,SHA-1,SHA-2,SHA-3系列发展。2002年,NIST分别发布了SHA-256、SHA-384、SHA-512,这些算法统称SHA-2。2008年又新增了SHA-224。NSA于2007年正式宣布在全球范围内征集新新一代(SHA-3)算法设计,2012年公布评选结果, Keccak算法最终获胜成为唯一官方标准SHA-3算法,但还有四种算法同时进入了第三轮评选,分别是:BLAKE, Gr?STL, JH和SKEIN,这些算法其实也非常安全,而且经受审查,被各种竞争币频繁使用
三、结合md5算法中的选择前缀碰撞以及第二个链接中的helloworld.exe和goodbyworld.exe两个可执行文件的md5消息摘要值和两个文件的执行结果说明md5算法来验证软件完整性时可能出现的问题
1.MD5算法:
MD5算法:它的全称是message-digest algorithm 5(信息-摘要算法),经MD2、MD3和MD4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)
2.选择前缀碰撞法:
几位密码学家使用 “构造前缀碰撞法”(chosen-prefix collisions)来进行攻击(是王小云所使用的攻击方法的改进版本),他们所使用的计算机是一台Sony PS3,且仅用了不到两天。如果仅仅是想要生成MD5 相同而内容不同的文件的话,在任何主流配置的电脑上用几秒钟就可以完成。他们的结论:MD5 算法不应再被用于任何软件完整性检查或代码签名的用途
3.MD5验证软件完整性时可能出现的问题
(1)两个不同的程序,MD5可能是相同的
(2)不能通过校验MD5知道网站是否被黑客入侵篡改,是否曾被恶意植入病毒或木马
(3)当软件过大时,在验证过程中所需的时间也会大大增加,对于第三方而言,攻击的成功概率也会增加
(4)如果有第三方在验证软件完整性时截取软件代码,使用快速MD5碰撞生成器,在短时间内伪造一份相同的MD5,并恶意篡改软件,那么安全性将会大大下降
参考资料:
https://blog.csdn.net/jerry81333/article/details/52763070
http://m.cnitpm.com/pm1/38640.html
https://www.zhihu.com/question/54307104
以上是关于2016012010 赵瑞雪 散列函数的应用及其安全性的主要内容,如果未能解决你的问题,请参考以下文章