在学习区块链之前,我们需要先了解一些密码学的基础概念。这些概念是区块链技术的基石,理解它们将帮助你更好地理解后续章节的内容。
哈希函数是区块链技术中最重要的密码学工具之一。它可以将任意长度的输入数据转换为固定长度的输出,这个输出称为哈希值(Hash Value)或摘要(Digest)。
一个合格的密码学哈希函数应该具备以下特性:
比特币使用的是 SHA-256 哈希函数(Secure Hash Algorithm 256-bit),它会产生256位(32字节)的哈希值。
输入: "Hello, World!"
SHA-256输出: a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e
输入: "Hello, World?" (仅仅改变一个标点符号)
SHA-256输出: 6e9e59fc677d2d8f75d5fd5d5a1b1e8e01c9a9f5d5c0e3d7f9a6e9e59fc677d2
可以看到,输入只改变了一个字符,输出却完全不同,这就是"雪崩效应"。
为什么哈希值不可逆? 哈希函数是一个"多对一"的映射,无数个不同的输入可能对应同一个输出(虽然在实践中很难找到)。就像你无法从一个人的年龄反推出他的名字一样,因为很多人可能是同一个年龄。而且,哈希函数在计算过程中会丢失原始信息,就像把一幅画磨成粉末,你无法从粉末还原出原来的画。
公钥密码学,也称为非对称加密,是区块链中另一个核心概念。它使用一对密钥:公钥和私钥。
在比特币和以太坊等区块链中,公钥密码学主要用于:
比特币和以太坊使用的是椭圆曲线数字签名算法(ECDSA),这是一种基于椭圆曲线密码学的公钥密码系统。
相比传统的 RSA 算法,椭圆曲线密码学在提供相同安全级别的情况下,可以使用更短的密钥,从而节省存储空间和计算资源。
比特币使用的椭圆曲线是 secp256k1:
数字签名是公钥密码学的一个重要应用,它相当于现实世界中的手写签名,用来证明某个消息确实是由私钥持有者创建的。
签名过程:
验证过程:
当你发起一笔比特币交易时:
交易数据 = {
from: "发送者地址",
to: "接收者地址",
amount: "1 BTC"
}
步骤 1: 对交易数据进行哈希
交易哈希 = SHA256(交易数据)
步骤 2: 用私钥对哈希进行签名
数字签名 = Sign(交易哈希, 私钥)
步骤 3: 广播交易和签名
广播内容 = {交易数据, 数字签名, 公钥}
网络中的节点收到后:
地址(Address) 区块链地址类似于银行账号,是用来接收和发送数字资产的标识符。地址通常从公钥按某种变换计算得出。只有拥有私钥的人才能使用地址中的资产
默克尔树,也称为哈希树,是一种树形数据结构,用于高效、安全地验证大规模数据的完整性。
默克尔树是一棵二叉树,其特点是:
默克尔根
/ \
Hash(A+B) Hash(C+D)
/ \ / \
Hash(A) Hash(B) Hash(C) Hash(D)
| | | |
交易A 交易B 交易C 交易D
假设一个区块包含1000笔交易,要验证某笔交易是否在区块中:
传统方式:需要下载并检查所有1000笔交易 使用默克尔树:只需要大约 log₂(1000) ≈ 10 个哈希值
这使得轻量级客户端(如手机钱包)可以在不下载完整区块链的情况下验证交易。
区块链是由区块通过哈希值链接形成的链式数据结构:
创世区块 -> 区块1 -> 区块2 -> 区块3 -> ... -> 最新区块
每个区块由区块体和区块头组成,而区块头通常会包含所有交易的默克尔树根哈希。
本文介绍了区块链技术的相关的密码学基础概念:
这些概念是理解比特币、以太坊等区块链系统的基础。在接下来的章节中,我们将看到这些概念如何在实际的区块链系统中应用。
如果你想更深入地了解这些密码学概念,可以参考: