打字猴:1.703865702e+09
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
1703865741 区块链技术驱动金融:数字货币与智能合约技术 [:1703863927]
1703865742 区块链技术驱动金融:数字货币与智能合约技术 4.2 热储存与冷储存
1703865743
1703865744 如我们所看到的,把比特币放在你的个人电脑里就像把钱放在钱包里带着,这叫“热储存”。这很方便但很不安全。而另一方面,“冷储存”是离线的,把比特币锁在其他地方。冷储存不联入互联网,是封存起来的。所以相对安全和保险,但是很显然不方便。这就像你带着一些零钱出去,但是把终生积蓄锁在保险箱里的道理一样。
1703865745
1703865746 要分开热储存和冷储存,你也必须要用不同的私钥,否则如果热储存被人破坏了,冷储存也会处于危险之中。你也需要把币在两边转来转去,这样两边都需要知道对方的地址或公钥。
1703865747
1703865748 因为冷储存是离线的,所以热储存与冷储存无法通过网络相连,但其实冷储存不需要上线就可以接收比特币——热储存端知道冷储存的地址,所以它随时可以给冷储存转账。当你觉得你的钱包里的钱太多的时候,你可以把一部分的币转到冷储存,但不需要让冷储存上线而暴露自己。当然,只要冷储存上线,就可以接收到区块链的转账信息,然后可以随意处理这些比特币。
1703865749
1703865750 但管理冷储存有一个小问题:一方面,为了私密性和其他考虑,我们希望使用不同的地址(这些地址有不同的密钥)收款。所以我们把比特币从热储存转到冷储存的时候,要用一个新的冷储存地址。但是由于冷储存不上线,所以热存储端必须要能找到这样的地址。
1703865751
[ 上一页 ]  [ :1.703865702e+09 ]  [ 下一页 ]