语言

什么是区块链哈希?

在数字技术的运行中,很少有工具像哈希函数一样重要,同时又对普通用户如此隐蔽。它们从文件验证、数字签名、数据库和身份验证系统,一直到尤其重要的区块链网络,都发挥着作用。哈希会把一定数量的信息转换为固定长度的字符串,可以看作这份数据的数学指纹。使用合适的密码学函数时,这个操作可以极快地完成,也很容易验证,而从哈希重新构造原始内容在计算上应当是不可行的。

这一特性使哈希成为确保数据完整性的关键组成部分。例如,当文件从互联网下载时,其创建者可以公布相应的哈希。接收者随后计算收到文件的哈希,并比较两个结果。如果结果一致,就有数学证据表明所检查的数据与产生参考值的数据完全相同,前提是遵循所用算法的保证和假设。哪怕文件只有一个比特发生最小变化,也应该产生完全不同的哈希。

运作方式

这一基本思想建立在一种数学函数之上:它接受大小可变的输入,并产生指定大小的输出。输入可以是一个单词、一份文档、一张照片、一笔金融交易,甚至极其庞大的数据集。相比之下,输出始终保持算法定义的长度。SHA-256 是加密货币领域最知名的算法之一,其输出为 256 位,通常表示为 64 个十六进制字符。

密码学哈希函数最重要的性质之一,是所谓的雪崩效应。输入数据发生很小的变化,就应该导致输出发生巨大且不可预测的变化。如果一个人计算一句话的哈希,然后只改变一个字母,得到的结果不应该与之前的结果相似。从实际角度来说,新哈希应该完全不同。这一性质使得攻击者很难推断应该如何操纵特定数据来得到某一个指定输出。

输入 CrabChain crabchain 哈希函数 SHA-256 7b78ce1d1aa5… 1c502247a642… 哈希值(输出)
输入只改一个字母,哈希值就完全不同(雪崩效应)。图中为真实 SHA-256 值的缩写。

然而,并非所有哈希函数都具有安全应用所需的性质。有些哈希函数主要为效率和数据分布而设计,例如某些计算机数据结构中使用的函数,它们并不提供保护敏感信息所需的密码学保证。安全应用会使用专门设计、能够抵抗不同攻击类型的算法。例如,MD5 和 SHA-1 曾经被广泛使用,但由于与碰撞有关的漏洞,如今已不再被认为适合许多密码学场景。

当两个不同的输入产生完全相同的哈希时,就发生了碰撞。由于可能的输入集合几乎可以无限大,而输出长度是有限的,碰撞在数学上不可避免。密码学哈希函数真正需要保证的,并不是碰撞绝对不可能发生,而是主动寻找碰撞应当极其困难。这一区别至关重要。系统安全依赖于让找到两个不同输入并使其产生相同结果所需的资源高到足以令攻击变得不切实际。

区块链中的哈希

哈希函数在区块链中也发挥着核心作用,因为它能够以密码学方式把记录的不同部分连接起来。每个区块都可以包含前一个区块的哈希,从而在两个区块之间建立数学关系。当新区块加入时,对前一区块的引用成为定义这个新单元的信息的一部分。如果有人随后修改旧区块中的数据,其哈希就会发生变化,而下一个区块中保存的引用将不再匹配。这种性质提供了一种高效检测历史是否被修改的方法。

在比特币中,哈希也是工作量证明过程的核心元素。矿工搜索一个值,使区块头产生的哈希满足协议规定的特定条件。由于算法的性质,不存在实际可行的方法可以直接计算出哪个输入会产生所需结果。矿工必须不断尝试不同的值,直到找到有效组合。难度会定期调整,以便尽管可用计算能力发生变化,网络产生新区块的速度仍大致保持稳定。

这一用途表明,哈希不仅用于检查完整性。它还可以作为一种机制的组成部分,使生成某些密码学证明必须付出成本。寻找有效结果需要大量工作,而网络其他参与者验证这个结果则相对容易。这种不对称性是比特币所使用安全模型的基础之一。

另一个重要应用出现在被称为默克尔树的结构中。在区块链中,一个区块中的交易可以通过连续哈希操作组织起来,直到得到一个用密码学表示整个集合的根。修改一笔交易会改变其哈希,进而影响更高层计算出来的值,最终导致根发生变化。这一过程使人们能够验证一笔交易是否属于某个集合,而不必处理每一条可用记录,这对分布式系统尤其有用。

其他用途与局限

哈希也出现在身份验证和密码存储系统中,不过这里需要强调一个重要限定。直接存储密码的哈希通常优于以明文保存密码,但如今,仅使用快速哈希函数并不是安全存储密码的合适方案。现代系统通常使用专门为此目的设计的函数,例如 Argon2、scrypt 或 bcrypt,这些函数包含使暴力破解和大规模密码测试成本更高的机制。

哈希的用途在于把复杂信息转换成紧凑且可验证的表示,而不一定需要透露其内容。这种能力使人们能够构建由多个参与者独立检查完整性的系统。在区块链中,这尤其重要,因为用户不需要完全依赖中央权威来判断某些数据是否被修改。密码学关系提供了任何能够执行协议规则的参与者都可以检查的证据。

即便如此,哈希本身并不能证明原始信息是真实的。如果有人向系统中输入虚假数据,然后正确计算其哈希,结果在数学上依然有效。哈希技术从根本上保护完整性,并为某些安全属性提供支持,但它无法保证数据在语义上的真实性,也不能确认记录内容与外部现实相符。当区块链存储来自网络外部来源的信息时,这一区别尤其重要。

总的来说,可以把哈希理解为一种数学指纹,使信息能够被高效识别和关联。它的性质允许检测变化、连接数据结构、构建密码学证明机制,以及以紧凑方式验证大量信息。在区块链中,这一功能尤为重要,因为它连接系统的不同组成部分,并有助于抵抗对历史记录的修改。

因此,理解哈希是什么,有助于理解许多现代技术所依赖安全架构中的一个关键部分。在一串看似随机的字符背后,是一个经过精心设计的数学机制,能够产生可重复的结果,对任何修改都高度敏感,同时又很难被故意操纵。哈希不仅仅是程序员或密码学专家使用的技术资源。它是让分布式系统能够验证信息、维护记录之间的引用,并建立某些完整性保证的重要组成部分之一。

参考资料