信息安全作业

一.概述:

又称hash函数Hash函数(也称杂凑函数或杂凑算法)就是把任意长的输入消息串变化成固定长的输出串的一种函数。这个输出串称为该消息的杂凑值。一般用于产生消息摘要,密钥加密等,一个安全的杂凑函数应该至少满足以下几个条件:

①输入长度是任意的;

②输出长度是固定的,根据目前的计算技术应至少取128bits长,以便抵抗生日攻击;

③对每一个给定的输入,计算输出即杂凑值是很容易的

④给定杂凑函数的描述,找到两个不同的输入消息杂凑到同一个值是计算上不可行的,或给定杂凑函数的描述和一个随机选择的消息,找到另一个与该消息不同的消息使得它们杂凑到同一个值是计算上不可行的。Hash函数主要用于完整性校验和提高数字签名的有效性,目前已有很多方案。这些算法都是伪随机函数,任何杂凑值都是等可能的。输出并不以可辨别的方式依赖于输入;在任何输入串中单个比特的变化,将会导致输出比特串中大约一半的比特发生变化。

二.散列函数的具体应用:

散列函数在信息安全方面的应用主要体现在以下的3个方面:
1.消息认证

 为了能抵抗主动攻击,用作消息认证的散列函数 必须 满足以下特性:

  (1) H可以作用于一个任意长度的数据分组,产生一个固 定长度的输出。

  (2)任意给定消息M ,计算h =H(M) 容易。

 (3)任意给定 h,找到 M 满足 H(M)=h 很难,计算上不可行 性,即单向性。

 (4) 任意给定的数据块M ,找到不等于M 的M’,使H(M) =H(M') 在计算是不可行性,也称抗弱碰撞。

 (5) 找到任意数据对(x ,y) ,满足H(x) =H(y) 是计算不可行 的,也称抗强碰撞

基于散列函数的消息认证方式主要有:对称密钥加密方式、公开密钥与对称密钥结合的加密方式、公共秘密值方式
2.数字签名

     Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。

同消息认证应用类似,对于哈希函数的另外一个重要应用是数字签名。数字签名的操作与MAC相似,在进行数字签名过程中,使用用户的私钥加密的哈希值,其他任何知道该用户公钥的人都不能够通过数字签名来进行验证消息的完整性。
3.其他应用:

  散列函数除过上述两种应用还存在其他的应用:

(1)产生单向口令文件。操作系统存储口令的Hash值而不是口令本身,当用户输入口令时,操作系统将比对输入口令的Hash值和存储在口令文件中的Hash值(大多  操作系统的口令保护机制)。

(2)入侵检测和病毒检测。将每个文件的Hash值H(F)存储在安全系统中,随后就能够通过重新计算H(F)来判断文件是否被修改过。

(3)密码学Hash函数能够用于构建随机函数PRF或用作伪随机数发生器。基于Hash函数的PRF可用于对称密码中的密钥产生。

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

1.生日攻击:

散列函数的安全性很大程度上取决于抗强碰撞的能力, 碰撞攻击的定义为:找出两个消息 M1 和M2,且 M1≠ M2,使得 H(M1) =H(M2) 。目前已有一些通过计算碰撞次数来攻击散列 函数的方法,其中最为典型的是生日攻击。生日攻击方法没 有利用散列函数的结构和任何代数弱性质,它只依赖于消息 摘要的长度,即散列码的长度。它可用于攻击任何类型的散列函数函数.

生日攻击的理论基础:

生日悖论考虑这样一个问题:在K个人中至少有两个人生日相同的概率大于 0.5 是,K至少多大?容易根据概率学分析得知:在人数为 K 的一组人群中,假定每个人的生日在 365 天内是等概率概率分布的,那么两个人生日相同的概率为通过计算,当 K = 23 时,P(365,23) = 0.5073,即只需 23 人 就有可能出现两个人生日相同的概率超过 0.5;当 K = 100 时, 出现两个人生日相同的概率就将超过 0.999997。之所以称这 一问题是悖论是因为当人数 K 给定时,得到至少两个人生日 相同的概率比想象的要大得多。这是因为考虑的是在给定人 数中任意两个人生日是否相同,在 23 人中可能的情况数为。 将生日悖论引入到散列函数的碰撞攻击中,假定散列码 位数为 m 比特,则可能有的散列码个数为 n = 2 m,任选 k(k≤n) 个随机输入构成散列函数的输入集合,假定散列函数的散列 码值均匀分布,则产生散列码相同的概率为通过近似计算,若要求 P(n,k)>0.5,只需 k≈2 m/2,可见,对 于攻击者来说,只需进行 2 m/2 次尝试,就有 50%的可能性产生 一次碰撞攻击。因此,如果使用 64 比特的散列码,其有效级 仅为 2 32数量级。在目前比较典型的散列算法中,Tiger 有 190 比特的摘要,而 SHA-1、RIPEMD-160 和 MD5 的摘要分别有 160、160 和 128 比特。SHA-1 和 RIPEMD-160 的安全性基本相 当,而 MD5 被认为安全性最低。

2.MD5安全性和SHA-1的安全性

 MD5算法的核心是哈希函数,对MD5算法的安全性主要构成威胁的主要有生日攻击和差分攻击。但是这些攻击方法并未对MD5算法构成致命的威胁。最近几年,对MD5算法的破解突破研究取得了许多突破性的进展。王晓云教授提出的哈希函数模差分分析方法是一种巧妙的差分分析方法,此方法将模差分和XOR差分向结合,充分发挥了两种差分的优点。她第一次构造出了真实的MD5碰撞,提出了第一个完全差分路径。至此MD5算法被攻破。2017年2月23日,谷歌在blog上宣布实现了SHA-1的碰撞,将会在90天内公开算法。之前实现暴力破解需要12,000,000个gpu算一年,现在需要110个GPU算一年,破解效率大为提高。SHA-1的安全性一直广受质疑,此次破解对于广泛使用SHA-1算法的协议如TTL,SSL,SSH都有影响。谷歌和微软已经在2016年停止了支持SHA-1的网站安全证书。

3.散列函数的安全性以及目前安全散列函数的发展

从MD5算法被破解和SHA-1别攻破的案例中我们不难看出,散列函数主要有两种方法可以攻击安全散列函数:密码分析法和暴力攻击法。散列函数抵抗暴力攻击的强度完全依赖于算法生成的散列码长度。Van Oorschot和Wiener曾经提出,花费1000万美元涉及一个被专门用来搜索MD5算法碰撞的机器,则平均24天内就可以找到一个碰撞。因此一个安全的散列函数算法需要考虑的问题是防止这两种攻击方式。

hash函数安全一般是要满足三条性质:
1.单向性(原像稳固性)。给定一个消息摘要y,很难找到符合h(x)=y的消息x。
2.第二原像稳固性。给定x,很难找到一个x’,满足h(x)=h(x’)。
3.碰撞稳固性。很难找到满足h(x)=h(x’)的二元组(x,x’)。
四.说明md5算法在验证软件完整性时可能出现的问题
1.选择碰撞:
MD5选择前缀碰撞即为任意选取一堆消息前缀P和P’,通过构造后缀S和S',使得消息M=P||S和M'=P||S'满足MD5(M)=MD5(M')。

helloworld.exe和goodbyworld.exe这两个执行文件的执行结果为:

以上两个程序在功能上是不想同的,但是他们的哈希值却是相同的。

 出现的问题:

通过md5算法中的选择前缀碰撞算法以及上边的程序运行结果,我们可以看出软件完整性校验和软件在其完整性方面很容易受到威胁,MD5不抗碰撞加密散列函数MD5被证明不是碰撞抵抗。当两个软件的哈希值相同但是其功能却有所不同,这所存在的问题是,当某个软件功能已经被篡改或者植入了某种病毒后,在使用MD5算法进行对软件完整行的验证时,存在错误判断的情况,虽然软件功能早已经改变但是其哈希值却是没有修改的,这就导致使用md5算法在验证软件完整性时出现错误的验证结果。

 

猜你喜欢

转载自www.cnblogs.com/mafx/p/9027499.html
今日推荐