Development

BIP39日文助記符向量單元測試流程

  • June 4, 2015

有一個用於日文字元單元測試的 json,我想使用 Python 進行驗證,特別是使用具有 bip39 功能的 pybitcointools 的這個分支。

來自Trezor 的 python 助記符測試向量的單元測試工作正常(在 Python 2.7 IME 中),但是,這很簡單,因為沒有 unicode 辯證法等標準化,因為所有助記符都是小寫英文。

日本的領域是:

  1. 熵(十六進制)
  2. 助記符(日語)
  3. 密碼(日語,似乎所有測試都相同)
  4. 種子(十六進制,64 字節)
  5. xprv

所以entropy種子mnemonic (bip39?),然後mnemonic| password散列到Seed; Seed然後充當 bip32 xprv 的主密鑰?(如果我錯了糾正我!?)

所以,假設它是那麼簡單……

  1. 日文 unicode 文本如何“標準化”?(它只是 NKFD Unicode 規範化,Electrum 2.0做的嗎?)
  2. 日語中的“正常”是什麼意思?

所以熵種子助記符(bip39?),然後助記符| 種子的密碼雜湊;然後種子充當 bip32 xprv 的主密鑰?(如果我錯了糾正我!?)

這聽起來很對。大多數過程在BIP-39中有詳細說明。

  1. 獲取熵的 SHA-256,並將entropy_len_in_bits / 32此散列的第一位附加到熵的末尾。生成的熵位字元串可分為 11 位長的塊(它不再是整數字節)。
  2. 每個 11 位塊被轉換為 2 11 個助記詞之一。
  3. 單詞由空格連接。為了在日語中顯示,這些應該是 Unicode IDEOGRAPHIC SPACEs '\u3000',. 如果不需要向使用者顯示助記符,它們可以是“普通”空格('\u0020')。
  4. 助記句是以NFKD 形式標準化的 Unicode 。這會將任何 IDEOGRAPHIC SPACE 轉換為 SPACE。它還改變了一些助記詞中的一些字元,因此不能跳過這一步。(*什麼是 NFKD 標準化問題?*是一個完全獨立的主題,可能最好在 IMO 其他地方提出……)
  5. 助記句通過UTF-8 編碼轉換為字節。
  6. 二進制種子計算為 PBKDF2 HMAC SHA512 (key= “mnemonic” | passphrase, data=utf8_mnemonic, iterations=2048, out_bytes_length=64)。密碼可以是空字元串。它必須首先經過與助記符相同的步驟 4 和 5。
  7. (這部分在任何地方都沒有詳細說明)主擴展私鑰是通過使用二進制種子的前 32 個字節作為私鑰,最後 32 個字節作為鏈碼來構造的。

它只是 Electrum 2.0 所做的 NKFD Unicode 規範化嗎?

Electrum 2.x 確實使用了 NFKD 正規化,但它還執行了額外的步驟,例如在步驟 4 之後刪除日文單詞之間的空格。它還在步驟 6 中使用了不同的密鑰字元串,在步驟 4 之前使用了完全不同的過程。看這個回答Electrum 2.x 在 Python 中的助記詞到種子過程的實現。

引用自:https://bitcoin.stackexchange.com/questions/37780