非 HD wallet 情報の Kukai と Temple へのインポートについて。
免責
この文書の内容の正確性について、筆者は一切の責任を負いません。読者の自己責任で利用してください。
質問があれば
コミュニティで知見を共有するため、質問は Tezos Japan telegram にてお願いします。ただし、ボランティアベースですので回答の確約はできません。
変更履歴
更新日があまりに古い場合、この文章に書かれていることは古すぎて現状からかけ離れている可能性があります。
2022-01-16: 初期バージョン
Kukai wallet
Kukai では最近 HD (Hierarchical Deterministic) wallet がサポートされ、これがデフォルトになっています。以前の HD じゃない wallet は Kukai では “legacy” wallet と呼ばれています。
HD wallet と legacy wallet はともに英単語の列 mnemonic から秘密鍵を得ますが、その導出法は全く違います。適切な導出法を使わないと、全く別の Tezos 秘密鍵とアカウントが出てくることになります。
Kukai での legacy アカウントの インポート
- Import Wallet => SEED WORDS
- Advanced を ON にする
ここで画面には次のようになっているはずです:
ここで、
- LEGACY WALLET を選ぶ
- Seed words と、設定していれば Passphrase を入力
- 答え合わせのため tz1… にインポートしたい tz1 アドレスを入力
- IMPORT を押す
答え合わせ機能があり、Passphrase が間違っていて別アドレスになってしまう場合、先に進めなくなっています。
Kukai での keystore file の インポート
自動的に legacy と HD を区別するようなので、特に何もしなくても正常に legacy wallet の keystore file をインポートできます。
感想
Advance のスイッチで隠す UI は良くないですね。自動的に legacy と HD 両方試して答え合わせにあった方を教えてくれればいいのにと思います。
Temple wallet
Temple ウォレットでのデフォルトも HD wallet です。
初期設定時の Import existing wallet
ここで legacy wallet をインポートすることはできません。
- 初期設定は HD wallet の Seed pharse, Keystore File にしか対応していません。
- Kukai の legacy wallet の seed pharse, keystore file を使うと何も言わずに別アカウントになってしまいます。良くないですね。
Legacy wallet しか持っていない人は、Temple ではまず Create a new Wallet を使って HD wallet を一つ作るのが良いと思われます。
HD wallet を作ってから legacy wallet をインポートする
まず Temple の初期設定で Create a new Wallet を行い、まったく新しい HD ウォレットを作ります。
次に、右上にロボットの顔(ロボットですよねこれ?)が表示されている通常画面に移行したら、
- 顔 => Import account => Mnemonic
画面は次のようなものになっているはずです:
ここで、
- Seed phrase, Password (seed phrase が暗号化されていれば) を入力
- Derivation: no derivaiton (HD ではなく legacy wallet を設定するという意味でしょう)
- Import account を押す
答え合わせはありません。インポート が終わった後、目標の tz1 アカウントになっていることを確認してください。
Temple では 顔 => Import account の先に keystore file がないので、現在 Kukai の leg acy wallet の keystore file からのインポートはできません。
感想
Kukai の legacy wallet を使っている人は多いのに、そこからのインポートが非常にわかりにくいのは問題ですね。Kukai のように答え合わせ機能を入れるべき。Legacy keystore file を与えられた際にはバージョン情報をチェックすればよいはず。
技術的なはなし
HD wallet, legacy wallet ともに BIP39 mnemonic が表す seed から秘密鍵導出を行いますが、導出法が異なります。
- HD wallet
- BIP32-Ed25519 の HD derivation を行い、一つの seed から複数の秘密鍵を生成します。Ledger Nano の Tezos ウォレットはこれを使っています。ソフトウェアウォレットでの採用も増えてきました。これからはこちらが主流になると思われます。Tezos の HD wallet 導出パスは
m/44'/1729'/x'/0'
が使われています (x=0, 1, 2..
)。 - Kukai が言うところの “Legacy” wallet
- PDKDF2 を使った秘密鍵の導出を行います。ICO fundraiser アカウントや、Tezos の初期に出たソフトウェアウォレットなどはこちらを使っており、Temple wallet では “No derivation” と呼ばれています。導出にはパスワードを設定することが可能で、インポートの際、パスワードの有無やパスワードを間違うと全く違ったアカウントと秘密鍵が導出されます。
Mnemonic 自体は seed を決めるためだけのものなので、それがどの秘密鍵導出法に使われるべきかという情報はありません。したがって、Mnemonic を使ってアカウントを別ウォレットにインポートする際には、使用者が適切な導出法をウォレットに教える必要があります。ここで間違った方法を選択すると全く違ったアカウントとその秘密鍵が出てきます。