macOS のキーチェーンは、パスワード、証明書、秘密鍵などを安全に保管するための便利な機能です。しかし、パスワードを忘れてしまったり、セキュリティ監査の一環としてパスワードの強度を評価する必要がある場合もあります。そんな時に役立つのが、John the Ripper スイートに含まれる keychain2john というツールです。 
 このブログ記事では、keychain2john を使って macOS のキーチェーンファイル (.keychain または .keychain-db) からパスワードハッシュを抽出し、John the Ripper を使ってそのハッシュを解析(クラック)する手順を詳しく解説します。 
重要:倫理的な利用について
このツールは、パスワードリカバリーや正当な権限を持つセキュリティテストのために設計されています。所有者から明示的な許可を得ていないキーチェーンファイルに対して、このツールを使用することは、法律で禁止されており、重大なプライバシー侵害となります。 必ず、法と倫理を遵守して利用してください。不正利用は絶対にやめましょう。
keychain2john とは?
keychain2john は、オープンソースのパスワードクラッキングツールである John the Ripper (特にコミュニティによって拡張された “Jumbo” バージョン) に同梱されているユーティリティスクリプト(多くの場合 Python で書かれています)です。 
主な機能は以下の通りです:
- macOS のキーチェーンファイル (.keychainまたは.keychain-db) を読み込む。
- キーチェーンファイル自体を保護しているパスワードのハッシュ値を抽出する。
- 抽出したハッシュ値を、John the Ripper が解析できる形式で出力する。
 注意点として、keychain2john はキーチェーン内に保存されている個々のパスワード(例えばウェブサイトのログインパスワードなど)を直接抽出するわけではありません。抽出するのは、キーチェーンファイルを開くために必要なマスターパスワードのハッシュです。多くの場合、このマスターパスワードはユーザーのログインパスワードと同じですが、異なる場合もあります。 
このツールを使うことで、例えば以下のような状況に対応できます:
- キーチェーンのパスワードを忘れてしまい、他に解除する手段がない場合(パスワードリカバリー)。
- システム監査やペネトレーションテストの一環として、設定されているキーチェーンパスワードの強度を評価する場合(正当な権限が必要)。
- デジタルフォレンジック調査で、キーチェーンへのアクセスを試みる必要がある場合(法的手続きが必要)。
準備するもの
keychain2john を利用するには、以下のものが必要です。 
1. John the Ripper (Jumbo version)
keychain2john は John the Ripper に含まれています。特に、多くのフォーマットに対応している Jumbo バージョンが必要です。まだインストールしていない場合は、公式ウェブサイトや GitHub リポジトリから入手し、インストールしてください。 
John the Ripper 公式サイトJohn the Ripper GitHub
 インストール後、john 実行ファイルや keychain2john スクリプトが含まれるディレクトリ(通常は run ディレクトリ)の場所を確認しておきましょう。 
# 例: Homebrew でインストールした場合 (macOS)
# /opt/homebrew/share/john/run/ などにある可能性があります
ls /path/to/john/run/ | grep keychain2john2. 対象のキーチェーンファイル
パスワードハッシュを抽出したいキーチェーンファイルが必要です。macOS のキーチェーンファイルは、通常以下の場所にあります。
| キーチェーンの種類 | 一般的な場所 | 備考 | 
|---|---|---|
| ログインキーチェーン (Login Keychain) | ~/Library/Keychains/login.keychain-db | ユーザー固有のパスワードや証明書。最近の macOS では .keychain-db形式が主流。古いバージョンではlogin.keychainの場合もあります。 | 
| システムキーチェーン (System Keychain) | /Library/Keychains/System.keychain | システム全体(Wi-Fi パスワードなど)で使用される項目。アクセスには管理者権限が必要です。 | 
| ローカルアイテム (Local Items / iCloud Keychain) | ~/Library/Keychains/(UUID)/ | iCloud キーチェーン同期に関連する項目が含まれることがあります。パスワード保護の仕組みが異なる場合があり、 keychain2johnが直接対応していない可能性もあります。 | 
~/Library は、Finder からは通常見えない隠しフォルダです。Finder のメニューバーから「移動」を選び、Option (⌥) キーを押しながら「ライブラリ」を選択するとアクセスできます。 
対象のファイルを安全な場所にコピーしてから作業することをお勧めします。これにより、元のファイルに影響を与えるリスクを避けられます。
# 例: ログインキーチェーンをデスクトップにコピーする
cp ~/Library/Keychains/login.keychain-db ~/Desktop/keychain2john の使い方:ステップ・バイ・ステップ
keychain2john を使ってハッシュを抽出し、John the Ripper で解析する基本的な流れは以下の通りです。 
ステップ 1: keychain2john でハッシュを抽出する
 まず、John the Ripper の run ディレクトリにある keychain2john スクリプトを実行し、対象のキーチェーンファイルを指定します。出力結果をファイルにリダイレクト(保存)します。 
コマンドの基本形:
[Johnのrunディレクトリへのパス]/keychain2john [キーチェーンファイルのパス] > [出力ファイル名]実行例:
# John the Ripper が /opt/john にインストールされていると仮定
# デスクトップにコピーした login.keychain-db を使う場合
/opt/john/run/keychain2john ~/Desktop/login.keychain-db > ~/Desktop/keychain_hash.txt このコマンドを実行すると、keychain_hash.txt というファイルがデスクトップに作成され、その中に John the Ripper が理解できる形式のハッシュ文字列が保存されます。 
ファイルの中身は、通常以下のような形式になっています (実際の値は異なります):
login.keychain-db:$keychain$*1*16*...*28*...*64*... この $keychain$ から始まる文字列が、キーチェーンのパスワードハッシュとその解析に必要な情報を含んでいます。ファイル名の部分は : で区切られており、John がどのファイルから来たハッシュかを示すのに使われます。 
ステップ 2: John the Ripper でハッシュを解析(クラック)する
 次に、ステップ 1 で作成したハッシュファイル (keychain_hash.txt) を John the Ripper に読み込ませて、パスワード解析を開始します。 
コマンドの基本形:
[Johnのrunディレクトリへのパス]/john [ハッシュファイル名]実行例:
# John the Ripper が /opt/john にインストールされていると仮定
/opt/john/run/john ~/Desktop/keychain_hash.txtJohn the Ripper は、デフォルトでいくつかのクラッキングモード(シングルクラックモード、ワードリストモード、インクリメンタルモード)を順に試します。解析には時間がかかることがあります。特に、パスワードが長く複雑な場合は、数時間から数日、あるいはそれ以上かかる可能性もあります 。
 特定の辞書ファイルを使用したい場合は --wordlist オプションを、ルールを適用したい場合は --rules オプションを使用できます。 
# 辞書ファイル 'password.lst' を使用する場合
/opt/john/run/john --wordlist=password.lst ~/Desktop/keychain_hash.txt
# 辞書ファイルとデフォルトルールを組み合わせる場合
/opt/john/run/john --wordlist=password.lst --rules ~/Desktop/keychain_hash.txtステップ 3: 結果の確認
 パスワードが見つかると、John the Ripper はそれを表示します。解析を途中で中断した場合や、後で結果を確認したい場合は、--show オプションを使用します。 
# 見つかったパスワードを表示
/opt/john/run/john --show ~/Desktop/keychain_hash.txt出力例 (パスワードが ‘password123’ だった場合):
login.keychain-db:password123: ... (その他の情報) ...
1 password hash cracked, 0 leftもしパスワードが見つからなければ、「0 password hashes cracked」のようなメッセージが表示されます。
 解析されたパスワードは、John the Ripper のポットファイル (john.pot、通常は ~/.john/ または John の実行ディレクトリ直下に作成される) にも保存されます。 
高度な使い方と考慮事項
- macOS バージョンとの互換性: macOS がアップデートされると、キーチェーンファイルのフォーマットが変更されることがあります。keychain2johnもそれに合わせて更新されるため、常に最新版の John the Ripper (Jumbo) を使用することが推奨されます。古いバージョンのkeychain2johnでは、新しい macOS のキーチェーンファイルを正しく処理できない場合があります。
- パフォーマンス: キーチェーンのパスワード解析は、一般的に CPU バウンドな処理です。John the Ripper はマルチコア CPU を活用できますが、それでも複雑なパスワードの解析には時間がかかります。より強力な CPU を搭載したマシンを使用すると、解析時間を短縮できる可能性があります。
- キーチェーンの種類: ログインキーチェーンとシステムキーチェーンでは、keychain2johnの基本的な使い方は同じですが、アクセス権限が異なる点に注意が必要です(システムキーチェーンには管理者権限が必要)。
- エラー発生時: keychain2johnの実行中にエラーが出る場合、John the Ripper のバージョンが古い、キーチェーンファイルが破損している、または予期しないフォーマットである可能性などが考えられます。エラーメッセージをよく読み、必要であれば John the Ripper のコミュニティ(メーリングリストや GitHub Issues)で情報を探してみてください。
倫理的な考慮事項と法的側面 (再掲)
 繰り返しになりますが、keychain2john および John the Ripper の使用は、強力なツールであるがゆえに、悪用される危険性も伴います。
- 許可なきアクセスは厳禁: 自分自身のアカウントのパスワードリカバリーや、明確な書面による同意を得た上でのセキュリティ評価以外での使用は、絶対に避けてください。他人のキーチェーンファイルに無断でアクセスし、パスワードを解析しようとする行為は、プライバシーの侵害であり、不正アクセス禁止法などの法律に抵触する犯罪行為です。
- 目的の正当性: ツールを使用する目的が、法的に、そして倫理的に正当であることを常に確認してください。
- 責任ある使用: ツールの能力と、それがもたらす可能性のある影響を理解し、責任を持って使用してください。
技術的な好奇心や興味本位で、決して他人のデータに手を出さないようにしましょう 。
まとめ
keychain2john は、macOS のキーチェーンファイルのパスワードハッシュを抽出し、John the Ripper で解析するための強力なツールです。 
- John the Ripper (Jumbo) を準備する。
- 解析対象のキーチェーンファイル (.keychain-dbor.keychain) を特定・準備する。
- keychain2johnを使ってキーチェーンファイルからハッシュを抽出し、ファイルに保存する。
- John the Ripper を使って、抽出したハッシュを含むファイルを解析する。
- john --showコマンドで結果を確認する。
このプロセスを通じて、忘れてしまったキーチェーンパスワードの回復や、正当な権限の下でのパスワード強度評価が可能になります。しかし、その強力さゆえに、常に倫理的な利用を心がけ、法を遵守することが不可欠です。技術を正しく、責任を持って活用しましょう 。
参考情報
- John the Ripper official website: https://www.openwall.com/john/John the Ripper プロジェクトの公式サイト。ダウンロードやドキュメントへのリンクがあります。 
- John the Ripper Community Wiki – Keychain format: https://openwall.info/wiki/john/sample-hashes#KeychainJohn the Ripper の Wiki にあるキーチェーンハッシュフォーマットのサンプル(技術的な詳細)。 
- John the Ripper GitHub Repository: https://github.com/openwall/john/ソースコードや Issue トラッカーがある GitHub リポジトリ。 keychain2john.pyの最新コードもここで確認できます。
