見出し画像

【完全保存版】BIP39をしっかりと理解しよう!

1 概要

BIP39 (Bitcoin Improvement Proposal 39) は、ビットコインおよび他の暗号通貨のウォレットで使用される標準規格です。

https://github.com/bitcoin/bips/tree/master/bip-0039

この規格はランダムに生成されたビット数(128ビットまたは256ビット)から、人間が覚えやすい一連の単語(通常は12、15、18、21、24個の単語)を生成するためのプロセスを定義します。

https://iancoleman.io/bip39/

この一連の単語は「シードフレーズ」または「ニーモニックフレーズ」と呼ばれ、ウォレットのバックアップや復元に使用されます。

2 BIP39の要素

具体的には、BIP39には以下のような要素があります。

1 ニーモニックフレーズの生成

特定の単語リスト(通常は2048語)から選ばれた単語を用いてフレーズが生成されます。

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

このフレーズは乱数から生成され、ウォレットの秘密鍵を生成するために使用されます。

2 ニーモニックフレーズからシードへの変換

生成されたニーモニックフレーズをもとに、PBKDF2を使用してシードが生成されます。

なんだか難しそうな名前ですが、パスワードをベースとした、鍵の導出関数です。

https://ja.wikipedia.org/wiki/PBKDF2#:~:text=PBKDF2%20(Password%2DBased%20Key%20Derivation,%E7%9B%AE%E7%9A%84%E3%81%A8%E3%81%97%E3%81%A6%E4%BD%BF%E7%94%A8%E3%81%95%E3%82%8C%E3%82%8B%E3%80%82

このシードは暗号化された形式で、実際のウォレットアドレスや秘密鍵を生成する基礎となります。

3 単語リスト

BIP39では、英語、フランス語、スペイン語、日本語などの異なる言語の標準単語リストが提供されています。

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

3 BIP39のプロセス

以下は、BIP39のプロセスの概要です。

1 ランダムなエントロピーを生成

128ビット、160ビット、192ビット、224ビット、または256ビットのエントロピーを生成します。

https://help.onekey.so/hc/ja/articles/360001983556-BIP-39%E3%81%A8%E3%81%AF

補足
暗号通貨のウォレットで使用されるBIP39の文脈では、エントロピーニーモニックフレーズを生成するためのランダムなビット列を指します。

ChatGPT-4o

2 エントロピーをニーモニックフレーズに変換

エントロピーをバイナリ形式に変換し、そのバイナリデータを単語リストのインデックスとして使用してニーモニックフレーズを生成します。

3 シードの生成

ニーモニックフレーズにパスフレーズを追加し、PBKDF2を使用してシードを生成します。

https://help.onekey.so/hc/ja/articles/360001983556-BIP-39%E3%81%A8%E3%81%AF

4 シードからウォレットの鍵を生成

生成されたシードをもとに、実際のウォレットアドレスや秘密鍵を生成します。

https://help.onekey.so/hc/ja/articles/360001983556-BIP-39%E3%81%A8%E3%81%AF

これにより、ユーザーはニーモニックフレーズを安全な場所に保存することで、ウォレットを簡単にバックアップし、必要に応じて復元することができます。

4 実際にやってみよう!

では、こちらのサイトから実際に試してみましょう。


1 ニーモニックフレーズの作成

下のように、ワード数を選び、「Generate」を選択すると、ニーモニックフレーズができました。

2 エントロピーを確認

では、この元となった、エントロピーを見てみましょう。

「Show entropy details」を選択するとこのようにエントロピーが確認できました。

3 フレーズの確認

それをBinaryにしたのが「Raw Binary」です。

例えば、一番先頭を見てみましょう。

これを10進数に直したものが739になっています。

このように、確かに739になっていそうです。

https://hogehoge.tk/tool/number.html

インデックスが1ずれるので、740番目を確認すると、「fragile」になっています。

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

これが先頭と一致することが確認できました。

4 BIPシードの生成

ニーモニックフレーズができたので、PBKDF2を用いて、シードを導出します。

パスフレーズが変わることによって、シードも変わることを確認してみてください。

5 ルートキーの作成

最後に、シードを元にして、ルートキーが生成されます。

こちらはCoinが異なると、別のものになるということも確認してみてください。

今回は以上です。

サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊