标签:Hash 函数 攻击 认证 SHA 完整性 消息 密码学
密码学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
海绵结构,输入输出长度可变
标签:Hash,函数,攻击,认证,SHA,完整性,消息,密码学 来源: https://blog.csdn.net/weixin_45743469/article/details/118369402
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。