确保比特币安全是一项挑战,因为比特币不像银行账户中的余额那样是对价值的抽象引用。比特币非常像数字现金或黄金。你可能听过这样一句话:“现实占有,十诉九胜”。好吧,对于比特币,所有权就是百分之百的规则。拥有解锁比特币的密钥就相当于拥有现金或金银珠宝。你也可能会丢失,放错地方,被盗,或者不小心给错了钱。发生以上每一种情况,用户都会失去追索权,就像在大街上丢了现金一样。
但是,比特币具有现金、黄金和银行账户所不具备的功能。一个包含你密钥的比特币钱包,可以像任何文件一样备份。它可以存储有多个副本,甚至打印在纸上进行硬备份。你没有办法“备份”现金、黄金或银行账户。比特币与以往的任何东西都有很大的不同,我们需要用一种全新的方式来考虑比特币的安全性。
比特币的核心准则是去中心化,这一点对安全性具有重要意义。在中心化的模式下,例如传统的银行或支付网络,需要依赖于访问控制和审查制度将不良行为者拒之门外。相比之下,比特币这样的去中心化系统则将责任和控制权都移交给了用户。由于网络的安全性是基于工作量证明而非访问控制,比特币网络可以对所有人开放,也无需对比特币传输进行加密。
在一个传统的支付网络中,例如信用卡系统,支付是无限制的,因为它包含了用户的私有标识(信用卡号)。在初次支付后,任何能获得该标识的人都可以从所有者那里反复“提取”资金。因此,该支付网络必须采取端对端加密的方式,以确保没有任何窃听者或中间人损害正在转账或存储(静止)的支付交易。可以在资金流通或存储过程中将交易数据截获。如果坏人获得该系统的控制权,他将能破获当前的的交易以及发起新交易的支付令牌。更糟的是,当客户数据被泄露时,顾客的个人身份信息也暴露给盗窃者,这时必须立即采取措施,以防失窃帐户被盗窃者用于欺诈。
比特币则截然不同,比特币交易只授权向指定接收方发送一个指定数额,并且不能被修改或伪造。它不会透露任何个人信息,例如当事人的身份,也不能用于权限外的支付。因此,比特币的支付网络并不需要加密或防窃听保护。事实上,你可以在任何公开的网络上广播比特币交易的数据,例如在不安全的WIFI或蓝牙网络上公开传播比特币交易的数据,这对安全性没有任何影响。
比特币的去中心化安全模型很大程度上将权力移交到用户手上,随之而来的是用户们保管好密钥的责任。这对于大多数 用户来说并非一件易事,特别是在像智能手机或笔记本电脑这种能能时刻联网的通用设备上。虽然比特币的去中心化模型避免了常见的信用卡盗用等情况,但很多用户由于无法保管好密钥从而一次又一次被黑客攻击。
对于比特币开发者而言最重要的是去中心化原则。大多数开发者对中心化的安全模型很熟悉,并可能试图将中心化的模型运用到比特币的应用中去,这将给比特币带来灾难性影响。
比特币的安全性依赖于通过密钥的去中心化控制,以及矿工们各自独立的交易验证。如果你想利用好比特币的安全性,你需要确保处于比特币的安全模型中。简而言之,不要将用户的密钥控制权拿走,也不要让交易离开区块链。
例如,许多早期的比特币交易所将所有用户的资金集中在一个包含着私钥的“热钱包”里,并存放在服务器上。这样的设计夺取了用户的掌控权,通过单一系统中心化控制密钥。很多这样的系统都被黑客攻破了,并给客户带来灾难性后果。
另一个常见的错误是为了减少交易费或加速交易处理速度,接受“链下交易”。“链下交易”系统将交易数据记录在一个内部的中心化账本上,然后偶尔将它们同步到比特币区块链中。这种做法,再一次用专制和中心化的方式取代比特币的去中心化安全模型。当交易处于链下的时候,担保不当的中心化账本里的资金可能不为人知情况下被伪造、被挪用、被消耗。
除非你是准备大力投资运营安全,叠加多层访问控制,或(像传统的银行那样)加强审计,否则在脱离比特币的去中心化安全场景范围之外抽调资金之前,你应该慎重考虑一番。即使你有足够的资金和规则去实现一个可靠的安全模型,这样的设计也仅仅是复制了一个脆弱不堪,深受账户盗窃威胁、贪污和挪用公款困扰的传统金融网络而已。要想充分利用比特币特有的去中心化安全模型,你必须避免中心化架构的常见诱惑,虽然中心化架构大家都熟知,但它最终将破坏比特币的安全性。
传统的安全体系结构是基于一个被称为信任根root of trust的概念,它是一个可信核心,它是整个系统或应用程序安全的基础。安全架构是围绕信任根开发的,它是一系列同心圆,就像洋葱的层,从中心向外扩展信任。每一层都构建于更可信的内层之上,通过访问控制,数字签名,加密和其他安全方式确保可信。随着软件系统变得越来越复杂,它们更可能出现问题,安全更容易受到威胁。其结果是,软件系统变得越复杂,安全就越难得到保障。信任根的概念确保绝大多数的信任被置于一个不是过于复杂系统的一部分,因此该系统的这部分也相对坚固,而更复杂的软件则被层层包围。这种安全体系结构以不同的规模重复出现,首先在单个系统的硬件中建立信任根,然后通过操作系统将该信任根扩展到更高级别的系统服务,最后跨多个以信任递减的同心圆分层的服务器。
比特币的安全体系与这不同。在比特币里,共识系统创建了一个可信的完全去中心化的公开账本。正确验证过的区块使用创世区块作为信任根,建立一条至当前区块的可信任链。比特币系统可以也应该使用区块链作为它们的信任根。在设计由许多不同系统上的服务组成的复杂比特币应用程序时,应仔细检查安全体系结构,以确定信任的位置。最终,唯一值得明确信任的是一个经过充分验证的区块链。如果您的应用程序显式或隐式地信任区块链以外的任何东西,则应该引起关注,因为它会引入漏洞。评估应用程序安全体系结构的一个好方法是单独考量每个组件,设想该组件被完全攻破并被坏人掌控的场景,依次取出应用程序的每个组件,并评估它被攻破时对整体安全的影响。如果组件受损时您的应用程序不再安全,则表明您对这些组件的信任出现错位。一个没有漏洞的比特币应用程序应该只容易受到比特币共识机制的损害,这意味着它的信任根是比特币安全架构中最强大的部分。
无数个被黑客攻击的比特币交易所的例子都是因为轻视了这一点,他们的安全体系和设计甚至无法通过基本的审查。这种中心化的实现方式将信任置于比特币区块链之外的诸多组件之上,例如热钱包,中心化的账本数据库,简易加密的密钥,以及许多类似的方案。
人类使用物理安全控制已有数千年的历史。相比之下,我们在数字安全方面的经验还不到50年。现代通用操作系统不太安全,也不特别适合存储数字货币。我们的电脑经常通过互联网连接受到外部威胁。它们运行来自数百名作者的数千个软件组件,通常可以无限制地访问用户的文件。一个流氓软件,在你电脑上安装的成千上万个软件中,可以破坏你的键盘和文件,窃取钱包应用程序中存储的任何比特币。想要杜绝病毒和木马对电脑的威胁,用户要达到一定的计算机维护水平,只有小部分人能做到。
尽管信息安全经过了数十年的研究和发展,数字资产在绵延不绝的攻势下还是十分脆弱。纵使是像金融服务公司,情报机构或国防承包商这样拥有高度防护和限制的系统,也经常会被攻破。比特币创造了具有内在价值的数字资产,它可以被窃取,并立即转移给他人而无法撤回。这让黑客有了强烈的作案动机。至今为止,黑客都不得不在套现后更换身份信息或帐户口令,例如信用卡或银行账户。尽管掩饰和洗白这部分财务信息的难度不小,但越来越多的窃贼从于此道。而比特币使这个问题加剧了,因为它不需要掩饰或洗白,它本身就是具有内在价值的数字资产。
幸运的是,比特币也有着激励机制,以提高计算机的安全性。以前,计算机受威胁的风险是模糊的,间接的,而比特币让这些风险变得清晰而明显。把比特币放在电脑上可以让用户的注意力集中在提高电脑安全性的需求上。比特币和其它数字货币得以传播和扩散的直接结果就是,我们看到黑客技术和安全解决方案都在升级。简单来说,黑客现在看到的是非常诱人的目标,而用户也有明确的激励性去保卫自己。
在过去的三年里,随着比特币不断被接纳,直接的结果就是,我们已经看到信息安全领域取得了巨大创新,例如硬件加密,密钥存储和硬件钱包,多重签名技术和数字托管。在下面的章节中,我们将研究实现用户安全的各种最佳实践。
相比数字信息的安全,大多数用户对物理安全更加熟悉,一个非常有效保护比特币的方法是,将它们转换为物理形式。 比特币密钥不过是串长数字而已。这意味着它们可以以物理形式存储起来,如印在纸上或蚀刻成金属硬币上。这样保护密钥就变成了简单地保护印着比特币密钥的物理实体。一组打印在纸上的比特币密钥被称为“纸钱包”,有许多可以用来创建它们的免费工具。我个人将大部分(99%以上)的比特币存储在纸钱包上,并用BIP-38加密,复制了多份并锁在保险箱里。将比特币离线保存的方法被称为冷存储cold storage,它是最有效的安全技术之一。冷存储系统是在一个离线系统(一个从来没有连接过互联网的系统)上生成密钥,并离线存储到纸上或者U盘等电子媒介上。
从长远来看,比特币安全将越来越多地以硬件防篡改钱包的形式出现。与智能手机或台式电脑不同,一个比特币硬件钱包只有一个目的,安全地存储比特币。没有通用软件的妥协,硬件钱包只提供了有限的接口,从而可以给非专业用户提供近乎万无一失的安全等级。我期望看到硬件钱包成为比特币储存的主要方式。硬件钱包的实例,请查阅TREZOR。
虽然大多数用户都非常关注比特币防盗,其实还有一个更大的风险存在。数据文件丢失的情况时有发生。如果其中包括比特币,损失将会痛苦更多。为了保护好比特币钱包,用户必须非常小心不要过于走极端,否则也会丢失比特币。在2011年7月,一个著名的比特币意识教育项目损失了近7,000枚比特币。为了防止盗窃,拥有着们实施了一系列复杂的加密备份。最后,他们意外地丢失了加密密钥,使备份一文不值,损失了一大笔钱。就像把钱藏在沙漠里一样,如果你把比特币保护得太好,你可能就再也找不到了。
你会将你的全部家当换成现金放在钱包里随身携带么?大多数人会认为这非常不明智,但比特币用户经常会将所有的比特币放在一个钱包里。用户应该将风险分散到不同类型的比特币钱包。审慎的用户应该只留一小部分(或许低于5%)的比特币在一个在线的或手机钱包,就像零用钱一样,其余的部分应该采用不同存储机制分散开来,诸如电脑钱包和离线(冷存储)钱包。
当一个公司或个人持有大量比特币时,他们应该考虑采用多重签名的比特币地址。多重签名比特币地址需要多个签名才能支付,从而保证资金的安全。多重签名的密钥应存储在多个不同的地方,并由不同的人掌控。比如,在企业环境中,密钥应该分别生成并由若干公司管理人员持有,以确保没有任何一个人可以独自占有资金。多重签名的地址也可以提供冗余,例如一个人持有多个密钥,并将它们分别存储在不同的位置。
一个非常重要却又常常被忽视的安全性考虑是可用性,尤其是在密钥持有者丧失能力或死亡的情况下。比特币的用户被告知应该使用复杂的密码,并保证他们的密钥安全且不为他人所知。不幸的是,这种做法使得在用户无法解锁时, 用户的家人几乎无法将该财产恢复。事实上,比特币用户的家人可能完全不知道这笔比特币资金的存在。
如果你有很多的比特币,你应该考虑与一个值得信赖的亲属或律师分享解密的细节。可以搞一个更复杂的比特币恢复计划,可以通过设置多重签名,做好遗产规划,并通过专门的“数字资产执行者”律师处理后事。
比特币是一项全新的,前所未有的,复杂的技术。随着时间的推移,我们将开发出更好的安全工具,而且更容易被非专业人士使用。而现在,比特币用户可以使用许多这里所讨论的技巧,享受安全而无困扰的比特币体验。