BIP39 とは
- 秘密鍵を人間でも覚えられるパスフレーズにすること※1
- 通常は12-24個のフレーズを作るがもっと長くすることもできる
以下の表はENTがビット数、MSが文字の個数の対応表
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
正確には乱数初期化に使うエントロピーをフレーズに置き換えたもの
エントロピーのことをマスターシード(master seed)という。
ビットコインの秘密鍵そのものではない。ほかの用途にも使えると思う。
個人的には管理が大変なsshの鍵ペアとかに使えたら楽できそう。
jsの実装をインストール
npm install bitcore-mnemonic
生成してみる
- ランダムで生成
- 24個のフレーズを生成(256bit)
var Mnemonic = require('bitcore-mnemonic');
var code = new Mnemonic(256, Mnemonic.Words.ENGLISH);
console.log(code.toString());
var xpriv = code.toHDPrivateKey();
console.log(xpriv.toString());
ニーモニック
sun soap spice bid session bring invest pyramid cruise midnight trust project bulb neck zero invest noble tornado party bean special faint mirror phrase
※ ニーモニックからマスターシードが得られる
※ マスターシードからマスター秘密鍵が得られる
マスター秘密鍵
xprv9s21ZrQH143K3MqcfykNnXeLVTNPFhyC8DBK9BUvLVftgffqE7PywFx9s1wjAuCx94nG51mNqX6jRbwJrU4vJNfNDLxUgTtWMEGcCWV736n
※ マスター秘密鍵はBIP32の拡張秘密鍵形式
復元してみる
var Mnemonic = require('bitcore-mnemonic');
var code = new Mnemonic("sun soap spice bid session bring invest pyramid cruise midnight trust project bulb neck zero invest noble tornado party bean special faint mirror phrase", Mnemonic.Words.ENGLISH);
console.log(code.toString());
var xpriv = code.toHDPrivateKey();
console.log(xpriv.toString());
参考リンク
- https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki
- https://dcpos.github.io/bip39/
- https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md
おまけ
勘のいい人は気がついてると思うけど
考え方は昔のドラクエにあった復活の呪文みたいなもん
こちらはドラクエ2みたいな正しくメモっても復活できないバグは仕込まれてないはず・・・
ゆうて いみや おうきむ
こうほ りいゆ うじとり
やまあ きらぺ ぺぺぺぺ
ぺぺぺ ぺぺぺ ぺぺぺぺ
ぺぺぺ ぺぺぺ ぺぺぺぺ ぺぺ
リンク
仕組みを知りたい場合は以下のサイトへどうぞ