直接 SHA1(签名明文后面拼接密钥) 和 HMAC-SHA1 安全性有区别吗?为什么?

82 天前
 drymonfidelia
1609 次点击
所在节点    信息安全
5 条回复
MFWT
82 天前
看到网上有一个说法是:
对于 MD5 和 SHA1 之类的『已过时』算法,HMAC 构造依然可以保证攻击者在不知道密钥的情况下无法计算结果,而 SHA1(签名明文后面拼接密钥),攻击者仍然可以计算 SHA1(随机内容) 来找到碰撞
liuidetmks
82 天前
不只是 sha1 ,sha256 也有这个问题
建议搜索下扩展长度攻击。

知道 sha256 ,就知道内部状态。
FengMubai
82 天前
1 楼+2 楼是完整答案
restkhz
82 天前
有区别。而且,使用 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 吧。
duzhuo
82 天前
@restkhz 就是你知道 h(a)和 b ,但是不知道 a 是什么。这种情况下你依旧可以直接用 h(a)和 b 构造出 h(a+b)。比看 wiki 懂得快,感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1076930

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX