區塊鍊從原理到實作 索引
原理介紹
私鑰和公鑰
公鑰(Public Key)與私鑰(Private Key)是通過算法得到的一個密鑰對(即一個公鑰和一個私鑰),公鑰是密鑰對中公開的部分,任何人都可以獲得,私鑰則是非公開的部分,隻有使用者自己擁有,一旦洩露就會引發安全風險(例如,私鑰可以用于簽名,如果私鑰洩露那麼得到私鑰的人就可以僞造使用者簽名了)。公鑰通常用于加密會話密鑰、驗證數字簽名,或加密可以用相應的私鑰解密的資料。通過這種算法得到的密鑰對能保證在世界範圍内是唯一的。使用這個密鑰對的時候,如果用其中一個密鑰加密一段資料,必須用另一個密鑰解密。比如用公鑰加密資料就必須用私鑰解密,如果用私鑰加密也必須用公鑰解密,否則解密将不會成功。
賬戶位址
在以太坊中,賬戶位址是為了辨別賬戶.
這個位址是從賬戶私鑰對應的公鑰産生的,截取公鑰的後40位(20位元組)作為賬戶的位址.
私鑰,公鑰及位址的相關概念性介紹請查閱其他文檔,此處不多做介紹.
實作分析
使用以太坊的bootnode指令産生私鑰檔案
- 通過以太坊的bootnode指令可以生成一個節點的私鑰.在p2p發現的過程中,bootnode節點需要這個私鑰檔案做辨別.
- 此處的私鑰檔案不同于keystore檔案.keystore檔案相關内容參考下述章節.
- 以太坊bootnode指令生成私鑰檔案流程圖如下:
賬戶位址的生成過程
- 賬戶位址是從賬戶對應的公鑰中産生的.
- 截取公鑰的後40位(20位元組)作為賬戶對應的位址.
- 擷取賬戶位址的流程如下:
生成keystore檔案的過程
- keystore檔案是真正存儲使用者賬戶相關資訊的地方.
- 下述章節會分别說明keystore檔案的生辰流程及keystore檔案的存儲結構.
keystore檔案生成流程
- newKey函數内是真正私鑰及将要存儲到檔案的Key結構的生成過程.在ethereum代碼中與wanchain代碼中是不同的.wanchain為了實作隐私保護交易在key結構中添加了自己的字段.
- 在以太坊的代碼中并Key結構中不存在第二私鑰,也沒有第二私鑰的相關流程.
- newKey流程如下:
keystore檔案結構
- keystore檔案是存儲賬戶相關資訊的地方.
- keystore檔案實際存儲的就是代碼生成的Key資料結構,裡面儲存了使用者的私鑰及公鑰和位址等資訊.
- keystore結構如下:
- 粉色部分為wanchain代碼特有的結構.
- 藍色部分為wanchain和以太坊代碼共有的結構.
- wanchain代碼的Key中添加了第二私鑰的概念,第二私鑰及WAddress位址的功能是為了wanchain的隐私保護交易.