Development
BIP39日文助記符向量單元測試流程
有一個用於日文字元單元測試的 json,我想使用 Python 進行驗證,特別是使用具有 bip39 功能的 pybitcointools 的這個分支。
來自Trezor 的 python 助記符測試向量的單元測試工作正常(在 Python 2.7 IME 中),但是,這很簡單,因為沒有 unicode 辯證法等標準化,因為所有助記符都是小寫英文。
日本的領域是:
- 熵(十六進制)
- 助記符(日語)
- 密碼(日語,似乎所有測試都相同)
- 種子(十六進制,64 字節)
xprv
所以
entropy
種子mnemonic (bip39?)
,然後mnemonic
|password
散列到Seed
;Seed
然後充當 bip32 xprv 的主密鑰?(如果我錯了糾正我!?)所以,假設它是那麼簡單……
- 日文 unicode 文本如何“標準化”?(它只是 NKFD Unicode 規範化,Electrum 2.0做的嗎?)
- 日語中的“正常”是什麼意思?
所以熵種子助記符(bip39?),然後助記符| 種子的密碼雜湊;然後種子充當 bip32 xprv 的主密鑰?(如果我錯了糾正我!?)
這聽起來很對。大多數過程在BIP-39中有詳細說明。
- 獲取熵的 SHA-256,並將
entropy_len_in_bits / 32
此散列的第一位附加到熵的末尾。生成的熵位字元串可分為 11 位長的塊(它不再是整數字節)。- 每個 11 位塊被轉換為 2 11 個助記詞之一。
- 單詞由空格連接。為了在日語中顯示,這些應該是 Unicode IDEOGRAPHIC SPACEs
'\u3000'
,. 如果不需要向使用者顯示助記符,它們可以是“普通”空格('\u0020'
)。- 助記句是以NFKD 形式標準化的 Unicode 。這會將任何 IDEOGRAPHIC SPACE 轉換為 SPACE。它還改變了一些助記詞中的一些字元,因此不能跳過這一步。(*什麼是 NFKD 標準化問題?*是一個完全獨立的主題,可能最好在 IMO 其他地方提出……)
- 助記句通過UTF-8 編碼轉換為字節。
- 二進制種子計算為 PBKDF2 HMAC SHA512 (key= “mnemonic” | passphrase, data=utf8_mnemonic, iterations=2048, out_bytes_length=64)。密碼可以是空字元串。它必須首先經過與助記符相同的步驟 4 和 5。
- (這部分在任何地方都沒有詳細說明)主擴展私鑰是通過使用二進制種子的前 32 個字節作為私鑰,最後 32 個字節作為鏈碼來構造的。
它只是 Electrum 2.0 所做的 NKFD Unicode 規範化嗎?
Electrum 2.x 確實使用了 NFKD 正規化,但它還執行了額外的步驟,例如在步驟 4 之後刪除日文單詞之間的空格。它還在步驟 6 中使用了不同的密鑰字元串,在步驟 4 之前使用了完全不同的過程。看這個回答Electrum 2.x 在 Python 中的助記詞到種子過程的實現。