当前位置:   article > 正文

应用密码学(张仕斌)第七章_hash函数的一般模型包括

hash函数的一般模型包括
  • 认证理论与技术 ----Hash函数
    • 认证与认证系统
      • 认证(Authentication)
        • 又称为鉴别,认证往往是许多应用系统中安全保护的第一道设防,也是防止主动攻击的重要技术,在现代密码学中有着非常重要作用。简单地说,认证是个过程,通过这个过程,一个实体向另外一个实体证明某种声称的属性。
      • 认证通常可分为三个子概念:
        • 消息认证(或者数据源认证)、实体认证和认证密钥建立。
          • 消息认证主要涉及验证消息的某个声称属性;
          • 实体认证更多涉及验证消息发送者声称的身份;
          • 认证密钥建立主要是致力于产生一条安全信道,用于后继的应用层的安全通信会话。
      • 一个纯认证系统的模型如下图所示
        • 纯认证模型由认证编码器、密钥源和认证译码器三部分组成。认证编码器对发送的消息产生认证码。密钥源通常预先协商,通过安全信道分配密钥。认证译码器对接收到的消息进行验证。
      • 根据产生认证消息不同方式,认证分为下面三类:
        • 消息认证:
          • 用消息的密文本身充当认证信息。
        • 消息认证码MAC(MessageAuthentication Code,MAC):
          • 由以消息和密钥作为输入的公开函数产生的认证信息。
        • 哈希值:
          • 以消息作为唯一输入的Hash函数产生的认证信息(无需密钥)。
      • 单向函数
    • Hash函数概述
      • 概述
        • HASH函数又称为哈希函数、Hash函数、杂凑函数和散列函数,在现代密码学中扮演着重要角色。
        • Hash函数是一公开函数,通常记为H或h,本章节中使用H表示Hash函数。Hash函数可以将任意长的消息m映射为较短的、固定长度的一个值,记为H(m),经常称函数值H(m)为散列值、哈希值、杂凑值、杂凑码或消息摘要、数字指纹,本章节中,函数值H(m)的值称为哈希值。
        • 从密码算法角度看,Hash函数也可以看作是一种单向密码体制,即它从一个明文到密文是不可逆映射,只有加密过程,不能解密。
        • 哈希值是消息中所有比特的函数,因此提供了一种错误检测能力,即改变消息中任何一个比特或几个比特都会使哈希值发生改变。在密码学和数据安全技术中,Hash函数是实现有效、安全可靠数字签名和认证的重要工具,是安全认证协议中的重要模块。
      • Hash函数定义
        • 消息是任意有限长度,哈希值是固定长度,Hash函数H是一公开函数,不需要密钥。Hash的概念起源于1956年,Dumey用它来解决symbol table question(符号表问题)。使得数据表的插入、删除、查询操作可以在平均常数时间完成。
      • Hash函数的一般模型
        • 消息是任意有限长度,哈希值是固定长度
        • 对于H有下面六个要求:
          • 能够接受任意长度的消息作为输入;
          • 能够生成较短的固定长度的输出;
          • 对任何消息输入都能够容易和快速地计算出哈希值;
          • 应该具有单向性,也就是说,给定H(m),恢复消息m在计算上是不可行的;
          • 应该能够抵抗弱碰撞,即给定消息m和H(m),找到另外一个消息m≠m^′,使H(m)=H(m^′)是不可能;
          • 应该能够抵抗强冲突,即可以两个有意义的消息m和m^′,使得H(m)=H(m^′)几乎是不可能的。
      • Hash函数的安全性要求
        • 单向性(抗原像):对干任意给定的消息,计算其哈希值容易.但是,对于给定的哈希值h,要找到M使得H(M)=h在计算上是不可行的.
        • 弱抗碰撞(抗二次原像):对于给定的消息M1,要发现另一个消息M2,满足H( M1)=H(M2)在计算上是不可行的.
        • 强抗碰撞:找任意一对不同的消息M1,M2 ,使H(M1)=H(M2)在计算上是不可行的.
        • 随机性.
      • MD迭代结构
        • 1979年,Merkle基于数据压缩函数f建议了一个Hash函数的一般结构如图,这是一种迭代结构的Hash函数,包括MD系列、SHA系列大多数Hash函数都使用该结构。
        • Hash函数输入消息m,并将其分为L个固定长度的分组,若最后一个数据块不满足输入分组长度要求,按照一定规则进行填充。
        • 该Hash函数重复使用一个压缩函数f。
        • 压缩函数f有两个输入,一个是前一阶段的n位输入,另外一个源于消息的b bits分组,并产生一个nbits的输出,算法开始时需要一个n bits初始变量IV,最终的输出值通过一个输出变换函数f 得到哈希值,通常b>n,故称f为压缩函数
      • Hash函数的分类
        • Hash函数的分类
          • 不带密钥的哈希函数
            • 主要用于消息完整性
          • 带密钥的哈希函数
            • 主要用于消息源认证和消息完整性
      • Hash函数的用途
        • 消息完整性检测
        • 初始化过程
          • (1)对监视网站的文件备份到监控主机上。
          • (2)对每个备份的文件生成一个结构:文件位置、文件的哈希值。
        • 监控过程
        • 监控主机对监控网站进行轮回扫描,对扫描的文件进行如下操作:
          • (1)计算文件的哈希值,并与备份的文件哈希值进行比较,如果相同,转(4)步。
          • (2)如果不同,上载备份文件替换网站现有文件,转(4)步。
          • (3)如果备份文件不存在,则删除网站上这个文件,转(4)步。
          • (4)监控程序扫描下一文件。
      • SHA系列
        • SHA-1,SHA-256,SHA-384,SHA-512
        • SHA-1,SHA-256的分组大小是512
        • SHA-384,SHA-512的分组大小是1024
        • SHA-1输出的摘要是160bit
        • SHA-256输出的摘要是256bit
        • SHA-384输出的摘要是384bit
        • SHA-512输出的摘要是512bit
    • Hash函数算法
      • NIST在1993年发布了一个哈希算法称为安全HASH算法,1995年修改,修改后的版本是SHA-1,这个版本是当前使用最广泛的哈希算法。
      • SHA-1接受输入消息的最大长度为2^64-1 bits,生成160 bits的消息摘要。
      • SHA-1算法操作首先对输入消息划分为512-bit块,若最后一个数据块不满足长度要求,按照一定规则进行填充为512-bit块。
      • 然后每个512-bit块重复使用分块处理函数,最终输出160 bits哈希值。
      • 算法案例:
        • 第一步:填充消息
          • 假设消息M的长度为lbits,在原始消息M尾部增加1个比特位"1"和k个"0" 比特位,l和k满足l+1+k≡448(mod 512)并且k 为最小的非负整数。
          • 在填充消息的末尾添加64-bit的块,该64-bit块是原始消息比特位长度变换为二进制块,如果消息长度变换为二进制块的位的个数小于64,则在左边补0,使得块的长度刚好等于64 bits
        • 被填充消息分组
          • 把填充后的整个消息按照512-bit块进行划分,假若刚好划分为N个512-bit块,依次为:M^((1)),M^((2)),⋯,M^((N))。而每个512-bit块又可由16个32-bit字组成,第i个512-bit块的第一个32-bit 字记为M_0^((i)),第二个32-bit字记为M_1^((i)),16个32-bit字依次M_0^((i)),M_1^((i)),⋯,M_15^((i))。
        • 初始化变量
          • SHA-1算法512-bit分块处理过程
        • 数据扩展
        • SHA-1 压缩函数
      • SHA算法实例
        • 对ASCII字符串"abc",运用SHA-1,求哈希值。
          • 解:
        • MD5哈希算法
          • MD5由RSA的创始人Rivest设计开发的,能接收任意长度的消息作为输入,并生成其128 bits哈希值,具体标准可以参见RFC1321。
          • MD5函数总共两组输入:512 bits 明文分块与上一组128 bits的输出块(或 IV初始变量) ,输入的128bits分别存储在四个缓存:A,B,C,D。每个分块总共四个回合,每回合计算 16步,合计 64 轮次,算法中需要加入 sin(x)非线性函数参数值.
          • MD5散列算法的具体步骤
            • 第一步:填充消息
              • 填充之后消息的长度(bit为单位)模512为448。如果数据长度正好是模512为448,增加512比特填充位,也就是说填充的个数至少1个512比特位。
              • 填充方法:第一个bit为1,其余全部为0。
              • 补零的个数d=(447-|x|) mod 512(|x|为原始消息长度值),原始消息填充之后消息可表达为X||1||0d (0d表示为d个0)。
              • 例如消息由704位二进制组成,那么在其末尾添加256位(255=(447-704) mod 512,即1个“1”后面255个“0”),消息扩展到960位(960 mod 512=448);再例如消息由448位二进制组成,那么末尾添加512位(511=(447-448) mod 512,即1个“1”后面511个“0”),消息扩展到960位(950 mod512=448)。
            • 第二步:补足长度
              • 在填充的消息的末尾添加64位的块,该64位是原始消息长度(二进制位表示)。如果长度超过64bit所能表示的数据长度的范围,则仅取最低64位,即mod 264,增加到前面填充的数据后面,使得最后的数据为512bit的整数倍。
              • 至此,已经得到一个512位的整倍数长度的新的消息。可以表示为L个512位的数据块:p0,p1..... PL-1。其长度为L´512bits。
              • 令N=L´16,则长度为N个32位的字。令M[0…N-1]表示以字为单位的消息表示。
              • 例如若原始消息长度为704位二进制组成,则长度704变换为二进制为1011000000,则需要在左边补54个0,达到64位,并把它添加到消息的末尾,其结果是最后原始消息扩充到一个1024位的消息,可以看出MD5算法中,无论原始消息多长,补足长度之后的消息扩展为至少2个分组,即扩展后消息的二进制长度至少是512的2倍。
            • 第三步:初始化变量
              • 初始化MD缓冲区。一个128位MD缓冲区用以保存中间和最终Hash函数的结果。它可以表示为4个32位的寄存器(A,B,C,D)。
              • 寄存器初始化为以下的16进制值:
              • A =67452301;B =EFCDAB89;C =98BADCFE;D =10325476
            • 第四步:数据处理
              • 处理每个消息块(512位 = 16个32位字),可分为16个字记为为W[0],W[1],……,W[15]。
              • 在MD5算法中四轮循环,每一轮访问的数据的次序有所变动。MD5每轮访问消息处理块的次序如下所示:
              • 1)第一轮16回合W[t]的访问次序为:W[0]为初始值,依次访问次序为下标k等于加1模16的值:
              • W[0],W[1],W[2],W[3],W[4],W[5],W[6],W[7],W[8],W[9],W[10],W[11],W[12],W[13],W[14], W[15];
              • 2)第二轮16回合W[t]的访问次序为:W[1]为初始值,依次访问次序为下标k等于加5模16的值:
              • W[1],W[6],W[11],W[0],W[5],W[10],W[15],W[4],W[9],W[14],W[3],W[8],W[13],W[2],W[7], W[12];
              • 3)第三轮16回合W[t]的访问次序为:W[5]为初始值,依次访问次序为下标k等于加3模16的值:
              • W[5],W[8],W[11],W[14],W[1],W[4],W[7],W[10],W[13],W[0],W[3],W[6],W[9],W[12],W[15], W[2];
              • 4)第四轮16回合W[t]的访问次序为:W[0]为初始值,依次访问次序为下标k等于加7模16的值:
              • W[0],W[7],W[14],W[5],W[12],W[3],W[10],W[1],W[8],W[15],W[6],W[13],W[4],W[11],W[2], W[9];
          • 每个512比特消息块和MD5初始变量IV作为初始输入,进入四轮循环,其逻辑如右图所示。
          • MD5压缩函数
            • 压缩函数是MD5算法的核心, 如右图所示,它就是处理一个512位分组的四次循环中每一循环的逻辑结构。每一轮包含对缓冲区ABCD的16回合操作所组成的一个序列。
      • 消息认证
        • 消息认证是一个过程,用以验证接收消息的真实性(的确是由它所声称的实体发来的)和完整性(未被篡改、插入、删除),同时还用于验证消息的顺序性和时间性(未重排、重放、延迟)。消息认证过程中检验内容应包括:
          • 证实报文的源和宿;
          • 报文内容是否曾受到偶然的或有意的篡改;
          • 报文的序号和时间先后。
        • 消息认证使接收者能识别:消息的源,内容的真伪,时间性和信宿。这种认证只在相应通信的双方之间进行,而不允许第三者进行上述认证。
        • 认证不一定是实时的,采用消息认证MAC(Messageauthentication code)对消息做认证,主要有:
          • 基于分组密码的MAC
          • 基于HASH的MAC
          • 用伪随机函数构造MAC
          • 其他构造方法。
        • 消息认证码
          • 发送方A和接收方B共享密钥K,若A向B发送消息M,则A计算利用Mac=CK (M)计算MAC值;然后将原始消息M和Mac一起发送给接收方。
          • 接收方B对收到的消息M用相同的密钥K进行相同的计算得出新的MAC值MAC’。并将接收到的MAC与其计算出的MAC’进行比较 ,若相等,则:
          • (1) 接收方可以相信消息未被修改。
          • (2) 接收方可以确信消息来自真正的发送方。
          • C是MAC函数,它利用密钥K和任意长度的消息M来生成一个固定长度的短数据块MAC。
          • MAC的安全特点
            • 接收方可以相信消息未被修改
            • 接收方可以相信消息来自真正的发送方
            • 如果消息中含有序列号,那么接收方可以相信消息顺序是正确的
            • MAC函数与加密的区别之一是,MAC算法不要求可逆性
            • MAC不能提供数字签名
        • 基于分组密码的MAC
        • 基于Hash的MAC
        • MD5-MAC算法
        • 消息认证码使用
          • 如果仅收发双方知道密钥K,且Bob计算得到的MAC与接收到的MAC一致,则这一系统就实现了以下功能:
          • (1)接收方Alice相信发送方Bob发来的消息未被篡改。
          • (2)接收方Bob相信发送方Alice不是冒充的。
          • 上述过程中只提供认证性而未提供保密性。
        • 消息认证和保密:与明文有关的认证
        • 消息认证和保密:与密文有关的认证
        • 消息认证(认证+保密)
        • 消息认证(相当于MAC)
      • 例:
      • SHA-256
        • 1.消息填充
          • 首先将比特“1”添加到消息的末尾,再添加k个零,这里k是方程 l+1+k≡448 mod 512 的最小的非负解. 然后再添加一个64比特长的块,其值等于消息M的长度l 的二进制表示.使得填充后的消息的长度为512比特的倍数.
        • 2SHA-256的初始变量
          • 这些初值由计算前8个素数的平方根的小数部分的前32位(二进制)生成
        • 3压缩函数的消息分组长度为512比特,压缩函数共64步变换.
        • 4输出散列值长度为256比特.
        • SHA-256的消息编排
          • SHA-256使用了6个逻辑函数,设x,y和z为3个32比特长的自变量,输出结果都是32比特长的字,逻辑函数定义如下:
        • SHA-256的常数
      • SHA-384和SHA-512
        • 消息填充
        • SHA-384初始连接变量
        • SHA-384和SHA-512中的函数
        • SHA-238和SHA-512的常数
        • 消息编排
        • 压缩函数
          • 把第(i-1)次迭代的输出的链接变量分别赋值给8个工作变量a、b、c、d、e、f、g和h;fort=0 to 79:计算第i个Hash值H(i):
  •  
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/891003
推荐阅读
相关标签
  

闽ICP备14008679号