轉(zhuǎn)自幣氪:http://btc.qklchain.com/
1,比特幣地址是如何成的
2,比特幣公鑰和比特幣地址的關(guān)系
3,比特幣公私鑰的安全性
4,量子計算對比特幣的安全影響
我們知道,每個人的比特別錢包中有多個比特幣地址,每個比特幣地址代表一定數(shù)量的比特幣。而比特幣地址是通過一個公鑰通過哈希(RPIEMD+SHA)生成的,這個公鑰又是由私鑰通過橢圓曲線(ECC)生成的。私鑰保存在比特幣錢包中,不應(yīng)泄露出去。而公鑰在付款交易時,需要和比特幣地址一起,通過交易記錄公開發(fā)布,由區(qū)塊鏈系統(tǒng)驗證付款交易的有效性。
那么,為什么比特幣地址不直接使用公鑰呢?公鑰用來驗證私鑰的簽名,將它當(dāng)做比特幣地址,不是更方便么!為什么需要費(fèi)事兒地再通過哈希生成一個比特幣地址呢?如果你弄明白這件事兒的原因,你就一定會感謝中本聰,把這么一個奇巧無比的機(jī)制帶給我們!
請結(jié)合下圖理解,第一行是收款方她的比特幣錢包中一個她的比特幣地址(HerBitcoinAddr)。第二行是付款方我的比特幣錢包中一個我的比特幣(MyBitcoinAddr)。我要付款給她,那么我生成的交易記錄如下灰色方框所示,含有我的公鑰(MyPubKey),我的比特幣地址(MyBitcoinAddr),她的比特幣地址(HerBitcoinAddr),還有付款信息和我通過我的私鑰進(jìn)行的簽名(Signature)。

請注意,灰色方框中的交易記錄是公開的,也就是說,如果她只想收款,那么她只需要公開她的比特幣地址(HerBitcoinAddr)即可,不需要公開其它任何信息。而我需要付款,那么我除了公開我的比特幣地址(MyBitcoinAddr)以外,還需要公開我的公鑰(MyPubKey)和簽名(Signature)。
這說明了什么呢?根據(jù)非對稱算法(PKI)原理,從私鑰可以生成公鑰,但是從公鑰無法反推出私鑰。注意,“從公鑰無法反推出私鑰“這個表述并不正確!其實(shí),從公鑰是可以反推出私鑰的,只是很難很難而已?,F(xiàn)代智人認(rèn)為,未來的量子計算機(jī),是可以從公鑰反推出私鑰的。因此,在比特幣公開的交易記錄中包含付款人我的公鑰(MyPubKey),使得付款人我的這個比特幣地址(MyBitcoinAddr)中的錢是不安全的。
而對于收款方她的比特幣地址,因為她只公開了她的比特幣地址,而量子計算是無法通過哈希值復(fù)原原始內(nèi)容的,就是無法通過她的比特幣地址復(fù)原她的公鑰的,從而更無法推出她的私鑰,所以可以認(rèn)為她的比特幣地址是安全的。
那么,作為付款人的我,當(dāng)我付完錢之后,我的比特幣地址(MyBitcoinAddr)不就公開了么,不就不安全了么,該怎么辦呢?正確的做法請見下圖,我每次付款的時候,都應(yīng)該再提供一個找零地址(MyBitcoinAddr2),這個找零地址需要是我從未公開過它的公鑰(MyPubKey2)的比特幣地址,也就是我從未用它付過款。我在付款的時候,將付款用的比特幣地址(MyBitcoinAddr)中剩下的錢,都轉(zhuǎn)賬給我的找零地址(MyBitcoinAddr2)。
也就是說,每次付款,我的付款比特幣地址(MyBitcoinAddr)都作廢了,而錢分別轉(zhuǎn)移到收款人她的比特幣地址(HerBitcoinAddr)中,和我自己的找零地址(MyBitcoinAddr2)中。因為HerBitcoinAddr和MyBitcoinAddr2都從未付過款、公鑰都從未公開過,所以,即使量子計算時代降臨,這兩個比特幣地址中的錢還都是安全的。