“现在,先看证据,”国王说道,“然后再判决。”
比特币旨在取代,或至少提供一种替代传统货币的方案。传统货币,无论我们谈论的是像美元这样的法定货币,还是像《堡垒之-夜》的V-Bucks那样的现代垄断货币,都与一个中心化的权威绑定。在这两个例子中,你都不得不信任那个中心权威来发行、管理和流通你的钱。比特币解开了这个绑定,而它所解决的核心问题,正是信任问题。
“传统货币的根本问题,在于使其运作所需的所有信任。……我们需要的是一个基于密码学证明,而非信任的电子支付系统。”
—— 中本聪 (Satoshi)
比特币通过完全去中心化来解决信任问题,它没有中央服务器,也没有受信任的参与方。注意,不只是没有受信任的第三方,而是根本没有受信任的参与方。当没有中央权威时,你根本就无从信任。彻底的去中心化,才是这项创新所在。它是比特币韧性的根源,是它至今依然存活的原因。去中心化,也正是我们拥有挖矿、节点、硬件钱包,以及,是的,区块链的原因。你唯一需要“信任”的,是我们对数学和物理学的理解没有完全跑偏,以及大多数矿工会诚实行事(他们也被激励着这样做)。
常规世界在“信任,但要验证”的假设下运作,而比特币则在“不信任,去验证”的假设下运作。中本聪在比特币白皮书的引言和结论中,都非常明确地强调了移除信任的重要性。
“结论:我们提出了一个无需依赖信任的电子交易系统。”
—— 中本聪 (Satoshi Nakamoto)
请注意,“无需依赖信任”在这里是在一个非常特定的语境下使用的。我们谈论的是受信任的第三方,即你信任其为你生产、持有和处理你的钱的其他实体。例如,它假设了你可以信任你自己的电脑。
正如肯·汤普森(Ken Thompson)在他的图灵奖演讲中所展示的,在计算世界里,信任是一个极其棘手的东西。当你运行一个程序时,你必须信任各种各样的软件(和硬件),而它们在理论上,都可能以恶意的方式篡改你正试图运行的程序。正如汤普森在他的《对信任之信任的反思》中所总结的:“其中的道理显而易见。你无法信任任何不是完全由你自己创造的代码。”
汤普森证明了,即使你能接触到源代码,你的编译器——或任何其他处理程序的程序或硬件——也可能已被植入后门,而要检测到这个后门将非常困难。因此,在实践中,一个真正“去信任”的系统是不存在的。你将不得不从零开始,创造你所有的软件和你所有的硬件(汇编器、编译器、链接器等),并且不能借助任何外部软件或由软件辅助的机器。
“如果你想从零开始做一个苹果派,你必须先创造整个宇宙。”
—— 卡尔·萨根 (Carl Sagan)
“肯·汤普森式攻击”是一种尤其巧妙且难以检测的后门,所以让我们来看一个无需修改任何软件就能奏效的、难以检测的后门。研究人员找到了一种方法,通过改变硅杂质的极性,来攻破安全关键的硬件。仅仅通过改变构成计算机芯片的物质的物理属性,他们就成功地攻破了一个密码学安全的随机数生成器。由于这种改变是看不见的,这个后门无法通过光学检查被发现,而光学检查恰恰是这类芯片最重要的防篡改检测机制之一。
隐蔽的掺杂级硬件木马 (Stealthy Dopant-Level Hardware Trojans) - 作者:Becker, Regazzoni, Paar, Burleson
听起来很吓人?嗯,即使你能从零开始建造一切,你仍然必须信任其底层的数学。你必须信任 secp256k1 是一条没有后门的椭圆曲线。是的,恶意的后门可以被植入到密码学函数的数学基础中,而且可以说,这种情况至少已经发生过一次了。我们有充分的理由保持偏执。从你的硬件、到你的软件、再到所使用的椭圆曲线都可能存在后门,就是最好的例证。
“不信任,去验证。”
上述例子应该足以说明,“去信任”计算是一种乌托邦。比特币或许是所有系统中最接近这个乌托邦的,但即便如此,它也只是最小化信任——旨在尽可能地移除信任。可以说,信任的链条是永无止境的,因为你最终还必须信任计算需要能量,信任P不等于NP,以及信任你确实身处基本现实,而非被恶意行为者囚禁在一个模拟程序中。
开发者们正在致力于开发工具和程序,以进一步最小化任何残存的信任。例如,比特币开发者创建了 Gitian,这是一种用于创建确定性构建的软件分发方法。其理念是,如果多个开发者能够重现出完全相同的二进制文件,那么恶意篡改的机会就会减少。花哨的后门并非唯一的攻击向量,简单的敲诈或勒索同样是真实的威胁。与主协议一样,去中心化被用来最小化信任。
人们正在做出各种努力,来改进肯·汤普森式攻击所精彩指出的那个“先有鸡还是先有蛋”的引导问题。其中一项努力是 Guix(发音为geeks),它使用函数式声明的包管理,其设计旨在让任何人都能构建出完全一致的二进制文件。其结果是,你不再需要信任任何提供软件的服务器,因为你可以通过从零开始重新构建,来验证所提供的二进制文件未被篡改。最近,一个将Guix集成到比特币构建过程中的拉取请求已被合并。
是先有鸡还是先有蛋呢?
幸运的是,比特币并不依赖于单一的算法或硬件。比特币彻底去中心化的一个效应,是一种分布式的安全模型。尽管上述后门不容小觑,但要让每一个软件钱包、每一个硬件钱包、每一个密码学库、每一个节点实现、以及每一种语言的每一个编译器都同时被攻破,是不太可能的。有可能,但可能性极低。
请注意,你可以不依赖任何计算硬件或软件来生成一个私钥。你可以抛几次硬币,尽管根据你的硬币和抛掷方式,这种随机性来源可能不够随机。像 Glacier 这样的存储协议,建议使用赌场级的骰子作为两个熵源之一,这是有原因的。
比特币迫使我去反思,“不信任任何人”究竟意味着什么。它提升了我对引导问题的认识,以及在开发和运行软件中那条隐性的信任链条。它也提升了我对软件和硬件可能被攻破的多种方式的警觉。
比特币教会我:不信任,但要去验证。
深入兔子洞 🕳️
- 对信任之信任的反思 (Reflections on Trusting Trust) - 肯·汤普森 (Ken Thompson)
- 受信任的第三方即是安全漏洞 (Trusted Third Parties Are Security Holes) - 尼克·萨博 (Nick Szabo)
- 比特币白皮书 (The Bitcoin Whitepaper) - 中本聪 (Satoshi Nakamoto)
- 51%攻击 (51% Attack) - 比特币开发者指南贡献者 (Bitcoin Developer Guide Contributors)
- 引导 (Bootstrapping) - Guix手册贡献者 (Guix Manual Contributors)
- 双椭圆曲线确定性随机比特生成器 (Dual EC DRBG) - 维基百科贡献者 (Wikipedia Contributors)
- 椭圆曲线密码学后门 (ECC Backdoors) - 维基百科贡献者 (Wikipedia Contributors)
- Secp256k1 - 比特币维基贡献者 (Bitcoin Wiki Contributors)