區塊鏈鼻祖比特幣之3:驗證訊息真偽的數字簽名

尹成發表於2018-04-26

我們前面已經提到,當一筆交易發生以後,會傳播給比特幣網路上的所有節點,交易是否已經發生了。例如清華尹成將5個比特幣支付給小鄭後,資訊就傳播給其他人。就像在朋友圈大聲說我結婚了。

 

但是和微信的朋友圈不同的是,微信的朋友圈大家都是朋友,所以我相信這是你做的決定。比特幣網路是完全匿名的。所以那麼我怎麼知道是清華尹成將要完成這筆支付呢?這就涉及到對資料進行數字簽名。每一位所有者通過對前一次交易和下一位擁有者的公鑰(Public key) 簽署一個隨機雜湊的數字簽名,並將這個簽名附加在這枚電子貨幣的末尾,電子貨幣就傳送給了下一位所有者。而收款人通過對簽名進行檢驗,就能夠驗證該鏈條的所有者。



數字簽名是一種精巧的設計。對於一個賬戶來說,包含了兩個密碼。一個是私密,一個是公密。私密是隻能只有持有的,也就是說,私密表示了對於這一賬戶的唯一所有權。公密是所有的人都可以有的,用於驗證。

一個比特幣錢包中包含一系列的金鑰對,每個金鑰對包括一個私鑰和一個公鑰。私鑰(k)是一個數字,通常是隨機選出的。有了私鑰,我們就可以使用橢曲線乘法這個單向加密函式產生一個公鑰(K)。有了公鑰(K),我們就可以使用一個單向加密雜湊函式生成比特幣地址(A)。在本節中,我們將從生成私鑰開始,講述如何使用橢圓曲線運算將私鑰生成公鑰,並最終由公鑰生成比特幣地址。私鑰、公鑰和比特幣地址之間的關係如下圖所示私鑰就是一個隨機選出的數字而已。


一個比特幣地址中的所有資金的控制取決於相應私鑰的所有權和控制權。在比特幣交易中,私鑰用於生成支付比特幣所需的簽名以證明資金的所有權。私鑰必須始終保持機密,因為一旦被洩露給第三方,相當於該私鑰保護之下的比特幣也拱手相讓了。私鑰還必須進行備份,以防意外丟失,因為私鑰一旦丟失就難以復原,其所保護的比特幣也將永遠丟失。比特幣私鑰只是一個數字。你可以用硬幣、鉛筆和紙來隨機生成你的私鑰:擲硬幣 256 次,用紙和筆記錄正反面並轉換為 0 1,隨機得到 256 位二進位制數字可作為比特幣錢包的私鑰。該私鑰可進一步生成公鑰。

在上面的交易中,尹成的交易資訊在傳播給網路時,會附帶上尹成的數字簽名。我們知道了尹成的數字簽名幾乎不能夠得出尹成的私密。但是卻能夠通過尹成的公密來很容易的驗證到這是尹成發出的資訊,所以我認為這就是尹成本人無誤。是不是感覺很不可思議呢?一定都玩過數獨也就是9宮格遊戲吧。有時候我們很費勁的去得到數獨遊戲的解,但是我們可以卻很容易的去驗證結果是正確的。考慮一下這是100宮格,1000宮格呢?是不是得到結果很費勁,但是驗證結果卻很容易呢?將任何一串資料輸入到SHA256將得到一個256位的Hash值(雜湊值)。其特點:相同的資料輸入將得到相同的結果。輸入資料只要稍有變化(比如一個1變成了0)則將得到一個千差萬別的結果,且結果無法事先預知。正向計算(由資料計算其對應的Hash值)十分容易。逆向計算(俗稱“破解”,即由Hash值計算出其對應的資料)極其困難,在當前科技條件下被視作不可能。




網址:http://www.qukuailianxueyuan.io/



欲領取造幣技術與全套虛擬機器資料

區塊鏈技術交流QQ群:756146052  備註:CSDN

尹成學院微信:備註:CSDN



相關文章