基础与密码学

密码学哈希

密码学哈希是一种函数:它接收任意数据——一个词、一个文件、乃至整座图书馆——把它压缩成一串短而定长的字符,充当这份数据的数字指纹。相同的输入永远产生相同的指纹,可输入哪怕只改一个字符,输出也会被彻底打乱。可以把它想成一枚防拆的火漆封印:内容一旦被打开或改动,封印就对不上了。

有两条性质让它在安全上格外有用。其一是单向:仅凭指纹无法倒推回原始数据,所以这个函数正着算很容易,反着算却几乎不可能。其二是抗碰撞:要找到两份不同的输入、却得出同一个指纹,是不可行的。这两点合起来,意味着哈希可以充当数据那份小巧而可信的摘要——两个哈希一致,数据就相同;不一致,则必有改动。

这正是把区块链黏合在一起的胶水。每个区块都由它的哈希来概括,而每个新区块都包含前一个区块的哈希,于是整段历史被锁进一个防篡改的顺序里。哈希还让网络只需比对几串短字符、而非逐个字节,就能比较庞大的数据集——这也是从密码保存到文件校验,处处都能见到它的原因。

hash("Pay Alice 5")  -> 9f86d081...4e3a
hash("Pay Alice 6")  -> b1f3c0a7...d29c
(one digit changed -> a totally different fingerprint)

输入的微小改动会产生截然不同的哈希——篡改正是这样被发现的。

比特币使用一种名为 SHA-256 的哈希函数;这个名字指的是无论输入多大,它总会产生 256 位(约 64 个字符)的指纹。

又称
hash function哈希散列雜湊