密码学哈希函数是一种数学公式,它将一段信息(例如文本、文件或密码)转换为固定长度的短“指纹”。这种指纹被称为哈希值(hash value)。
哈希值通常表现为一段长长的数字和字母序列。例如,将单词“Hello”输入 SHA-256 哈希函数(比特币广泛使用的知名哈希函数),会得到:
185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
无论你重复多少次、在哪台计算机上执行,只要输入是“Hello”,哈希值就始终完全相同。因此,哈希与特定信息绑定。这使其成为验证数据是否被篡改的可靠方式。
哈希函数的应用
哈希值常用于数据、通信和系统的数字安全。你会在以下场景中遇到它们:
- 密码存储:系统不存储明文密码,而是只存储哈希值。
- 完整性校验:下载或更新软件时,开发者会提供哈希值,用户可验证文件是否被修改。
- 数字签名和证书:哈希函数确保已签名的文档无法被 unnoticed 地篡改。
- 区块链:每笔交易和每个区块都通过哈希进行保护,确保链的不可篡改性。
哈希函数的特性
哈希函数具有以下重要特性:
相同输入,相同输出: 输入相同的数据时,始终得到完全相同的哈希。这是因为哈希函数始终执行相同的计算。以密码为例,系统只存储密码的哈希值。当你稍后再次尝试登录时,系统会检查新计算出的哈希是否与存储的哈希完全匹配。只有匹配时才能登录。
不可逆: 哈希无法还原回原始输入。这意味着仅看到哈希值的人无法重构原始数据。这使其非常适合区块链。区块链中的每个区块都包含一个唯一哈希(有时是多个哈希)和存储在其中的交易。它还包含前一个区块的哈希。如果有人试图通过更改一个数字或字母来篡改交易,哈希会立即改变。由于这个哈希也存储在下一个区块中,整个链都会改变。这会立即被验证者或矿工检测到。此外,攻击者必须重新计算并重新验证所有后续区块才能成功,这在实践中几乎不可能。因此,操纵是不可能的,从而保证了区块链的完整性和不可篡改性。
对微小变化敏感: 即使只改变一个字母或一个比特,哈希也会看起来完全不同。这使得无法根据哈希值判断两个文本的相似程度。
示例: “World” 的哈希与 “Worlt” 完全不同,尽管这两个词非常相似。
避免碰撞: 碰撞是指两个不同的输入产生相同的哈希值。这在理论上是可能的,但在安全的哈希函数中实际上是不可能的。
示例: 使用 SHA-256,要偶然找到两个相同的哈希,需要花费数十亿年的时间才能生成足够多的哈希。较旧的变体如 MD5 和 SHA-1 过去曾出现过此问题,因此如今已不再使用。
哈希函数是如何工作的?
哈希函数执行计算的过程称为哈希(hashing)。
哈希函数是执行计算的算法,而哈希是应用该函数于数据以产生哈希值的过程。
哈希在技术上的工作原理如下:
- 输入处理 数据(文本、文件、密码等)被分成固定大小的块。 示例: 假设你输入文本“Hello”。它被分成例如 512 比特的块。由于“Hello”远短于此,会添加填充数据以使其整齐对齐。
- 数学变换 每个块会经历一系列操作,如比特移位、置换和模加法。 示例: 比特被移位并组合,使原始文本变得无法识别。即使是像“Hello”这样简单的字符串,也会得到一长串数字和字母,例如: 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
-
合并(压缩或海绵结构) 结果被合并到内部状态——一种临时内存,用于存储中间计算,直到形成最终哈希值。
- 在较旧的算法如 SHA-2 中,这是通过压缩函数逐块完成的。
- 在更现代的算法如 SHA-3 中,则通过“海绵构造”(sponge construction)工作:输入先被“吸收”,然后哈希被“挤出”。 示例: 无论你输入一条短消息还是 1 GB 的文件,结果始终是固定长度的单一哈希,例如 256 比特。
-
输出 经过最终操作后,得到固定长度的哈希值。这就是输入的数字指纹。 示例:
- “Hello” → 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
- “Hello!”(带感叹号) → 334d74c95ed3ceec833219cd94ef7a8320b9c9d98c14b622d0535fbe7bb3f3a4
什么是雪崩效应?
雪崩效应确保无法从一个哈希推导出另一个哈希,因为输入的微小差异会导致完全不同的哈希值。即使输入看起来非常相似,结果也是一串完全不同的数字和字母。这使得无法从哈希推断出原始数据是什么样子,也无法判断两个输入的相似程度。

存在哪些哈希函数?
多年来,已经开发或改进了多种密码学哈希函数。知名哈希函数包括:
MD5 开发于 1990 年代,是早期 MD 算法的继承者。该算法产生 128 位哈希,曾长期用于文件验证和数字证书。MD5 现在被认为不安全,因为自 2004 年以来已出现不同输入产生相同哈希值的情况(即碰撞)。因此,MD5 现在仅用于简单应用,不再用于安全场景。
SHA-1 SHA-1 长期是数字签名和 SSL 证书的标准。它是一种产生 160 位哈希的算法。2017 年,Google 和阿姆斯特丹 CWI 研究所演示了一次碰撞:他们创建了两个具有完全相同 SHA-1 哈希的不同 PDF 文件。这证明了实际伪造哈希是可能的。从那时起,SHA-1 被认为在密码学上已被破解且不安全。主要浏览器和证书颁发机构已不再支持它。
SHA-2(SHA-224、SHA-256、SHA-384、SHA-512) SHA-1 的继承者是 SHA-2。该哈希算法使用 512 或 1024 比特的块,并产生 224、256、384 或 512 比特的输出。著名的 SHA-2 系统是 SHA-256,它用于保护比特币区块链。SHA-512 在 64 位系统上更高效。迄今为止,尚未发现威胁 SHA-2 安全的成功攻击,因此它仍是使用最广泛的密码学哈希函数之一。
SHA-3(Keccak) Keccak 算法由 Guido Bertoni、Joan Daemen、Michaël Peeters 和 Gilles Van Assche 于 2007 年开发,2015 年被 NIST 采用为新哈希标准,命名为 SHA-3。它作为 SHA-2 的备选引入,以防未来在 SHA-2 中发现弱点。SHA-3 目前在实践中使用不广泛,因为 SHA-2 仍然安全,在硬件中得到广泛支持,并深度集成到 TLS 和 SSL 证书等协议中。
哈希函数在加密货币和区块链中的应用
哈希函数在区块链中发挥着关键作用。哈希用于保护交易、链接区块,并且是区块链通过挖矿验证交易的核心。使用工作量证明(Proof of Work)共识机制的区块链依赖计算能力来解决哈希难题。
一些流行项目的示例:
- Bitcoin → SHA-256(用于挖矿和区块哈希)
- Litecoin → scrypt(比 SHA-256 更快且对 ASIC 不太敏感)
- Zcash → Equihash(内存密集型,旨在实现更公平的挖矿)
- Dogecoin → scrypt(与 Litecoin 相同算法,支持合并挖矿)
- Ripple(XRP Ledger) → SHA-512/256(SHA-512 的缩短变体)
- Algorand → SHA-512/256(用于密钥生成和数字签名)

结语
密码学哈希函数是数字世界的重要基石。它们提供了一种可靠的方式来保护数据、确保完整性,并支持区块链等复杂系统。虽然 MD5 和 SHA-1 等旧算法因已证实的漏洞而不再安全,但 SHA-2 和 SHA-3 等现代变体仍然稳健,是当前应用的关键。
哈希函数的力量在于其简单性和有效性:单向函数将输入的微小差异转化为完全不同的输出,且无法恢复原始数据。这不仅使它们对密码安全和数字签名至关重要,也对加密货币和更广泛互联网的运作至关重要。
未来,哈希函数将继续在现有应用以及区块链、数字安全和密码学的新创新中发挥关键作用。
本文链接地址:https://www.wwsww.cn/jishu/39764.html
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。



