打字猴:1.703865741e+09
1703865741 区块链技术驱动金融:数字货币与智能合约技术 [:1703863927]
1703865742 区块链技术驱动金融:数字货币与智能合约技术 4.2 热储存与冷储存
1703865743
1703865744 如我们所看到的,把比特币放在你的个人电脑里就像把钱放在钱包里带着,这叫“热储存”。这很方便但很不安全。而另一方面,“冷储存”是离线的,把比特币锁在其他地方。冷储存不联入互联网,是封存起来的。所以相对安全和保险,但是很显然不方便。这就像你带着一些零钱出去,但是把终生积蓄锁在保险箱里的道理一样。
1703865745
1703865746 要分开热储存和冷储存,你也必须要用不同的私钥,否则如果热储存被人破坏了,冷储存也会处于危险之中。你也需要把币在两边转来转去,这样两边都需要知道对方的地址或公钥。
1703865747
1703865748 因为冷储存是离线的,所以热储存与冷储存无法通过网络相连,但其实冷储存不需要上线就可以接收比特币——热储存端知道冷储存的地址,所以它随时可以给冷储存转账。当你觉得你的钱包里的钱太多的时候,你可以把一部分的币转到冷储存,但不需要让冷储存上线而暴露自己。当然,只要冷储存上线,就可以接收到区块链的转账信息,然后可以随意处理这些比特币。
1703865749
1703865750 但管理冷储存有一个小问题:一方面,为了私密性和其他考虑,我们希望使用不同的地址(这些地址有不同的密钥)收款。所以我们把比特币从热储存转到冷储存的时候,要用一个新的冷储存地址。但是由于冷储存不上线,所以热存储端必须要能找到这样的地址。
1703865751
1703865752 一个直接的解决方案是让冷储存一次性生成一批地址,然后把地址列表发送给热储存,热储存可以依次使用这些地址,当然,这个方法的缺陷是为了传送地址,我们不得不经常让冷储存端上线。
1703865753
1703865754 分层确定性钱包
1703865755
1703865756 一个比较有效的解决办法是使用一个分层确定性钱包(hierarchical deterministic wallet)。这个方法可以让冷储存端制造无限制的地址数量,然后通过一个短暂的、一次性的交换,让热储存端知晓所有地址。但这需要使用密码学的技巧。
1703865757
1703865758 回想一下,我们在第1章谈到密钥生成和电子签名时,我们使用了“generateKeys”来生成一个公钥(也就是地址)和一个私钥。在分层确定性钱包里,生成密钥的方式不太一样。不同于生成一个单一地址,我们生成一个被称为“地址生成信息”的东西;我们也不只生成私钥,而是生成“私钥生成信息”。有了地址生成信息,我们就可以生成一系列地址。我们把地址生成信息和一个整数i作为地址生成函数的输入参数,就生成了序列里的第i个地址。同样,我们用私钥生成信息来生成一系列私钥。
1703865759
1703865760 密码学的神奇之处在于:对于每个i而言,第i个地址和第i个私钥相匹配——换言之,第i个私钥控制第i个地址的比特币,就好像这是用经典办法产生的。这样一来,我们就有一长串配对的公钥和密钥。
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
1703865775 私钥生成信息:k,x,y
1703865776
1703865777 第i个私钥:x=y+H(k‖i)
1703865778
1703865779 地址生成信息:k,gy
1703865780
1703865781 第i个公钥:gxi=gH(k‖i)·gy
1703865782
1703865783 第i个地址:H(gxi)
1703865784
1703865785 分层确定性钱包有我们需要的所有特性:两方都可以生成公钥/私钥序列,而且这些公钥/私钥相互配对(因为与私钥x对应的公钥就是gx)。而且,这种方法还具有另外一种我们尚未提及的特性:当你向外提供这些公钥时,这些公钥之间没有联系,也就是说,别人无法断定这些公钥来自同一个钱包。稻草人方案(冷储存端生成大量的地址)也具有这种特性,但我们需要小心地保护这些地址,因为这些地址事实上并不是独立生成的。这种特性对于保护隐私和实现匿名是至关重要的,我们将在第6章展开讨论。
1703865786
1703865787 分层确定性钱包有两种不同的安全性,热储存端的安全性较低。如果热储存受到损害,那么上文提到的非相关性就不复存在,但这种情况下,私钥(以及比特币)仍然是安全的。通常,分层确定性钱包支持任意多个安全等级——这也是“分层”的由来——虽然,我们还没有讨论细节。这种安排非常有用,例如,当一家公司内部存在多种授权级别时,就需要这种特性。
1703865788
1703865789 现在,我们讨论一下冷储存如何保存信息(私钥或私钥生成信息)。第一种方式是将信息保存在某个设备(例如笔记本电脑、手机或平板电脑,或U盘)中,然后将这个设备好好保管,最好是让这些设备断开网络,并将其锁起来,这样,如果有人想盗取信息,那么他首先需要进入这些设备的保存处。
1703865790
[ 上一页 ]  [ :1.703865741e+09 ]  [ 下一页 ]