信息安全技术 做业5

散列函数的应用及安全性

一、散列函数的应用。

错误校订
使用一个散列函数能够很直观的检测出数据在传输时发生的错误。在数据的发送方,对将要发送的数据应用散列函数,并将计算的结果同原始数据一同发送。在数据的接收方,一样的散列函数被再一次应用到接收到的数据上,若是两次散列函数计算出来的结果不一致,那么就说明数据在传输的过程当中某些地方有错误了。这就叫作冗余校验。
对于错误校订,假设类似扰动的分布接近最小(a distribution of likely perturbations is assumed at least approximately)。对于一个信息串的微扰能够被分为两类,大的(不可能的)错误和小的(可能的)错误。咱们对于第二类错误从新定义以下,假如给定 H(x) 和 x+s,那么只要s足够小,咱们就能有效的计算出x。那样的散列函数被称做错误校订编码。这些错误校订编码有两个重要的分类:循环冗余校验和里德所罗门码。
 
语音识别
对于像从一个已知列表中匹配一个MP3文件这样的应用,一种可能的方案是使用传统的散列函数——例如MD5,可是这种方案会对时间平移、CD读取错误、不一样的音频压缩算法或者音量调整的实现机制等状况很是敏感。使用一些相似于MD5的方法有利于迅速找到那些严格相同(从音频文件的二进制数据来看)的音频文件,可是要找到所有相同(从音频文件的内容来看)的音频文件就须要使用其余更高级的算法了。
那些并不紧随IT工业潮流的人每每能反其道而行之,对于那些微小差别足够鲁棒的散列函数确实存在。现存的绝大多数散列算法都是不够鲁棒的,可是有少数散列算法可以达到辨别从嘈杂房间里的扬声器里播放出来的音乐的鲁棒性。有一个实际的例子是Shazam[1]服务。用户能够用电话机拨打一个特定的号码,并将电话机的话筒靠近用于播放音乐的扬声器。该项服务会分析正在播放的音乐,并将它于存储在数据库中的已知的散列值进行比较。用户就可以收到被识别的音乐的曲名(须要收取必定的费用)
 
信息安全
Hash算法在信息安全方面的应用主要体如今如下的3个方面:
(1)文件校验
咱们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并无抗数据篡改的能力,它们必定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。
MD5 Hash算法的"数字指纹"特性,使它成为目前应用最普遍的一种文件完整性校验和(Checksum)算法,很多Unix系统有提供计算md5 checksum的命令。
(2)数字签名
Hash 算法也是现代密码体系中的一个重要组成部分。因为非对称算法的运算速度较慢,因此在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称"数字摘要"进行数字签名,在统计上能够认为与对文件自己进行数字签名是等效的。并且这样的协议还有其余的优势。
(3) 鉴权协议
以下的鉴权协议又被称做挑战--认证模式:在传输信道是可被侦听,但不可被篡改的状况下,这是一种简单而安全的方法。以上就是一些关于hash以及其相关的一些基本预备知识。
 

二、散列函数的安全性

安全散列函数: 单向散列函数或者安全散列函数之因此重要,不只在于消息认证(消息摘要,数据指纹),还有数字签名(增强版的消息认证)和验证数据的完整性。常见的单向散列函数有MD5和SHA算法

散列函数的安全性:有两种方法能够攻击安全散列函数:密码分析法和暴力攻击法。散列函数抵抗暴力攻击的强度彻底依赖于算法生成的散列码长度。Van Oorschot和Wiener曾经提出,花费1000万美圆涉及一个被专门用来搜索MD5算法碰撞的机器,则平均24天内就能够找到一个碰撞。2004年8月中国密码学家王小云教授等首次公布了提出一种寻找MD5碰撞的新方法。目前利用该方法用普通微机几分钟内便可找到MD5的碰撞。MD5已经呗完全攻破。数据库

散列函数的安全性要求:安全

一、已知哈希函数的输出,要求它的输入是困难的,即已知c=Hash(m),求m是困难的。这代表函数应该具备单向性。

二、已知m,计算Hash(m)是容易的。这代表函数应该具备快速性。

三、已知,构造m2使Hash(m2)=c1是困难的。这代表函数应该具备抗碰撞性。

四、c=Hash(m),c的每一比特都与m的每一比特有关,并有高度敏感性。即每改变m的一比特,都将对c产生明显影响。这代表函数应该具备雪崩性。

五、做为一种数字签名,还要求哈希函数除了信息m自身以外,应该基于发信方的秘密信息对信息m进行确认。

六、接受的输入m数据没有长度限制;对输入任何长度的m数据可以生成该输入报文固定长度的输出。

生日攻击:利用“两个集合相交”问题的原理生成散列函数碰撞,达到目的的攻击称为生日攻击,也称为平方根攻击。生日攻击方法没有利用Hash函数的结构和任何代数弱性质,它只依赖于消息摘要的长度,即hash值的长度。简单来讲,生日攻击就是利用散列函数发生碰撞的可能性,进行n次尝试直到找到一对碰撞的输入。一个40比特长的消息摘要是很不安全的,大约一百万次随机Hash可至少以50%的几率找到一个碰撞。由于所需的安全散列长度愈来愈长,所以咱们可使用有限定义域上的散列函数(俗称压缩函数)经过迭代方式拓展为具备无限定义域的散列函数。而最为表明性的就Merkle-Damgard结构app

MD5原理:对MD5算法简要的叙述能够为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,通过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。函数

SHA-1:SHA (Secure Hash Algorithm,译做安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散列函数。正式名称为 SHA 的家族第一个成员发布于 1993年。然而人们给它取了一个非正式的名称 SHA-0 以免与它的后继者混淆。两年以后, SHA-1,第一个 SHA 的后继者发布了。 另外还有四种变体,曾经发布以提高输出的范围和变动一些细微设计: SHA-224, SHA-256, SHA-384 和 SHA-512 (这些有时候也被称作 SHA-2)。编码

最初载明的算法于1993年发布,称作安全散列标准 (Secure Hash Standard),FIPS PUB 180。这个版本常被称为 "SHA-0"。它在发布以后很快就被NSA撤回,而且以 1995年发布的修订版本 FIPS PUB 180-1 (一般称为 "SHA-1") 取代。根据 NSA的说法,它修正了一个在原始算法中会下降密码安全性的错误。然而 NSA 并无提供任何进一步的解释或证实该错误已被修正。1998年,在一次对 SHA-0 的攻击中发现此次攻击并不能适用于 SHA-1 — 咱们不知道这是否就是NSA 所发现的错误,但这或许暗示咱们此次修正已经提高了安全性。SHA-1已经被公众密码社群作了很是严密的检验而还没发现到有不安全的地方,它在一段时间被认为是安全的,直到Google宣布攻破SHA-1。