RT
举报· 62 次点击
登录 注册 站外分享
5 条回复  
duzhuo 小成 2024-9-30 00:11:46
@restkhz 就是你知道 h(a)和 b ,但是不知道 a 是什么。这种情况下你依旧可以直接用 h(a)和 b 构造出 h(a+b)。比看 wiki 懂得快,感谢
restkhz 小成 2024-9-29 23:50:36
有区别。而且,使用 SHA1 就是在往枪口上撞。
MD5 和 SHA1 都存在比较容易利用的长度扩展攻击。楼上已经讲过。
就是你知道 h(a)和 b ,但是不知道 a 是什么。这种情况下你依旧可以直接用 h(a)和 b 构造出 h(a+b)。
这些会有长度扩展攻击的 hash 算法你可以理解为,在计算时是一块一块处理的,会把之前一块 hash 结果拿过来带到下一轮用才这样。

所以
如果你是 sha1(key+msg)的话,你可以不理会 key ,随意在 msg 末尾加 msg2 得到 sha1(key+msg+msg2)。
就像黑绝改宇智波家族石碑一样。

你说,那我反过来,我把 key 放后面呢?

那攻击者需要构造一个 msg2 能碰撞 msg 。sha1(msg2)=sha1(msg)
服务器那边 sha1(msg2+key)计算出来的结果应该和 sha1(msg+key)一样。

当然也有人干脆 sha1(key+msg+key)。据说也不好。我没研究过了。

HMAC 就是为了应对 MAC 时避免 hash 算法缺陷的东西。
所以用 HMAC 吧。
FengMubai 小成 2024-9-29 23:45:04
1 楼+2 楼是完整答案
liuidetmks 小成 2024-9-29 23:20:16
不只是 sha1 ,sha256 也有这个问题
建议搜索下扩展长度攻击。

知道 sha256 ,就知道内部状态。
MFWT 小成 2024-9-29 22:18:40
看到网上有一个说法是:
对于 MD5 和 SHA1 之类的『已过时』算法,HMAC 构造依然可以保证攻击者在不知道密钥的情况下无法计算结果,而 SHA1(签名明文后面拼接密钥),攻击者仍然可以计算 SHA1(随机内容) 来找到碰撞
返回顶部