Mastering Bitcoin Ch10: Bitcoin Security

前阵子李笑来老师在网上招人合译《Mastering Bitcoin》一书,受巴比特之邀自己也参与其中。由于当时时间有限,只翻译了最后的第十章。如今此书初稿已经公布于众,自己也在此整理一下留个备份。从此,我也算是出过书的人了哈哈。

比特币安全

保护比特币件很具有挑战性的事情,因为比特币不是价值的抽象体现,就像银行账户里的余额那样。比特币其实更像数字现金或黄金。你可能听过这样的说法,“现实持有,败一胜九。”(译者注:这句谚语是指拥有实际所有权能在法律纠纷中占有很大的胜算优势)好吧,在比特币的世界里,这样的持有只能让你有一成胜率。而拥有用于解锁比特币的密钥才相当于持有现金或一块贵重金属。你可能会将其丢失,会放错地方,会被盗或者不小心支付错了数额。无论是哪种场景,用户都没有办法撤回,因为这就像是将现金丢在了车水马龙的大街上。

不过,与现金、黄金或者银行账户相比,比特币有着一个其它东西没有的优势。你不能“备份”现金、黄金或者银行账户,但包含着你的密钥的比特币钱包,可以像其它文件一样备份。它可以被复制多份分别保存起来,甚至能打印到纸上进行实物备份。比特币与至今为止的事物是如此不同,以致于我们需要以一种全新的思路来思考比特币的安全性。

安全准则

比特币的核心准则是去中心化,这一点对其安全性具有重要意义。在集中式的模式中,例如传统的银行或支付网络,需要依赖于访问控制和审查以将不良行为者拒之门外。相比之下,比特币这样的去中心化系统则将责任和控制权交给了用户。由于网络的安全性是基于工作量证明而不是访问控制,比特币网络可以对所有人开放,也无需对比特币流量进行加密。

在一个传统的支付网络中,例如信用卡系统,支付是终端开放式的,因为它包含了用户的个人标识(信用卡号)。在初次支付后,任何能获得该标识符的人都可以从其所有者那反复“抽取”资金。因此,该支付网络必须采取端对端加密,确保没有窃听者或中间人可以在运输过程或存储过程中将交易数据截获。如果坏人获得该系统的控制权时,他将能攻下当前交易和支付令牌,并可用于创建新的交易。更糟的是,当客户数据被泄露时,顾客的个人信息将被身份窃贼一览无疑。他们必须立即采取行动,以防止被攻下的帐户被用来进行欺诈。

比特币则截然不同,一个比特币交易只授权发给指定接收方一个指定的数额,并且这不能被修改或伪造。它不会透露任何个人信息,例如当事人的身份,也不能用于授权额外的支付。因此,比特币支付网络并不需要加密或窃听保护。事实上,你可以在一个开放的公共频道,例如不安全的 WiFi 或蓝牙网络上,公开传播比特币交易的数据,这对安全性没有任何损失。

比特币的去中心化安全模型很大程度上将权力交到了用户手上,与之相伴的还有保管好密钥的责任。这对于大多数用户来说是并不是一件容易的事,特别是在像智能手机或笔记本电脑这种时刻联着网的通用计算设备上。虽然比特币的去中心化模型避免了常见的信用卡盗用这样的情况,但很多用户都不能保护好他们的密钥,以至于被逐个攻下。

比特币系统安全开发

对于比特币开发者而言最重要的原则是去中心化。大多数开发者对集中式的安全模型很熟悉,并可能试图将这样的模型运用到他们的比特币的应用中,这将带来灾难性的后果。

比特币的安全性依赖于密钥的分散控制,以及矿工们各自独立地交易验证。如果你想利用好比特币的安全性,你需要确保自己处于比特币自身的安全模型里面。简而言之,不要将用户的密钥控制权拿走,不要接受非区块链交易信息。

例如,许多早期的比特币交易所将所有用户的资金集中在一个包含着密钥的“热”钱包并存储在一台服务器上。这样的设计夺取了用户的掌控权,并将密钥集中到单个系统里。许多这样的系统都被黑客攻破,并给他们的客户带来灾难性的后果。

另一个常见的​​错误是接受离线区块链交易,妄图减少交易费或加速交易处理速度。一个“离线区块链”系统将交易数据记录在一个内部的中心化账本上,然后偶尔将它们同步到比特币区块链。这种做法,再一次,用专有和集中的方式取代比特币的去中心化安全模型。当数据处于离线的区块链上时,防护不当的集中式账本可能会被伪造、挪用资金、消耗储备而不为人知。

除非你是准备大力投资运营安全,增加多层次访问控制,或(像传统的银行那样)加强审计,否则在将资金从比特币的去中心化安全场景中抽离出来之前,你应该慎重考虑一番。即使你有足够的资金和纪律去实现一个可靠的安全模型,这样的设计也仅仅是复制一个脆弱不堪,深受身份盗窃、贪污和挪用公款困扰着的传统金融网络而已。要想充分利用比特币的独特的去中心化安全模型,你必须避免可能觉得眼熟的集中式架构的诱惑,因它最终将摧毁比特币的安全性。

信任根源

传统的安全体系基于一个称为信任根源的概念,它指的是被当作总体系统或应用程序的安全性根基的一个可以信赖的核心。安全体系像一系列同心圆一样围绕着信任根源开发,像层层包裹的洋葱一样,信任从内至外依次延伸。每一层都构建于更可信的内层之上,通过访问控制,数字签名,加密和其他安全方式确保可信。随着软件系统变得越来越复杂,它们更可能出现问题,使得它们更容易受到安全损害。其结果是,软件系统变得越复杂,就越难维护其安全。信任根源的概念确保绝大多数的信任被置于系统一个不是过于复杂的部分,因此该系统的这部分也相对坚固,而更复杂的软件则在它之上构建。这样的安全体系随着规模扩大而不断重复出现,首先信任根源建立于单个系统的硬件内,然后将该信任根源通过操作系统扩展到更高级别的系统服务,最后逐次扩散到圈内多台服务器上。

比特币的安全体系与这不同。在比特币里,共识系统创建了一个可信的完全去中心化的公开账本,一个正确验证过的区块使用创世块作为信任的根源,建立一条直至当前区块的可信任链。比特币系统可以并应该使用区块链作为它们的信任根源。在设计一个包含着由多个不同的系统提供服务的复杂的比特​​币应用程序时,你应该仔细确认其安全体系,以确保对它的信任能有据可依。最终,唯一可以信任无疑的是一条完全有效的区块链。如果你的应用程序或明或暗地信赖于除了区块链的其它东西,这应该是一个值得关注的地方,因为它可能会引入漏洞。评估你的应用程序的安全体系的一个好方法是对每个组件单独考虑,假设该组件被完全攻破并被坏人掌控的场景。依次取出你的应用程序的每个组件,并评估它被攻破时对整体安全的影响。如果你的应用程序的安全性在该组件沦陷后大打折扣,那就说明你已经对这些组件过度信任了。一个没有漏洞的比特币应用程序应该只受限于比特币的共识机制,这意味着其安全体系的信任根源基于比特币最坚固的部分。

无数个黑客攻击比特币交易所的例子都是因为轻视了这一点,他们的安全体系和设计甚至无法通过基本的审查。这种中心化的实现方式将信任置于比特币区块链之外的诸多组件之上,例如热钱包,中心化的账本数据库,简易加密的密钥,以及许多类似的方案。

用户最佳安全实践

人类使用物理的安全控制已经有数千年之久。相比之下,我们的数字化安全经验还不过 50 岁。现代通用的操作系统并不是十分安全,亦不特别适合用来存储数字金钱。我们的电脑通过一直相连的互联网长时间暴露在外,它们运行着成千上万来自他人的软件组件,这些软件往往可以不受约束地访问用户的文件。只要你电脑上所安装的许多软件里有一个恶意软件,就会对你的键盘和文件造成威胁,可以窃取存储在钱包应用中的​​所有比特币。要想保持电脑不中病毒和木马需要很高的计算机维护水平,而仅有小部分电脑用户能够做到。

尽管信息安全经过了数十年的研究和发展,数字资产在孜孜不倦的攻势下还是十分脆弱。纵使是像金融服务公司,情报机构或国防承包商这样拥有高度防护和限制的系统,也经常会被攻破。比特币创造了具有内在价值的数字资产,它可以被窃取,并立即转移给他人而无法撤回。这让黑客有了强烈的作案动机。至今为止,黑客都不得不在套现后更换身份信息或帐户口令,例如信用卡或银行账户。尽管掩饰和洗白这部分财务信息的难度不小,但越来越多的窃贼从于此道。而比特币使这个问题加剧了,因为它不需要掩饰或洗白,它本身就是具有内在价值的数字资产。

幸运的是,比特币也有着激励机制,以提高计算机的安全性。如前所述,计算机受威胁的风险是模糊的,间接的,而比特币让这些风险变得明确清晰。在电脑上保存比特币让用户时刻注意他们需要提高计算机的安全性,结果便是这使得比特币和其它数字货币得以传播和扩散,我们已经看到在黑客技术和安全解决方案双方的提升。简单来说,黑客现在有着一个非常诱人的目标,而用户也有明确的激励性去保卫自己。

在过去的三年里,随着比特币不断被接纳,一个直接的结果是,我们已经看到信息安全领域取得了巨大创新,例如硬件加密,密钥存储和硬件钱包,多重签名技术和数字托管。在下面的章节中,我们将研究各种实际用户安全中的实践经验。

比特币物理存储

相比数字信息的安全,大多数用户对物理安全更加熟悉,一个非常有效保护比特币的方法是,将它们转换为物理形式。比特币密钥不过是串长数字而已。这意味着它们可以以物理形式存储起来,如印在纸上或蚀刻成金属硬币上。这样保护密钥就变成了简单地保护印着比特币密钥的物理实体。一组打印在纸上的比特币密钥被称为“纸钱包”,有许多可以用来创建它们的免费工具。我个人将大部分(99% 以上)的比特币存储在纸钱包上,并用 BIP0038 加密,复制了多份并锁在保险箱里。将比特币离线保存被称为冷存储,它是最有效的安全技术之一。冷存储系统是在一个离线系统(一个从来没有连接过互联网的系统)上生成密钥,并离线存储到纸上或者 U 盘等电子媒体。

硬件钱包

从长远来看,比特币安全将越来越多地以硬件防篡改钱包的形式出现。与智能手机或台式电脑不同,一个比特币硬件钱包只有一个目的,安全地存储比特币。不像容易受害的常用软件那样,硬件钱包只提供了有限的接口,从而可以给非专业用户提供近乎万无一失的安全等级。我预期将看到硬件钱包成为比特币储存的主要方式。要想看硬件钱包的实例,请查阅 Trezor。

平衡风险

虽然大多数用户都非常关注比特币防盗,其实还有一个更大的风险存在。数据文件丢失的情况时有发生。如果比特币的数据也在其中,损失将会让人痛苦不堪。为了保护好比特币钱包,用户必须非常注意不要走得太远,以至于最终不慎将这些比特币丢失。在 2011 年 7 月,一个著名的比特币认知教育项目损失了近 7000 枚比特币。为了防止被盗窃,其主人采取了一系列复杂的操作去加密备份。结果他们不慎丢失了加密的密钥,使得备份变得毫无价值,白白失去了一大笔财富。这就像把钱埋在沙漠里,如果你保护比特币的方式太过了,你可能无法再次找回它。

分散风险

你会将你的全部家当换成现金放在钱包里随身携带么?大多数人会认为这非常不明智,但比特币用户经常会将所有的比特币放在一个钱包里。用户应该将风险分散到多种多样的比特币钱包里。审慎的用户应该只留一小部分(或许低于 5%)的比特币在一个在线的或手机钱包,就像零用钱一样,其余的部分应该采用不同存储机制分散开来,诸如电脑钱包和离线(冷存储)。

多重签名管理

当一个公司或个人持有大量比特币时,他们应该考虑采用多重签名的比特币地址。多重签名比特币地址需要多个签名才能支付,从而保证资金的安全。多重签名的密钥应存储在多个不同的地方,并由不同的人掌控。打个比方,在企业环境中,密钥应该分别生成并由若干公司管理人员持有,以确保没有任何一个人可以独自占有资金。多重签名的地址也可以提供冗余,例如一个人持有多个密钥,并将它们分别存储在不同的地方。

存活能力

一个非常重要却又常常被忽视的安全性考虑是可用性,尤其是在密钥持有者丧失工作能力或死亡的情况下。比特币的用户被告知应该使用复杂的密码,并保证他们的密钥安全且不为他人所知。不幸的是,这种做法使得在用户无法解锁时,用户的家人几乎无法将该财产恢复。事实上,比特币用户的家人可能完全不知道这笔比特币资金的存在。

如果你有很多的比特币,你应该考虑与一个值得信赖的亲属或律师分享解密的细节。一个更复杂的比特币生还计划,可以通过设置多重签名,做好遗产规划,并通过专门的“数字资产执行者”律师处理后事。

总结

比特币是一项全新的,前所未有的,复杂的技术。随着时间的推移,我们将开发出更好的安全工具,而且更容易被非专业人士使用的做法。而现在,比特币用户可以使用许多这里所讨论​​的技巧,享受高枕无忧的比特币生活。