pgpsda2john: PGP SDA (Self-Decrypting Archive) のパスワード解析ガイド

John the Ripper スイートの一部である pgpsda2john の詳細な使い方

現代のデジタル社会において、データの機密性を守ることは極めて重要です。PGP (Pretty Good Privacy) は、電子メールやファイルの暗号化、デジタル署名に使われる広く知られた技術です。その中でも、PGP SDA (Self-Decrypting Archive) は、PGP を持たない受信者でもパスフレーズさえ知っていれば復号できる自己復号型のアーカイブを作成する機能を提供します。これは利便性が高い反面、もしパスフレーズを忘れてしまった場合、アーカイブ内のデータにアクセスできなくなるという問題が生じます。

このような状況で役立つのが、強力なパスワードクラッキングツールである John the Ripper (JtR) スイートに含まれるユーティリティの一つ、pgpsda2john です。このツールは、PGP SDA ファイルからパスワードハッシュ情報を抽出し、John the Ripper が解析できる形式に変換する役割を担います。

このブログ記事では、pgpsda2john の基本的な概念から、具体的な使い方、そして John the Ripper と連携して実際にパスフレーズを回復する手順までを、初心者にも分かりやすく解説します。適切な知識とツールがあれば、忘れてしまったパスフレーズを取り戻せる可能性があることを理解しましょう。

倫理的な注意

パスワード回復ツールは、自分が所有するファイルや、明示的な許可を得ているファイルに対してのみ使用してください。他人のファイルやシステムに対して不正にアクセスを試みることは、法律で禁止されており、重大な結果を招く可能性があります。常に倫理的な範囲内でツールを使用することが重要です。

PGP SDA (Self-Decrypting Archive) とは?

pgpsda2john の役割を理解するために、まず PGP SDA についてもう少し詳しく見てみましょう。

PGP SDA は、主に PGP Desktop (Symantec Encryption Desktop) などのソフトウェアによって作成される、自己実行形式の暗号化アーカイブです。通常、Windows 環境向けに .exe 形式のファイルとして作成されます。

SDA の主な特徴と利点は以下の通りです:

  • 自己完結性: 受信者は PGP ソフトウェアをインストールしている必要がありません。SDA ファイル自体が復号に必要なプログラムを含んでいます。
  • パスフレーズ保護: アーカイブの内容にアクセスするには、作成時に設定されたパスフレーズが必要です。
  • 利便性: PGP の知識がない相手にも、安全に暗号化ファイルを送付できます。実行してパスフレーズを入力するだけで、中のファイルが展開されます。

しかし、このパスフレーズを忘れてしまうと、正規の所有者であってもファイルにアクセスできなくなります。SDA ファイルは、内部に暗号化されたデータと、そのデータを復号するための鍵情報(パスフレーズによってさらに保護されている)を含んでいます。pgpsda2john は、この「パスフレーズによって保護された鍵情報」の部分を抽出し、John the Ripper がブルートフォース攻撃や辞書攻撃を仕掛けられる形式に変換するのです。

pgpsda2john の仕組み

pgpsda2john は、指定された PGP SDA ファイル (.exe) を解析します。具体的には、以下の処理を行います。

  1. SDA 構造の解析: SDA ファイルのヘッダーや内部構造を読み取り、暗号化されたデータや関連するメタデータ(暗号アルゴリズム、ハッシュアルゴリズムの情報など)を特定します。
  2. ハッシュ情報の抽出: パスフレーズの検証に使われる暗号学的データ(通常は暗号化されたセッションキーやその一部、ソルトなど)をファイルから抽出します。SDA はパスフレーズから派生したキーでセッションキーを暗号化しており、この部分がパスワードクラッキングのターゲットとなります。
  3. John the Ripper 形式への変換: 抽出した情報を、John the Ripper が理解できる特定のフォーマット文字列に変換して標準出力に出力します。この文字列には、どのタイプのハッシュであるかを示す識別子 ($pgpsda$)、ソルト、暗号化されたデータなどが含まれます。

出力されるハッシュの形式は、John the Ripper が内部で「pgpsda」フォーマットとして認識し、適切なクラッキングアルゴリズムを適用できるように設計されています。

# 出力されるハッシュ形式の例 (実際の値は異なります)
filename.exe:$pgpsda$0*1*ef6a1a7a86371fc0*baddf00d12345678*...*c4ff3b3a4e5f6a7b 

この一行に、John the Ripper がパスフレーズを試行し、それが正しいかどうかを検証するために必要な情報がすべて詰まっています。

pgpsda2john のインストールと基本的な使い方

インストール

pgpsda2john は単独のツールではなく、John the Ripper スイートの一部として提供されています。したがって、まず John the Ripper をインストールする必要があります。

John the Ripper は、多くの Linux ディストリビューションの公式リポジトリに含まれていることが多いです。例えば、Debian/Ubuntu 系では以下のコマンドでインストールできます。

sudo apt update
sudo apt install john 

他のディストリビューションや macOS、Windows については、John the Ripper の公式サイト からソースコードやバイナリをダウンロードしてインストールしてください。ソースからビルドする場合、通常は ./configure && make といった手順になります。

インストールが完了すると、John the Ripper の実行ファイル群(通常は /usr/sbin/usr/local/bin、あるいはビルドディレクトリ内の run ディレクトリ)の中に pgpsda2john が含まれているはずです。

# インストール場所を確認する例 (環境によって異なります)
which pgpsda2john
ls /opt/john/run/pgpsda2john # ソースからビルドした場合の例 

基本的な使い方

pgpsda2john の使い方は非常にシンプルです。コマンドラインで pgpsda2john の後に、解析したい PGP SDA ファイル(通常は .exe ファイル)を指定します。

pgpsda2john [SDAファイル名.exe] 

実行すると、John the Ripper が解析可能な形式のハッシュ文字列が標準出力に表示されます。通常、この出力をファイルにリダイレクトして保存し、後で John the Ripper に渡します。

# encrypted_archive.exe からハッシュを抽出し、hash.txt に保存する
pgpsda2john encrypted_archive.exe > hash.txt 

ファイル hash.txt には、以下のような形式の行が書き込まれます(複数ファイルを指定した場合は複数行)。

encrypted_archive.exe:$pgpsda$0*1*... (長いハッシュ文字列) ... 

オプション

pgpsda2john 自体には、特筆すべき多くのコマンドラインオプションはありません。主な機能は SDA ファイルを引数として受け取り、ハッシュを出力することに特化しています。ヘルプオプション (-h--help) も、バージョンによっては存在しないか、非常に限られた情報しか提供しない場合があります。

ツールの挙動は、主に John the Ripper 本体側での設定やオプションによって制御されることになります。

John the Ripper を使ったパスフレーズ解析

pgpsda2john でハッシュを抽出したら、いよいよ John the Ripper の出番です。John the Ripper は、抽出されたハッシュファイルを入力として、様々なモードでパスフレーズのクラッキングを試みます。

基本的なクラッキング手順

最も基本的な使い方は、John the Ripper の実行ファイル (john) に、先ほど作成したハッシュファイル (hash.txt) を渡すだけです。

john hash.txt 

これを実行すると、John the Ripper はまずハッシュの種類(この場合は PGP SDA)を自動的に検出し、デフォルトのクラッキングモード(シングルクラックモード、ワードリストモード、インクリメンタルモードを組み合わせたもの)を開始します。

  • シングルクラックモード (Single Crack Mode): ハッシュファイル名(encrypted_archive.exe の部分)やユーザー情報などから派生した単語を使って試行します。
  • ワードリストモード (Wordlist Mode): デフォルトの辞書ファイル (password.lst) に含まれる単語を試します。ルールを適用して単語を変化させる(例: `password` -> `Password123`)ことも行います。
  • インクリメンタルモード (Incremental Mode): 全ての可能な文字の組み合わせを生成して試行します(ブルートフォース)。非常に時間がかかる可能性があります。

クラッキングが成功すると、John the Ripper は発見されたパスフレーズを表示します。

Loaded 1 password hash (pgpsda, PGP SDA Self-Decrypting Archive)
Cost 1 (flags) is 0 for all hashes
Cost 2 (iteration count) is 1 for all hashes
Will run 8 processing threads
Press 'q' or Ctrl-C to abort, almost any other key for status
correct_passphrase (encrypted_archive.exe)
1g 0:00:00:15 DONE (2025-03-31 13:09) 0.066g/s 123.4p/s 123.4c/s 123.4C/s simplepass..secretword
Session completed 

上記の例では、correct_passphrase が発見されたパスフレーズです。

クラッキング済みパスフレーズの表示

一度クラッキングが成功すると、その結果は John the Ripper のポットファイル (~/.john/john.pot または run/john.pot) に保存されます。再度同じハッシュファイルを指定して john を実行しても、通常は「No password hashes left to crack」と表示されます。

クラッキング済みのパスフレーズを再度表示するには、--show オプションを使用します。

john --show hash.txt 

これにより、hash.txt 内のハッシュに対応する、既にクラックされたパスフレーズが一覧表示されます。

encrypted_archive.exe:correct_passphrase
1 password hash cracked, 0 left 

特定のクラッキングモードの指定

より効率的にクラッキングを行うために、特定のモードやオプションを指定できます。

  • ワードリストモード: 特定の辞書ファイルを使用する場合
    john --wordlist=/path/to/custom_dictionary.txt hash.txt 
  • ルール付きワードリストモード: 辞書内の単語にルール(大文字小文字変換、数字追加など)を適用する場合(デフォルトでも使われますが、明示的にルールを指定することも可能)
    # --rules オプションは通常デフォルトで有効になっていることが多い
    john --wordlist=/path/to/dictionary.txt --rules=KoreLogic hash.txt 
  • インクリメンタルモード(ブルートフォース): 特定の文字種(例: すべての小文字アルファベット)でブルートフォースを行う場合
    john --incremental=Lower hash.txt 
    利用可能な文字種セットは john.conf ファイルで定義されています。
  • マスクモード: パスフレーズのパターンが分かっている場合(例: 8文字で最初は`Pass`、最後は数字2桁)
    # ?l: 小文字, ?d: 数字
    john --mask='Pass?l?l?d?d' hash.txt 

どのモードが効果的かは、想定されるパスフレーズの複雑さや、利用可能な辞書ファイルの品質、そして許容される解析時間によって異なります。

パフォーマンスについて

PGP SDA のハッシュ解析は、比較的計算コストが高い(CPU に負荷がかかる)部類に入ります。MD5 や SHA1 のような単純なハッシュと比較すると、秒間あたりの試行回数 (guesses per second) は大幅に少なくなります。強力な CPU や、場合によっては GPU を活用できるバージョンの John the Ripper (OpenCL や CUDA 対応版) を使用することで、解析時間を短縮できる可能性があります。

考慮事項とトラブルシューティング

  • ファイルの互換性: pgpsda2john は、特定のバージョンの PGP Desktop などで作成された SDA ファイルに対応しています。非常に古い形式や、特殊な設定で作成された SDA ファイルの場合、うまくハッシュを抽出できない可能性もあります。
  • パスフレーズの複雑さ: John the Ripper は強力なツールですが、万能ではありません。非常に長く、複雑で、ランダムなパスフレーズ(例えば、パスワードマネージャーで生成されたもの)は、現実的な時間内にクラッキングすることが困難、あるいは不可能な場合があります。
  • 実行時間: パスフレーズ解析には時間がかかることがあります。特に、複雑なパスフレーズやブルートフォース攻撃を行う場合、数時間、数日、あるいはそれ以上かかることも珍しくありません。
  • John the Ripper のバージョン: John the Ripper は継続的に開発されており、新しいバージョンでは対応するハッシュ形式が増えたり、パフォーマンスが改善されたりしています。可能であれば最新の安定版または “Jumbo” バージョン(多くの追加機能やフォーマットを含むコミュニティ版)を使用することをお勧めします。
  • エラーメッセージ: pgpsda2johnjohn の実行中にエラーメッセージが表示された場合は、その内容をよく読んでください。「File not found」や「No password hashes loaded」などのメッセージは、ファイルパスの間違いやハッシュのフォーマット不良を示唆している可能性があります。

注意点

PGP SDA は、パスフレーズを知らない第三者が容易に内容を推測できないように設計されています。したがって、パスフレーズ回復は常に成功するとは限りません。特に強固なパスフレーズが設定されている場合は、回復を諦めざるを得ない可能性も考慮に入れておく必要があります。

まとめ

pgpsda2john は、John the Ripper スイートの強力なユーティリティであり、パスフレーズを忘れてしまった PGP SDA (Self-Decrypting Archive) ファイルへのアクセスを回復するための重要なステップを提供します。このツールは、SDA ファイルからパスワードクラッキングに必要なハッシュ情報を抽出し、John the Ripper が解析できる形式に変換します。

使い方自体はシンプルで、SDA ファイルを指定して実行し、出力をファイルに保存、その後 John the Ripper にそのファイルを渡して解析を開始する、という流れになります。John the Ripper は、辞書攻撃、ブルートフォース攻撃など、様々な手法を用いてパスフレーズの特定を試みます。

ただし、パスフレーズ回復は、元のパスフレーズの強度や複雑さに大きく依存します。単純なパスフレーズであれば比較的短時間で見つかる可能性もありますが、長く複雑なパスフレーズの場合は、膨大な時間が必要になるか、現実的には回復不可能となることもあります。

pgpsda2john と John the Ripper を使用する際は、常に倫理的なガイドラインを遵守し、自身が所有する、または正当なアクセス権を持つファイルに対してのみ使用するようにしてください。

このガイドが、pgpsda2john の理解と活用の一助となれば幸いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です