暗号化識別子
データベースのダンプを取得した際に、$2y$10$...や5f4dcc3b5aa765d61d8327deb882cf99といった文字列が見つかった場合、解読やリバースを始める前に、それが何なのかを把握しておく必要があります。この識別子は、長さ、文字セット、構造、プレフィックスといったヒューリスティックを用いて、暗号文サンプルの背後にある最も可能性の高いアルゴリズムやエンコーディングを推定します。
暗号文を識別する方法
-
1
サンプルを貼り付ける
単一のハッシュ、暗号文の塊、トークン、またはエンコードされた文字列。
-
2
一致する形式を確認する
パターンがサンプルと一致した形式がすべて結果に表示されます。
-
3
クロスチェックする
複数の形式が一致した場合は、ハッシュクラッカーやデコーダーで正しい形式を確認してください。
-
4
不確実性に留意する
サンプルだけからの識別が確定的であることはまれです。一致するものがない場合は、その旨が表示されます。
識別子が使用する署名パターン
長さに基づく判定(16進数でエンコードされたハッシュの場合):
| 長さ(16進数の文字数) | 識別結果 |
|---|---|
| 32 | MD5 |
| 40 | SHA-1 |
| 64 | SHA-256 |
| 128 | SHA-512 |
56文字のSHA-224や96文字のSHA-384など、他の長さの文字列はハッシュとして認識されません(56文字または96文字の16進文字列はBase64と判定されます)。
プレフィックスに基づく判定(認識されるのはbcryptのプレフィックスのみ):
$2a$$2b$$2y$bcrypt
その他のcrypt形式のプレフィックス($1$、$5$、$6$、$argon2i$、$argon2id$、$pbkdf2$)は認識されません。
エンコーディングに基づく判定:
- すべての文字が
[A-Za-z0-9+/=]に含まれ、長さが4の倍数の場合:Base64の可能性が高い。 .で区切られた3つのセグメントがあり、各セグメントが[A-Za-z0-9_-]で構成される場合:JWT。
PEMラッパー、OpenSSHの ssh-rsa/ssh-ed25519 ブロブ、- や _ を含むBase64url文字列は検出されません。
識別でわからないこと
- 100%確実な正確なアルゴリズム。 64文字の16進数文字列はSHA-256と判定されますが、SHA3-256やBLAKE2sの可能性もあります。これらは暗号文だけでは区別できません。NTLMハッシュ(これも32文字の16進数)はMD5と見た目が同じです。
- 鍵の強度。 bcryptハッシュはプレフィックスにコストファクターが示されますが(
$2y$10$= コスト10)、元となるパスワード自体の強度はわかりません。 - ソルトが付与されているかどうか。 最新のパスワードハッシュ(bcrypt、Argon2)は常にソルト付きですが、古い方式(生のMD5/SHA)は付いている場合とそうでない場合があります。
- 平文。 識別ではハッシュを逆算できません。解読は別のプロセスであり、自分が所有するデータに対してのみ合法です。
識別子が誤る場合
- 独自のプレフィックスが付いたトークン。 アプリが独自のプレフィックスでハッシュをラップしていることがあります。まずそのラッパーを取り除いてください。
- 二重エンコード。 バイナリハッシュを16進数化し、さらにBase64でラップしたものは誤って識別されます。一度デコードしてから再実行してみてください。
- 異常な長さ。 切り詰められたハッシュ(SHA-256の先頭16文字をIDとして使用したものなど)は、文字と長さのルールが重なるため「Base64」と表示されます。
- 枠付きやラップされた形式。 PEMブロック、OpenSSHキー、Djangoの
pbkdf2_sha256$...は認識されません。ラッパーまたはプレフィックスを取り除いて再試行するか、専用のパーサーを使用してください。
ユースケース
- セキュリティ監査:暗号方式の移行前に、コードベース全体のハッシュ種別を洗い出す。
- CTFチャレンジ:未知のデータに対する素早い初回チェック。
- インシデント対応:漏洩した認証情報の形式を特定する。
- フレームワークのデバッグ:ライブラリがどのエンコーディングを生成するかを突き止める。
倫理に関する注意
ハッシュ形式を特定することは受動的な調査にすぎません。許可なく他人のハッシュを解読する行為は、ほとんどの法域でコンピュータの不正利用に関する法律に違反します。自分が所有する、または分析を許可されているハッシュのみを対象にしてください。
よくある質問
部分的には可能です。MD5は32文字の16進数、SHA-1は40文字です。ただし両者の長さが同じ範囲にある場合、ハッシュだけでは区別できません。通常はコンテキスト(データベースの列名、フレームワークのデフォルト設定、漏洩したスキーマなど)から判断できます。
いいえ。これは識別のみを行うツールです。ハッシュの逆算や暗号文の復号には、それぞれ別のツール(および鍵、または解読のための計算リソース)が必要であり、その処理は自分が所有する素材に対してのみ合法です。
現在の推奨はArgon2id(または高いコストファクターのbcrypt)です。PBKDF2-SHA256やscryptも許容範囲です。一方、素のMD5、SHA-1、ソルトなしのSHA-256はパスワードの保存には安全ではありません。
いいえ。貼り付けた値は形式の判定のため当社のサーバーに送信されますが、データベースには保存されず、ページのリンクにも追加されません。
関連ツール
Base64ファイルエンコーダー
あらゆるファイル(PDF、ZIP、画像、実行ファイル)をBase64テキストにエンコードし、JSON、メール、YAML、data URIへ埋め込めます。ブラウザ内でローカルに動作し、アップロードはありません。
Atbash暗号エンコーダー
A-ZをZ-Aに対応させるヘブライ系の換字式暗号、Atbashでテキストをエンコードまたはデコードできます。同じ操作で暗号化と復号ができます。
Base58エンコーダー・デコーダー
UTF-8テキストや16進バイト列をエンコードし、Bitcoin、Ripple、Flickrの各アルファベットでBase58を安全にデコードします。
CSRジェネレーター
PEMエンコードされた証明書署名要求と対応するRSA秘密鍵を生成します。コモンネーム、組織の項目、鍵のサイズ(2048、3072、4096ビット)を指定できます。
SSL証明書ジェネレーター
自己署名のSSL/TLS証明書とRSA秘密鍵をすべてブラウザ内で生成します。Common Name、SAN、有効期間をカスタマイズし、PEM形式で書き出します。
チェックサム検証
任意のテキストの MD5、SHA-1、SHA-256、SHA-384、SHA-512、CRC32 チェックサムを計算し、期待値と比較して一致・不一致を明確に判定します。
このツールは他の言語でも利用できます
- Mã định danh mã hóa [VI]
- Identifikasi Enkripsi [ID]
- ตัวระบุการเข้ารหัส [TH]
- Krypteringsidentifierare [SV]
- Identificador de Cifrado [ES]
- Verschlüsselungs-Identifikator [DE]
- Versleutelingsidentifier [NL]
- 암호화 식별자 [KO]
- Identyfikator szyfrowania [PL]
- Şifreleme Tanımlayıcısı [TR]
- معرّف التشفير [AR]
- Identificateur de chiffrement [FR]
- Identificador de Criptografia [PT]
- 加密标识符 [ZH]
- Encryption Identifier [EN]
- Identificatore di Crittografia [IT]
- Идентификатор шифрования [RU]