本文へスキップ
buybitcoinsmart

用語集 / ウォレットとカストディ

BIP39

別名はBIP-39、ニーモニックコードです。

BIP39とは?
BIP39は、ウォレットのエントロピーを固定の2,048語のリストから選んだ単語として符号化し、それを512ビットのシードに伸長する2013年の仕様です。

BIP-39で規定されています。

購入できるウォレットのほぼすべてがこれを実装しているため、あるブランドの機器で書き留めたフレーズが別の機器で復元できます。文書は2013年9月10日に提出され、Bitcoin Coreはいまだにこれを実装したことがありません。バックアップに対するその権威は、標準化のプロセスではなく業界での採用に由来します。

仕組み

SatoshiLabsのMarek PalatinusとPavol Rusnakが、Aaron VoisineとSean BoweとともにBIP-39を執筆しました。仕様が定義するのは2つの変換だけです。

1つ目は乱数を単語に変換します。ウォレットは128、160、192、224、または256ビットのエントロピーを取得し、SHA-256でハッシュ化し、そのハッシュの先頭からエントロピーの長さを32で割ったビット数をチェックサムとして付加します。次に全体を11ビットずつ読み取り、各チャンクがちょうど2,048語のリストから1語を選びます。5つのエントロピーサイズからそれぞれ12、15、18、21、24語が得られ、実際に遭遇するのはその範囲の両端の2つです。

チェックサムが小さいのは意図的です。12語のフレーズは4ビットのチェックサムビットを持つため、有効な12語をランダムに並べたリストが検証を通るのはおよそ16回に1回です。これは手書きの写し間違いのほぼすべてを検出するには十分ですが、でっち上げたフレーズを安全にするにはまったく足りません。

2つ目の変換は単語をシードに変換します。フレーズはUnicode NFKDに正規化され、次にHMAC-SHA512を用いて2,048回の反復でPBKDF2に通され、ソルトはリテラル文字列"mnemonic"に任意のユーザーパスフレーズを続けたものになります。出力は常に512ビットで、フレーズが12語でも24語でも同じです。

単語リストは標準の一部であり、飾りではありません。英語のリストは、どの2語も最初の4文字を共有せず、視覚的に紛らわしいペアが除外されるように作られています。日本語、韓国語、スペイン語、2種類の文字体系の中国語、フランス語、イタリア語、チェコ語、ポルトガル語の公式リストも存在します。フレーズはそれが取られたリストに対してのみ意味を持つため、英語のみのウォレットにスペイン語のフレーズを入力すると直ちに失敗します。

どこで見られるか

すべてのハードウェアウォレットのセットアップ画面、すべての「12語または24語から復元」ダイアログ、そして主流のソフトウェアのすべてのリカバリーフローは、その下でBIP-39です。そこから生まれる互換性は現実のものであり、守る価値があります。それが、故障した機器が損失ではなく不便で済む理由です。

この標準の弱点は、除外している点にあります。フレーズは、どの導出パス、スクリプト種別、ウォレットソフトウェアがそれを生成したかを何も語らず、後で追加するためのバージョンフィールドも持ちません。2つのウォレットが同じ単語を正しく読んでも、異なるアドレスと異なる残高を表示することがあります。単語と一緒にパスを記録することが標準的な回避策であり、これは完全に慣習であって、仕様が助けるものではありません。

PBKDF2の2,048回の反復がもう1つの批判点です。その回数は2013年には安価でしたが、今では些細なものであるため、弱い任意のパスフレーズを選んだ人に伸長はほとんど保護を与えません。単語自体については何も保護しておらず、単語はその128または256ビットの機械的エントロピーに依存しています。

BIP39 vs HDウォレット

BIP-39は単語をシードに変換し、BIP-32はシードを鍵のツリーに変換します。これらは別々の著者による別々の文書であり、ウォレットは一方をもう一方なしで実装できます。Bitcoin Coreは完全に階層的決定性であり、ニーモニックのサポートは一切ありません。Electrumも同様に階層的決定性であり、独自のフレーズ形式にバージョンマーカーを組み込んで使用します。「BIP-39互換」は、あなたの単語を読むことに関する約束として扱い、その後にどのアドレスが現れるかに関する約束としては扱わないでください。

混同しやすい用語

よくある質問

BIP-39のフレーズはどのウォレットでも機能しますか?

単語はどのBIP-39ウォレットでも正しく読まれますが、アドレスは異なる場合があります。この標準は導出パスやスクリプト種別を持たないため、異なる目的を既定とするソフトウェアに復元すると、コインが別のブランチにある間に残高がゼロと表示されることがあります。

なぜ2,048語なのですか?

2,048は2の11乗であるため、各単語はちょうど11ビットを符号化します。そのため、128ビットのエントロピーと4ビットのチェックサムはちょうど12単語になり、256ビットと8ビットのチェックサムはちょうど24単語になります。

次に読む

関連用語

ウォレットとカストディのその他の用語

このページを英語で読む