Geth。イーサリアムのキーストア
Gethウォレットの復元
イーサリアムの初期の頃にGethノードを運用していた場合、お手持ちのETHは、おそらくもう覚えていないパスワードで保護されたキーストアファイルの中にロックされているはずです。そのファイルさえあれば、通常は復旧が可能です。
Geth(go-ethereum、イーサリアムの公式クライアント)は、MetaMaskやハードウェアウォレットが登場する以前、初期の保有者の多くがETHを保管するために利用していたものです。アカウントを作成すると、Gethは暗号化されたキーストアファイルをディスクに書き出し、パスワードで保護していました。 数年が経った今、そのパスワードこそが問題の根源となっています。ファイル自体は無傷で、ETHもオンチェーン上で確認できますが、ウォレットを開くことができないのです。キーストアファイルがまだ手元にある限り、これは最も復旧しやすい状況の一つと言えます。
キーストアファイル(UTC / V3)
Geth stores each account as a JSON keystore file with a name like UTC–2015-08-14T…–<address>. Inside is your private key, encrypted to the Ethereum Web3 Secret Storage V3 standard. This is the single most important thing to find and protect — it is what makes recovery possible. Without it, there is nothing to decrypt; with it and a password hint, the odds are good.
キーストアフォルダの一般的な保存場所:
- Linux: ~/.ethereum/keystore/
- macOS: ~/Library/Ethereum/keystore/
- Windows: %APPDATA%\Ethereum\keystore\
これらのファイルには拡張子がなく、ファイル名は「UTC–」で始まります。Geth、Mist、または旧バージョンのEthereum Walletアプリを一度でも実行したことがある場合、ここに鍵が保存されています。
キーストアの暗号化方法
V3キーストアにはパスワードそのものは保存されません。パスワードは、意図的に計算処理を挟みながら、秘密鍵を復号するための鍵を導出するために使用されます。 Gethではデフォルトでscryptキー導出関数(N、r、pパラメータを強固に設定)が使用されますが、一部のファイルでは代わりにPBKDF2が使用されることもあります。その後、実際の鍵はAES-128-CTRで暗号化され、MACによって候補パスワードが正しいかどうかが検証されます。この負荷の高いKDFこそが、復旧が単純な処理速度ではなく、適切なヒントに依存する理由です。設計上、1回の推測には多大なコストがかかるため、検索範囲を絞り込むことが何よりも重要となるのです。
Gethのパスワードを復元する方法
「リカバリー」とは、お客様のパスワードを対象としたオフラインでの検索です。当社は、お客様のキーストアファイルからKDFパラメータを読み取り、お客様が覚えている情報(長さ、断片、よく使う単語や数字、設定した年やマシンなど)をもとに候補となるパスワードを生成し、hashcatのEthereumウォレットモード(scryptキーストアの場合は15700、PBKDF2の場合は15600)を使用して、専用のGPUハードウェア上でそれらをテストします。 候補がMACの条件を満たした瞬間、パスワードが確認され、秘密鍵は再びお客様の手に戻ります。稼働中のサイトには一切入力されず、秘密鍵がお客様のもとに戻るまで、平文で取り扱われることは一切ありません。
Geth、Mist、およびプレセール用キーストア
フォーマットには違いがあるため、実際にどのフォーマットを使用しているかを確認しておく価値があります。Gethキーストア(V3)は、クライアントでアカウントを作成した際に得られるものです。これは、独自のencseedフォーマットを使用している2014年のプレセール用ウォレットとは異なります。ファイルがプレセール当時のもの場合は、代わりにそのページを参照してください。旧バージョンのMist / Ethereum Walletアプリは、内部でGethと同じV3キーストアを使用していたため、それらのケースについてもここで扱います。どのクライアントを使用したかをお知らせいただければ、適切な対処法をすぐにご提案できます。
ゲスのパスワードが機能しない理由
「間違いなく正しいはず」と思われるケースのほとんどは、些細な違いに起因しています。大文字や末尾の数字を忘れていた、入力した特殊文字やアクセント付き文字が現在の入力とは異なるエンコーディングで保存されていた、あるいはアカウントを作成した時の端末とキーボードレイアウトが異なっていた、といったことです。コマンドラインユーザーの場合、パスワードの末尾に空白が含まれていたり、シェルエスケープの仕様による癖があったりすることもあります。 私たちはこれらすべてを体系的に再現しています。パスワード自体は通常正しいのですが、再入力している形式と完全に一致していないだけなのです。
古いマシン上のキーストアを見つける
Gethはスマートフォンやホスティングアカウントではなくコンピュータ上で動作していたため、キーストアファイルは、古いノートパソコン、使わなくなったデスクトップパソコン、外付けドライブ、あるいはアップグレード時に作成したバックアップなど、何年も触っていないハードウェア上に残っていることがよくあります。ファイル名に含まれるアカウントアドレスを確認すれば、何よりもまず、正しいファイルを見つけたかどうかを確かめることができます。 ドライブが故障していたり、データが消去されていたり、ファイルが削除されていたとしても、必ずしも手遅れというわけではありません。メディアのフォレンジックイメージを取得し、そこからキーストアを抽出することで、再構築されたファイルからパスワードを復元することが可能です。ファイルが失われたと思われる場合でも、ドライブを再フォーマットしたり、そのまま使い続けたりしないでください。書き込みを行うたびに、復元可能なデータは減少してしまいます。メディアをそのまま保存し、まずは弊社にご依頼ください。
私たちにできないこと
キーストアファイルが失われてしまった場合、復号する対象は存在せず、誰もそれを復元することはできません。暗号化された鍵はそのファイル内にのみ存在しているからです。公開鍵しか持っていない場合、それを復元することは不可能です。また、長くて完全にランダムなパスワードについて本当に何も覚えていない場合、scryptによる計算コストが高すぎて検索が現実的でない可能性があります。その点については、お客様がコミットする前に正直にお伝えします。弊社では、前払いを要求することは決してありません。
よくある質問
Gethウォレットを復元するには、どのファイルが必要ですか?
キーストアのJSONファイル――キーストアフォルダ内にある「UTC–…–address」という名前のファイルです。このファイルには、暗号化された秘密鍵が格納されています。これがなければ、復号できるものは何もありません。
Gethのキーストアはどこに保存されていますか?
Linux では ~/.ethereum/keystore/、macOS では ~/Library/Ethereum/keystore/、Windows では %APPDATA%\Ethereum\keystore\ にあります。ファイル名は「UTC–」で始まり、拡張子はありません。
Gethのパスワードを忘れてしまいました。復元することはできますか?
通常、キーストアファイルとパスワードの一部を覚えていれば、そのファイルのscryptまたはPBKDF2の設定を読み取り、候補が一致するまでヒントを基にしたオフライン検索を実行します。
ゲスのキーストアは、プレセール用ウォレットと同じものですか?
いいえ。GethのキーストアはV3形式を使用していますが、2014年のプレセールウォレットは独自のencseed形式を使用しています。それぞれ異なる処理方法が必要です。お使いの形式をお知らせいただければ、適切に処理いたします。
以前使っていたMist/Ethereumウォレットのファイルについて――助けていただけませんか?
はい。MistとEthereum WalletアプリはGethと同じV3キーストアを使用していたため、それらの復元方法も同様です。
Gethの復旧にはどれくらいの費用がかかりますか?
成功報酬型:ウォレットを開封できた場合にのみ、回収額の一定割合を受け取り、前払いは一切ありません。
ゲスのキーストアにアクセスできなくなってしまいましたか?
Send us your UTC / V3 keystore file and what you remember of the password. Honest assessment within 24 hours, and you pay only on success. Our experienced technical staff will examine your request and suggest next steps.
