ニーモニックフレーズ|詳解ビットコイン⑥
『詳解ビットコイン』(Kalle Rosenbaum著、オライリージャパン)を読んでいます。その個人的なまとめとして書いていきます。
HDウォレットによって使い勝手が向上
ビットコインウォレットは、HDウォレットの登場によって管理しやすくなりました。
HDウォレットがなかったら秘密鍵の管理が大変です。ビットコインでは、どの利用者がどのアドレスを保有しているかがわかりづらくなるように、利用しているうちに新しいアドレスが作られていきます。そのため、ユーザーは各アドレスの秘密鍵を安全に保管しなければいけません。管理すべきアドレスが何十個もあると、紛失の恐れが高まったりどれがどれだかわからなくなったりしそうです。
上記の問題を解決したのがHDウォレットです。HDウォレットであればバックアップするのはたった1度だけです。以下の黒枠部分の「乱数のシード」だけを保管していれば、すべてのアドレスのバックアップが取れている状態になります。
ニーモニックフレーズによって使い勝手がさらに向上
ビットコインでは、ウォレットの管理を簡単にするためのさらなる改良がされています。その改良内容とは、シード(秘密鍵の元になる乱数値)をニーモニックフレーズに変形して使うというものです。
シードは16進数で表された32個や64個の文字です。一方で、ニーモニックフレーズは12個や24個の英単語です。ニーモニックフレーズを使うことによって、メモを取る際にミスすることが減ることでしょう。
また、メモを取り間違えてしまったとしても、アドレスを復元できるケースはあります。ニーモニックフレーズに使われる単語は、2048語が並んだリストから選ばれるので、それを手掛かりにメモを取り間違えたことに気づける可能性があるのです。
例えば、本当は「merge」なのに「marge」とメモを取ってしまったときは、メモの取り間違いだと気付ける可能性は高そうです。2048語の単語リストを見てみると「marge」なんて単語はないことから、ユーザーは「この単語で間違えているな」と気づけます。
また、正しくは「change」なのに「chance」とメモを取ってしまったとしても、間違いに気づける可能性は十分あります。単語リストには「chance」は含まれていないので、ユーザーは「chanceと似ている単語が正解かも?」と考えていけます。
リストに載せる単語の選出は、この辺りも考慮して行われたようです。ちなみに、単語リストは以下のようになっています。
ニーモニックフレーズに変換する流れ
シードからニーモニックフレーズに変換する流れは、以下のとおりです。
シードを作成
2進数に変換
チェックサムを追加
11ビットずつに整列
10進数に変換
ニーモニックフレーズに変換
ネット上にあるツールを使うと、実際にニーモニックフレーズを作ることができます。ここでは実際に試しながらその手順を記載してみます。
①シードを作成
まずは乱数のシードを作ります。今回は以下のサイトを使って、16進数で32文字の値を生成しました。
生成した値は以下です。
①2進数に変換
16進数で表記されているシードを2進数に変換します。
16進数1文字は、2進数で4文字になります。例えば、16進数の「0」を変換すると2進数の「0000」になります。そのため、32文字の16進数を2進数で表すと、128文字になります。
今回は以下のサイトを使って変換してみました。
https://note.cman.jp/convert/bit/
変換した結果は以下の通りです。
③チェックサムを追加
次に、2進数に変換したシードの末尾に、4つの2進数を追加します。追加する文字は何でもよいわけではなく、シードをSHA-256でハッシングして、その出力の最初の4ビット分です。
以下のサイトを使うとSHA-256でのハッシングができます。
今回ハッシングするのは、シードである「0EFC7726932C355F66C1BE4431700A9B」です。これの出力は、「374564d9031c5d3e51c79c74fffe06ce67b14331a3d537b01912568d809d0a58」です。16進数の3は、2進数で表すと「0011」なので、末尾に「0011」を追加します。
④11文字(11ビット)ずつに整列
チェックサムを末尾に加えた2進数のシードを、11文字ずつに分けます。
実際にやってみると、以下のように12個のグループができます。
④各グループを10進数にする
グループ(11文字)ごとに10進数に変換していきます。この変換も、以下のサイトを使えばできます。
https://note.cman.jp/convert/bit/
実際にやってみると以下のようになります。
⑤各グループを単語に変換する
10進数に変換できたら、一つずつ単語リストの英単語に変換していきます。英語の単語リストは以下から確認できます。
https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt
単語に変換すると以下のようになります。
この記事が気に入ったらサポートをしてみませんか?