1. 起源
工作量证明(Proof Of Work,简称POW),简单理解就是一份证明,用来确认你做过一定量的工作。
通过对工作的结果进行认证来证明完成了相应的工作量。
哈希现金是一种工作量证明机制,它是亚当·贝克(Adam Back)在1997年发明的,用于抵抗邮件的拒绝服务攻击及垃圾邮件网关滥用。
在比特币之前,哈希现金被用于垃圾邮件的过滤,也被微软用于hotmail/exchange/outlook等产品中(微软使用一种与哈希现金不兼容的格式并将之命名为电子邮戳)。
哈希现金也被哈尔·芬尼以可重复使用的工作量证明(RPOW)的形式用于一种比特币之前的加密货币实验中。
2. 哈希函数
哈希函数(Hash Function),也称为散列函数,给定一个输入x,它会算出相应的输出H(x)。哈希函数的主要特征是:
1)输入x可以是任意长度的字符串;
2)输出结果即H(x)的长度是固定的;
3)计算H(x)的过程是高效的(对于长度为n的字符串x,计算出H(x)的时间复杂度应为O(n));
而对于比特币这种加密系统所使用的哈希函数,它需要另外具备以下的性质:
1)免碰撞,即不会出现输入x≠y,但是H(x)=H(y)
其实这个特点在理论上并不成立,比如,比特币使用的SHA256算法,会有2^256种输出,如果我们进行2^256+1次输入,那么必然会产生一次碰撞;甚至从概率的角度看,进行2^130次输入就会有99%的可能发生一次碰撞。
不过我们可以计算一下,假设一台计算机以每秒10000次的速度进行哈希运算,要经过10^27年才能完成2^128次哈希!甚至可以这么说,即便是人类制造的所有计算机自宇宙诞生开始一直运算到今天,发现碰撞的几率也是极其小的。
2)隐匿性,也就是说,对于一个给定的输出结果H(x),想要逆推出输入x,在计算上是不可能的。
3)不存在比穷举更好的方法,可以使哈希结果H(x)落在特定的范围。
以上特点是比特币的工作量证明系统可以正常运行的基石。
3. 工作量证明的基本原理
工作量证明系统主要特征是客户端需要做一定难度的工作得出一个结果,验证方却很容易通过结果来检查出客户端是不是做了相应的工作。这种方案的一个核心特征是不对称性:工作对于请求方是适中的,对于验证方则是易于验证的。它与验证码不同,验证码的设计出发点是易于被人类解决而不易被计算机解决。
举个例子,给定的一个基本的字符串"Hello, world!",我们给出的工作量要求是,可以在这个字符串后面添加一个叫做nonce的整数值,对变更后(添加nonce)的字符串进行SHA256哈希运算,如果得到的哈希结果(以16进制的形式表示)是以"0000"开头的,则验证通过。为了达到这个工作量证明的目标。我们需要不停的递增nonce值,对得到的新字符串进行SHA256哈希运算。按照这个规则,我们需要经过4251次计算才能找到恰好前4位为0的哈希散列。