區塊鏈與密碼學全民課堂第1-4講:比特幣的交易

買賣虛擬貨幣
導語:本課堂用通俗易懂的系列內容為大家呈現區塊鏈與密碼學領域相關知識。這裡有知識也有故事,從感興趣到有樂趣,全民課堂等你來學。這個系列中的課程內容首先從比特幣著手進行入門介紹,再延伸至區塊鏈的相關技術原理與發展趨勢,然後深入淺出地依次介紹在區塊鏈中應用的各類密碼學技術。歡迎大家訂閱本公眾號,持續進行學習。【本課堂內容全部選編自PlatON首席密碼學家、武漢大學國家網路安全學院教授、博士生導師何德彪教授的《區塊鏈與密碼學》授課講義】1.4. 比特幣的交易

比特幣交易有兩種型別,一種是Coinbase交易,也就是挖礦獎勵的比特幣,這種交易沒有傳送人。另一種就是我們常見的普通交易了,即普通地址之間的轉賬交易。我們可以看到下圖中有無數密密麻麻的字元組成的字串,這些字串有什麼作用呢?

接下來我們看一組字串:

18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725
16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM

這看似毫無關聯的字串,其實是一對“拜把子兄弟”,「私鑰」和「公鑰」。在比特幣系統中,私鑰相當於身份證,能夠證明你的身份。而公鑰相當於家庭住址,大家可以透過公鑰找到你。公鑰是透過私鑰“轉化”而來,所以具有唯一性。也就是說,你的家只能透過你的身份證開啟,但是如果你的身份證丟了可不支援補辦哦~那麼私鑰是如何轉換為公鑰的呢?

比特幣使用了secp256k1橢圓曲線,其描述引數為:

E : y^2 ≡ x^3 + ax + b (mod p)
p: 代表有限域Fp的那個質數
a,b:橢圓方程的引數
G: 橢圓曲線上的一個基點G = (xG, yG)
n:G在階

橢圓曲線?有限域?基點?看不懂沒關係,也不用在乎公式是怎樣計算的,我們可以把它當做一個“轉化方式”,可以從私鑰轉化為公鑰,再起一個比較簡單的名字,比如“乾坤大挪移”。


比特幣科普之非對稱加密

1976年,W.Diffie和M.Hellman在IEEE Trans.on Information刊物上發表了“ New Direction in Cryptography”文章,提出了“非對稱密碼體制即公開金鑰密碼體制”的概念,開創了非對稱加密的先河。

例如,我們要去取一份機密檔案,輸入蘋果,對方顯示蘋果才可以解密,就像我們日常去銀行取錢輸入的六位密碼,這是對稱加密。而非對稱加密則是,輸入蘋果,對方是香蕉才能解密。“天王蓋地虎,寶塔鎮河妖”可以說就是運用了非對稱加密。

非對稱加密演算法需要兩個金鑰:公開金鑰(publickey:簡稱公鑰)和私有金鑰(privatekey:簡稱私鑰)。公鑰與私鑰是一對,如果用公鑰對資料進行加密,只有用對應的私鑰才能解密。因為加密和解密使用的是兩個不同的金鑰,所以這種演算法叫作非對稱加密演算法。 

非對稱加密演算法實現機密資訊交換的基本過程是:甲方生成一對金鑰並將公鑰公開,需要向甲方傳送資訊的其他角色(乙方)使用該金鑰(甲方的公鑰)對機密資訊進行加密後再傳送給甲方;甲方再用自己私鑰對加密後的資訊進行解密。甲方想要回復乙方時正好相反,使用乙方的公鑰對資料進行加密,同理,乙方使用自己的私鑰來進行解密。

注:部分說明來源百度百科

比特幣地址產生的過程就像是在工廠的流水線上生產一瓶啤酒,需要經過多個計算步驟最後才能產生比特幣地址。

下面我們一起看看,在比特幣工廠,如何在流水線上產生一條質量合格的比特幣地址:

第一步:產生私鑰  
隨機選取32位元組的數字,大小介於1~0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之間

第二步:產生非壓縮公鑰(pubKey)
使用“乾坤大挪移”演算法(橢圓曲線加密演算法 ECDSA-secp256k1)計算私鑰所對應的非壓縮公鑰。

第三步:X=SHA-256(pubKey)
得到公鑰之後,進一步計算公鑰的SHA-256雜湊值

第四步:Y=RIPEMD-160(X)
取上一步結果,計算RIPEMD-160雜湊值。

第五步:Z=addr version+Y
取上一步結果,前面加入地址版本號(比特幣主網版本號“0 x 00”)

第六步:H=SHA-256(Z)
取上一步結果,計算SHA-256雜湊值

第七步:K=SHA-256(H)
取上一步結果,計算SHA-256雜湊值

第八步:len(K)[0:4]
取上一步結果的前4個位元組(8位十六進位制)

第九步:A=Z+ len(K)[0:4]
把這4個位元組加在第五步的結果後面,作為校驗。這就是比特幣地址的16進位制形態啦!

最後一步:base58(A)
用base58表示法變換一下地址,這就是最常見的比特幣地址形態啦。

我們拿出這堂課最初展示的比特幣地址:
16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM。來舉例說明比特幣地址的生產過程。

舉個例子

1. 隨機選取一個32位元組的數作為私鑰

(大小介於1~0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之間) :
18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725

2. 使用“乾坤大挪移”演算法(橢圓曲線加密演算法 ECDSA-secp256k1)計算私鑰所對應的非壓縮公鑰:

(共65位元組,1位元組0x04,32位元組為x座標,32位元組為y座標)
0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6

3. 計算公鑰的SHA-256雜湊值:

600FFE422B4E00731A59557A5CCA46CC183944191006324A447BDB2D98D4B408

4. 計算上一步雜湊值的RIPEMD-160雜湊值: 

010966776006953D5567439E5E39F86A0D273BEE

5. 在上一步結果之間加入地址版本號:

(如比特幣主網版本號"0x00")
00010966776006953D5567439E5E39F86A0D273BEE

6. 計算上一步結果的SHA-256雜湊值:

445C7A8007A93D8733188288BB320A8FE2DEBD2AE1B47F0F50BC10BAE845C094

7. 再次計算上一步結果的SHA-256雜湊值:

D61967F63C7DD183914A4AE452C9F6AD5D462CE3D277798075B107615C1A8A30

8. 取上一步結果的前4個位元組:(8位十六進位制數)D61967F6,把這4個位元組加在第五步結果的後面,作為校驗。

(這就是比特幣地址的16進位制形態)
00010966776006953D5567439E5E39F86A0D273BEED61967F6

9. 用base58表示法變換一下地址,就變成我們最初的那個地址啦!
16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM

16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM

就是我們常說的公鑰,也就是錢包地址。我們以為的錢包有可能是這樣的:

但其實比特幣錢包是一個抽象的概念,就是儲存和管理比特幣地址以及對應公私鑰對的軟體。根據終端型別的不同,比特幣錢包可以分為桌面錢包、手機錢包、網頁錢包和硬體錢包。

按照私鑰的儲存方式,可以分為冷錢包、熱錢包兩種。

冷錢包是指網際網路不能訪問到私鑰的錢包:

冷錢包往往依靠“冷”裝置確保比特幣私鑰的安全,比如不聯網的電腦、手機、寫著私鑰地址的小本本等。冷錢包避免了被駭客盜取私鑰的風險,但是可能面臨物理安全風險,比如電腦丟失損壞等。

熱錢包是指網際網路能夠訪問私鑰的錢包:

熱錢包往往是線上錢包的形式。使用熱錢包時,最好在不同平臺設定不同密碼,且開啟二次認證,以確保自己的資產安全。

比特幣科普之Hash不是加密?

Hash是比特幣系統中很重要的一個概念,不少人認為Hash是加密,其實是一種誤解。Hash和加密是兩種不同的密碼學技術。加密是對傳遞資料進行編碼處理的技術手段,使得編碼後的資料對於未獲知具體處理方式的其他方不可讀。通常,我們將明文轉換為密文的過程稱為“加密”。

而Hash(雜湊)又稱數字摘要、雜湊、雜湊、指紋,是以任意長度的資料為輸入輸出相應固定長度的值。在區塊鏈中,賬戶與交易都涉及雜湊函式的使用。

全民課堂第1-4講今天就講到這裡啦,比特幣讓無數的“淘金者”瘋狂,投身進入挖礦的大部隊中,比特幣究竟是如何挖出來的呢?下一節課我們將詳解比特幣的挖礦原理。敬請期待~

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;