KDF によって生成されたハッシュの識別
このステップでは、さまざまな KDF によって生成されたハッシュの形式を識別する方法を学びます。KDF の生の出力はバイナリストリングである可能性がありますが、システムに保存される際には、多くの場合エンコード(例:Base64 または 16 進数)され、使用された KDF、ソルト、および場合によってはイテレーション数やコストファクターを示す識別子でプレフィックスが付けられます。この標準化された形式により、John the Ripper のようなツールはそれらを正しく認識し、処理することができます。
PBKDF2、bcrypt、および scrypt の一般的なハッシュ形式を見てみましょう。
PBKDF2:
PBKDF2 ハッシュは、アルゴリズム、イテレーション数、ソルト、および導出されたキーを含む形式で表示されることがよくあります。たとえば、Linux の/etc/shadowファイルでは、PBKDF2(特に SHA512)ハッシュは次のようになります。
$6$rounds=5000$<salt>$<hash>
ここで、$6$は SHA-512 を示し、rounds=はイテレーション数を指定し、その後にソルトと実際のハッシュが続きます。
bcrypt:
bcrypt ハッシュは、$2a$, $2b$, または$2y$のプレフィックス、それに続くコストファクター(例:10)、ソルト、およびハッシュによって容易に認識できます。
例:$2a$10$<salt><hash>
scrypt:
scrypt ハッシュは通常、$7$または$scrypt$で始まり、その後にln、r、p(対数コスト、ブロックサイズ、および並列化ファクター)などのパラメータ、ソルト、およびハッシュが続きます。
例:$7$<ln>$<r>$<p>$<salt><hash>
実証のために、いくつかの KDF ハッシュの例を含むファイルを作成しましょう。mkpasswd(whoisパッケージの一部)というツールを使用して bcrypt ハッシュを生成し、その後、デモンストレーションのために PBKDF2 ハッシュを手動で構築します。
まず、mkpasswdを取得するためにwhoisパッケージをインストールします。
sudo apt install -y whois
次に、コストファクターを 10 として、パスワード「password123」の bcrypt ハッシュを生成しましょう。
mkpasswd -m bcrypt -S $(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16) -s 10 password123
このコマンドは bcrypt ハッシュを生成します。-Sオプションはランダムなソルトを提供し、-s 10はコストファクターを 10 に設定します。出力は bcrypt ハッシュ文字列になります。
$2a$10$<random_salt_string><hash_string>
次に、John the Ripper が読み取れるkdf_hashes.txtという名前のファイルを作成しましょう。bcrypt ハッシュと手動で作成した PBKDF2 ハッシュを含めます。
nano kdf_hashes.txt
ファイルに以下のコンテンツを追加します。<YOUR_GENERATED_BCRYPT_HASH>を前のステップで生成した実際の bcrypt ハッシュに置き換えてください。
user1:$2a$10$<YOUR_GENERATED_BCRYPT_HASH>
user2:$pbkdf2-sha256$100000$c0ffee$a1b2c3d4e5f678901234567890abcdef1234567890abcdef1234567890abcdef
注意: user2の PBKDF2 ハッシュはデモンストレーション目的のプレースホルダーです。既知のパスワードの実際のハッシュではありませんが、PBKDF2-SHA256 に対して John が期待する形式に従っています。形式は$pbkdf2-sha256$<iterations>$<salt_hex>$<hash_hex>です。
ファイルを保存するには、Ctrl+X、次にY、次にEnterを押します。
次に、John the Ripper を使用してkdf_hashes.txt内のハッシュタイプを識別しましょう。
john --format=raw-md5 --show kdf_hashes.txt
注意: --showにはフォーマットを指定する必要があるため、ダミーフォーマットとして--format=raw-md5を使用します。これは識別のためだけであっても必要です。John は実際の KDF フォーマットを自動的に検出します。
出力には、John がハッシュタイプを識別していることが表示されます。
0 password hashes cracked, 2 left
John は 2 つのハッシュがあることを正しく識別し、それらをクラックしようとするときに KDF タイプを認識します。このステップは主にハッシュ形式の認識に焦点を当てています。