Hashcash 是一种基于 Proof of Work(工作量证明)的计算邮票系统。邮票表明有人找到了符合指定条件的结果。它本身既不是比特币,也不是可以转账的账户余额。
安娜想给帕维尔发一封邮件。多发一份副本几乎没有成本,但发送数百万封广告的人也享有同样的便利。Hashcash 加了一道小门槛:发件人的计算机先生成一枚计算邮票。支付的是时间和能源,而不是给邮局的钱。Adam Back 于 1997 年 3 月 28 日公布了自己的实现,并在 2002 年发表技术论文。早在 1992 年,Cynthia Dwork 和 Moni Naor 就研究过类似的计算邮资思路。Hashcash 属于这一系列限制网络滥用的探索。 [1] [12]
哈希是根据数据算出的固定长度的指纹。安娜的程序不断改变邮票中的试探值,重新计算指纹,直到结果开头有足够多的零比特。比特就是一个二进制数字,取值为零或一。要求 b 个零时,每次尝试成功的概率约为 2^-b,平均需要 2^b 次尝试。b = 20 时,平均是 1048576 次计算,并非必须完成的固定次数。有时很快就碰巧成功,有时要等更久。帕维尔只需计算一次哈希就能检查最终邮票,但还须核对邮票信息和接受规则。 [10] [11]
如果安娜能把一枚邮票附在一百万封邮件上,这道门槛就失去了意义。因此,邮票注明具体收件人或服务以及日期。接收方检查有效性,并记录已接受的邮票,以拒绝称为 replay 的重复使用。仅有日期,甚至把邮票绑定到邮件内容,都不能阻止同一封邮件被再次发送。Hashcash 没有全球共享的使用记录账本,这项检查由接收服务负责。所以,哈希正确不等于邮票可以再次被接受。 [11] [12]
难度由接收服务决定。每多要求一个零比特,平均工作量大致翻倍。要求太低,拦不住垃圾邮件发送者;要求太高,普通用户也会受累。因此,20 只是一个例子,并非永久的安全标准。同样的尝试次数,在旧手机和高速计算机上所需时间也不同。服务需要考虑设备性能、有效期和自身容量。Hashcash 并不能强制所有人都花费某个统一的秒数。 [10] [11]
计算工作分不清善意用户和攻击者。拥有大量计算机,或控制 botnet(由被攻陷设备组成的网络)的人,可以分摊工作,把一部分成本转嫁给别人。与此同时,普通用户的电池也在消耗。Hashcash 旨在改变攻击的成本,而不是保证垃圾邮件消失。邮票也不会加密邮件、证明发件人的真实身份或保证送达。它只是服务可以与其他防护措施结合使用的一项接受条件。 [10]
版本 1 的格式是 1:bits:date:resource:ext:rand:counter。各字段依次表示版本、声明的难度、日期、收件人或服务、扩展、随机值以及不断变化的计数器。bits 字段表示发件人声称哈希开头有多少个零比特,而不是计算机实际尝试了多少次。这些字段名属于技术格式,不能翻译替换。经典实现对整个字符串计算 SHA-1;必须是实际指纹满足条件,不能只在 bits 中填一个数字。这是在解释历史格式,并非建议新安全设计采用 SHA-1。Bitcoin 使用不同的数据格式和哈希函数。 [11] [13]
这里要找的是让指纹具有指定开头的输入。这样的输入称为 partial preimage:它的哈希满足指定部分的要求,其余部分可以是任意值。碰撞则是两份不同输入得到同一个指纹。有些历史文本使用较宽泛的 partial collision 一词,但理解工作量时必须分清两者。能找到 SHA-1 碰撞的攻击,并不会自动解决寻找指定前缀的问题。不过,这也不意味着 SHA-1 适合作为今天通用的安全选择。 [10] [11] [13]
2004 年,Hal Finney 推出了 RPOW,即 Reusable Proofs of Work。用户可以提交工作量证明,换取一个新代币;后续转移时,旧代币作废,再换成新的。所谓重复使用,并不是无限复制同一枚邮票。系统依赖装有 IBM 4758 安全模块的服务器,以及对运行程序的远程核验。这减少了对运营者的信任,却仍须依赖有关硬件和制造商的假设。RPOW 是一种实验性前身,而不是 Bitcoin 的去中心化共识。 [7] [15]
Bitcoin Whitepaper 明确引用了 Back 的 Hashcash。中本聪采用同样的成本差异:找结果需要反复尝试,其他人检查起来却很容易。在 Bitcoin 中,矿工寻找有效区块头;区块头概括一组交易,并指向前一个区块。他们使用 double SHA-256,也就是连续两次应用 SHA-256,再将结果与称为 target 的数值上限比较。这不是把一枚 SHA-1 邮件邮票放进钱包。两者共享的是原理,而不是整套系统。 [8] [14]
邮资解决的是单个请求的成本。货币还需要回答:两笔相互冲突的转账,哪一笔有效?Bitcoin 将区块连接起来,节点在有效分支中选择累计工作量最大的链。节点是验证规则的计算机,也会检查交易和允许的发行量。即使投入巨大工作量,也不能把无效交易变成有效交易。Hashcash 提供了一块重要积木;将它与其他规则结合,才有可能在没有中央管理者的情况下维护共同的货币历史。 [8] [9]
要获得更完整的理解,请将本词条与以下词条结合阅读: Proof of Work, 密码朋克, Adam Back, Bitcoin Whitepaper, Bitcoin, Hash. 反向关联还来自: 密码朋克, b-money, Bit Gold, Reusable Proofs of Work.