玩币族移动版

玩币族首页 > 币圈百科 >

杰森·伯恩是如何存储他的比特币的

  摘要

  我们要讨论的是从长远来看,如何安全可靠地储存比特币

  你需要的是:

  一台联网的机器.

  一台“物理隔离”的旧式电脑,最好没有任何无线功能.

  一部带有条码扫描器的智能手机.

bitcoin-padlock-520x245

  简介

  如果你想长期投资比特币,要解决的一个棘手的问题就是如何储存它们。既然在这个世界上人们喜欢窃取比特币甚于任何东西,所有的存储系统都首先必须要具备以下几个特点:

  (1)防止别人窃取你的币

  盗币最简单的方法就是破坏你的私钥。与第一点的“阳”相对,第二点的“阴”就是:

  (2)避免意外损失

  比特币的储存不应失去它们的最佳性能。因此,好的比特币存储系统还需具备:

  (3)低成本

  如果你急于离国,或是莫名其妙赤裸着被冲上了异国的海边,你的币应该可以

  (4)能够全局访问

  第四点是荒谬的,但是,想想就觉得很有趣。同时实现这四个目标是个挑战,大部分我们见到的存储系统,都至少不能满足其中一项。这个问题我们稍作讨论。首先,我们要给你推荐一个储存比特币的计划:

  脑钱包

  脑钱包是一个开源的算法,它与状态无关,能够将密语转换成公钥和私钥对。通常来说,脑钱包的算法非常简单:

  采用SHA-256算法将密码哈希成256字节的字符串,这样对于不知道密码的人来说,看起来就像是随机的字符串。

  将输出解释为密钥。

  采用标准的EC加密算法(译者按:EC加密算法即椭圆加密曲线算法)来将密钥映射到公钥。

  脑钱包在第二到第四点特点上的得分很高,但它却以不安全“著称”。脑钱包常见的攻击有:

  生成一个巨大的密语词典,取自文学作品、常见密码数据库、电影台词、歌词等等。

  对于语库中的每句短语,使用上述算法生成脑钱包的密钥对。

  监控在数据库里预先准备好的地址是否有比特币转入。

  在攻击中,使用相应的私钥转移比特币。

  这种攻击看起来应该很熟悉;它跟破解泄露的密码数据库的攻击方式几乎相同。事实上,脑钱包之所以不安全也有着同样的原因——未加盐、未哈希的密码数据库是不安全的。因此,脑钱包应该采用和密码数据库一样的安全措施。

Snip20140720_2

  安全性增强的脑钱包

  我们建立的Warpwallet,是一个增强了安全性的脑钱包,它的运行如同一个单独的网页。相对于标准的脑钱包,WarpWallet更安全,这有两个简单的理由:(1)它要求每个用户选择一个独特的“盐”,这样攻击者就要分别破解每个用户的脑钱包;(2)它采用scrypt算法来对密语哈希,因此攻击者的每个猜测都是昂贵的计算。

  有了WarpWallet的这一基元,我们可以看看储存财富的完整算法:

  在coinbase或你选择的交换平台购买比特币。

  访问WarpWalle,跳转后记录URL中SHA-256的总和,将HTML保存为文件。

  启动你的物理隔离机(AGM),最好是从Linux的live盘中启动。(关于AGM的更多信息,请见Bruce Schneier’s 的文章)

  用U盘将HTML文件复制到你的AGM。

  在AGM上运行sha256sum warp.html ,验证总数是否与你在步骤2中见到的匹配。

  用谷歌或火狐浏览器将该HTML作为本地文件打开。(1)用几个临时口令和小型传输来测试配置(见下面的细节)。 (2)选一个好的密语。例如:vicar formal lubbers errata。稍后再作讨论。 (3)用真正的密语在“生产”中运行配置。以你的电子邮件地址为“盐”,你会得到一个公钥和私钥对。

  用你的手机扫描公钥,并转移到你的联网设备上(如通过电子邮件)。扫描时,小心调整窗口,确保只扫到公钥QR码。

  关闭物理隔离机。

  在你的联网设备上,将coinbase上的币转移到WarpWallet生成的地址。

  如果你怕忘了密码,在你的房子和办公室周围放一些秘密备注,提醒你密码是什么。

  为了赎回你的币,你要重复这个过程,但你只能在私钥上转移。一旦你得到一个WarpWallet,别再次使用它。(或者,你可以用比特币类库来记录物理隔离机上的交易,把它转移到网络设备,再将其插入到块链中;我们还不能实现这一点。)

  安全性分析

  攻击者要窃取你的钱币,主要有四种方式:(1)潜入你的机器;(2)破解WarpWallet的密码;(3)蛮力攻击你的密码;或(4)从你的“提示”备注中猜测你的密码。让我们看一下这四种方式:

  对于第一种攻击,假设最坏的情况,即三部机器都已被攻击者入侵。攻击者入侵你物理隔离机后知道了你的私钥,但他无法将私钥发送出去(你要确保从不将AGM连网)。攻击者入侵你的手机或网络设备可以获得公钥,但只要比特币协议存在,你的币就不可能被窃取。当然,当攻击者控制了你的联网机器,他就可以把你的币从Coinbase上转移到他选择的账户。但如果你可以在他之前将币转移到WarpWallet,就没有问题了。同样地,如果攻击者控制了你所有机器上的密码,你也许不能启动WarpWallet的真正版本,而是启动了一个只能输出攻击者所知密码的木马版本。对于这样的攻击,除了让你检查你的WarpWallet版本,我们没有其他好的回答。要么检查密码杂凑,要么检查已知的输入/输出密码对。

  第二种攻击考虑的是破解WarpWallet的加密技术。WarpWallet是如下运行的:

  1. s1 ← scrypt(key=passphrase||0x1, salt=salt||0x1, N=218, r=8, p=1, dkLen=32)

  2. s2 ← PBKDF2(key=passphrase||0x2, salt=salt||0x2, c=216, dkLen=32)

  3. private_key ← s1 ⊕ s2

  4. Generate public_key from private_key using standard Bitcoin EC crypto

  5. Output (private_key, public_key)

  虽然没有形式证明,但我们认为这种算法和scrypt及PBKDF2算法一样强大。只要其中一个算法是安全的,对于从候选口令中选取密钥对的蛮力攻击就是必要的。

1TviY

  对抗蛮力攻击的安全性

  为了量化的对抗蛮力攻击的安全性,我们提出以下假设:

  scrypt算法是完整的,而且一定是蛮力攻击;

  PBKDF2算法是免费的;

  攻击者可利用资源破解WarpWallet或挖莱特币。因此,攻击者破解WarpWallet的机会成本是挖莱特币获得的收益 。这种假设考虑到了硬件和能源的成本,并允许攻击者访问最新改进的软件。

  注意,WarpWallet使用安全参数为218,Litecoin系统则为210。我们用以下常量进行分析,你也可以随市场条件变化对它们进行编辑:

  每莱特币兑换美元 8.58

  莱特区块奖励 50

  莱特币算力难度 22,149

  WarpWallet密语信息熵的字节数 58

  通过这些假设,破解一个WarpWallet的成本是 166,374,360.47美元。

  实用安全性

  迄今为止,这对于我们来说是相当安全的。如果有新闻报道称scrypt算法已被破解,或是硬件成本大大降低,当你想改变方案的时候,你还有PBKDF2算法作为缓冲。

  说实话,显著的公共挑战测试着WarpWallet的安全性。当网站公布的时候,我们宣布了四个可以迅速解决的挑战,以证明人们会认真对待这些挑战。他们也确实这样做了。剩下的挑战就是仅凭48位熵猜测地址,而这自2013年11月以来从未被破解。

  最后,还有一种风险是与你有直接接触的人会发现你的提示语之一,然后得到你的密码、窃取你的币。对于这种攻击,最好的防御首先是让提示语足够隐秘,这样任何人也不会知道它是什么;其次,别跟会偷你钱的混蛋一起闲逛。

  什么样的密语才是好的

  当生成一个密码的时候,使用通过量化的熵产生密码的算法是很好的。例如,此页面从字典中随机挑选N个词,如果N的值越高,它提供的密码熵就越多。人们能记住常用的密语,但由于WarpWallets每十年才用几次,你就有遗忘的风险。我们内部讨论了更容易记忆的密码系统,如名诗中交织的句子、你小时候编的词语等等。现在,你以及进入了无名安全的领域。无论你选择了什么系统,对于不知道你秘密算法的攻击者来说,它看起来都应该是随机的词串。例如,从一首晦涩的诗中选出一行来作密语并不是一个好主意,因为3到10个单词包含的信息熵太少了。而在你最喜欢的八首诗中选择13个词串联起来得密语,看起来会更随机一些。

  为什么这个系统拥有其他三项性能

  上面提到的WarpWallet协议应该是安全的。它当然是免费的,几乎世界上任何处于困境的地方都能访问这个协议。最大的问题在于你是否会把它搞砸。我们能想到的错误是:

  你忘记了密语

  你错误地发布了你的密钥或密语。

  WarpWallet的代码消失或变得不可执行。

  你的浏览器出错,得到错误的回应。

  上面我们已经讨论过密语的遗忘和提醒。你必须仔细操作,避免在钱币传输协议中粗心犯错。只要GitHub还继续运行,你还可以在我们的GitHub库里面签出,就会有一个独立、公开、自证实的WarpWallet版本可供使用。我们将用PGP key (ID: 4748 4E50 656D 16C7)记录所有后续版本。

  考虑软件的错误是有趣的。当我们建立WarpWallet的时候,我们用两个不同的软件栈实现了两次算法,并检出得到了相同的答案。要运行测试,就要检查信息库并运行npm install -d; make test.

  不过,你应该采取进一步的预防措施。在步骤4中,将HTML转移到物理隔离机后,你要进行一些测试。选一些废弃的密码,在你的联网设备和物理隔离机上进行哈希。如果签出成功,结果匹配,就可以生成一个临时密码并将少量的币转移到WarpWallet,然后第二天又将币转回去。你可以进行多次测试,直至放心为止。

1405300870235

  对于其他系统的调查

  在上面,我们声称我们的系统比其他竞争对手更好。让我们更深入地看看Coinbase及其他在线钱包。

  许多人在Coinbase购买比特币,是因为它是一个大公司,有着优秀的工程师,并且宣称会采取严格的安全措施。但是,也许你不该一直把币放在那儿。Coinbase再好、再安全不过相当于一个非FDIC(联邦存款保险公司)担保的银行,也许还没那么安全。我的意思是,银行很容易发生物理爆窃、台账错误的问题,甚至还有我们不敢去想的——核心员工的敲诈。比银行更甚的是,Coinbase像磁石一般吸引了XSS、CSRF和网络钓鱼的攻击。虽然他们的安全性一直很好,但是它们与那些坚定强劲的攻击者之间的战争是持久的。最后,Coinbase没有得到FDIC或是其他机构的担保,所以和银行存款不同,你在Coinbase的币会因为“银行挤兑”或突然经营失败消失。

  而在其他网上银行和钱包身上,我们已经看到了一些金融诈骗和程序员“诚实的”错误夺去客户存款的例子。

  运行你自己的钱包

  任何人,只要有一个电缆调制解调器和一些额外的存储空间,就可以运行自己的钱包(包括区块链或不包括区块链的)。如果你经常进行交易,运行自己的钱包就很有意义。然而,因为你的币容易被盗和丢失,你的长期储存会变得容易受到攻击。未加密的备份可以让你快速找回钱包,但同时也帮了小偷的忙。也许这里的平衡点就是加密的备份。在我们认识到我们只对加密备份(如果他们被复制到很多不同的地方)感到安心之前,我们几乎是大力提倡这个系统。在这一点上,加密技术——不持有加密文件——保证了你的币安全。因此,换句话说,你还是要记住一个好的密语及选一个好的加密系统,还要妥善管理文件并相信自己一旦需要就能解密。这就像许多机器没有得到额外的保护,最终它们的可回收程度就会降低。

  纸钱包与离线U盘

  假设你用于生成钱包或存储到U盘的设备没有受到损害,那么纸钱包和离线U盘在防盗上就更安全。然而,离线存储很容易受到损失。你会在火灾中失去它们;你也可能不小心把它们扔掉。一些离线存储钱包放在保险箱中,但这样的保管昂贵、不方便且在某些情况下有被没收的风险。

  密钥共享

  使用密码术的密钥共享,你可以将你的钱包拆成7个部分,其中任意4个都可以重新组合钱包。试想一下,给自己留一部分,在办公室存一部分,给家人或朋友留下一部分。这样的方法在原则上显得优雅,在实际上却容易出错。

  总结

  欢迎使用WarpWallet,并按照我们上面的一步一步的指示来长期储存你的比特币。

  ----

  原文:http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin

  作者:Maxwell Krohn

  译者:Odim(微博@OdimLee)

  译者BTC地址: 185KPeZ3dEEAuFB3DbnqHgujakouAttHKY

知识: 杰森·伯恩