秘密鍵とシードフレーズの両方が資産を制御できるなら、なぜ二つに分ける必要があるのか?秘密鍵だけを使えばいいのでは?
HDウォレット構造が登場する前、初期のウォレットには実際に秘密鍵という概念しか存在しなかった——しかしこれは、あなたのウォレットに20の異なるアドレスがある場合、20組の秘密鍵を個別にバックアップしなければならず、いずれか一組でも紛失すれば対応するアドレスの資産を永久に失うことを意味していた。管理は極めて煩雑でミスが起きやすかった。
HDウォレット構造は、まさにこの管理上の課題を解決するために設計された。一組のシードフレーズさえバックアップしておけば、そのウォレットがこれまでに生成した、そして今後生成するであろうすべての秘密鍵とアドレスを再構築でき、バックアップと復旧のプロセスを大幅に簡略化する。その代償はリスクの集中だ——かつては20組の独立した秘密鍵に分散していたリスクが、今では一組のシードフレーズに集中する。これこそが、シードフレーズの保管基準が単一の秘密鍵よりもはるかに厳格でなければならない理由である。
HDウォレットの「一つのシードフレーズから無限の秘密鍵を導出する」という設計は、数学的にどう実現されているのか?なぜ二人のユーザーが同じ秘密鍵を導出してしまう心配をしなくていいのか?
HDウォレットはBIP32、BIP39、BIP44という業界標準規格に従っている。シードフレーズはまず固定されたアルゴリズムによって「シード」と呼ばれる長い文字列に変換され、そのシードが階層的な導出パスに沿って子秘密鍵のツリー構造を順次計算していく。パス上の各位置がそれぞれ固有の秘密鍵とアドレスに対応する。このプロセス全体は決定論的だ——同じシードフレーズを同じ導出パスで処理すれば、常に同一の秘密鍵が算出される。これこそが、シードフレーズをまったく別のウォレットアプリに「インポート」しても、まったく同一のアドレス群を再構築できる理由だ。
重複のリスクについては、シードフレーズの組み合わせ空間は天文学的な規模に達する——例えば12語の標準的なシードフレーズは、その組み合わせ数が観測可能な宇宙にある原子の数をはるかに超える。実務上、二人が独立して同じシードフレーズや秘密鍵を生成してしまう現実的なリスクは存在しない。本当のリスクは数学が破られることではなく、シードフレーズが人的ミスによって流出することなのだ。
日常的にウォレットを使う中で、この3つの用語はそれぞれ具体的にどのような場面で登場するのか?
秘密鍵に最もよく遭遇するのは、資産をあるウォレットアプリから別のアプリへ移行する場面だ。一部のウォレットでは、シードフレーズ全体ではなく単一アドレスの秘密鍵だけをエクスポートして、その一つのアカウントだけをインポートすることができる。この種の操作画面には通常明確な警告表示があり、操作前には自分がウォレット本体の設定メニュー内で実行しているのか、第三者のリンクを経由していないかを必ず確認すべきだ。
シードフレーズが最もよく登場するのは、ウォレットを初めて作成する時(一度だけ表示され、書き留めてバックアップするよう求められる)と、新しいデバイスや新しいウォレットアプリで既存のウォレットを「復元」する時だ。一方アドレスは、ほぼ毎日の操作のあらゆる場面に登場する——受け取りの際に相手に伝える、ブロックチェーンエクスプローラーで取引履歴を調べるために入力する、友人と「本当にお金が届いたか」を確認し合う、といった具合だ。この3つの場面の違いを理解しておくことは、情報の入力を求めるあらゆる画面の前で、「この状況で本当に必要なのはどれか」を先に判断する助けとなる——入力欄を見たら反射的に埋めてしまうのではなく。
うっかりシードフレーズを怪しいウェブサイトに入力してしまった場合、すぐに何をすべきか?
最も重要な原則は、時間こそが資産だということだ。シードフレーズが流出した疑いを持った瞬間、安全だと確信できるデバイスとネットワーク環境で直ちに新しいウォレットを作成し(まったく新しいシードフレーズを生成し)、旧ウォレットのすべてのアドレスにある資産をできるだけ早く新しいウォレットへ移すべきだ。「相手が本当に見たかどうか」を先に調べる時間を使ってはいけない——攻撃者の自動化プログラムは通常、シードフレーズが流出してから極めて短時間のうちに資産のスキャンと送金を開始し、迷っている一分一秒が資産を失う確率を高めていく。
資産を移す際に特に注意すべき点として、元のウォレットに複数のアドレス(アカウント1、アカウント2など)がある場合、それぞれのアドレスについて個別に資産が移されたかを確認する必要があり、最もよく使うアドレスだけを処理して終わりにしてはならない。同時に、流出に使われたデバイス自体が侵害されている疑いがある場合(例えばシードフレーズがマルウェアによって傍受・流出した場合)、そのデバイスも交換するか、少なくとも完全なウイルススキャンを行ってから操作すべきだ。そうしないと、新しいウォレットのシードフレーズが作成過程で同じマルウェアに再び捕捉されてしまう恐れがある。
「これはサポートに見せてもいいの?」「シードフレーズと秘密鍵は同じもの?」「なぜアドレスが毎回違って見えるの?」——これらの疑問はすべて同じ根本原因に行き着く。秘密鍵、シードフレーズ、ウォレットアドレスという3つの用語は、しばしば同義語として混同されて使われるが、それぞれが制御する範囲はまったく異なる。一つは公開しても問題ないが、残りの二つは絶対に公開してはならない。この違いを理解していないことは初心者が最もよく犯するセキュリティ上の誤りの一つであり、詐欺師が最も好んで利用する認知のギャップでもある。
最も理解しやすい例えはこうだ。ウォレットアドレスは番地のようなもので、誰に公開しても問題ない。相手はこの番地を使ってあなたに送金できるが、それはあなたの住所を知っている人が手紙を送れるのと同じことで、家の中に侵入できることを意味しない。秘密鍵は特定の一つの扉を開ける実際の鍵だ。それを持つ者は対応するアドレスにあるすべての資産を制御でき、取引に署名して資金を移動させることができる。もし流出すれば、それを手にした誰もがあなたの資産を使用できるようになり、ブロックチェーンの取引は一度送信されると取り消せないため、元に戻すボタンを押してくれるサポート窓口は存在しない。シードフレーズは無数の鍵を作り出せる合鍵作成機だ。MetaMaskやTrust Wallet、ほとんどのハードウェアウォレットを含む現代の主流ウォレットは階層的決定性(HD)構造を採用しており、通常12語または24語の英単語で構成されるシードフレーズが、固定されたアルゴリズムに従って理論上無限の秘密鍵——つまり無限のアドレス——を決定論的に導出できる。これこそが、シードフレーズの流出が単一の秘密鍵の流出よりもはるかに危険な理由だ。秘密鍵の流出は一つのアドレスにある資産を失うだけだが、シードフレーズの流出は合鍵作成機そのものを渡してしまうことになり、そのウォレットがこれまでに生成した、そして今後生成するであろうすべてのアドレスが同時にリスクにさらされる。
多くの初心者が、同じウォレットアプリなのに受け取りのたびに表示されるアドレスが違って見えることに戸惑う。これはHDウォレット構造の下ではまったく正常な挙動だ——同じシードフレーズから「アカウント1」「アカウント2」「アカウント3」といった複数の独立したアドレスを順次導出でき、ユーザーのプライバシーを守るために、同じアドレスを繰り返し使うのではなく、受け取りのたびに新しいアドレスを生成することを推奨するウォレットさえある。見た目が異なるこれらのアドレスは、実際には裏側で同じ一つのシードフレーズから導出されたものであり、シードフレーズが適切に保管されている限り、これらすべてのアドレスに対応する資産はあなたの管理下にある。逆に言えば、シードフレーズが流出した瞬間、これらのアドレスもすべて同時にリスクにさらされる——見た目が違うからといって、それぞれが独立して保護されているわけではない。
この3つの用語の間には見落とされがちな技術的な詳細がある。シードフレーズから秘密鍵を導出すること、秘密鍵から対応する公開鍵とアドレスを導出することは、どちらも暗号学的にはその方向であれば容易だ。しかし逆方向——アドレスから秘密鍵を逆算する、あるいは秘密鍵から元のシードフレーズを逆算することは、現在利用可能などんな計算能力をもってしても事実上不可能だ。これこそが、「バックアップ」が常により上位の階層に対して行われ、下位に対しては行われない理由でもある。あなたが大切に保管すべきはシードフレーズであり(それがすべてを再構築できるから)、導出された個々の秘密鍵やアドレスを一つずつ記録する必要はない。それは面倒なだけでなく不要でもある——シードフレーズさえ残っていれば、その下にある秘密鍵とアドレスはいつでも再計算できるからだ。
シードフレーズや秘密鍵を狙うほぼすべての詐欺手法は、一つのことを信じ込ませることを核心としている——「今回は特別で、この状況なら教えてもいい」。よくある手口には、公式サポートを装って「ウォレットの認証」を要求する、ウォレットのアップグレードやクロスチェーン移行ツールを装ってシードフレーズを入力して「同期」させようとする、あるいはエアドロップキャンペーンを装ってウォレットを接続させ一見無害に見える承認取引に署名させる、といったものがある。どのような状況であれ——文字で入力させる場合であれ、カメラの前で読み上げさせる場合であれ——シードフレーズや秘密鍵の提供を求められたら、それは詐欺だと見なすべきだ。正当なウォレットサービス提供者、取引所のサポートチーム、あるいはブロックチェーン財団が、本人確認のためにこれらを必要とすることは決してない。彼らが尋ねるとしてもせいぜいアドレスまでであり、アドレスはもともと公開して問題のないものだ。
次にウォレット関連の情報を求められる状況に遭遇したら、まず自分に問いかけてほしい——相手が求めているのは本当にアドレスなのか、秘密鍵なのか、それともシードフレーズなのか。アドレスであれば、公開しても何のリスクもない。秘密鍵かシードフレーズであれば、理由がどれほどもっともらしく、どれほど緊急に聞こえたとしても、直ちに警告サインとみなして手を止めるべきだ。この3つの用語がそれぞれ何を制御しているのかを明確に区別することは、あらゆるウォレットセキュリティ習慣の出発点である——「見知らぬリンクをクリックしない」「見慣れないコントラクトを承認しない」といった後に続くすべてのアドバイスは、最終的には「誰にも絶対に渡してはいけないものが何か」を先に理解しているという、この最も基本的な判断の上に成り立っている。