报文摘要

报文摘要
  用于差错控制的报文检验是根据冗余位检查报文时候受到信道干扰的影响,与之类似的报文摘要方案是计算密码检查和,即固定长度的认证码,附加在消息后面发送,根据认证码检查报文是否被篡改。设M是可变长的报文,K是发送者和接收者共享的密钥,令MD=Ck(M),这就是算出的报文摘要(message digest)。由于报文摘要是原报文拽要唯一的压缩表示,代表了原来报文的特征,所以也叫数字指纹(digital fingerprint)。

  散列(Hash)算法将任意长度的二进制串映射为固定长度的二进制串,这个长度较小的二进制串称为散列值。散列值是一段数据唯一的、紧凑的表示形式。如果对一段明文只更改其中的一个字母,随后的散列变换都将产生不同的散列值。要找到散列值相同的两个不同的输入在计算上是不可能的,所以数据的散列值可以检验数据的完整性。

  通常的实现方案是对任意长的明文M进行单项散列变换,计算固定长度的比特串,作为报文摘要。 
引用:

对Hash函数h=H(M)的要求如下:
(1)可用于任意大小的数据块
(2)能产生固定大小的输出
(3)软/硬件容易实现
(4)对于任意m,找出x,满足H(x)=m,是不可计算的
(5)对于任意x,找到y≠x,使得H(x)=H(y),是不可计算的
(6)找出(x,y),使得H(x)=H(y),是不可计算的
前3项要求显而易见是实际应用和实现的需要
第4项要求就是所谓的单向性,这个条件使得攻击者不能由偷听到的m得到原来的x
第5项要求是为了防止伪造攻击,使得攻击者不能用自己制造的假消息y冒充原来的消息x
第6项要求是为了对付生日攻击的

  报文摘要可以用于加速数字签名算法,在基于密钥的数字签名中,C发给B的报文{Kb(A,Ra,t,P,Kc(A,P))}中P实际上出现了两次,可以用Kc(A,MD(P))替代Kc(A,P),则传送过程可大大加快。



报文摘要算法MD5
  使用最广的报文摘要算法是MD5,其基本思想就是用足够复杂的方法把报文比特充分“弄乱”,使得每一个输出比特都受到每一个输入比特的影响。具体的操作步骤:
(1)分组和填充:把明文报文按512位分组,最后要填充一定长度的“1000...”,使得报文长度=448(mod 512)
(2)附加:最后加上64位的报文长度字段,整个明文恰好为512的整数倍
(3)初始化:置4个32比特长的缓冲区ABCD分别为A=01234567 B=89ABCDEF C=FEDCBA98 D=76543210
(4)处理:用4个不同的基本逻辑函数(F,G,H,I)进行4轮处理,每一轮以ABCD和当前的512位的块为输入,处理后送入ABCD(128位),产生128位的报文摘要。[qupte]关于MD5的安全性
由于算法的单向性,所以要找出具有相同Hash值得两个报文是不可计算的。如果采用野蛮攻击,寻找具有给定Hash值得报文的计算复杂性为2的128次方。采用生日攻击法,寻找具有给定Hash值得报文的计算复杂性为2的64次方。从实用性考虑,MD5用32位软件可高速实现,所以有广泛应用。[/quote]



安全散列算法SHA-1
  安全散列算法(The Secure Hash Algorithm),SHA-1是修订版本,这种算法接受的输入报文小于2的64次方位,产生160位报文摘要。该算法设计的目标是使得找出一个能够匹配给定的散列值的文本实际是不可能计算的。也就是说,如果对文档A已经计算出了散列支H(A),那么很难得到一个文档B,使其散列值H(B)=H(A),尤其困难的是无法找到满足上诉条件的,而且又有指定内容的文档B。SHA算法的缺点是速度比MD5慢,但是SHA的报文摘要更长,更有利于对抗野蛮攻击。



散列式报文认证码HMAC
  散列式报文认证码(Hashed Message Authentication Code,HMAC)是利用对称密钥生成报文认证码的算法,可以提供数据完整性数据源身份认证。 
引用:

假设H是一种散列函数(例如MD5或SHA-1),H把任意长度的文本text作为输入,产生长度为L位的输出(MD5:128;SHA-1:160),并假设K是由发送方和接受方共享的报文认证密钥,长度不大于64字节,如果小于64字节,后面加0,补够64字节。还假定两个64字节的串ipad(输入串)和ipad(输出串)。

函数HMAC把K和text作为输入,产生HMACk(text)=H(K⊕opad,H(K⊕ipad,text)),作为输出:
(1)在K后面附加0,生成64字节的串
(2)对第一步产生的串与ipad按位异或
(3)把text附加在第二步产生的结果后面
(4)对第三步产生的结果应用函数H
(5)对第一步产生的串与opad按位异或
(6)把第四步产生的结果附加在第五步结果的后面
(7)对第六步产生的结果引用函数H,并输出计算结果

  HMAC的密钥长度至少为L位,更长的密钥并不能增强函数的安全性。HMAC允许把最后的输出截短到80位,这样更简单有效,但不损失安全强度。认证一个数据流的总费用接近于对这个数据流进行散列的费用,对很长的数据流更是如此。
  HMAC使用现有的散列函数H而不用修改H的代码,这样可以使用已有的H代码库,而且可以随时用一个散列函数代替另一个散列函数。HMAC-MD5已经被IETF指定为Internet安全协议IPsec的验证机制,提供数据源认证和数据完整性保护。 
引用:

HMAC的一个典型应用是用在“提问/响应(Challenge/Response)”式身份认证中,
认证流程:
(1)先由客户端向服务器发出一个认证请求
(2)服务器接到此请求后,生成一个随机数并通过网络传输给客户端(此为提问)
(3)客户端将收到的随机数提供给ePass(数字证书的存储介质),由ePass使用该随机数与存储的密钥进行HMAC-MD5运算,并得到一个结果作为证据传给服务器(此为响应)
(4)与此同时,服务器也适用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算结果和客户端传回的响应结果相同,则认为客户端是一个合法用户。

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...