前言:
寫文章只是為了通過記錄梳理的過程,回答自己的一些疑問并秀一下差勁的文字功底。
消息簽名和校驗的本質
簽名是證明你對這個地址的擁有權。
校驗則是證明這個消息內容確實來自于這個地址的私鑰持有人。
消息簽名過程
輸入:私鑰和消息體
動作:簽名時,會根據地址從本地錢包中讀出該地址的私鑰,然后用私鑰對(消息magic+消息體)的hash進行簽名
輸出:該地址對該消息的簽名signature
消息校驗過程
輸入:地址和消息體
動作:校驗時根據消息的簽名,計算出pubkeyID,然后組成比特幣地址(注意校驗人不需要知道簽名者的私鑰)
輸出:比較輸入的比特幣地址和組成的比特幣地址是否一致,若一致,則該簽名確實屬于改地址持有人創建;不一致則玩完,校驗失敗。
注:對技術不敏感的后面不用看了,太枯燥。
簽名時的界面需要輸入,如下
簽名過程:
分解如下
若沒加密,直接讀取;若加密,則用錢包密碼解密加密過的私鑰獲取明文私鑰
總結:
輸入:地址和消息體,
動作:簽名時,會根據地址從本地錢包中讀出該地址的私鑰,然后用私鑰對(消息magic+消息體)的hash進行簽名
輸出:該地址對該消息的簽名signature
有簽名做鋪墊,消息校驗推導出來就比較簡單了,簡單描述如下:
消息校驗過程總結:
1. 獲取比特幣地址
2.判斷是否能根據比特幣地址獲取到KeyID,目的在于校驗比特幣地址是否正確
3.獲取簽名
4.組包完整消息(消息魔數Magic+輸入的消息體)
5.根據消息的hash和簽名,計算出pubkeyID,然后組成比特幣地址(注意校驗人不需要知道簽名者的私鑰)
6.比較輸入的比特幣地址和組成的比特幣地址是否一致,若一致,則該簽名確實屬于改地址持有人創建;不一致則玩完,校驗失敗。
使用場景:
發現基本概念太多,解釋起來需要從頭講起啊。。。。寫的不好,歡迎斧正。
作者:1NDnnWCUu926z4wxA3sNBGYWNQD3mKyes8 ?對沒看錯,就是本尊的地址,要不要給你打點幣,我簽名證明一下。
后記:
沒想到一個小時就碼了不少字,超出我自己的預料啊,雖然很爛,但是他娘的感覺比寫代碼還有成就感。。。說明本屌心中暗藏著文字情節?今天只是破處的嘗試了,以后能否繼續撒潑就得看造化了。