1.16. BIP39協議:使用助記詞生成肯定性錢包

以太坊系統學習教程:
https://www.netkiller.cn/blockchain/bip39.htmlhtml

1.16. BIP39協議:使用助記詞生成肯定性錢包python

BIP:39
層:應用層
標題:使用助記詞生成肯定性錢包祕鑰
做者:Marek Palatinus slush@satoshilabs.com
Pavol Rusnak stick@satoshilabs.com
Aaron Voisine voisine@gmail.com
Sean Bowe ewillbefull@gmail.com
狀態:已經被提議
類型:標準化跟蹤
建立日期:2013-09-10
譯者:kimzivgit

1.16.1. 摘要
這個BIP描述了使用助記碼或者助記句子(簡稱助記詞)--一組便於記憶的單詞來生成肯定性錢包。github

這個BIP由兩部分構成:生成助記詞和把生成的助記詞轉化成一個二進制種子。這個種子後面會更急相似於BIP32的方法生成肯定性錢包。算法

1.16.2. 動機
與處理原始的二進制或者十六進制的錢包種子相比,在人機交互過程當中助記詞是更勝一籌的。這些助記單詞能夠被寫在紙上或者經過電話說出來。npm

本指南旨在經過人類可讀的轉錄來傳輸計算機生成的隨機性。並非將用戶建立的句子(也稱爲腦錢包)處理到錢包種子中的方法。安全

1.16.3. 生成助記詞
助記符必須以32位的倍數編碼熵。隨着熵的安全性提升,同時句子的長度也在增長。咱們將初始熵長度稱爲ENT。ENT容許的大小爲128-256位。函數

首先,生成ENT位的初始熵。經過取第一個生成的校驗和學習

ENT/32ui

它的SHA256哈希的位。該校驗和附加到初始熵的末尾。接下來,這些鏈接的比特位被分紅多個11位的組,每一個組用從0-2047的數字編碼,用做單詞表的索引。最後,咱們將這些數字轉換爲單詞,並將加入的全部單詞組成助記句。

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

CS = ENT / 32
MS = (ENT + CS) / 11

ENT CS ENT + CS MS

128 4 132 12
160 5 165 15
192 6 198 18
224 7 231 21
256 8 264 24

1.16.4. 單詞表
理想的單詞列表具備如下特色:

智能選詞

單詞列表以這種方式建立:輸入前四個字母來就足以明確地標識這個單詞;

避免類似的單詞

"build" and "built", "woman" and "women", or "quick" and "quickly" 這樣的詞對,不只使記憶困難,並且更容易出錯,更難猜到;

排序的單詞列表

排序的單詞列表容許更有效地查找代碼字(即,實現可使用二分搜索而不是線性搜索)

這也容許使用字典樹(前綴樹),例如用於更好的壓縮

單詞表能夠包含本土字符,但必須使用規範化形式兼容性分解(NFKD)以UTF-8編碼。

1.16.5. 從助記詞到種子
用戶能夠決定用密碼保護他們的助詞。若是密碼不存在,則使用空字符串「」代替。

要經過助記詞建立一個二進制種子,咱們使用助記符做爲密碼(UTF-8 NFKD)和字符串「mnemonic」+ passphrase 做爲鹽(再次以UTF-8 NFKD)來調用PBKDF2函數。迭代計數設置爲2048,HMAC-SHA512用做僞隨機函數。派生密鑰的長度爲512位(= 64字節)。

該種子能夠隨後用於使用BIP-0032或相似方法產生肯定性錢包。

助記詞轉換爲二進制種子徹底獨立於生成這個助記詞。這致使至關簡單的代碼; 助記詞結構沒有約束,客戶能夠自由地實現本身的單詞列表,甚至是整個助記詞的生成器,容許字典列表中的輸入錯誤檢測或其餘用途的靈活性。

雖然使用的助記詞可能不是經過「生成助記詞」部分中描述的算法生成的,但這是不建議的,軟件必須使用單詞表計算助記詞的校驗和,若是無效則發出警告。

所描述的方法還提供彷佛可信的能否認性,由於每一個密碼短語產生一個有效的種子(所以產生肯定性錢包),可是隻有正確的那一個才能使所需的錢包可用。

1.16.6. 單詞列表
https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md

若是一個 HD 錢包助記詞是 12 個單詞,一共有 2048 個單詞可能性,如何算出隨機的生成的助記詞可能性是一個排列問題,根據公式: n!/( n - r )! ,既 2048!/(2048-12)! = 5.2715379713014884760003093175282e+39。

Wordlists

English https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt

Japanese https://github.com/bitcoin/bips/blob/master/bip-0039/japanese.txt

Korean https://github.com/bitcoin/bips/blob/master/bip-0039/korean.txt

Spanish https://github.com/bitcoin/bips/blob/master/bip-0039/spanish.txt

Chinese (Simplified) https://github.com/bitcoin/bips/blob/master/bip-0039/chinese_simplified.txt

Chinese (Traditional) https://github.com/bitcoin/bips/blob/master/bip-0039/chinese_traditional.txt

French https://github.com/bitcoin/bips/blob/master/bip-0039/french.txt

Italian https://github.com/bitcoin/bips/blob/master/bip-0039/italian.txt

1.16.7. 開發庫
1.16.7.1. Node.js
https://www.npmjs.com/package/bip39

1.16.7.2. Python
https://github.com/trezor/python-mnemonic

1.16.7.3. 其餘實現

Elixir: https://github.com/izelnakri/mnemonic

Objective-C: https://github.com/nybex/NYMnemonic

Haskell: https://github.com/haskoin/haskoin

.NET C# (PCL): https://github.com/Thashiznets/BIP39.NET

.NET C# (PCL): https://github.com/NicolasDorier/NBitcoin

JavaScript: https://github.com/bitpay/bitcore-mnemonic, https://github.com/bitcoinjs/bip39 (used by blockchain.info)

Ruby: https://github.com/sreekanthgs/bip_mnemonic

Rust: https://github.com/infincia/bip39-rs

Swift: https://github.com/CikeQiu/CKMnemonic

C++: https://github.com/libbitcoin/libbitcoin/blob/master/include/bitcoin/bitcoin/wallet/mnemonic.hpp

C (with Python/Java/Javascript bindings): https://github.com/ElementsProject/libwally-core

1.16.8. Netkiller 助記詞詞庫
HD Wallet 採用 2048 個單詞,或者漢字做爲助記詞,這些詞庫對外公開,不少錢包僅僅使用path第一個地址而且沒有加密。若是你知道某個用戶的助記詞中的11各詞的排列順序,那麼咱們就能夠經過窮舉方法,算出全部地址的私鑰,若是碰巧找到了已經在使用的地址。就能夠將裏面的ETH所有轉走。

爲了增長 HD Wallet 的安全,我作了一個詞庫,這個詞庫不對外公開,而且使用的漢字均是不經常使用漢字。只能複製粘貼,幾乎很難使用輸入法輸入該漢字。

同時path 還作了分層,和索引地址。分層採用時間維度,索引採用隨機數, Seed 作加密處理。助記詞共 15 個漢字。

效果以下

漢字助記詞:欈 戀 髎 響 麢 戵 邎 蠢 鶖 躒 蠈 鰘 譥 趲 巆
地址:0x4949225eab0121d1e0b0eeb286a12b04ff596471
私鑰:b5ce4ac958fbdcd385d6ae850c1870c6da7b990981363c25036a31ba06be6636

漢字助記詞:霼 彎 曤 纀 鸇 鷔 鶹 纚 鱱 讁 艣 鼴 黭 纒 贛
地址:0x430097d16819108068a7af22a116285e54bc3e6b
私鑰:3b78431a43a2c69e861870f0eff1d54d3965247ca5e588a9f907904f9ea5b822

漢字助記詞:聾 鱦 驥 鬘 鰕 蘲 韃 鏻 雤 鑀 瓤 蘣 壥 躠 罋
地址:0x641fd58728cf08bc8795d41cfd3885a4f1c8dced
私鑰:b7c2ff2a39e3a534e6e89288b05b4a283b10b34b2dfca2b336676729c7a68ad1

漢字助記詞:轕 鶼 瀝 钁 麝 鸑 灙 纞 躐 嚹 櫞 鱁 贑 癠 躤
地址:0xae6ad7cf3e31556bc7262e25fba2ebad9954d08b
私鑰:c989fe5c108b0bd33e5731919e09c30c639a4ff29fb4e66fe3052975855181f6

漢字助記詞:鰵 鐗 鱇 彏 鱞 鷮 鼯 矃 曟 鬙 衢 斅 櫜 鸒 襨 地址:0x7fc6bca55c51ab3b4266d8f67d63c196ac874d93 私鑰:53e755075653a64867f885e702ca0a2612bdd13ec2bed0df647bf568a639bc46

相關文章
相關標籤/搜索