发布于2022年10月15日3年前 密码学Hash函数 Hash函数将可变长度的数据块 M M M作为输入,产生固定长度的Hash值 h = H a s h ( M ) h=Hash(M) h=Hash(M) 目标 输出的结果均匀分布且看起来随机 对于消息某一位或几位的改变极大可能改变Hash值 安全性 单向性 对于指定的Hash值找到对应的数据块不可行 抗碰撞性 找到不同数据块对应相同的Hash不可行 Hash函数用于确定数据是否被篡改,即保证完整性 Hash的应用 消息认证 消息认证是用来验证消息完整性的一种机制或服务。 消息认证确保收到的数据确实和发送时一样(无修改、插入、删除、重放)。要求消息认证机制确保发送方声称的身份真实有效。 Hash运算的结果必须安全传输。Hash值不能够轻易修改。 (a)提供保密性,完整性和认证性 (b)提供完整性和认证性 由Hash抗碰撞性保证安全 (c)提供完整性和认证性 添加双方商定的秘密值 s s s 由Hash单向性保证安全 (d)提供保密性,完整性和认证性 消息认证使用消息认证码MAC实现,即带密钥的Hash 数字签名 需求与安全性 安全性需求 输入长度可变 输出长度不变 效率 抗原像攻击(单向性) 抗第二原像攻击(抗弱碰撞性) 对于给定 x x x有 h = H a s h ( x ) h=Hash(x) h=Hash(x),找到 y y y满足 h = H a s h ( y ) h=Hash(y) h=Hash(y)不可行 抗碰撞攻击(抗强碰撞性) 找到 x , y x,y x,y使 H a s h ( x ) = H a s h ( y ) Hash(x)=Hash(y) Hash(x)=Hash(y)不可行 伪随机性 穷举攻击 原像攻击和第二原像攻击 第一类生日攻击 对于给定 x x x有 h = H a s h ( x ) h=Hash(x) h=Hash(x),找到 y y y满足 h = H a s h ( y ) h=Hash(y) h=Hash(y) 代价 2 m − 1 2^{m-1} 2m−1 第二类生日攻击 找到 x , y x,y x,y使 H a s h ( x ) = H a s h ( y ) Hash(x)=Hash(y) Hash(x)=Hash(y) 代价 2 m / 2 2^{m/2} 2m/2 攻击者产生真消息集合{ x , x ′ . . . x,x'... x,x′...},假消息集合{ y , y ′ . . . y,y'... y,y′...} 在两个集合中寻找碰撞 H a s h ( x i ) = H a s h ( y j ) Hash(x_i)=Hash(y_j) Hash(xi)=Hash(yj) 将 x i x_i xi发送给发送方进行签名,叫消息替换为 y j y_j yj发送给接收方,则可以通过验证 一般认为160位Hash值是安全的 密码分析 典型的Hash结构 预处理(填充) 迭代 输出变换 安全的Hash算法 MD系列 填充 l e n g t h = 448 m o d 512 length=448\mod512 length=448mod512 附加消息长度 初始化MD缓冲区 128位缓冲区 以512bit的分组为单位处理消息 输出 Hash值中的每一个比特是所有输入比特的函数 SHA系列 SHA-1:160bit SHA-2 SHA-256:256bit SHA-384:384bit SHA-512:512bit SHA-1 填充 l e n g t h = 448 m o d 512 length=448\mod512 length=448mod512 附加消息长度 初始化缓冲区 160位缓冲区 以512bit的分组为单位处理消息 迭代80轮 输出 SHA-3 海绵结构,输入输出长度可变
创建帐户或登录后发表意见