助記詞的生成原理

助記詞的實現

別人的庫多半都是只實現了部分功能,所以fork了人家的源碼,在此基礎上增加了實用功能,保證通過助記詞恢復和對助記詞的校驗,避免了因隨意輸入助記詞便可恢復成私鑰的過程。原作者的實現并非十分高效,但接口很直觀,該有的功能很全面,做法有很多,開源能使它更好。僅當學習。

https://github.com/alphaqiu/mnemonic

BIP39是助記詞標準的實現,助記詞是一個隨機數的字序列,用來作為種子產生一個確定性的錢包。單詞序列足以重新創建種子,然后再創建錢包和所有派生的密鑰。一個實現帶有助記詞的確定性錢包應用程序在首次創建錢包時將向用戶顯示12到24個單詞的序列。該單詞序列是錢包備份,可用于恢復和重新創建相同或任何兼容的錢包應用程序中的所有密鑰。記憶單詞使用戶更容易備份錢包,因為與隨機數字序列相比,它們易于閱讀和正確地轉錄。所有的助記詞在這里可以查看:助記詞詞庫。

使用BIP39中定義的標準化過程,錢包自動生成助記詞。錢包從一個熵源開始,添加一個校驗和,然后將熵映射到一個單詞列表,具體步驟如下:

  1. 創建128到256位的隨機序列(熵)。
  2. 通過獲取SHA256哈希的第一(熵長度/ 32)位來創建隨機序列的校驗和。
  3. 將校驗和添加到隨機序列的末尾。
  4. 將序列分成11位的部分。
  5. 將每個11位值映射到來自2048個單詞的預定義字典中的單詞。
  6. 助記詞是單詞序列。 生成助記詞的步驟如下圖。

img

下表描述了初始熵長度(ENT),校驗和長度(CS)和單詞中生成的助記詞(MS)的長度之間的關系。

從助記詞到種子

用戶可以決定用密碼來保護他們的助記符。如果不存在密碼短語,則使用空字符串“”。

助記詞代表長度為128到256位的熵。然后使用熵通過使用密鑰擴展函數PBKDF2來導出更長(512位)的種子。然后,所產生的種子用于構建確定性錢包并獲得其密鑰。

密鑰擴展功能有兩個參數:助記詞和鹽(salt)。密鑰擴展功能中的鹽的目的是使得難以構建能夠進行暴力攻擊的查找表。在BIP-39標準中,salt具有另一個目的 - 它允許引入密碼短語作為保護種子的額外安全因子。

  1. PBKDF2密鑰擴展功能的第一個參數是從步驟6產生的助記詞。
  2. PBKDF2密鑰擴展功能的第二個參數是salt。salt由字符串常量“mnemonic”和可選的用戶提供的密碼短語字符串組成。
  3. PBKDF2使用2048輪HMAC-SHA512哈希算法來擴展助記詞和salt參數,產生512位值作為其最終輸出。那個512位的值就是種子。 使用助記詞來生成種子的步驟如下圖。

img

來源:通過助記詞擴展子地址的原理與編碼實現

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • BIP39標準就是為了解決助記詞的需求,通過隨機生成12~24個容易記住的單詞,單詞序列通過PBKDF2與HMAC...
    捕夢少女的夢想閱讀 2,693評論 5 2
  • 原文地址 https://mbinary.coding.me/introduction-to-bitcoin.ht...
    mbinary閱讀 5,487評論 0 4
  • 落落從來沒有想過他們會再次遇見。就算這個城市太小,可是兩個人相遇的情況也微乎其微。 她站在陽光下,對面的人也在看她...
    呼啦啦的那個北風吹閱讀 183評論 0 0
  • 我的同事小飛,是一個令人艷羨的女人。 37比例的完美身材,眼睛大且有神,身材姣好,偶爾打扮起來讓人忍不住多看幾眼。...
    Ashley_Fang閱讀 999評論 0 0
  • 我也不知道,為什么喜歡讀人物傳記,聽說過的沒聽說過的,有名的不知名的,我都喜歡。想從別人的人生里看出什么出路?僅僅...
    Wisconsin0607閱讀 337評論 0 0