分享

更多

   

为什么比特币地址不直接使用公钥,而需要通过哈希生成?为什么每次付款都应该设置找零地址?

2017-09-22  易衡知行

我们知道,每个人的比特别钱包中有多个比特币地址,每个比特币地址代表一定数量的比特币。而比特币地址是通过一个公钥通过哈希(RPIEMD SHA)生成的,这个公钥又是由私钥通过椭圆曲线(ECC)生成的。私钥保存在比特币钱包中,不应泄露出去。而公钥在付款交易时,需要和比特币地址一起,通过交易记录公开发布,由区块链系统验证付款交易的有效性。

那么,为什么比特币地址不直接使用公钥呢?公钥用来验证私钥的签名,将它当做比特币地址,不是更方便么!为什么需要费事儿地再通过哈希生成一个比特币地址呢?如果你弄明白这件事儿的原因,你就一定会感谢中本聪,把这么一个奇巧无比的机制带给我们!

请结合下图理解,第一行是收款方她的比特币钱包中一个她的比特币地址(HerBitcoinAddr)。第二行是付款方我的比特币钱包中一个我的比特币(MyBitcoinAddr)。我要付款给她,那么我生成的交易记录如下灰色方框所示,含有我的公钥(MyPubKey),我的比特币地址(MyBitcoinAddr),她的比特币地址(HerBitcoinAddr),还有付款信息和我通过我的私钥进行的签名(Signature)。

请注意,灰色方框中的交易记录是公开的,也就是说,如果她只想收款,那么她只需要公开她的比特币地址(HerBitcoinAddr)即可,不需要公开其它任何信息。而我需要付款,那么我除了公开我的比特币地址(MyBitcoinAddr)以外,还需要公开我的公钥(MyPubKey)和签名(Signature)。

这说明了什么呢?根据非对称算法(PKI)原理,从私钥可以生成公钥,但是从公钥无法反推出私钥。注意,“从公钥无法反推出私钥“这个表述并不正确!其实,从公钥是可以反推出私钥的,只是很难很难而已。现代智人认为,未来的量子计算机,是可以从公钥反推出私钥的。因此,在比特币公开的交易记录中包含付款人我的公钥(MyPubKey),使得付款人我的这个比特币地址(MyBitcoinAddr)中的钱是不安全的。

而对于收款方她的比特币地址,因为她只公开了她的比特币地址,而量子计算是无法通过哈希值复原原始内容的,就是无法通过她的比特币地址复原她的公钥的,从而更无法推出她的私钥,所以可以认为她的比特币地址是安全的。

那么,作为付款人的我,当我付完钱之后,我的比特币地址(MyBitcoinAddr)不就公开了么,不就不安全了么,该怎么办呢?正确的做法请见下图,我每次付款的时候,都应该再提供一个找零地址(MyBitcoinAddr2),这个找零地址需要是我从未公开过它的公钥(MyPubKey2)的比特币地址,也就是我从未用它付过款。我在付款的时候,将付款用的比特币地址(MyBitcoinAddr)中剩下的钱,都转账给我的找零地址(MyBitcoinAddr2)。

也就是说,每次付款,我的付款比特币地址(MyBitcoinAddr)都作废了,而钱分别转移到收款人她的比特币地址(HerBitcoinAddr)中,和我自己的找零地址(MyBitcoinAddr2)中。因为HerBitcoinAddr和MyBitcoinAddr2都从未付过款、公钥都从未公开过,所以,即使量子计算时代降临,这两个比特币地址中的钱还都是安全的

再次感谢中本聪,把比特币这么一个奇思妙想的东西带给我们!

Reference:

0. 老宋的独家号

1.Open source P2P money

2.https://bitcoin.org/bitcoin.pdf

注:本文为老宋原创文章,转载前请至【知乎专栏-老宋的独家号】点赞或评论建议。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话:4000070609 与我们联系。

    猜你喜欢

    0条评论

    发表

    类似文章 更多
    喜欢该文的人也喜欢 更多