天天看點

[區塊鍊從原理到實作]- 位址,公鑰,私鑰,錢包的介紹,原理及實作

區塊鍊從原理到實作 索引

原理介紹

私鑰和公鑰

公鑰(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的隐私保護交易.
      [區塊鍊從原理到實作]- 位址,公鑰,私鑰,錢包的介紹,原理及實作

繼續閱讀