V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
drymonfidelia
V2EX  ›  信息安全

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

  •  
  •   drymonfidelia · 5 小时 44 分钟前 · 353 次点击
    5 条回复    2024-09-30 00:11:46 +08:00
    MFWT
        1
    MFWT  
       5 小时 5 分钟前
    看到网上有一个说法是:
    对于 MD5 和 SHA1 之类的『已过时』算法,HMAC 构造依然可以保证攻击者在不知道密钥的情况下无法计算结果,而 SHA1(签名明文后面拼接密钥),攻击者仍然可以计算 SHA1(随机内容) 来找到碰撞
    liuidetmks
        2
    liuidetmks  
       4 小时 3 分钟前 via iPhone
    不只是 sha1 ,sha256 也有这个问题
    建议搜索下扩展长度攻击。

    知道 sha256 ,就知道内部状态。
    FengMubai
        3
    FengMubai  
       3 小时 38 分钟前
    1 楼+2 楼是完整答案
    restkhz
        4
    restkhz  
       3 小时 33 分钟前   ❤️ 1
    有区别。而且,使用 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
        5
    duzhuo  
       3 小时 12 分钟前 via Android
    @restkhz 就是你知道 h(a)和 b ,但是不知道 a 是什么。这种情况下你依旧可以直接用 h(a)和 b 构造出 h(a+b)。比看 wiki 懂得快,感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   966 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:24 · PVG 03:24 · LAX 12:24 · JFK 15:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.