目标
本节的目的是学习:
- 什么是哈希函数
- 哈希函数在区块链中的应用
哈希函数的历史
哈希函数的概念可以追溯到 20 世纪 50 年代,最初用于哈希表等数据结构,用于快速定位和检索数据。此后,哈希函数不断发展,旧标准被新的、更安全的标准所取代:
MD4—>MD5—>SHA0—>SHA1—>SHA2—>SHA3
目前最先进的标准是SHA-3,它基于Keccak算法,由比利时密码学家设计,并于2015年成为NIST标准。
什么是哈希函数
哈希函数,也称为散列函数,接受任意长度的输入(通常称为“消息”),并通过数学算法将其转换为固定长度的字符串,通常称为哈希值、哈希码、消息摘要或数字指纹。下图演示了使用 SHA3-256 哈希函数,无论输入是什么,输出始终是 64 个字符的十六进制字符串。

哈希函数类比
想象一下哈希函数是一台复杂的榨汁机。想象一下你有各种各样的水果和蔬菜,比如苹果、香蕉、胡萝卜、西红柿等。无论你放入的水果和蔬菜的类型和数量(输入),它们都会在机器内部被切碎和挤压(哈希),最后你会得到特定体积(哈希值)的果汁。不同组合和数量的水果和蔬菜会产生具有不同风味的果汁,仅从果汁中,你无法准确推断出所用成分的类型和数量。
哈希算法的特点
- 计算速度快:无论输入的长度如何,都可以快速计算哈希值。例如,您可以快速计算单个字符或整本书的哈希值。
- 不可逆反:在合理的时间内从哈希值推导出输入几乎是不可能的。例如,从哈希值 0x8a5e1d339fafc39350fd8cf1d7ca7982091c27f6b77f75bd4ddab3df425b4f8c ,您无法逆向工程输入 123。
- 对输入的敏感性:即使输入发生微小变化,也会导致输出发生重大变化。例如,123 和 124 的哈希值差别很大,而且看起来毫无关联。
- 抗碰撞性:很难找到两个产生相同哈希值的不同输入(即碰撞)。例如,除了 123 之外,很难找到另一个输入,导致哈希值为 0x8a5e1d339fafc39350fd8cf1d7ca7982091c27f6b77f75bd4ddab3df425b4f8c 。
- 不可预测性:无法根据输入预测输出,这就是为什么挖矿中的nonce必须从1开始并依次递增。
区块链应用
哈希函数在区块链技术中起着至关重要的作用,主要应用在以下方面:
- 确保交易数据的完整性和不变性。每笔交易都有一个唯一的哈希值,数据的任何细微变化都会导致哈希值发生剧烈变化,从而使网络参与者能够快速检测到篡改。
- 将区块连接在一起形成区块链。每个区块都包含前一个区块的哈希值,从而确保链上数据的一致性和不可逆性。
- 构建Merkle树来有效地验证数据。
- 实施工作量证明机制,通过解决计算难题来限制新区块生成的速度,从而增强区块链安全性。
此外,哈希函数与非对称加密相结合,为交易提供数字签名,确保交易的真实性。这些应用共同保障了区块链网络的安全性和可靠性。
概括
在本节中,我们学习了哈希函数的基本概念及其在区块链中的应用。
总结来说,哈希函数就是将任意长度的数据转换成固定长度字符串的方法。在区块链中,哈希函数确保每笔交易和区块都是唯一的,保障数据安全,防止篡改,是区块链基础设施中的核心工具。