エレクトラム・ウォレットの復元

Electrumウォレットの復元完全ガイド

エレクトラムのビットコインウォレットがリカバリプロセス中にノートパソコンにある

Electrumは2011年11月から存在しており、暗号資産の世界では「古参」と言える存在です。この長い歴史は、復旧作業において「恩恵」であると同時に「厄介な問題」でもあります。 「恵み」と言えるのは、ウォレットのフォーマットが詳細に文書化されており、コードベースが実際に読み解けるオープンソースのPythonだからです。一方、「呪い」と言えるのは、15年間にわたるバージョン変更の結果、誰かのハードドライブに保存されているウォレットファイルが、6種類ものフォーマットのいずれかになっている可能性があり、それぞれが異なる暗号化方式、導出パス、シードタイプを採用しているからです。私は2012年まで遡るエレクトラムのウォレットを復元してきましたが、どの時代にも特有の難題が存在します。

このガイドでは、Electrumウォレットの復旧に関する技術的な全体像を網羅しています。ウォレットファイルの内部構造から、各バージョンにおける暗号化メカニズム、さらには「残高がゼロと表示される」という、ビットコイン関連のサポートリクエストで最も多い原因となっている「導出パス」の複雑な問題に至るまで解説します。

Electrumが鍵をどのように保存するか

Electrumは、ウォレットを単一の独立したファイルとして保存します。デフォルトでは、そのファイル名は default_wallet (拡張子なし)で、OS に応じて決まった場所に保存されます:

ウィンドウズ C:\Users\<USER>\AppData\Roaming\Electrum\wallets\

macOS: ~/Library/Application Support/Electrum/wallets/

Linuxだ: ~/.electrum/wallets/

ウォレットファイルはJSON形式です。人間が読みやすく、構造化されており、驚くほど整理されています。暗号化されていないウォレットをテキストエディタで開けば、データモデル全体――キーストア、アドレス、取引履歴、ラベル、連絡先など、あらゆる情報――を確認できます。 keystore オブジェクトこそが回復の核心である。

について seed その欄に――ウォレットが暗号化されていないか、あるいは復号できる場合、必要な情報はすべて揃っています。その xprv (拡張秘密鍵)は、そのウォレットがこれまでに使用したすべての子鍵を導き出すことができます。 seed_type どの導出スキームが使用されたかを示し、 derivation ルートパスを示します。

古いウォレット(バージョン2.0以前)の場合、構造が異なります。代わりに bip32…すると、わかります type: "old" ~とともに mpk (マスター公開鍵)フィールド。これらは、BIP32やBIP39よりも前に開発された、Electrum独自の鍵導出アルゴリズムを使用しています。これについては後述します。

インポートされた秘密鍵(シードから導出されたものではない)を含むウォレットファイルは、 type: "imported" キーストア内にあり、それらの鍵は直接保存されています。これらのウォレットは シードフレーズからは復元できません – ウォレットファイル自体が唯一のバックアップです。これを失うと、鍵も失われてしまいます。

エレクトラムの2層暗号化

Electrumには2つの独立した暗号化レイヤーがあり、これらを混同してしまうことは、私がよく目にする復旧時のミスの一つです。

レイヤー1:キーストアの暗号化(秘密鍵およびシード)

秘密鍵とシードフレーズは、以下の方法で暗号化されます AES-256-CBC. 暗号化キーは、パスワードを SHA-256を2回実行 – それだけだ。MetaMaskや他のサービスのように数十万回もの反復処理を行うPBKDF2ではない。scryptでもない。ただ SHA256(SHA256(password)). そのため、Electrumウォレットは、他のほぼすべての最新ウォレットに比べて、ブルートフォース攻撃による解読が圧倒的に速く行えます。ハッシュキャット(hashcat)のベンチマークでは、それほど高性能ではないGPUハードウェアであっても、Electrumウォレットに対して1秒間に数十万件ものパスワード候補をテストすることができます。

この層は、ウォレットファイル内のシードと秘密鍵を保護します。取引に署名するためにパスワードを入力すると、Electrumはメモリ内で秘密鍵を一時的に復号し、署名を行った後、復号された鍵を破棄します。ディスク上のウォレットファイルでは、鍵は常に暗号化された状態で保持されます。

レイヤー2:ファイル全体の暗号化(ECIES)

バージョン2.8(2016年頃にリリース)以降、Electrumではデフォルトでファイル全体の暗号化が有効になっています。これは楕円曲線統合暗号方式(ECIES)を採用しており、パスワードから導出された公開鍵を用いてウォレットファイル自体を暗号化する非対称暗号化方式です。暗号化されたファイルはJSON形式ではなく、意味不明なバイナリデータのように見え、ファイルを開くにはパスワードが必要です。

決定的な違いは、ファイル全体の暗号化が有効になっている場合、正しいパスワードがない限り、ウォレットはその構造を一切開示しないという点です。アドレスや取引、さらにはウォレットの種類さえも、内部を覗き見ることはできません。JSONペイロード全体がECIESで暗号化されています。ファイル全体の暗号化が無効になっている場合(あるいは旧バージョンで利用できなかった場合)、JSONは読み取れますが、 xprv そして seed 各フィールドにはAESで暗号化された暗号文が含まれています。

この違いは復旧作業において重要であり、それは攻撃対象領域が変わるためです。キーストアのみを暗号化している場合、ブルートフォース攻撃を試みる前に、ウォレットの種類を特定したり、アドレスを確認したり、正しいファイルであることを確認したりすることが可能です。一方、ファイル全体を暗号化している場合は、パスワードを解読するまでは手探りの状態になります。

エレクトラムのシードシステム――BIP39ではない。そして、その違いは極めて重要だ

ここが、復元に関するトラブルのほとんどの発端となります。Electrumは独自のシード形式を採用しており、これはBIP39とは明確に互換性がありません。もし誰かがElectrumのシードをBIP39のみに対応したウォレット(Exodus、Trust Wallet、ほとんどのハードウェアウォレットなど)にインポートしようとすると、即座に拒否されるか、あるいは全く間違ったアドレスが生成されてしまいます。

この違いは技術的なものですが、重要な点です。BIP39では、ニーモニックワードを固定のワードリストを用いてエントロピーに変換し、チェックサムを追加した後、パスフレーズ「mnemonic」とオプションの拡張語を用いて、HMAC-SHA512で2048回の反復処理を行うPBKDF2を実行します。 Electrum 2.0+は、表面的には似ていますが、決定的に異なる処理を行います。具体的には、パスフレーズ「electrum」とオプションの拡張語を使用して、PBKDF2を2048回反復実行します。反復回数は同じ、HMAC-SHA512も同じですが、ソルト文字列は全く異なります。その結果、同じ12語を使用しても、生成されるマスターキーは全く異なるものになります。

また、古いバージョンのElectrum(Issue #4566 あたり)には、パスフレーズのUnicode正規化に関連するバグがありました。具体的には、ElectrumはBIP39パスフレーズから空白文字を過度に削除してしまうため、連続する2つのスペースのうち1つが削除されてしまうこともありました。もしユーザーが特殊なスペース配置でパスフレーズを設定していた場合、この正規化の問題が修正された新しいバージョンでは、ウォレットを復元できなくなる恐れがありました。

Electrumのシードには、シード自体にバージョン番号も埋め込まれています。このバージョンは、シードフレーズをハッシュ化し、最初のビットが既知のプレフィックスと一致するかどうかを確認することで導き出されます。このバージョンは、どの導出方式を使用すべきかを示しています:

  • 初期バージョン 01 — 標準ウォレット(レガシー、SegWit以前)
  • 初期バージョン 100 — SegWit対応ウォレット(ネイティブSegWit、Bech32)
  • 初期バージョン 101 — 2FAウォレット(TrustedCoinの共同署名者付き)
  • 初期バージョン 102 — SegWitマルチシグ

これは実に巧妙な設計です。BIP39を悩ませてきた「どの導出パスを使えばいいのか?」という当て推量をなくすことができます。しかし、その一方で、Electrumのシードは「閉鎖的な環境」となります。これらはElectrum内(あるいは、Electrumモードを備えたIan ColemanのBIP39ツールのように、Electrumのシード形式を明示的にサポートするソフトウェア)でのみ機能するのです。

3つのシード時代

バージョン2.0以前のシード(Electrum 1.x、「旧」形式): これらは双方向エンコーディングを採用しており、シードフレーズを特定のエントロピー値に復元することも、その逆も行うことが可能でした。これには、正確で固定されたワードリストが必要でした。この導出方法は、BIP32ではなくElectrum独自の方式であり、次のようなパスを使用していました。 m/0/k 宛先を受け取るための m/1/k 変更アドレス用。これらのウォレットは、以下の特徴で識別できます "seed_type": "old" ウォレットファイルの中に。今では珍しいですが、2012年から2013年にかけてビットコインウォレットを設定して、その後すっかり忘れてしまった人たちのものを見かけることがあります。

Electrum 2.x のシード(2014年以降): Electrumのシードバージョンシステムに、BIP32 HDウォレット構造を導入しました。標準的なウォレットでは派生パスを使用します m/0h 宛先として m/0h/0/k そして、乗り換えて m/0h/1/k. なお、これはBIP44のパスではありません(m/44'/0'/0'). この非標準的な導出は、常に混乱の原因となっている。

Electrum 3.x 以降の SegWit シード: SegWitのサポートが追加された際、ElectrumはネイティブSegWitウォレット用の新しいシードバージョンを追加しました。これらは派生パスを使用しています m/0h 同様に――ルートパスは同じですが、シードバージョンのプレフィックスによって、ウォレットはレガシー(1…)アドレスではなく、bech32(bc1…)アドレスを生成するよう指示されます。

導出パスと「空の財布」問題

導出パスは、シードを復元した際に残高がゼロになってしまう最も一般的な原因です。パスの各要素はすべて重要であり、たった1つの数字が間違っているだけで、生成される鍵やアドレスは全く異なるものになってしまいます。

以下は、Electrumの派生パスの概要です:

エレクトラムのネイティブシード(BIP39ではない):

  • 従来の標準ウォレット: m/0h → 受信先: m/0h/0/k、乗り換えは m/0h/1/k
  • SegWit対応の標準ウォレット: m/0h → 受信先: m/0h/0/k、乗り換えは m/0h/1/k (同じパス、異なるアドレスエンコーディング)
  • 旧エレクトラム(2.0以前): m/k 受信用、 m/k 変更用の別のキーシーケンス

ElectrumにインポートされたBIP39シード:

  • レガシー(P2PKH、1で始まるアドレス): m/44'/0'/0'
  • ラップド・セグウィット(P2SH-P2WPKH、3で始まるアドレス): m/49'/0'/0'
  • ネイティブSegWit(P2WPKH、bc1で始まるアドレス): m/84'/0'/0'
  • Taproot(P2TR、アドレスが「bc1p」で始まるもの): m/86'/0'/0'

落とし穴:もし誰かがTrezor Suite(BIP39を使用している)でウォレットを作成した場合、 m/84'/0'/0' (ネイティブSegWitの場合)、その後、Electrum形式のシードを使用してElectrumで復元しようとすると、パスが一致しません。たとえElectrumの設定で「BIP39シード」を正しく選択したとしても、適切なスクリプトタイプ(レガシー、SegWit、ネイティブSegWit)を選択し、派生パスが元のウォレットと一致していることを確認する必要があります。

そして、ここからが本当に厄介な点です。ElectrumではBIP39シードのインポートは可能ですが、シードの生成は行いません。新しいウォレットを作成する際、Electrumは常に独自のシード形式を生成します。 BIP39のインポートオプションは、ウォレット間の互換性を確保するためだけに存在します。しかし、Electrumは不正なBIP39シード(チェックサムワードが間違っているもの)でも平然と受け入れてしまいます。小さな「チェックサム失敗」という警告は表示されますが、操作を続行することを阻止はしません。このため、復元を試みるまでは正常に機能しているように見えるものの、実際にはスペルミスのあるシードでウォレットを作成してしまう人が後を絶ちません。

ウォレットの残高がゼロになる問題に対する実用的な対処法:シードを復元した際に残高がゼロと表示された場合は、体系的にさまざまな組み合わせを試してみてください。まず、シードがElectrum形式かBIP39形式かを確認します。Electrum形式の場合、導出は自動的に行われます。BIP39形式の場合は、各スクリプトタイプを試す必要があります。まずネイティブSegWit(最近のウォレットで最も一般的)、次にWrapped SegWit、そしてレガシーです。 Electrum 4.x には、BIP39復元時に「既存のアカウントを検出」ボタンが用意されており、一般的な導出パスにわたる取引履歴をサーバーに問い合わせることができます。これを利用してください。

ウォレットに複数のアカウントが含まれている場合(Trezor Suiteを使用するハードウェアウォレットではよくあることですが)、Electrumは1つのウォレットファイルにつき複数のアカウントをサポートしていない点にご注意ください。各アカウントごとに個別のウォレットを作成し、派生パス内のアカウントインデックスを順次増やしていく必要があります: m/84'/0'/0' アカウント1については、 m/84'/0'/1' アカウント2については、以下同様です。

ギャップ制限と、資金が表示されない理由

正しいシードと派生パスが指定されていても、ギャップ制限により資金が不足しているように見える場合があります。Electrumはアドレスを順次生成しますが、20個連続して未使用のアドレス(デフォルトのギャップ制限)に遭遇するとスキャンを停止します。もし誰かがインデックス0~5のアドレスを使用した後、APIや別のウォレットなどを通じてインデックス30に飛んだ場合、Electrumはギャップ制限に達して検索を停止するため、インデックス25以降のアドレスを検出できなくなります。

解決方法は簡単です。Electrumのコンソール([表示] → [コンソールを表示])で、次のコマンドを実行してください:

wallet.change_gap_limit(50)

あるいは、必要な数値を設定してください。その後、再同期を実行します。極端なケースでは、プログラムで利用されるウォレット(ECプラットフォームや寄付ページなど)に対して、ギャップの制限値を200以上に設定したことがあります。

バージョン履歴とアップグレード時の不具合

これまで、Electrumのバージョンアップは後方互換性を損なうものでした。新しいバージョンでウォレットファイルを開くと、内部形式が更新されることが多く、古いバージョンでは更新後のファイルを読み取ることができません。この点は明示的に記載されていますが、広く無視されています。

重要なバージョン移行:

1.x → 2.0 (2014年):ウォレット形式が全面的に変更されました。BIP32 HDウォレットのサポートにより、従来の独自方式の導出アルゴリズムが置き換えられました。アップグレード処理により、すべてのアドレスが再生成されます。Electrum 1.xでは、2.xのウォレットファイルは一切読み取ることができません。v1のウォレットを開く必要がある場合は、必ずElectrum 1.9.8をインストールする必要があります。

2.x → 3.0 (2017): 新しいサーバープロトコルとSegWitのサポートが追加されました。ウォレットファイルのフォーマットが更新されました。SegWitシードタイプが導入されました。内部の seed_version ウォレットのJSON内のfieldがこの情報を追跡しています。もし seed_version: 13 または 14…これはv3時代のウォレットです。

3.x → 4.0 (2020):Lightning Networkのサポート、PSBTの導入、大幅な内部構造の見直し。Lightningチャネルはウォレットファイルに保存されており、前回ウォレットを使用した際にチャネルが開かれていた場合、シードのみを復元してもLightningチャネルの状態は復元されません。Lightningの復元には、ウォレットファイルそのものが不可欠です。

4.x シリーズ(2020年~現在):改良が続けられています。バージョン 4.1.0 では、通常の UI を通じてレガシーウォレットを作成するオプションが削除され(デフォルトでネイティブ SegWit になりました)、バージョン 4.5 以降ではストレージのバージョンがさらに更新されました。 ウォレットDBのアップグレードコードは、非常に古い形式からの移行に対応していますが、必ずしもスムーズに進むとは限りません。v1.9.8のウォレットからのアップグレードパスには、開発者に連絡するよう促すエラーメッセージが表示される可能性のある特殊なケースが存在します。

教訓:Electrumをアップグレードする前に、必ずウォレットファイルを別の場所にコピーしておきましょう。アップグレードによって不具合が生じた場合でも、元のファイルを使って以前のバージョンに戻すことができます。また、アップグレードによってウォレットファイルが変更された後は、絶対にダウングレードを行わないでください。

パスワードの解読と、なぜElectrumが特に脆弱なのか

エレクトラムの鍵導出――ただ SHA256(SHA256(password)) – これは、仮想通貨ウォレットのエコシステム全体の中でも最も脆弱なもののひとつです。ソルトも、PBKDF2も、scryptも、argon2も使用されていません。SHA-256を2回実行しただけで、それがAES-256-CBCの暗号化キーとなっています。

参考までに:MetaMaskは60万回のPBKDF2反復処理を使用しています。Bitcoin Coreは約10万回以上です。一方、Electrumが使用しているのは……SHA-256の処理が2回だけです。最新のGPUであれば、hashcatは1秒あたり数十億回のSHA-256ハッシュ計算を実行できます。AES復号の検証を考慮したとしても、Electrumのパスワード解読速度は、他のほぼすべてのウォレットよりも桁違いに速いのです。

Hashcatは、ウォレットのソルトの種類に応じて、3つのモードでElectrumに対応しています:

  • モデル 16600 – Electrumウォレット(Salt-Type 1-3):ほとんどのウォレットに対応しています。ハッシュの形式は次のようになります。 $electrum$1*<hex_salt>*<hex_data>.
  • モード 21700– Electrum ウォレット(Salt-Type 4):ECIES によるファイル全体の暗号化を採用した、新しいウォレット暗号化形式。
  • モード 21800– Electrum ウォレット(Salt-Type 5):最新の暗号化方式。

ハッシュを抽出するには、次のコマンドを使用します electrum2john.py John the Ripper プロジェクトより。

btcrecoverもまた定番のツールであり、トークンベースのパスワード生成に対応しているため、多くの復旧シナリオにおいてより実用的だと言えるでしょう。ユーザーが覚えている要素(「『Bitcoin』で始まり、数字と、おそらく感嘆符で終わっていた」など)を指定すると、ツールがすべての組み合わせを生成します。特にElectrumに関しては、btcrecoverは暗号化されたウォレットファイルの復旧に加え、シードフレーズの単語が欠落していたり不確かな場合のための直接シード復旧にも対応しています。

破損したウォレットファイル

Electrumにおけるウォレットファイルの破損にはいくつかの形態があり、復旧方法は破損の原因によって異なります。具体的な事例がある場合は、david@walletrecoveryservice.comまでご連絡ください。可能な限り解決策をご提案いたします。

「v1.9.8のバグ」によるウォレット:Electrumバージョン1.9.8には、復元時に誤ったシードを入力したことで、一見有効に見えるものの、実際には鍵情報が含まれていないウォレットファイルが生成されてしまうという、特定の種類の破損したウォレットが存在します最新のElectrumのウォレットDBコードには、この問題に対する特別なチェック機能が実装されています。具体的には、マスターキーがなく、シードバージョンがv6であるウォレットを検出し、ユーザーに警告を表示します。これらのウォレットには、復元可能な資金は一切含まれていません。

ライトニングチャネルの状態破損:開いているライトニングチャネルを持つウォレットが破損した場合、シードからの復元だけではライトニングの資金は回復しません。 ライトニングチャネルはステートフルです。つまり、最新のチャネル状態(コミットメントトランザクションや失効キーなど)はウォレットファイル内にのみ保存されています。Electrumにはチャネルバックアップ機能(SCB:Static Channel Backups)が搭載されていますが、これはチャネルを強制終了させることはできても、再開することはできません。ライトニング資金が含まれたウォレットが破損している場合、優先すべきはシードだけでなく、ウォレットファイルそのものを復元することです。

バックアップ戦略:Electrumには、「ファイル」→「バックアップを保存」(旧バージョンでは「コピーを保存」)という組み込みのバックアップ機能があります。これにより、ウォレットファイルの完全なコピーが保存されます。バックアップは引き続きパスワードで暗号化されているため、復元するにはバックアップファイルとパスワードの両方が必要になります。最大限の安全性を確保するには、シードフレーズを紙に書き出すとともに、ウォレットファイルのバックアップも保管してください(特にLightningを使用している場合や、鍵をインポートしている場合は必須です)。

エレクトラム Androidウォレット

Android版ElectrumはKivyフレームワーク(バージョン2.6で導入)に基づいて構築されており、デスクトップ版Electrumと同じウォレットファイル形式を採用しています。シードの種類、暗号化方式、および導出パスはすべて同一です。Androidで作成されたウォレットファイルはデスクトップで開くことができ、その逆も可能です。

Android特有の課題は、ファイルへのアクセスです。ルート化されていないAndroidデバイスでは、Electrumのウォレットファイルはアプリのプライベート内部ストレージ内の以下の場所に保存されます:

/data/data/org.electrum.electrum/files/data/wallets/

通常のファイルマネージャーやUSB経由では、このパスにアクセスすることはできません。Androidのサンドボックス機能によってアクセスがブロックされているためです。これは(他のアプリによるウォレットファイルの盗用を防ぐための)仕様ですが、アプリがクラッシュしたり、誤ってアンインストールされたりした場合、復旧が困難になるという問題が生じます。

ElectrumにはiOS版は存在しません。断言しますもし誰かがiPhoneでElectrumを動かしていると主張するなら、それは偽のアプリを使っているということです。実際、過去数年にわたり、App Storeには資金を盗む詐欺的なElectrumのクローンアプリが複数出回っていました。

上書きや削除されたウォレットファイルの問題

Electrumウォレットのファイルは、ファイルシステム上の通常のファイルです。そのため、バックアップが取りやすい反面、誤って削除してしまう可能性も高くなります。

シナリオ1:ウォレットファイルが削除された

ウォレットファイルが(誤って、アンインストールによって、またはマルウェアによって)削除された場合は、WalletRecoveryService.com に連絡して専門的なデータ復旧を依頼するか、david@walletrecoveryservice.comまでメールをお送りください。 ウォレットファイルは通常、サイズが小さく(標準的なウォレットなら数百KB、ライトニングチャネルの履歴が豊富なウォレットでも数MB程度)、削除後であっても、その後にディスクへの書き込みが頻繁に行われていない限り、多くの場合、ディスクから復元可能です。

SSDの場合、TRIMウィンドウが適用されるため、直ちにそのドライブの使用を中止してください。HDDの場合、時間は多少ありますが、書き込み操作を行うたびに、ウォレットファイルが保存されているセクタが上書きされるリスクがあります。

シナリオ 2:復元中にウォレットが上書きされた場合

これはElectrum特有の落とし穴です。Electrumでシードから復元する際、既存のファイルと同じウォレットファイル名を選択すると、Electrumは古いファイルを上書きしてしまいます。ドキュメントにはこの点について記載されていますが、慌てていると見落としがちです。もし(シードから生成されたものではなく)インポートされた秘密鍵を含むウォレットファイルがあり、別のシードを同じファイル名で復元して上書きしてしまった場合、別途バックアップを取っていない限り、それらのインポートされた鍵は失われてしまいます。

復元する際は、必ず別のファイル名を使用してください: restored_wallet, recovery_test、既存のウォレットファイル名以外のもの。

シナリオ3:故障したドライブ上のウォレットファイル

Electrumのウォレットファイルは、単一の独立したファイルです。故障したドライブからその1つのファイルを復元できれば(専門的なデータ復旧、ディスクイメージの作成、またはファイルカービングなどを通じて――walletrecoveryservice.comではそのプロセスをサポートいたします――)、必要なものはすべて揃います。Electrumのインストールデータ、設定、あるいはブロックチェーンヘッダー全体を復元する必要はありません。必要なのは、ウォレットファイルとパスワード(またはシードフレーズ)だけです。

フィッシング攻撃の手口 ― Electrum特有の問題

Electrumには、他のほとんどのウォレットには存在しない悪名高い脆弱性があり、それがまさに復旧が必要となる状況を引き起こすため、復旧機能と直接的に関連しています。

2018年12月、Electrumのサーバーがクライアントに対して任意のエラーメッセージを送信でき、ElectrumがそれをHTML形式のテキストとして表示してしまうことが判明しました。攻撃者は悪意のあるElectrumサーバーを構築し、ユーザーが取引を送信すると、改変されたElectrumバイナリをホストするフィッシングサイトへのリンクを含む偽の「更新が必要です」というエラーを返すようにしました。この偽の更新をダウンロードしてインストールしたユーザーは、シードやウォレットのパスワードを盗まれることとなりました。

この攻撃が特に甚大な被害をもたらしたのは、フィッシングメッセージがElectrumのインターフェース内に表示され、公式のもののように見えたためです。この脆弱性が修正されるまでに、数千ビットコインが盗まれました。修正はElectrum 3.3.3でリリースされ、サーバーメッセージ内のHTMLのレンダリングが停止されました。

これが復旧において重要な理由:この攻撃で資金を失ったユーザーの多くは、元のシードを含む元のウォレットファイルをまだ保持しています。攻撃者のバージョンは鍵を盗み、資金を移動させましたが、正当なウォレットは依然として存在しているのです。もし誰かが「Electrumにビットコインを入れていたのに、2018年から2019年にかけて突然消えてしまった」と相談してきた場合、私が真っ先に確認するのはフィッシング攻撃の可能性です。 このケースでの復旧は技術的な問題ではありません。資金は紛失したのではなく、盗まれたのです。しかし、攻撃者によって空にされたウォレットのパスワード解読に、ユーザーが時間とお金を無駄にしないよう、正しく診断することが重要です。

マルチシグおよび2段階認証対応ウォレットの復旧

ElectrumはマルチシグウォレットとTrustedCoinによる2段階認証(2FA)に対応していますが、これらはいずれも復旧プロセスを複雑にします。

マルチシグウォレット Electrum では、ウォレットタイプフィールドによって識別されます: "wallet_type": "2of3" など。ウォレットファイルには複数のキーストアが含まれています(x1/, x2/など)、それぞれが1人の共同署名者を表します。マルチシグウォレットから資金を引き出すには、所定の数の鍵が必要です。すべての共同署名者のキーストアを含むウォレットファイルがあれば、復旧は通常通り行われます。1人の共同署名者のシードしか持っておらず、他の共同署名者が必要である場合は、他の鍵保有者の協力が必要となります。

2FAウォレットは、TrustedCoinを共同署名サービスとして利用しています。これらは本質的に「3つのシードのうち2つ」を必要とするマルチシグウォレットであり、TrustedCoinが1つの鍵を保持し、ユーザーが2つを保持します。復旧には、(a) 3つのシードのうち2つ、または (b) 1つのシードに加え、TrustedCoinサービスが稼働しており、かつユーザーが認証されていることが必要です。 TrustedCoinがサービスを停止した場合でも、ユーザーは手元にある2つのシードを使用して送金を行うことは可能です。ただし、その際は2つすべてが必要です。ウォレット作成時にElectrumが表示する2FA復旧キー(多くの人が書き留めていないもの)は、3つ目のシードに相当し、TrustedCoinなしで復旧を行うために不可欠なものです。

実際に効果のある回復法

長年にわたりエレクトラム(Electrum)ウォレットの復旧に携わってきた経験から、私が最も頻繁に扱うケースと、その対処法についてご紹介します。

シナリオ1:シードフレーズを持っているので、復元するだけです

Electrumを起動し、「ファイル」→「新規作成/復元」を選択します。「標準ウォレット」→「シードをすでに持っています」を選択します。シードを入力します。Electrumのシードの場合、Electrumがシードの種類と導出パスを自動的に検出します。BIP39シード(ハードウェアウォレットや他のソフトウェアウォレットからのもの)の場合は、単語を入力する前に「オプション」をクリックし、「BIP39シード」を選択してください。 正しいスクリプトタイプを選択し、派生パスを確認します。新しいパスワードを設定します。

残高がゼロと表示される場合:スクリプトの種類(ネイティブSegWit、ラップドSegWit、レガシー)を変えてみてください。BIP39を使用している場合は、「既存のアカウントを検出」をクリックして履歴をスキャンしてください。20番目以降のアドレスが使用されていた場合は、ギャップ制限値を引き上げてください。

シナリオ 2:ウォレットファイルとパスワードがある

Electrumを起動し、ウォレットファイルを選択してください。ファイルがUSBメモリやデフォルト以外の場所に保存されている場合は、「ファイル」→「開く」を選択し、ファイルを探してください。ファイルを開くと、「ウォレット」→「シード」(パスワードが必要です)でシードを確認したり、秘密鍵をエクスポートしたり、通常通り取引を行ったりすることができます。

シナリオ3:ウォレットファイルはあるが、パスワードを忘れた。シードフレーズは持っている。

パスワードは完全に無視してください。シードフレーズから新しいウォレットを作成してください(シナリオ1と同様)。シードフレーズからは、以前のウォレットファイルにどのようなパスワードが設定されていたかに関わらず、同じ鍵が生成されます。新しいウォレットに新しいパスワードを設定してください。

シナリオ4:ウォレットファイルはあるが、パスワードを忘れており、シードフレーズもない

これは力業が必要な領域です。以下のような専門の復旧業者にご相談ください。 walletrecoveryservice.com または、ハッシュを抽出するには electrum2john.py、そしてそれをhashcat(ソルトの種類に応じてモード16600、21700、または21800)またはbtcrecoverに読み込ませます。

シナリオ 5:旧版エレクトラム v1.x ウォレット

Electrum 4.x で v1 ウォレットを直接開こうとしないでください。特定の特殊なケースではアップグレードが失敗する可能性があり、その場合は元のファイルがそのまま残っている必要があります。david@walletrecoveryservice.com までメールでご連絡ください。弊社では長年にわたり、このようなケースへの対応を行っております。

シナリオ6:別のウォレットでElectrumのシードが機能しない

ElectrumのシードをElectrum以外のウォレット(Trezor、Ledger、Exodusなど)にインポートしようとすると、これらのウォレットはBIP39形式を想定しているため、うまくいきません。Electrumで復元し、そこから資金を移動(sweep)または送信して、目的のウォレットに送金することができます。

シナリオ7:ハードウェアウォレットのBIP39シードが、Electrumで誤ったアドレスを表示する

おそらく、スクリプトの種類や派生パスを間違えて選択してしまったのでしょう。Trezorウォレットの場合、ネイティブSegWitは m/84'/0'/0'、遺産とは m/44'/0'/0', ラップド・セグウィットは m/49'/0'/0'複数のアカウントがある場合は、最後のハードニングインデックスを1増やしてください。単語を入力する前に、ElectrumをBIP39モード([オプション] → [BIP39シード])に設定する必要があります。

シナリオ8:Androidウォレット、アプリが開かない

端末がルート化されている場合は、次の場所に移動してください /data/data/org.electrum.electrum/files/data/wallets/ そして、ウォレットファイルをコピーしてください。どちらの方法も失敗し、シードフレーズをお持ちの場合は、デスクトップで復元してください。シードフレーズをお持ちでなく、かつスマートフォンがルート化されていない場合、最後の手段として、デバイスのストレージをイメージ化できる専門のAndroidデータ復旧サービスを利用してください。

エレクトラムの復旧専門家が備えておくべきツール

  • electrum2john.py– John the RipperのJumboエディションからハッシュを抽出します。すべてのElectrumウォレット形式に対応しています。
  • hashcat– モード 16600、21700、21800。GPUを利用した高速なパスワード解読。
  • btcrecover– トークンベースのパスワード復元およびシード復元(不完全または不確かなシードフレーズ用)。
  • Ian Coleman氏のBIP39ツール– オフラインでのみ実行してください。Electrum形式のシードから鍵やアドレスを生成するためのElectrumシードモードを搭載しています。

復元可能なウォレットと紛失したウォレットの違い

エレクトラムのエコシステムは、他の多くのシステムに比べて柔軟性が高い。その理由は、ウォレットファイルが独立したポータブルなJSONファイルであり、十分なドキュメントが用意されているためだ。このファイルは(ファイル全体が暗号化されていない限り)任意のテキストエディタで開くことができ、広くサポートされているオープンソースツールで処理することができる。暗号化機能は、ほとんどのユーザーにとって十分な保護を提供するものの、業界標準に比べて著しく脆弱である。これはセキュリティの観点からは問題だが、復旧の面では非常に有利である。

復元できないウォレットには、次の2つの特徴のいずれかが当てはまります。1つ目は、ユーザーがシードフレーズとウォレットファイルの両方を紛失してしまった場合(復元の手がかりが一切ない状態)です。2つ目は、ユーザーがシードフレーズを紛失したもののウォレットファイルは手元にあるものの、非常に強力なパスワード(15文字以上のランダムな文字列)を設定しており、Electrumの脆弱な鍵導出方式を用いても、ブルートフォース攻撃による解読が計算上不可能な場合です。

それ以外の問題――誤った派生パス、フォーマットの不整合、ファイルの破損、古いバージョン、Androidからの抽出など――は、適切なカスタムツールと知識があれば解決可能です。

今すぐできる最も重要なことは、Electrumを起動して「ウォレット」→「シード」に移動し、12語のシードフレーズを紙に書き留め、その紙を安全な場所に保管することです。ウォレットファイルは破損したり、削除されたり、暗号化されたり、紛失したりする可能性があります。しかし、紙に書き留められ、安全に保管された12語のシードフレーズがあれば、いつでもビットコインを取り戻すことができます。

 

ご質問はありますか?david@walletrecoveryservice.comまでメールでお寄せください。