比特币白皮书读书笔记
摘要 一种完全的点对点电子货币应当允许在线支付从一方直接发送到另一方,而不需要通过一个金融机构。数字签名提供了部分解决方案,但如果仍需一个可信任的第三方来防止双重支付,那就失去了电子货币的主要优点。我们提出一种使用点对点网络解决双重支付问题的方案。该网络通过将交易哈希进一条持续增长的基于哈希的工作量证明链来给交易打上时间戳,形成一条除非重做工作量证明否则不能更改的记录。最长的链不仅是被见证事件序列的证据,而且也是它本身是由最大CPU算力池产生的证据。只要多数的CPU算力被不打算联合攻击网络的节点控制,这些节点就将生成最长的链并超过攻击者。这种网络本身只需极简的架构。信息将被尽力广播,节点可以随时离开和重新加入网络,只需接受最长的工作量证明链作为它们离开时发生事件的证据。 批注(是什么/为什么/如何) 是什么:核心是提出无第三方介入的点对点电子货币方案——以哈希加密、工作量证明(PoW)构建不可篡改的交易时间戳链,以“最长链”作为交易有效性核心依据,实现去信任的价值转移。 为什么: 传统电子支付依赖金融机构(信任第三方),存在交易不可撤销、仲裁成本高、小额交易不划算等固有缺陷; 单纯数字签名仅能验证所有权,无法解决“双重支付”(同一笔货币重复使用)痛点,保留第三方则丧失电子货币去中心化核心优势; 需构建“去信任”机制,让交易有效性依赖全网算力共识,而非单一机构。 如何: 交易通过哈希算法融入区块链,每个区块包含前一区块哈希,形成时间戳链条; 工作量证明要求区块哈希满足特定条件(如以多个0比特开头),确保修改区块需重做海量计算; 以“最长链”为共识结果,诚实节点控制多数算力时,攻击者无法追平最长链; 网络架构极简:信息全网广播,节点自由进出,回归时以最长链同步历史交易。 1. 简介 互联网贸易已经变得几乎完全依赖金融机构作为可信任的第三方来处理电子支付。尽管对于大部分交易这种系统运行得足够好,但仍需忍受基于信任模型这个固有缺点。由于金融机构不可避免的需要仲裁纠纷,完全不可撤销的交易实际是做不到的。仲裁成本增加了交易成本,限制了最小实际交易额度从而杜绝了日常小额交易的可能性,而且由于不支持不可撤销支付,对不可撤销服务进行支付将需要更大的成本。由于存在交易被撤销的可能性,对于信任的需求将更广泛。商家必须警惕他们的客户,麻烦他们提供更多他本不需要的信息。一定比例的欺诈被认为是不可避免的。虽可通过当面使用实物货币来避免这些成本及支付的不确定性,但不存在一个无可信任方而能在通信通道上进行支付的机制。 我们需要的是一个基于密码学原理而不是信任的电子支付系统,该系统允许任何有交易意愿的双方能直接交易而不需要一个可信任的第三方。交易在计算上的不可撤销将保护卖家不被欺诈,用来保护买家的程序化合约机制也应该较容易实现。在这篇论文中,我们提出一种使用点对点分布式时间戳服务器为基于时间的交易序列生成计算上的证据来解决双重支付问题的方案。只要诚实节点集体控制的CPU算力大于任何一个合作攻击节点群的CPU算力,这个系统就是安全的。 批注(是什么/为什么/如何) 是什么:先批判传统电子支付“信任第三方”模型的缺陷,再明确核心诉求——构建基于密码学的去信任、点对点电子支付系统,核心安全前提是“诚实节点算力占优”。 为什么: 传统模型的本质问题是“信任依赖”:金融机构作为中介需仲裁纠纷,导致交易不可撤销、成本高、小额交易不成立、欺诈风险不可避免; 实物货币可当面规避信任问题,但无法适配线上场景,线上缺乏无中介支付机制; 市场需要“计算上不可篡改”的交易模式:用密码学替代信任,既保护卖家(防欺诈),也为买家保护(可编程合约)预留空间。 如何: 核心思路:通过点对点网络构建分布式时间戳服务器,为交易序列生成不可篡改的计算证据,解决双重支付; 安全逻辑:不追求绝对无攻击,而是通过“算力门槛”提高攻击成本——诚实节点算力总和超过攻击节点群,系统即安全。 2. 交易 我们将一枚电子货币定义为一条数字签名链。每个拥有者都通过将上一次交易和下一个拥有者的公钥的哈希值的数字签名添加到此货币末尾的方式将这枚货币转移给下一个拥有者。收款人可以通过验证数字签名来证实其为该链的所有者。 这里的问题是收款人不能证实某个拥有者没有对此货币进行双重支付。通常的做法是引入一个可信任的中央机构或铸币厂来检查每笔交易是否存在双重支付。每笔交易之后,都需要将这枚货币退回铸币厂以换取发行一枚新的货币,只有由铸币厂直接发行的货币才能被确认没有被双重支付。这个方案的问题在于整个货币系统的命运都依赖于运营铸币厂的公司,每笔交易都需要经过它们,就像银行一样。 我们需要一种能让收款人知道上一个货币拥有者没有对任何更早的交易签名的方法。对我们来说,最早的那次交易是唯一有效的,所以我们不需要关心本次交易后面的双重支付尝试。唯一能确认一笔交易不存在的方法是知晓所有之前的交易。在铸币厂模型中,铸币厂知晓所有交易并能确定哪笔交易最先到达。在不引入一个可信任方的前提下要达到这个目的,所有交易就必须公开发布[1],而且需要一个能让所有参与者对交易收到顺序的单一历史达成共识的系统。收款人在每笔交易时,都需要多数节点认同此交易是最先收到的证据。 批注(是什么/为什么/如何) 是什么:明确比特币核心定义(数字签名链),点出传统电子货币“双重支付”痛点及中央铸币厂方案的缺陷,提出“交易公开+全网共识交易顺序”的去信任解决方案。 为什么: 数字签名链能解决“所有权验证”,但无法解决“双重支付”——收款人无法知晓该货币是否已被原所有者用于更早交易; 中央铸币厂方案虽能防双重支付,但存在“单点依赖”风险:货币系统命运绑定铸币厂,效率低且易被控制; 去信任场景下,“交易顺序”是核心:只有确定某笔交易是“最早有效交易”,才能杜绝双重支付,需全网对交易历史达成共识。 如何: 货币本质:每枚比特币是“上一交易+下一所有者公钥哈希+当前所有者签名”构成的链式结构,签名由私钥生成,确保所有权转移合法性; 双重支付解决方案: 交易全网公开:所有节点获取全部交易历史,避免信息不对称; 共识机制:设计系统让所有参与者对交易接收顺序达成统一历史记录,收款人通过“多数节点认同”确认交易“最早有效”。 3. 时间戳服务器 我们提出的方案从时间戳服务器开始。时间戳服务器计算包含多个需要被打时间戳的数据项的区块的哈希值并广泛地发布这个哈希值,就像在报纸或新闻组帖子里[2-5]。时间戳能证明要得到这个哈希值,显然这些数据当时一定是存在的。每个时间戳的哈希值都纳入了上一个时间戳,形成一条链,后面的时间戳进一步增强前一个时间戳。 批注(是什么/为什么/如何) 是什么:时间戳服务器是比特币交易历史不可篡改的基础组件——将多个交易打包成区块,计算区块哈希并全网发布,区块哈希包含前一区块哈希,形成链式结构,以哈希加密实现“交易存在性”和“历史连续性”证明。 为什么: 需解决“交易时间顺序可验证”问题:证明某笔交易在特定时间点已存在,为共识交易顺序提供依据; 哈希加密特性适配需求:哈希值是数据的唯一“数字指纹”,数据修改则哈希值巨变;前一区块哈希纳入当前区块,使历史形成“牵一发而动全身”的链条,确保不可篡改。 如何: 打包交易:将多个待验证交易整合为一个“区块”; 生成哈希:计算区块哈希(如SHA-256),哈希值包含区块内交易数据和上一区块哈希; 全网发布:将区块哈希广泛广播,所有节点均可获取; 链式增强:新区块哈希基于前一区块,形成持续增长的链,越靠后的区块越能强化前面区块的时间戳有效性。 4. 工作量证明 为了实现一个基于点对点的时间戳服务器,我们需要使用一个类似Adam Back提出的哈希货币[6]的工作量证明系统,而不是报纸或新闻组帖子那样。工作量证明采取搜索一个数,使得被哈希时(如使用SHA-256)得到的哈希值以数个0比特开始。平均所需工作量将随所需0比特呈指数级增长而验证却只需执行一次哈希。 对于我们的时间戳网络。我们通过在区块中加入一个随机数,直到使得区块的哈希值满足所需0比特的数被找到的方式实现工作量证明。一旦消耗了CPU算力使区块满足了工作量证明,那么除非重做这个工作否则就无法更改区块。由于后面的区块是链接在这个区块后面的,改变这个区块将需要重做所有后面的区块的工作量证明。 工作量证明同时解决了在多数决定中确定投票方式的问题。如果多数是按IP地址投票来决定,那么它将可能被能分配大量IP地址的人破坏。工作量证明本质上是按CPU投票。最长的链代表了多数决定,因为有最大的计算工作量证明的算力投入到这条链上。如果多数的CPU算力被诚实节点控制,诚实的链就会增长得最快并超过其他的竞争链。要修改过去的某区块,攻击者必须重做这个区块以及其后的所有区块的工作量证明,从而赶上并超过诚实节点的工作。我们后面会证明随着后续的区块被添加一个更慢的攻击者赶上诚实节点的概率将呈指数级递减。 为了抵消硬件运算速度的增加及平衡不同时期运行节点的利益,工作量证明的难度将由移动平均数法来确定每小时生成区块的平均数。如果区块生成得过快,那么生成的难度就会增加。 批注(是什么/为什么/如何) 是什么:工作量证明(PoW)是比特币网络的“算力共识机制”——通过要求节点消耗CPU算力寻找满足特定哈希条件的随机数,实现区块生成的“成本门槛”,以“最长链”为全网共识,解决投票公平性和历史不可篡改性问题,难度动态调整以稳定区块生成速度。 为什么: 点对点网络需公平投票机制:按IP投票易被多IP伪造攻击,需“难以伪造且成本可控”的投票方式; 时间戳链需“防篡改成本”:仅靠哈希链式结构不够,需增加修改历史的难度; 硬件算力提升会导致区块生成过快,需动态调整难度以平衡节点利益。 如何: 工作量证明实现: 规则:区块需包含随机数(Nonce),节点不断尝试随机数,直到区块哈希以指定数量0比特开头; ...