1
MFWT 53 天前
看到网上有一个说法是:
对于 MD5 和 SHA1 之类的『已过时』算法,HMAC 构造依然可以保证攻击者在不知道密钥的情况下无法计算结果,而 SHA1(签名明文后面拼接密钥),攻击者仍然可以计算 SHA1(随机内容) 来找到碰撞 |
2
liuidetmks 53 天前 via iPhone
不只是 sha1 ,sha256 也有这个问题
建议搜索下扩展长度攻击。 知道 sha256 ,就知道内部状态。 |
3
FengMubai 53 天前
1 楼+2 楼是完整答案
|
4
restkhz 53 天前 3
有区别。而且,使用 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 吧。 |