转自币氪:http://btc.qklchain.com/
1,比特币地址是如何成的
2,比特币公钥和比特币地址的关系
3,比特币公私钥的安全性
4,量子计算对比特币的安全影响
我们知道,每个人的比特别钱包中有多个比特币地址,每个比特币地址代表一定数量的比特币。而比特币地址是通过一个公钥通过哈希(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都从未付过款、公钥都从未公开过,所以,即使量子计算时代降临,这两个比特币地址中的钱还都是安全的。