苦读密码学引论--hash
HASH函数
hash函数就是将
即
一个好的hash函数需要满足一下属性
1.抗原像攻击
给定H,找到X,使得h(X)=H是困难的
2.抗第二原像攻击(弱抗碰撞)
给定X,找到X'使得h(X)=h(X')是困难的
3.抗碰撞攻击
找到任意两个X和X',满足h(X)=h(X')是困难的
(任何一个第二原像都不存在)
为什么抗碰撞性更强?
- 如果一个哈希函数是抗碰撞的,那么它必然也是抗第二原像的。
- 理由: 如果攻击者能对一个给定的
x
成功进行第二原像攻击(找到x'
使得H(x') = H(x)
),那么他实际上就找到了一个碰撞对(x, x')
。所以,抗碰撞失败必然导致抗第二原像失败。
- 理由: 如果攻击者能对一个给定的
- 反之则不然!一个哈希函数可以是抗第二原像的,但却不抗碰撞。
- 理由: 攻击者可能无法为某个特定的、随机的
x
找到碰撞伙伴x'
(满足抗第二原像),但他可能通过精心构造的方法找到任意一对特殊的消息y
和y'
(y
和y'
都不是那个特定的x
),使得H(y) = H(y')
(即不抗碰撞)。MD5 就是一个经典例子:虽然在实际中寻找第二原像仍然非常困难(理论上有弱点),但找到碰撞对在普通计算机上几秒内即可完成。
- 理由: 攻击者可能无法为某个特定的、随机的
4.抗长度拓展攻击
给定h(X)和X的长度|X|,找到H'和Z,使得h(X||Z)=H‘是困难得
hash函数设计
1.先进行填充,使填充后的消息长度为m的整数倍,
2.分组,分为
3.压缩,将
令
ezhash?!
这个题目同样是比较简单的一个题目,给出解题思路,代码交给读者复现
第一部分得到key
“用最合适的工具解决最合适的问题,Gurobi 解决线性优化最快,SAT 求解器解决布尔逻辑最快,Z3 处理复杂混合逻辑最灵活。”
使用z3求解器,使用一组test就能得到key
第二部分构造格求解
在这个逐字节加密的hash函数中异或是极难处理的,但是他其实只有7比特大小,所以
异或我们可以把他当作加上一个7比特的随机数,于是我们就可以写成这样的式子
1 | from lbc_toolkit import ehnp |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 infinite_blog!