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

SHA256 加两个不同的盐拼接出来的 512bit 和 SHA512 加一个盐相比哪个更安全(更抗碰撞)?我写了个脚本测试,好像算两个 SHA256 比 SHA512 还快,不知道是不是有硬件加速

  •  1
     
  •   drymonfidelia · 4 天前 · 1614 次点击
    19 条回复    2025-04-11 13:35:03 +08:00
    geelaw
        1
    geelaw  
       4 天前   ❤️ 1
    简单的答案:没有人研究过这个问题,所以“不知道”。

    复杂的答案:可以考虑各种建模的情况,此时不使用 SHA-256 和 SHA-512 的具体结构,为了明确这一点,说两个函数是 h 和 H ,且 h 的输出长度是 H 的的一半。

    如果用 AI-ROM 建模 h 和 H ,若盐足够长且两个情况里的盐长度相同,那么两个 h 和一个 H 的安全性相当。

    如果用 ROM 建模,则可以去掉盐的随机性和长度的要求,两个 h 和一个 H 的安全性也是一样的。

    如果在标准模型下考虑多项式安全性,那么已经有(精神上类似但是不同的)结果 suggest:多项式安全性无法量化增强(所谓 cannot amplify beyond negligible )。见 ePrint 2012/032 。因此如下情况是可能的,h 安全,但是用两个不同的盐,安全性没有任何提升。如果假设上述情况并且假设一个 H 比一个 h 安全,则说明如下情况是可能的,两个 h 不如一个 H 安全。同时,完全有可能一个 h 不如一个 H 强。
    lloovve
        2
    lloovve  
       4 天前 via iPhone
    看你怎么拼接,两个 265 只是计算两次 265 然后拼接,跟直接计算 512 远算量根本不一样
    hefish
        3
    hefish  
       4 天前
    我觉得 4 个 SHA128 的更安全。。。
    ZE3kr
        4
    ZE3kr  
       4 天前 via iPhone
    SHA 512 安全得多
    yinmin
        5
    yinmin  
       4 天前 via iPhone   ❤️ 5
    SHA256 加两个不同的盐的安全性 < SHA256 加 1 个盐,更远低于 SHA512 加 1 个盐

    在安全界有一个准则:不要试图去自建算法,其安全性绝大多数情况都是远低于已经过考验的标准算法
    joh
        6
    joh  
       4 天前 via Android   ❤️ 1
    加密算法不是两个 256 加起来可以顶一个 512 的。类比应该是 n 和 n²
    lovelylain
        7
    lovelylain  
       4 天前 via Android
    破解 hash 不是非要解出跟你一样的输入值,而是找出 hash 结果跟你的 hash 相同的输入值,只要时间能接受,暴力破解也是一种解法,举个极端例子,hash32 加 16 次盐与 sha512 相比,安全性能一样吗?
    hanyuwei70
        8
    hanyuwei70  
       4 天前   ❤️ 1
    看到你加盐,猜测你是想存密码。
    存密码不要用 SHA2 ,用 argon2id ;库比较老的话用 bcrypt 。
    villivateur
        9
    villivateur  
       4 天前   ❤️ 3
    如果 sha256 拼接成 512bit 比 sha512 更安全,那么 sha512 就会直接设计成两个 sha256 拼接,或者 sha512 根本就不会存在。因此肯定是 sha512 更安全。
    twinsant
        10
    twinsant  
       4 天前
    @villivateur 正解
    likelylee
        11
    likelylee  
       4 天前
    如果你是考虑合规需求,那么 SHA-256 加盐的任何用法基本都是能满足要求的,除非国密强制 SM3 。如果是海外合规相关,上边有人提到 argon2id 以及 bcrypt ,相比 SHA2 系列算法的“合规”风险更高,因为有些审核机构会指定要求 FIPS 许可算法。
    如果你只是单纯考虑安全性本身,无脑 SHA-512 就可以。首先 SHA-512 和 SHA-256 可以简单认为不是一个算法,其次 SHA-512 的算法安全强度是 256bits ,而 SHA-256 只有 128bits 。参考 SP 800-57 即可。
    mengzhuo
        12
    mengzhuo  
       4 天前
    理论上 512 更安全

    搞 crypto 库的路过,其实这两都是 SHA2 家族的,算法一样,差别就是最后是否压缩摘要。
    p.s. 跟楼上说的一样,如果要存密码,就不要用加盐的方式。
    leonshaw
        13
    leonshaw  
       4 天前 via Android
    抛开其它的,从基本的计算安全性来说算的慢更安全
    DivineRapierH
        14
    DivineRapierH  
       4 天前   ❤️ 2
    找 Gemini 分析了一下,它提到了一点:
    你用两个 SHA256 拼接,那么攻击者只要能碰撞出来两个 Hash 中的任意一个就能破解了。从这个角度看还不如只 SHA256 一次。

    如果要保存密码,推荐看一下这篇文章: https://crackstation.net/hashing-security.htm
    SHA256 的优势在于速度快,但是保存密码需要一个“慢”算法来让暴力破解几乎不可能。
    julyclyde
        15
    julyclyde  
       4 天前
    @hanyuwei70 库比较老的话应该升级库
    julyclyde
        16
    julyclyde  
       4 天前
    @DivineRapierH 相当于“semi 已知明文攻击”了
    tool2dx
        17
    tool2dx  
       4 天前
    一般来说 hash 越慢越安全,这能防止被大算力给暴力字典破解。
    seansong
        18
    seansong  
       4 天前
    SHA2 家族中,目前主流 CPU ,支持 SHA2-256 的 SHA-NI 硬件加速指令,而 SHA2-512 没有 SHA-NI 支持,只能使用 SIMD 来加速计算过程。如果你用的 sha 计算库都是足够优化的话,SHA2-256 速度确实会明显更快。从安全性角度来说,绝大部分场合,SHA2-256 安全性足够了,如果你希望更高安全性,建议可以考虑下 blake3
    12101111
        19
    12101111  
       4 天前
    印象中 TPM PCR 会使用递归 hash 的办法

    hash_{n+1} = Digest(hash_n | Hash(input_n))
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5243 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 08:26 · PVG 16:26 · LAX 01:26 · JFK 04:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.