1. 程式人生 > >比特幣交易與錢包、地址的來歷與關係

比特幣交易與錢包、地址的來歷與關係

	想知道更多區塊鏈技術,請搜尋【鏈客區塊鏈技術問答社群】進入

今天講一講比特幣中公鑰私鑰、錢包和地址的來歷和關係,這一段我感覺是比較難得,所以特意說一說。

對比特幣熟悉的朋友一定都知道,買賣比特幣最後都是通過一個錢包地址來實現的,就像我們日常使用的銀行卡卡號,我們隨便找一個比特幣的錢包地址,大家看一下:
1QCXRuoxWo5Bya9NxHaVBArBQYhatHJrU7

下面,來給大家講解一下比特幣的錢包地址是怎麼來的,公鑰、私鑰是怎麼來的,以及他們三者之間的關係。
眾所周知,比特幣是建立在數學加密學基礎上的,而不是像銀行卡那樣是基於信用的,基於信用體系的銀行卡卡號我們都熟悉,是我們在向銀行申請銀行卡的時候銀行給隨機發的,那麼比特幣的錢包地址是怎麼來的呢?

在《比特幣:一種點對點的電子現金系統》一文中,中本聰提到了用橢圓加密演算法(ECDSA)來產生比特幣的私鑰和公鑰。
基於橢圓加密的原理,由私鑰是可以計算出公鑰的,再由公鑰經過一系列數字簽名運算就會得到比特幣錢包地址。
因為由公鑰可以算出比特幣地址,所以我們經常把公鑰和比特幣地址的說法相混淆,他們都是指的同一個概念,比特幣錢包地址只是另一種格式的公鑰,但是兩者的外在表現形式是不一樣的。
那麼我們就可以梳理出一個脈絡了:
私鑰 —— 公鑰 —— 比特幣錢包地址
從比特幣私鑰得到我們日常轉賬所用的比特幣錢包地址總共需要九個步驟,中間用到了SHA256加密、RIPEMD160加密和BASE58編碼。

第一步:生成隨機私鑰
私鑰是一個隨機數,隨機選取一個32位元組的數,這個數的範圍大小是介於1 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之間的一個數,為了方便後面的計算,我們隨機生成一個合法的私鑰:
8F72F6B29E6E225A36B68DFE333C7CE5E55D83249D3D2CD6332671FA445C4DD3

第二步:橢圓曲線算公鑰
生成了私鑰之後,我們使用橢圓曲線加密演算法(ECDSA-secp256k1)計算私鑰所對應的非壓縮公鑰,生成的公鑰共65位元組, 其中一個位元組是0x04,其中32個位元組是X座標,另外32個位元組是Y座標:

公鑰P.X:
06CCAE7536386DA2C5ADD428B099C7658814CA837F94FADE365D0EC6B1519385

公鑰P.Y:
FF83EC5F2C0C8F016A32134589F7B9E97ACBFEFD2EF12A91FA622B38A1449EEB

第三步:計算公鑰的SHA-256雜湊值

將上述公鑰地址拼合,得到標準地址:
0406CCAE7536386DA2C5ADD428B099C7658814CA837F94FADE365D0EC6B1519385FF83EC5F2C0C8F016A32134589F7B9E97ACBFEFD2EF12A91FA622B38A1449EEB

對齊進行SHA-256雜湊計算,得到結果:
2572e5f4a8e77ddf5bb35b9e61c61f66455a4a24bcfd6cb190a8e8ff48fc097d

第四步:計算 RIPEMD-160雜湊值
取上一步結果,進行RIPEMD-160計算,得到結果:
0b14f003d63ab31aef5fedde2b504699547dd1f6

第五步:加入地址版本號(比特幣主網版本號“0x00”)
取上一步結果,在前面加上16進位制的00,即:
000b14f003d63ab31aef5fedde2b504699547dd1f6

第六步:計算 SHA-256 雜湊值
取上一步結果,進行SHA-256計算,可得:
ddc2270f93cc84cc6869dd373f3c340bbf5cb9a8f5559297cc9e5d947aab2536

然後,對以上結果再次計算 SHA-256 雜湊值,得到:
869ac57b83ccf75ca9da8895823562fffb611e3c297d9c2d4612aeeb32850078

第七步:取上一步結果的前4個位元組(8位十六進位制)
869ac57b

第八步:把這4個位元組加在第五步的結果後面
作為校驗位,將這4個位元組載入第五步的結果後面,這就是比特幣地址的16進位制形態了:
869ac57b000b14f003d63ab31aef5fedde2b504699547dd1f6

第九步:用Base58編碼變換一下地址
對上一步的結果進行Base58編碼,得到:
1QCXRuoxWo5Bya9NxHaVBArBQYhatHJrU7

這就是我們經常看到的傳統意義上的比特幣錢包地址了。

好了,今天講的就到這裡了,希望對大家多少都有點用處,要不然就白寫了,最後感謝大家閱覽,希望大家多多打賞哈~