この記事では、有名なパスワードクラッキングツール「John the Ripper」のスイートに含まれるユーティリティスクリプト ethereum2john
の使い方について詳しく解説します。Ethereum(イーサリアム)のウォレットファイルからパスワードハッシュを抽出し、John the Ripperで解析可能な形式に変換する方法を学びます。
⚠️ 重要: このツールは、自身が所有するウォレットのパスワードを忘れてしまった場合や、セキュリティテストの目的でのみ使用してください。他人のウォレットに対して不正にアクセスを試みることは、法律で禁止されており、重大な倫理的問題を引き起こします。常に適切な許可を得て、責任ある行動を心がけてください。
ethereum2johnとは? 🤔
ethereum2john
は、Pythonで書かれたスクリプトで、John the Ripper (JtR) プロジェクトの一部として開発されています。John the Ripperは、様々な種類のパスワードハッシュを解析(クラック)するための強力なオープンソースツールです。
Ethereumのウォレット、特にKeystoreファイル(JSON形式)は、秘密鍵を保護するためにパスワードで暗号化されています。もしこのパスワードを忘れてしまうと、ウォレット内の資産(ETHやトークン)にアクセスできなくなってしまいます。ethereum2john
は、このKeystoreファイルからパスワード検証に必要な情報(ハッシュ)を抽出し、John the Ripperが理解できる形式に変換する役割を担います。
具体的には、ethereum2john
は Keystore ファイル (通常は UTC--YYYY-MM-DDTHH-MM-SS.sssssssssZ--<address>
のようなファイル名) を読み込み、その中の暗号化パラメータ(例: PBKDF2やscryptの設定)と暗号化されたデータを使って、John the Ripper用のハッシュ文字列を生成します。
このスクリプトは、John the Ripperの「jumbo」バージョン(コミュニティによって拡張されたバージョン)に含まれていることが多いです。
前提条件 🛠️
ethereum2john
を使用するには、以下のものが必要です。
- Python 環境:
ethereum2john
はPythonスクリプトなので、Pythonインタプリタが必要です。多くの場合、Python 2.7 または Python 3.x が必要となります。 - John the Ripper (jumbo バージョン):
ethereum2john
スクリプト自体と、抽出したハッシュを解析するためのJohn the Ripper本体が必要です。通常、John the Ripper の GitHub リポジトリから「bleeding-jumbo」ブランチをクローンまたはダウンロードしてビルドします。このバージョンには多くの `*2john` ツールが含まれています。 - Ethereum ウォレットファイル: パスワードを解析したいEthereumのKeystoreファイル(JSON形式)。通常、GethやMyEtherWalletなどでアカウントを作成した際に生成されます。ファイル名は `UTC–…` で始まり、ウォレットアドレスが含まれていることが多いです。
John the Ripper の入手と準備
John the Ripper (jumbo) を入手する一般的な方法は、Git を使用してリポジトリをクローンすることです。
# リポジトリをクローン
git clone https://github.com/openwall/john -b bleeding-jumbo john-bleeding-jumbo
cd john-bleeding-jumbo/src
# ビルド (環境に応じて ./configure && make など)
./configure
make -s clean && make -sj4
ビルドが完了すると、../run/
ディレクトリに実行ファイル(john
)と各種 *2john
スクリプト(ethereum2john.py
など)が配置されます。
ethereum2john の基本的な使い方 🚀
ethereum2john
の使い方は非常にシンプルです。Pythonインタプリタを使ってスクリプトを実行し、引数として対象のEthereum Keystoreファイルを指定します。
python /path/to/john/run/ethereum2john.py /path/to/your/wallet/UTC--...--<address>.json
/path/to/john/run/
は John the Ripper の run
ディレクトリへの実際のパスに置き換えてください。
/path/to/your/wallet/UTC--...--<address>.json
は、解析したいKeystoreファイルの実際のパスに置き換えます。
成功すると、標準出力にJohn the Ripperが解析できる形式のハッシュ文字列が出力されます。この出力は通常、ファイルにリダイレクトして保存します。
python /path/to/john/run/ethereum2john.py wallet.json > ethereum_hash.txt
上記の例では、wallet.json
という名前のKeystoreファイルからハッシュを抽出し、ethereum_hash.txt
というファイルに保存しています。
出力されるハッシュ形式
ethereum2john
が出力するハッシュ文字列は、使用されている鍵導出関数(KDF)によって形式が異なります。主に以下の形式があります。
$ethereum$p*...
: PBKDF2-HMAC-SHA256 を使用したウォレット。Hashcat モード 15600 に相当します。$ethereum$s*...
: scrypt を使用したウォレット。Hashcat モード 15700 に相当します。Geth などで標準的に使われることが多い形式です。$ethereum$w*...
: Ethereum Pre-Sale ウォレット (PBKDF2-HMAC-SHA256)。Hashcat モード 16300 に相当します。
例えば、scrypt を使用したウォレットの場合、出力は以下のようになります(実際の値は異なります)。
wallet.json:$ethereum$s*262144*8*1*a1b2c3d4...e5f6*01234567...89abcdef*fedcba98...76543210
最初の部分 (wallet.json:
) はファイル名で、John the Ripper は通常これを無視しますが、ハッシュファイルに含めておくとどのファイル由来のハッシュか分かりやすくなります。
John the Ripper でハッシュを解析する 🔍
ethereum2john
でハッシュファイルを生成したら、次はそのファイルをJohn the Ripperに渡してパスワード解析(クラッキング)を実行します。
/path/to/john/run/john ethereum_hash.txt
John the Ripperは、デフォルトでいくつかの解析モード(シングルクラックモード、辞書モード、インクリメンタルモード)を順番に試します。
特定のモードを指定することも可能です。例えば、辞書ファイル (passwords.lst
) を使って辞書攻撃を行う場合は以下のようにします。
/path/to/john/run/john --wordlist=passwords.lst ethereum_hash.txt
ルールベースの攻撃(辞書の単語に特定の変化を加える)を併用することもできます。
/path/to/john/run/john --wordlist=passwords.lst --rules=All ethereum_hash.txt
パスワードが見つかると、John the Ripper はそれを画面に表示し、$JOHN/john.pot
(通常は run
ディレクトリ内の john.pot
) というファイルに保存します。再度同じハッシュを解析しようとしても、john.pot
に記録されているため、すでに見つかったパスワードとしてスキップされます。
# 見つかったパスワードを表示する
/path/to/john/run/john --show ethereum_hash.txt
注意: Ethereumウォレット、特にscryptを使用しているものは、意図的に計算コストが高く設定されています。そのため、パスワード解析には非常に時間がかかる可能性があります。特に複雑なパスワードや長いパスワードの場合、一般的なコンピュータでは現実的な時間内に見つけることが困難な場合が多いです。強力なCPUが必要となり、GPUアクセラレーションは Geth の標準的な暗号化 (scrypt) には効果がありません。
対応しているウォレット形式と注意点 📝
- Keystore (JSON) ファイル:
ethereum2john
が主に対象とするのは、Geth、Parity、MyEtherWallet、Mist などで生成されるJSON形式のKeystoreファイルです。これらのファイルには、暗号化された秘密鍵と、パスワード検証に必要なパラメータが含まれています。 - Pre-Sale ウォレット: Ethereumの初期のプレセールで購入した際のウォレットファイルにも対応しています (
$ethereum$w*
形式)。 - Geth ウォレットの特性: Geth (Go Ethereum) クライアントが生成するウォレットは、強力な暗号化 (通常は scrypt) を使用しており、パスワード試行速度が非常に遅い(CPUコアあたり毎秒数十回程度)ことが知られています。そのため、総当たり攻撃や単純な辞書攻撃では、よほど簡単なパスワードでない限り解析は困難です。
- パスワードの推定: 解析を効率化するためには、可能な限りパスワードに関する情報を思い出すことが重要です。よく使っていたパスワード、文字の種類、長さ、関連する単語などをリストアップし、John the Ripperのルール機能やマスク攻撃と組み合わせると、成功率を高めることができます。
💡 ヒント
ウォレットファイルが見つからない場合、OSによってデフォルトの保存場所が異なります。
- Linux:
~/.ethereum/keystore
- macOS:
~/Library/Ethereum/keystore
- Windows:
%APPDATA%\Ethereum\keystore
ただし、これはデフォルト設定の場合であり、異なる場所に保存されている可能性もあります。
倫理的な考慮事項と法的側面 ⚖️
パスワードクラッキングツールは強力ですが、その使用には大きな責任が伴います。
- 所有権の確認: 絶対に自分自身が所有権を持つウォレット、または明示的かつ書面による許可を得たウォレットに対してのみ、これらのツールを使用してください。
- 法的規制: 許可なく他者のアカウントやシステムにアクセスを試みることは、多くの国や地域で不正アクセス行為として法律で禁止されており、厳しい罰則の対象となります。
- ツールの目的理解: John the Ripper や
ethereum2john
のようなツールは、本来、システム管理者がパスワードの強度をテストしたり、ユーザーが忘れたパスワードを回復したりするために開発されました。悪用は厳禁です。 - リソース消費: パスワードクラッキングは大量の計算リソース(CPU時間、電力)を消費します。特にクラウド環境や共有リソースを使用する場合は、規約を確認し、他のユーザーに迷惑をかけないように注意が必要です。
技術的な知識は、倫理的な判断と組み合わせて初めて正しく活用できます。常に責任ある行動を心がけましょう。
まとめ ✨
ethereum2john
は、EthereumウォレットのKeystoreファイルからJohn the Ripper用のハッシュを抽出するための便利なツールです。以下のステップで使用します。
- Python と John the Ripper (jumbo) を準備する。
ethereum2john.py
を使用して、Keystoreファイル (.json) からハッシュを抽出する。python ethereum2john.py [ウォレットファイル] > [ハッシュファイル]
- John the Ripper を使用して、抽出したハッシュファイルからパスワード解析を試みる。
john [ハッシュファイル]
Ethereumウォレットのパスワード解析は、特にGeth/scrypt形式の場合、計算コストが高く時間がかかるプロセスです。成功するかどうかは、元のパスワードの複雑さや利用可能な計算リソースに大きく依存します。
繰り返しになりますが、このツールは自己責任のもと、倫理的かつ合法的な範囲内でのみ使用してください。🙏
参考情報 (最低限)
- John the Ripper official website (Openwall): https://www.openwall.com/john/
- John the Ripper community-enhanced version (GitHub): https://github.com/openwall/john (
ethereum2john.py
はrun
ディレクトリ内にあります) - Ethereum Keystore (Web3 Secret Storage) Definition: https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition
コメント