比特币诞生于2009年,到现在已经走过了十多年。很多人知道区块链是"分布式账本",也知道它"不可篡改",但很少有人真正理解这些特性背后的密码学原理。这篇文章就来聊聊,区块链到底是怎么用加密技术把自己变成一个可信系统的。
一切从哈希说起
区块链最基础的数据结构叫做"哈希指针链"。简单来说,每个区块都包含两部分内容:一个是这个区块自己的交易数据,另一个是前一个区块的哈希值。
这里就要用到哈希函数了。区块链普遍采用SHA-256作为哈希算法——也就是我们网站上的 SHA-256哈希工具 所使用的算法。任意长度的输入,经过SHA-256运算后,都会得到一个固定长度(256位,也就是64个十六进制字符)的输出。
关键特性有三个:第一,给定输入能算出固定输出,但反过来从输出推输入是不可能的(单向性)。第二,哪怕输入只改了一个字,输出的哈希值也会完全不同(雪崩效应)。第三,找到两个不同输入产生相同输出的概率,在计算上可以认为是零(碰撞阻力)。
正是因为这三个特性,篡改区块链中的历史区块变得极其困难。要改第N个区块的内容?它的哈希就变了。第N+1个区块里存的是第N个区块的哈希,所以第N+1也得改。以此类推,越往前改越难,因为要重新算的哈希越来越多。
Merkle树:高效验证每一笔交易
一个区块里往往有上千笔交易。如果直接把所有交易数据拼在一起算哈希,验证某笔交易是否存在就要重新算一遍整个区块的哈希,效率太低。
Merkle树就是来解决这个问题的。我们把交易两两配对,分别算哈希,然后再把这些哈希两两配对算上一级哈希……直到最后只剩一个根哈希(叫做Merkle Root)。
这样一来,验证某笔交易只需要提供几个中间哈希值就够了,不需要下载整个区块的所有交易数据。轻钱包(SPV钱包)就是靠这个原理工作的。
工作量证明:谁有发言权?
区块链是分布式的,全球可能有上万台计算机在运行同一个节点。那问题来了:谁有权把新区块写到链上?答案就是工作量证明(Proof of Work,简称PoW)。
矿工要做的事情其实很傻:不断改变一个随机数(叫做nonce),然后算区块头的哈希值,直到这个哈希值小于某个目标值为止。目标值越小,符合条件的哈希就越稀有,找到它需要的计算量就越大。
这就好比掷骰子。要掷出小于3的点不难,但要是要求连续掷出50个2,那需要的次数就海了去了。整个比特币网络的算力,大概相当于每秒掷10^20次骰子。
当某个矿工找到了符合条件的哈希,他就向全网广播新区块。其他矿工验证区块合法后,就会放弃自己正在挖的区块,转而在新区块后面继续挖。这就是所谓的"最长链原则"——算力最强的链,最终会胜出。
从PoW到PoS:以太坊的新尝试
工作量证明的能耗问题一直被人诟病。2022年以太坊完成了从PoW到权益证明(Proof of Stake,PoS)的转型,不再靠算力竞争来产生区块。
PoS的逻辑是:持币即挖矿。你把币抵押进去成为验证者,系统根据你抵押的数量和时长来分配出块权。作恶的验证者会被扣除抵押的币作为惩罚。
从密码学角度看,PoS依赖的是"经济博弈"而非纯算力。虽然它不依赖哈希的硬计算,但仍然需要签名来验证区块(用的是椭圆曲线签名),以及各种共识协议来保证多个验证者就新区块达成一致。
公钥、私钥和数字签名
说了这么多共识机制,别忘了区块链里的账户系统也是基于密码学的。每个用户有一对密钥:公钥和私钥。私钥用来签名交易,公钥用来验证。
比特币用的是ECDSA(椭圆曲线数字签名算法),以太坊用的是同样的原理。签名保证了:只有持有私钥的人才能发起从这个地址转出资产的操作,而任何人都可以用公钥验证这个签名的真伪。
所以如果有人问你:我的私钥丢了怎么办?答案是:谁也帮不了你。在去中心化的系统里,没有"找回密码"这个功能。私钥 = 资产,丢了就是永久丢失。
量子计算机会威胁区块链吗?
这个问题很多人关心。答案是:短期无忧,长期警惕。
SHA-256和ECDSA都面临量子计算的威胁,但程度不同。SHA-256面对Grover算法的量子加速,需要的量子比特数非常大,目前的量子计算机远远达不到。而ECDSA(椭圆曲线签名)更脆弱——Shor算法在理论上可以在有足够量子比特的情况下被破解,私钥可以被计算出来。
以太坊等主流区块链已经在研究"后量子签名"方案,比如基于格(lattice)的签名算法。这个方向叫做"后量子密码学",有兴趣可以看看我们的 后量子密码学文章。
总结
区块链的加密技术栈其实很清晰:最底层是哈希函数(SHA-256)构建的哈希指针链,保证数据不可篡改;上面是Merkle树提供的高效交易验证;再上面是共识机制(PoW/PoS)决定谁有记账权;最后是公钥密码学(ECDSA等)保证每笔交易只能用私钥签名。
搞清楚这些,你就明白为什么说"区块链的本质是密码学"了。理解了密码学原理,区块链就不只是"币"那么简单——它是一个用数学和博弈论构建信任的分布式系统。