1703865691
1703865692
不同的密钥管理方法就是对上述三点(可获取性、安全性和便利性)做出权衡。
1703865693
1703865694
最简单的钥匙管理当然是把它们储存在你自己的本地设备上:你的个人电脑、你的手机,或你持有的、拥有的或控制的小玩意。用智能手机应用软件,按几个键你就可以支配使用你的比特币了,这么做的确非常方便。但这样做的可获取性或安全性都不是很好,如果你的设备丢失,或者你的设备死机,你需要格式化你的磁盘,或者你的文件被病毒侵蚀,你的私钥就丢失了,你的比特币也就一同丢失了。安全性方面的问题是类似的,例如有人窃取你的设备或入侵你的设备或者让你的设备中毒,将你的私钥拷贝,这样他们就可以将你所有的比特币转给他们自己了。
1703865695
1703865696
换言之,将私钥存储在你的本地设备,尤其是手机设备,就好比你将钱放在你的钱包里。在日常花销的时候是很方便,但你一定不想将你的毕生积蓄都带在身边,因为你不想遗失或被盗。所以一般而言,你只把一小部分信息——一小部分钱放在你的钱包里,而把你大部分钱存在其他地方。
1703865697
1703865698
比特币钱包软件
1703865699
1703865700
如果你想本地存放比特币,一般都会使用比特币钱包软件,也就是一个管理你的比特币和私钥信息并让你方便使用的一个应用软件。例如你想花相当于4.25美元的比特币在咖啡馆买杯咖啡,这个钱包应用应该很容易让你做到。比特币钱包非常有用,尤其是你需要处理一大堆地址和与其相关的密钥的时候。前面说过,制定一对公钥私钥很容易,你可以用其来匿名与保护你的个人隐私。钱包应用就是这样一个简单的接口,告诉你钱包里有多少比特币。当你要使用比特币的时候,它会处理关于密钥管理的一切技术细节,比如使用密钥或生成新的地址等。
1703865701
1703865702
编码解码(encoding keys):Base58编码和二维码
1703865703
1703865704
要使用或是接收比特币,你需要与对方交换地址——比特币送达的地址。目前有两种主流的方式将地址加密:一种是字符串,另一种是QR(Quick Response)码[1]。
1703865705
1703865706
为了给地址赋予一个字符串,我们把密钥的字节从二进制字符转换成Base58码。Base58就是用一个包含58个字符的字符集来编码,这被称为base58记号法。为什么是58个字符?我们把大写小写字母都算上,然后去掉几个比较容易混淆的字母,比如大写的“O”与“0”看起来很像,就得到了58个字符。我们可以将加密的地址读出来,或者在需要时也能够打印出来。理想情况下,最好能避免这种手工的方式,而是采用其他方法,例如我们接下来要讨论的QR码。
1703865707
1703865708
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
1703865709
1703865710
以上就是比特币创世块地址的Base58代码。
1703865711
1703865712
1703865713
1703865714
1703865715
图4.1 QR码
1703865716
1703865717
注:一个QR码代表着一个真实的比特币地址。请扫上面的QR码给我们转账一些比特币。
1703865718
1703865719
第二种方法是用QR码,一种简单的二维码。用QR码的好处是你可以用手机拍张照片,然后钱包应用会把QR码自动转换成代表比特币地址的字节。这对商店十分有用:比如一个付款机可以显示一个QR码,你可以用手机扫描一下,然后就可以用手机把比特币转账到付款地址。这对于手机与手机之间的转账也很有用。
1703865720
1703865721
虚荣地址
1703865722
1703865723
有些商家或个人喜欢将地址转换成一些人能够识别的字符。例如,博彩公司网站中本聪骨头(Satoshi Bones)的收款地址中就含有“骨头”(bones),如下所示的2—6位字符(1bonesEeTcABPjLzAb1VkFgySY6Zqu3sX),当然所有的地址都是1开头的,代表支付到比特币地址的标准交易或者说是标准的比特币转账流程(pay-to-pubkey-hash)。
1703865724
1703865725
地址都是通过哈希计算产生的随机字符串,那么如何才能获得含有“bones”字符串的地址呢?如果中本聪骨头只是随便制定它们的地址,无法进行逆向计算哈希函数,它们无法得到相应的私钥,也无法控制地址的生成。这样的话,它们只能不停地重复生成私钥,直到私钥中包含它们希望出现的字符串。这样的地址被称为虚荣地址(vanity address)。这种地址事实上是可以通过工具生成的。
1703865726
1703865727
一般需要多少工作量能得到这样的结果呢?由于每个字符位有58种可能性,如果你想得到一个字符串中有k个字节的特殊字符,你平均需要生成58的k次方次地址,才能获得你要的结果。所以如果要生成“bones”开头的地址则要生成超过6亿个地址!这个工作现在通过一台笔记本电脑就可以完成。但是你每增加一个字符,工作量会几何级数增长。获得一个15位字符的地址需要的计算量难以想象,而且是不间断的哈希计算,这是无法实现的。
1703865728
1703865729
1703865730
虚荣地址的加速生成
1703865731
1703865732
在比特币世界,如果我们将一个私钥称为x,公钥是gx,其地址是H(gx),即公钥的哈希值。我们不会探讨其中的细节。但是通过指数运算来生成地址显然是很慢的。
1703865733
1703865734
最直接的方式是挑选一个伪随机序列x,计算H(gx),不停地生成地址,直到得到想要的结果为止。一个更快的方式是,如果使用x无法得到想要的结果,接下来就使用x+1来计算,如此反复。而不是重新挑选一个x。因为gx+1=g gx,而我们已经计算过了gx,所以我们只需要做乘法运算而无须做指数运算,这会更快。事实上,这种方式比最直接的方式要快两个数量级以上。
1703865735
1703865736
[1]QR码是一种简单的二维码。——译者注
1703865737
1703865738
1703865739
1703865740
[
上一页 ]
[ :1.703865691e+09 ]
[
下一页 ]