什么是密码学哈希函数?哈希函数在加密货币和区块链中的应用

密码学哈希函数是一种数学公式,它将一段信息(例如文本、文件或密码)转换为固定长度的短“指纹”。这种指纹被称为哈希值(hash value)。

哈希值通常表现为一段长长的数字和字母序列。例如,将单词“Hello”输入 SHA-256 哈希函数(比特币广泛使用的知名哈希函数),会得到:

185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969

无论你重复多少次、在哪台计算机上执行,只要输入是“Hello”,哈希值就始终完全相同。因此,哈希与特定信息绑定。这使其成为验证数据是否被篡改的可靠方式。

哈希函数的应用

哈希值常用于数据、通信和系统的数字安全。你会在以下场景中遇到它们:

  • 密码存储:系统不存储明文密码,而是只存储哈希值。
  • 完整性校验:下载或更新软件时,开发者会提供哈希值,用户可验证文件是否被修改。
  • 数字签名和证书:哈希函数确保已签名的文档无法被 unnoticed 地篡改。
  • 区块链:每笔交易和每个区块都通过哈希进行保护,确保链的不可篡改性。

哈希函数的特性

哈希函数具有以下重要特性:

相同输入,相同输出: 输入相同的数据时,始终得到完全相同的哈希。这是因为哈希函数始终执行相同的计算。以密码为例,系统只存储密码的哈希值。当你稍后再次尝试登录时,系统会检查新计算出的哈希是否与存储的哈希完全匹配。只有匹配时才能登录。

不可逆: 哈希无法还原回原始输入。这意味着仅看到哈希值的人无法重构原始数据。这使其非常适合区块链。区块链中的每个区块都包含一个唯一哈希(有时是多个哈希)和存储在其中的交易。它还包含前一个区块的哈希。如果有人试图通过更改一个数字或字母来篡改交易,哈希会立即改变。由于这个哈希也存储在下一个区块中,整个链都会改变。这会立即被验证者或矿工检测到。此外,攻击者必须重新计算并重新验证所有后续区块才能成功,这在实践中几乎不可能。因此,操纵是不可能的,从而保证了区块链的完整性和不可篡改性。

对微小变化敏感: 即使只改变一个字母或一个比特,哈希也会看起来完全不同。这使得无法根据哈希值判断两个文本的相似程度。

示例: “World” 的哈希与 “Worlt” 完全不同,尽管这两个词非常相似。

避免碰撞: 碰撞是指两个不同的输入产生相同的哈希值。这在理论上是可能的,但在安全的哈希函数中实际上是不可能的。

示例: 使用 SHA-256,要偶然找到两个相同的哈希,需要花费数十亿年的时间才能生成足够多的哈希。较旧的变体如 MD5 和 SHA-1 过去曾出现过此问题,因此如今已不再使用。

哈希函数是如何工作的?

哈希函数执行计算的过程称为哈希(hashing)。

哈希函数是执行计算的算法,而哈希是应用该函数于数据以产生哈希值的过程。

哈希在技术上的工作原理如下:

  1. 输入处理 数据(文本、文件、密码等)被分成固定大小的块。 示例: 假设你输入文本“Hello”。它被分成例如 512 比特的块。由于“Hello”远短于此,会添加填充数据以使其整齐对齐。
  2. 数学变换 每个块会经历一系列操作,如比特移位、置换和模加法。 示例: 比特被移位并组合,使原始文本变得无法识别。即使是像“Hello”这样简单的字符串,也会得到一长串数字和字母,例如: 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
  3. 合并(压缩或海绵结构) 结果被合并到内部状态——一种临时内存,用于存储中间计算,直到形成最终哈希值。
    • 在较旧的算法如 SHA-2 中,这是通过压缩函数逐块完成的。
    • 在更现代的算法如 SHA-3 中,则通过“海绵构造”(sponge construction)工作:输入先被“吸收”,然后哈希被“挤出”。 示例: 无论你输入一条短消息还是 1 GB 的文件,结果始终是固定长度的单一哈希,例如 256 比特。
  4. 输出 经过最终操作后,得到固定长度的哈希值。这就是输入的数字指纹。 示例:
    • “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
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。