Hash 算法实验原理

finder_he 贡献于2011-12-13

作者 HOST-NETX  创建于2008-12-01 10:15:00   修改者番茄花园  修改于2011-07-26 09:14:00字数6335

文档摘要:信息安全的核心技术是应用密码技术。密码技术的应用远不止局限于提供机密性服务,密码技术也提供数据完整性服务。密码学上的散列函数(Hash Functions)就是能提供数据完整性保障的一个重要工具。Hash函数常用来构造数据的短“指纹”:消息的发送者使用所有的消息产生一个附件也就是短“指纹”,并将该短“指纹”与消息一起传输给接收者。即使数据存储在不安全的地方,接收者重新计算数据的指纹,并验证指纹是否改变,就能够检测数据的完整性。
关键词:

任务一  MD5算法 一.哈希函数简介     信息安全的核心技术是应用密码技术。密码技术的应用远不止局限于提供机密性服务,密码技术也提供数据完整性服务。密码学上的散列函数(Hash Functions)就是能提供数据完整性保障的一个重要工具。Hash函数常用来构造数据的短“指纹”:消息的发送者使用所有的消息产生一个附件也就是短“指纹”,并将该短“指纹”与消息一起传输给接收者。即使数据存储在不安全的地方,接收者重新计算数据的指纹,并验证指纹是否改变,就能够检测数据的完整性。这是因为一旦数据在中途被破坏,或改变,短指纹就不再正确。     散列函数是一个函数,它以一个变长的报文作为输入,并产生一个定长的散列码,有时也称为报文摘要,作为函数的输出。散列函数最主要的作用于是用于鉴别,鉴别在网络安全中起到举足轻重的地位。鉴别的目的有以下两个:第一,验证信息的发送者是真正的,而不是冒充的,同时发信息者也不能抵赖,此为信源识别;第二,验证信息完整性,在传递或存储过程中未被篡改,重放或延迟等。 二.哈希函数特点     密码学哈希函数(cryptography hash function,简称为哈希函数)在现代密码学中起着重要的作用,主要用于对数据完整性和消息认证。哈希函数的基本思想是对数据进行运算得到一个摘要,运算过程满足: l          压缩性:任意长度的数据,算出的摘要长度都固定。 l          容易计算:从原数据容易算出摘要。 l          抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的摘要都有很大区别。 l          弱抗碰撞:已知原数据和其摘要,想找到一个具有相同摘要的数据(即伪造数据),在计算上是困难的。 l          强抗碰撞:想找到两个不同的数据,使它们具有相同的摘要,在计算上是困难的。 三.针对哈希函数的攻击     与传统密码体制的攻击方式相比,对散列函数的攻击方法主要有两种: l          穷举攻击:它可以用于任何类型的散列函数的攻击,最典型的方式就是所谓的“生日攻击”。采用生日攻击的攻击者将产生许多明文消息,然后计算这些明文消息的指纹(摘要),进行比较。 l          利用散列函数的代数结构:攻击其函数的弱性质。通常的有中间相遇攻击、修正分组攻击和差分分析攻击等。 四.MD5哈希函数     1990年R.L.Rivest提出哈希函数MD4。MD4不是建立在某种密码系统和假设之上,而是一种直接构造法。所以计算速度快,特别适合32位计算机软件实现,对于长的信息签名很实用。MD5是MD4的改进版,它比MD4更复杂,但是设计思想相似并且也产生了128位数列。 五.MD5哈希算法流程动画演示     对于任意长度的明文,MD5首先对其进行分组,使得每一组的长度为512位,然后对这些明文分组反复重复处理。     对于每个明文分组的摘要生成过程如下:     (1)将512位的明文分组划分为16个子明文分组,每个子明文分组为32位。     (2)申请4个32位的链接变量,记为A、B、C、D     (3)子明文分组与链接变量进行第1轮运算。     (4)子明文分组与链接变量进行第2轮运算。     (5)子明文分组与链接变量进行第3轮运算。     (6)子明文分组与链接变量进行第4轮运算。     (7)链接变量与初始链接变量进行求和运算。     (8)链接变量作为下一个明文分组的输入重复进行以上操作。     (9)最后,4个链接变量里面的数据就是MD5摘要。 六.MD5分组过程     对于任意长度的明文,MD5可以产生128位的摘要。任意长度的明文首先需要添加位数,使明文总长度为448(mod512)。在明文后添加位的方法是第一个添加位是l,其余都是0。然后将真正明文的长度(没有添加位以前)以64位表示,附加于前面已添加过位的明文后,此时的明文长度正好是512位的倍数。当明文长度大于2的64次方时,仅仅使用低64位比特填充,附加到最后一个分组的末尾。     经过添加处理的明文,其长度正好为512位的整数倍,然后按512位的长度进行分组(block),可以划分成L份明文分组,我们用,,……,表示这些明文分组。对于每一个明文分组,都要重复反复的处理,如图1-4-1所示。 图1-4-1 MD5的分组处理方法 七.MD5子明文分组和链接变量     对于512位的明文分组,MD5将其再分成16份子明文分组(sub-block),每份子明文分组为32位,我们使用M[k](k= 0, 1,……15)来表示这16份子明文分组。这里的概念要弄清楚,一个添加位后的明文可以划分为L份明文组分,而一个明文分组又可以划分为16份子明文分组。     MD5有4轮非常相似的运算,每一轮包括16个类似的步骤,每一个步骤的数据处理都是针对4个32位记录单元中数据进行的。这4个32位记录单元称为“链接变量”,分别标记为A、B、C、D。这4个链接变量的初始值以16进位制表示如下:A=0x01234567,B=0x 89ABCDEF.C=0x FEDCBA98,D=0x 76543210。链接变量用于存放中间散列函数值,经过4轮运算(共64个步骤)之后,链接变量A,B,C,D中的128位即为中间散列函数值。中间散列函数值作为下一个明文分组的输入继续使用,当所有的明文分组都处理完毕后,链接变量A,B,C,D中的128位数据就是摘要。 八.MD5第1轮运算     MD5有4轮非常相似的运算,每一轮包括16个类似的步骤,当第1轮运算中的第1步骤开始处理时,A、B、C、D四个链接变量中的值先赋值到另外4个记录单元A′,B′,C′,D′中。这4个值将保留,用于在第4轮的最后一个步骤完成之后与A,B,C,D进行异或操作。     第1轮的操作程序为FF(a,b,c,d,M[k],S,T[i])     它表示的逻辑为:a←b+((F(b,c,d)+M[k]+T[i])<<

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 2 人已下载

下载文档