七、比特幣轉賬——簽名認證:hash算法
關于比特幣的轉賬的問題,我們先前已經說過,但很粗略,尤其是在簽名認證這個點上,幾乎是一嘴帶過,現在好好說一說。
比特幣是如何轉賬的呢?我們還是以Alice向Bob轉賬5個btc為例,Alice需要聲明一下她要轉賬的這筆錢是哪來的,比特幣其實沒有余額的概念、只是一堆交易記錄,首要需要聲明要轉賬的五個btc是哪里來的、是誰轉給你的。那里Alice可以胡亂聲明嗎?不行,因為她所聲明的這些交易記錄都會被檢驗,系統會自動對之進行核對,一旦發現有沖突就會拒絕這個聲明。假設這5個btc分別來自兩筆交易,張三轉賬2btc給Alice,李四轉賬3btc給Alice。然后Alice要寫明,我將這5個btc轉賬給Bob。交易其實就算完成了。但是其它節點要對這個交易做兩點驗證:其一、這條信息是否Alice是所發,其二、Alice所聲明的交易記錄是否為真。后者比較容易,就是系統的自動核對。但前者如何進行?
現在就是要好好講講:如何驗證信息是否為Alice本人所發的。不妨想想生活中我們使用信用卡也需要簽名來確認是否為本人所使用一樣,這里需要的是數字簽名。具體流程是結合了第一集提到的的非對稱加密和hash算法的。
這個hash算法是只能驗證不能求解,什么意思?我們舉個簡單的例子,體會一下hash算法的精神;比如根號17202這個數的后幾位小數是9291430,系統只發送9291430這個數,有沒有可能猜到是哪個數的開平方后的后幾位小數呢?這就太難了。但也有辦法,那就是窮舉法,一個數一個數去嘗試,說個最笨的方式,你就從1開始嘗試,最后終于嘗試到了17202,驚喜地發現,這位仁兄、的開根號、的后幾位、就是9291430,然后你就很激動地告訴大家:這個數就是17202。大家一算果然是,你好牛啊,你是花魁啊!
咋樣,這就是hash算法,它的加密規則是公開的,就是將原本的數字開根號取后幾位小數,但你很難靠這幾位小數推測出來原本的數字,唯一的方案就是暴力破解、窮舉法,最終可以將原本的數字驗證出來,這就叫hash算法。注意,剛才只是說的一個簡單的例子,真正的hash肯定是很harsh的,是很復雜的,但都是這個氣質。
現在我們把hash算法這個過程抽象為h,我們要加密的信息記為M1,則hash值為h(M1)。我們知道hash值是不能反推出來的,而且也不存在說另外一條信息M2,使得h(M2)=h(M1)。
Alice向Bob轉賬這個過程中,Alice要需要發送兩部分內容:一是援引的之前的交易記錄,二是此番Alice要向Bob轉賬的交易記錄,此兩者構成了Alice要向Bob發送的整體信息,我們將之記做M1,可以想象這些信息都已經數字化了,即便Alice和Bob這兩個人也是以公鑰或者說是地址來代替的,雙方都是匿名的嘛;我們只是為了表達方便,才直接說成Alice和Bob,其實是Alice用她這個地址給Bob的那個地址轉賬。
如果Alice只發送這個整體信息M1,別人怎么確定就是Alice發送的呢?這一切必須要獲得比特幣世界所有人的認可啊。所以Alice在發送M1之前,還要對之簽名。怎么簽?簽什么?那就是Alice要對整體信息M1 hash一下,你就可以簡單地認為、對M1進行了開根號,然后得到最后三位是369,也就是h(M1)=369。然后我們以第一集所講的91×11為例,Alice私鑰為11,公鑰為91。那么Alice就會把這個h(M1),也就是369乘上11的后三位059,連同信息本身發送出去。這就是Alice完成了數字簽名。
Alice周圍各個節點收到信息以后呢?首先使用Alice的公鑰也就是91對這個059進行解密,也就是059×91=5369,取后三位還原出信息為369。然后再對Alice發送的原文信息M1進行hash,發現結果也為369,這不就驗證成功了嗎?這信息的確是Alice所發送的。
再略微展開一下,這里使用了跟Alice私鑰配對的公鑰,因為只有配對的公鑰私鑰才能解密,所以這個解密成功表明了確實是Alice發送的信息;其次,對Alice發送的原文進行了hash計算,發現也是369,也說明了Alice發送的信息沒有被別人篡改。所以這些從哪里轉來的又轉到哪里去的信息確確實實是Alice發送的,然后大家再核對這些交易記錄跟已有的賬本是否沖突;如果不沖突,我們就確認了這條交易記錄。即Alice的地址向Bob地址轉賬5btc這個記錄有效。等到Bob想要花掉這5個btc時候,他就需要援引這條交易記錄,同時對內容進行hash,再用這個公鑰地址配對的私鑰進行簽名,同時發送信息,周而復始,妙不可言。中本聰,你是大蔥中最聰明的那根蔥。
現在我要把剛才的驗證過程再簡單地梳理一下:ALICE在發送整體信息M1之前,先對M1進行了hash,發現結果是369,于是用私鑰處理了369,也就是乘以11,將后三位059連同信息本身發送出去。這就是Alice完成了數字簽名。Alice周圍各個節點收到信息以后,先用Alice的公鑰也就是91對這個059進行解密,即就是059×91=5369. 又發現將Alice原文信息M1進行hash,發現結果也是369,從而確認這天信息的確是ALICE發送的。你們說妙不妙,眾妙之門,此門最妙。
版權申明:本內容來自于互聯網,屬第三方匯集推薦平臺。本文的版權歸原作者所有,文章言論不代表鏈門戶的觀點,鏈門戶不承擔任何法律責任。如有侵權請聯系QQ:3341927519進行反饋。