1703865761
1703865762
密码学的另一个技术优点是安全性——地址生成信息并不会泄露关于私钥本身的任何信息。这意味着你可以放心地把地址生成信息给任何人,他就可以用它来生成第i个密钥。
1703865763
1703865764
并不是所有的电子签名算法目前都可用于生成分层确定性密钥。比特币使用的电子签名算法ECDSA支持分层密钥,让我们可以使用这个技巧。即冷储存端生成任意多个密钥,热储存端生成相应的地址,见图4.2。
1703865765
1703865766
1703865767
1703865768
1703865769
图4.2 分层确定性钱包示意
1703865770
1703865771
注:冷储存端生成和保存私钥生成信息和地址生成信息,然后将地址生成信息一次性转给热储存端。当热储存端要给冷储存端转账时,就按次序生成新的地址。冷储存端上线后,也会按顺序生成地址,然后查收相应地址收到的款项,直到某一地址没有收款位置。如果冷储存端需要向热储存端转账,它就会按顺序生成私钥序列。
1703865772
1703865773
ECDSA的工作机制如下:通常一个ECDSA私钥是一个随机数x,其对应的公钥是gx。为了生成分层确定性密钥,我们需要另外两个随机数k和y。
1703865774
1703865776
1703865777
第i个私钥:x=y+H(k‖i)
1703865778
1703865780
1703865781
第i个公钥
:gxi=gH(k‖i)·gy
1703865782
1703865784
1703865785
分层确定性钱包有我们需要的所有特性:两方都可以生成公钥/私钥序列,而且这些公钥/私钥相互配对(因为与私钥x对应的公钥就是gx)。而且,这种方法还具有另外一种我们尚未提及的特性:当你向外提供这些公钥时,这些公钥之间没有联系,也就是说,别人无法断定这些公钥来自同一个钱包。稻草人方案(冷储存端生成大量的地址)也具有这种特性,但我们需要小心地保护这些地址,因为这些地址事实上并不是独立生成的。这种特性对于保护隐私和实现匿名是至关重要的,我们将在第6章展开讨论。
1703865786
1703865787
分层确定性钱包有两种不同的安全性,热储存端的安全性较低。如果热储存受到损害,那么上文提到的非相关性就不复存在,但这种情况下,私钥(以及比特币)仍然是安全的。通常,分层确定性钱包支持任意多个安全等级——这也是“分层”的由来——虽然,我们还没有讨论细节。这种安排非常有用,例如,当一家公司内部存在多种授权级别时,就需要这种特性。
1703865788
1703865789
现在,我们讨论一下冷储存如何保存信息(私钥或私钥生成信息)。第一种方式是将信息保存在某个设备(例如笔记本电脑、手机或平板电脑,或U盘)中,然后将这个设备好好保管,最好是让这些设备断开网络,并将其锁起来,这样,如果有人想盗取信息,那么他首先需要进入这些设备的保存处。
1703865790
1703865791
大脑钱包
1703865792
1703865793
第二种方法我们称之为大脑钱包(brain walle)。这种方式下,你通过一个密码就可以支取比特币。大脑钱包无须使用硬件、纸张或者其他长期储存介质。大脑钱包在物理安全性较差的情况下(例如跨国出差、旅行时)非常有用。
1703865794
1703865795
大脑钱包的主要原理是用一个可预测的算法把一个口令变成一对公钥/私钥。例如,你可以选择一个哈希算法将口令转译成一个私钥。在给定私钥的情况下,可以用同样的方法得到私钥。进一步地,结合前文所提到的分层确定性钱包技术,你可以根据口令生成一整套地址和私钥,从而实现钱包的完整功能。
1703865796
1703865797
但是,如果一个黑客猜到你的口令的话,他还是可以偷走你大脑钱包里的所有私钥。在电脑安全领域里,我们通常假定黑客知道你生成密钥的步骤,黑客不知道的只是你的口令。所以黑客可以尝试使用不同的口令,生成地址,并在区块链中查看这些地址上是否还存在未被使用的比特币,一旦发现比特币,黑客就可以迅速把这些比特币转给自己。黑客可能永远都不知道(或者根本不关心)这些比特币属于谁,这类攻击也不需要入侵任何设备,猜口令不针对任何人,所以也不会留下任何痕迹。
1703865798
1703865799
这种方法与尝试破解电子邮箱密码的方法不同,邮件服务器通常对密码试错有一定的次数或频率限制(被称为在线猜测),但是对于大脑钱包而言,黑客可以下载一堆未被使用的比特币的地址,然后用电脑程序去慢慢地试错,黑客都不需要知道大脑钱包的地址,这被称为离线猜测或者密码破解。相应地,设置口令的难度大大增加了,又要容易记,又要不容易被猜中。一种安全的方法是使用自动程序生成一个80位的数字,然后将其转换成口令。
1703865800
1703865801
1703865802
生成一个可记忆的口令
1703865803
1703865804
有一种简便的方法可以生成口令:从最常用的10 000英语词汇中,随机选择6个词,从而生成大致80位长度的字节[6×log2(10 000)大致等于80]。很多人发现这个方法比随机取字母容易记忆,因为这种方法生成的口令通常是下面这样子的:
1703865805
1703865806
worn till alloy focusing okay reducing
1703865807
1703865808
earth dutch fake tired dot occasions
1703865809
1703865810
在实际操作中,我们可以让程序生成密钥的速度变慢(为程序加入一个延迟),这样,黑客通过试错法来破解私钥就需要花费很长的时间,这就是所谓的密钥延展(key stretching)。比如,为了使密钥生成变慢,我们可以让程序把本来很容易计算的哈希函数SHA-256算上220次,这样一来就把黑客的工作量增加了220倍。当然,如果太慢的话,用户在使用比特币的时候,也会计算得很慢,这也很麻烦。
[
上一页 ]
[ :1.703865761e+09 ]
[
下一页 ]