暗号通貨ウォレットのMetaMask(メタマスク)には、何らかの理由でウォレットの復元が必要となったときに使用するシークレット・リカバリー・フレーズがあります。リカバリー・フレーズについて少し、深掘りしてみましょう。
MetaMaskのインストールについては、以下の記事をご参照ください。
シークレット・リカバリー・フレーズとは
MetaMaskのシークレットリカバリーフレーズとは、ウォレットを復元するときに必要なパスワードのようなものです。12個の英単語の組み合わせから成ります。例えば、以下のような組み合わせになります。
theory smart young client easy become upper april pudding bless swamp method
この英単語は、128bitの数を一定の計算により変換したものです。あらかじめ決められた2048の単語リストから選択されています。そのリストはGithubに格納されていますので、ご参照ください。
一般的な単語から選ばれ、似通っていて誤記憶、誤タイプしそうな単語は除外して、アルファベット順で並んでいます。
ウォレットでは、アカウントごとに公開鍵と秘密鍵を管理する必要があり、複数のアカウントがあればその数分の鍵の管理が必要となるため大変です。これを一つのルートシードと呼ばれるKey Codeだけで管理できる便利な仕組みが作られました。それがBIP32という仕組みです。BIPとはBitcoin Improvement Proposal:ビットコイン改善提案の略で、32番目の提案という意味になります。
このルートシードは512 bit = 64 byteの値で、例えばこのような文字の羅列になります。
449e0c6334e7c0be983130dc01713dc9e04f7c163b08619484ff37f755bb10168394945f8136243c55971e7e28d6a86f0ac406572b0e8e238f359db7a3aeec12
これら16進数の文字の羅列を人間が覚えるのは至難の技です。しかも、一文字でも間違えたらキーとして使えなくなります。これを改善したのがBIP39です。BIP39は、このシードフレーズを人が覚えやすい12個のニーモニックコード (Mnemonic Code) と呼ばれる単語で表現したものなのです。(MetaMaskでは12個のニーモニックを使用していますが、BIP39では最大24個まで使用可能としています)
BIP32とBIP39のおかげで、ウォレットの鍵の管理が非常に便利になったということですね。
以下、BIP32, BIP39の参考リンクです。
ニーモニックコードからアドレス、秘密鍵、公開鍵を導出する仕組み
BIP39からBIP32の動きを体験できるサイトがありますのでご紹介しましょう。以下のリンクをクリックして、”Mnemonic Code Converter” のサイトにアクセスしましょう。
サイトが表示されましたら、MetaMaskのシークレット・リカバリー・フレーズの設定同様に、パラメータを変更しましょう。
- 単語数を、12 に変更
- 通貨(Coin)を、ETH : Ethereum に変更
パラメーターを変更したら、”GENERATE” (生成)ボタンをクリックしましょう。
ボタンをクリックすると、乱数により求められた ”BIP39 Mnemonic” に12個の英単語によるニーモニック・コードが表示されます。そして、このニーモニックコードにより導出されたキーコードが “BIP32 Root Key” に表示されます。このコードが複数の秘密鍵、公開鍵を算出する元のコードになります。
画面の下へスクロールすると、”Derived Addresses”:派生アドレスというセクションが表示されます。ここには、アドレス、秘密鍵、公開鍵のリストがデフォルトで20組、表示されます。これは上述のキーコードから変換して、派生的に求められたリストになります。
これがひとつのリカバリーフレーズで複数のアカウント、秘密鍵、公開鍵が導出される動きのサンプルです。
なお、BIP39のニーモニックコードは英語以外にも各種言語のバリエーションがあります。日本語もあり、例えば以下のようなニーモニックコードとなります。なかなかシュールな感じで面白いですね。
日本語のWordlistは以下をご参照ください。
ただし、BIP39の仕様の記載では、英語以外のニーモニックコード言語の使用はおすすめしていませんのでご注意ください。
Since the vast majority of BIP39 wallets supports only the English wordlist, it is strongly discouraged to use non-English wordlists for generating the mnemonic sentences.
BIP39に準拠するウォレットのほとんどは英語の単語リストしかサポートしていません。したがって、ニーモニックコードの生成に英語以外の単語リストを使用することはまったく推奨していません。
まとめ
この記事では、MetaMaskのシークレット・リカバリー・フレーズが、BIP32、BIP39という仕様にもとづき実装されていることをご説明しました。また、このリカバリーフレーズ:ニーモニックコードによるアドレス群が導出される仕組みが体験できるサイトをご紹介しました。
Web3の世界の入り口であるMetaMaskのアカウントとシークレットリカバリーフレーズの関係について、ご理解の一助になりましたら幸いです。
コメント