Python 的秘密发生碰撞的几率是多少。 compare_digest 函数?

问题描述 投票:0回答:1

我能在 Python 的标准库中找到最接近恒定时间比较的函数是 secrets.compare_digest

但这让我想知道,如果在使用它来验证秘密令牌的情况下:

  • 碰撞的可能性有多大?比如,传递与正确标记不匹配但函数返回 true 的秘密的可能性有多大? (假设传递的两个字符串长度相同)

  • 当延长秘密变得毫无意义时,秘密令牌的长度是多少,至少在减轻暴力攻击方面是这样?

python security hash cryptography
1个回答
0
投票

secrets 使用 hmac,它使用 hashopenssl。这使用 _tscmp 函数来比较事物,它使用 openssl 的 CRYPTO_memcmp。文档没有提及任何有关概率的信息。我不擅长阅读assembly code commit但它看起来除了直接比较内存之外没有做任何事情。所以我不明白为什么它会有碰撞的可能性,因为不涉及散列

至于暴力攻击的问题——假设假设我们在 2TB/s现代 gpu 的最大 gpu 带宽下进行了比较,即 1.6e+13 位,如果我们将其乘以 1 年时间,也就是大约 3.1e+7 秒,我们每年每个 gpu 得到大约 5e21 位的比较。 log2(5e21) = 72 -> 这意味着我们理论上可以在 1 年内用 gpu 破解一个 72 位密钥。 (这可能是不可能的,因为 gpus 不是为此而设计的,但 asic 可能具有这种性能)。按照 72/yr/device 的足够估计 -> 你可以简单地将设备数量或每位增加的年数加倍。

© www.soinside.com 2019 - 2024. All rights reserved.