开发者工具 · SHA 哈希计算器
雪崩效应:为什么一个更改的字符会重写 SHA 哈希值
· 工作原理
sha-256 密码学 安全 验证
更改一个字母,大约一半的输出位翻转。这篇文章解释了雪崩特性、为什么它对于篡改检测至关重要,以及 SHA-2 的回合如何实现它。
期望哈希值稍微改变——大多数人带来的直觉以及为什么设计故意打破它
大多数人期望相似的输入产生相似的输出。更改文件中的一个字符,摘要应该会略有变化。相反,加密哈希的设计目的恰恰相反:输入中的一位变化应该会翻转大约一半的输出位,这是不可预测的。这种特性被称为雪崩效应,它是有意而为之的。该设计有一个特定的目的:篡改检测。
雪崩效应是“几乎匹配”在哈希世界中不是一个概念的原因。哈希值完全匹配,或者不匹配。不存在“足够接近”。此属性使散列对于完整性检查和内容寻址非常有用,并且使弱散列算法无法用于安全目的。
雪崩意味着广泛的输出扩散;本文没有提出无来源的精确概率主张
形式上,雪崩效应意味着对于相差一位的两个输入,输出摘要应相差大约 50% 的位。对于 SHA-256(输出的 256 bits),更改一个输入位应大致翻转 128 输出位。效果并不确切;它是一个统计属性。但它很强大:在实践中,输入的每一位都与输出的每一位彻底混合。
为什么大约一半?因为真正的随机输出与另一个随机输出平均相差恰好一半(根据鸽巢原理和基本统计)。一个好的哈希函数近似于随机性;它产生的输出似乎没有可辨别的模式。平均翻转一半的位是随机性的标志。如果哈希仅翻转 10% 的位,攻击者就可以找到模式并利用它们。
为什么篡改检测需要它 - 对文档的小编辑不得产生快速浏览即可接受的几乎相同的哈希值
篡改检测依赖于雪崩。如果您下载文件并计算其 SHA-256,则预期摘要为 ba7816...(作为示例)。攻击者通过更改一个字节来修改文件。新的摘要从 ba7816... 更改为 3d4e92...(完全不同)。当您根据预期摘要验证文件时,会立即发现完全不匹配。没有任何误解的余地:文件已被篡改。
如果没有雪崩,攻击者可以更改一个字节,并且摘要可能只会稍微移动到 ba7817...(一个十六进制数字不同)。随意比较可能会忽略其中的差异。攻击者甚至可以搜索生成以 ba78 开头的摘要的输入,声称该文件是真实的。 Avalanche 使得这一过程变得异常昂贵:要找到摘要以相同的四个十六进制数字开头的两个输入,需要比设计允许的更多工作。
轮次分布如何变化——旋转、加法和非线性函数对整个状态产生一位影响
SHA-256 中的回合(以及 SHA-512 中的回合)旨在传播更改。每轮使用非线性函数(选择、多数)和旋转来混合数据。输入中的一位变化会进入消息调度并在各轮中传播。旋转会改变位的位置。非线性函数隐藏了位的影响:在选择操作中更改控制位可以翻转任何输出位,具体取决于所选择的数据。
初始哈希常量、消息调度常量、轮换量和轮数均被选择为最大化雪崩效应。这些数字不是任意的;它们来自 SHA-2 规范,并已被广泛地进行了密码分析。对常量或轮数的任何更改都会产生不同的算法(可能是较弱的算法)。
工作示例 — 对两个相差一个字符的输入进行哈希处理并逐位比较摘要
测试雪崩很简单。对输入 abc 进行哈希处理并记下摘要。然后散列 abc 后跟一个空格,或者用其他字符替换一个字符:abd。比较十六进制输出。对于 SHA-256,大约一半的 64 十六进制数字会有所不同。数一下他们。 ToolAcre 帖子中的测试向量:abc 生成 ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad。空字符串生成 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855。这些摘要没有共同的十六进制数字。
在 ToolAcre 计算器上尝试使用任何输入。散列一句话。然后更改一个字母并再次散列。计算不同的十六进制数字。您会发现大约一半(在大多数情况下,64 中的 32)有所不同。这就是雪崩效应的作用。这是算法设计的特性,而不是巧合。
Avalanche 不提供相似性搜索或本身量化碰撞阻力
Avalanche 不会创建相似性搜索或近似匹配。如果你有一个摘要 ba7816...并且你想找到一个类似的摘要,你没有捷径。您必须猜测或暴力破解候选输入,对每个输入进行哈希处理,并检查是否完全匹配。雪崩效应使得每个猜测都同样可能产生相似或完全不同的输出。一些哈希算法(称为局部敏感哈希)旨在保留相似性;它们对于近乎重复的检测和聚类很有用,但它们不是加密哈希。
Avalanche 也不能防止确定的碰撞搜索。密码分析者仍然可以寻找产生相同摘要的两个不同输入,但搜索空间巨大。确定的碰撞搜索是与视觉扩散不同的问题。本文没有引用生日相关的数字或硬件时间表,因为它没有在这里导出。可防御的边界是雪崩本身既不能证明也不能量化碰撞阻力。
要点:没有侥幸心理 — 在 ToolAcre SHA 哈希计算器中尝试单字符实验并观察整个摘要变化
ToolAcre SHA 哈希计算器通过浏览器的 Web Crypto 实现运行 SHA 算法。您可以用它来自行验证雪崩。算法中的每一点精度都会输入到输出中,并且 Web Crypto 实现由浏览器供应商审核和维护。您将看到真实的算法在真实的输入上运行。一个字符的变化会重写整个摘要这一违反直觉的特性并不是缺陷;而是一种缺陷。这是使散列起作用的功能。
当您使用哈希进行完整性检查时,您依赖的是雪崩。当您使用它进行内容寻址(如容器映像摘要)时,您依赖于微小的变化会产生截然不同的摘要的属性。当您在数字签名中使用它时(其中签名是通过消息的哈希值计算的),雪崩效应可确保篡改消息会产生可检测到的更改。该属性是基于哈希的安全性的基础。