用語集 / アドレスと鍵
Wallet Import Format
別名はWIFです。
- Wallet Import Formatとは?
- Wallet Import Formatは、1つの秘密鍵をウォレット間で移すために使われるBase58エンコードで、生の32バイトをネットワークバイトとチェックサムで包んだものです。
WIF文字列は1つの鍵であり、ウォレットではありません。これをインポートすると、その鍵に紐づいたコインだけが正確に移り、それ以外は移りません。メインネットの鍵は、対応する公開鍵が非圧縮の場合は5で始まり、圧縮の場合はKまたはLで始まり、51文字または52文字になります。この文字列はシードフレーズと同じように扱ってください。読んだ者は誰でも送金できるからです。
仕組み
Wallet Import Formatは、生の秘密情報を書き間違えずに運ぶために存在します。鍵の32バイトを取り、先頭にバージョンバイト(メインネットは0x80、テストネットは0xEF)を付け、鍵を圧縮公開鍵と組み合わせて使う場合は末尾に0x01を追加し、さらに4バイトのチェックサムを付けて、ペイロード全体をBase58Checkでエンコードします。バージョンバイトが識別可能な先頭文字を決め、任意の圧縮フラグが文字列を51文字から52文字へと伸ばします。
この2つの変種は見た目以上に重要です。末尾の0x01は鍵自体をまったく変えません。インポートするウォレットに対して、どの形式の公開鍵を導出すべきか、したがってどのアドレスを見るべきかを伝えるだけです。ここを間違えると、ウォレットは残高ゼロと表示し、その間コインはもう一方のアドレスに安全に残っています。
チェックサムは、書き写しの誤りが損害を生む前に捕まえます。WIF文字列をデコードしてチェックサムの不一致を見つけたウォレットは、それをそのまま拒否します。ですから1文字の誤りは、空のウォレットではなくエラーメッセージになります。チェックサムにできないことは、他人がすでに読んでしまった鍵を守ることです。
目にする場面
現代のウォレットが生成するものがWIF文字列として出回ることはありません。BIP-32のシードフレーズ方式のウォレットは数千の鍵を保持しており、1つをエクスポートする理由がありません。そのためWIFはほぼ古い資料にのみ現れます。ブラウザの生成ツールが印刷したペーパーウォレット、2013年以前のデスクトップソフトウェアから取り出した鍵、鍵の総当たり生成ツールが作成したバニティアドレス、そしてCasasciusの物理コインのホログラムの下に隠された文字列です。
こうした鍵を現在のウォレットに取り込む方法は2つあり、その違いは見た目だけのものではありません。
インポートは鍵をウォレットに追加し、そのまま有効な状態にします。ウォレットはそのコインを送金できるようになりますが、印刷物やその写真、あるいは生成したマシンを一度でも見た者も同じように送金できます。スイープは、残高全体を自分のシードフレーズから導出した新しいアドレスへ送るトランザクションを組み立て、その後は古い鍵が何も管理しなくなります。特段の理由がない限りスイープし、紙やスクリーンショット、クラウドバックアップに存在したことのある鍵はすでに漏えいしているものとみなしてください。
もう1つ身につけておく価値のある習慣があります。ウェブサイトに入力したWIF文字列は失われます。WIFを求める生成ページ、残高チェッカー、そして「ウォレットバリデータ」は鍵を収集するために存在し、コインはたいてい数秒で移動されます。
Wallet Import Format vsシードフレーズ
WIF文字列は1つの鍵を運び、シードフレーズはウォレット全体のルートを運びます。BIP-39では12語のフレーズが128ビットのエントロピーを符号化し、24語のフレーズが256ビットを符号化し、そのルートからウォレットは、あらゆる導出パスに沿って、将来使うすべての鍵を永久に導出します。フレーズを復元すれば、書き留めていないアドレスも含めてウォレット全体が戻ります。WIFを復元すれば1つの鍵とそのコインが戻ります。だからこそ鍵のエクスポートは、バックアップ戦略ではなく、レガシー資産のための復元手段なのです。