hash - 在实践中忽略 SHA 冲突的可能性是否安全?

标签 hash sha

假设我们有十亿个独特的图像,每个图像一兆字节。 我们计算每个文件内容的 SHA-256 哈希值。 碰撞的可能性取决于:

  • 文件数量
  • 单个文件的大小

假设这种可能性为零,我们可以在多大程度上忽略这种可能性?

最佳答案

通常的答案是这样的:一颗流氓小行星在下一秒内撞击地球、摧毁我们所知的文明并杀死数十亿人的可能性有多大?可以说,任何低于这个概率的不幸事件实际上都不是很重要。

如果我们有一个输出大小为 n 的“完美”散列函数,并且有 p 条消息要散列(单个消息长度并不重要),那么概率为碰撞大约为 p2/2n+1(这是对“小”p 有效的近似值>,即远小于2n/2)。例如,对于 SHA-256 (n=256) 和 10 亿条消息 (p=109),则概率约为 >4.3*10-60

平均每 3000 万年就会发生一次大规模杀人太空岩石。这导致下一秒发生此类事件的概率约为 10-15。这比 SHA-256 碰撞的可能性高出 45 个数量级。简而言之,如果您发现 SHA-256 冲突很可怕,那么您的优先级就错了。

在安全设置中,攻击者可以选择要进行哈希处理的消息,那么攻击者可能会使用超过十亿条消息;然而,你会发现攻击者的成功概率仍然微乎其微。这就是使用具有 256 位输出的哈希函数的全部意义:这样就可以忽略冲突的风险。

当然,以上所有内容都假设 SHA-256 是一个“完美”的哈希函数,这还远未得到证明。尽管如此,SHA-256 似乎相当强大。

关于hash - 在实践中忽略 SHA 冲突的可能性是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4014090/

相关文章:

algorithm - SQL查询的校验和算法?

从字符串到 long int 的转换为不同的字符串返回相同的值

ruby - 如何使用 Ruby 中的变量访问符号哈希键

firefox - 抑制 Firefox/Firebug SHA-1 警告

python - 哈希字符串大小

java - 如何并行计算SHA?

database - 根据数据签名对数据进行分类

c# - 经典的 asp 使用 capicom 进行 md5 哈希-结果不同于 .net System.Security.Cryptography

ruby - 将两个散列与一个公共(public) key 结合起来

objective-c - 对于 objective-c 中的相同输入,每次都会生成不同的 HMac 摘要