暗号化識別子

判別する値を貼り付けてください。

形式を判別

データベースのダンプを取得した際に、$2y$10$...や5f4dcc3b5aa765d61d8327deb882cf99といった文字列が見つかった場合、解読やリバースを始める前に、それが何なのかを把握しておく必要があります。この識別子は、長さ、文字セット、構造、プレフィックスといったヒューリスティックを用いて、暗号文サンプルの背後にある最も可能性の高いアルゴリズムやエンコーディングを推定します。

暗号文を識別する方法

  1. 1

    サンプルを貼り付ける

    単一のハッシュ、暗号文の塊、トークン、またはエンコードされた文字列。

  2. 2

    一致する形式を確認する

    当てはまる形式が順位付けして表示されます。最も可能性の高い形式が先頭に、続いてサンプルが該当しうるその他の形式が並びます。

  3. 3

    クロスチェックする

    複数の形式が一致した場合は、ハッシュクラッカーやデコーダーで正しい形式を確認してください。

  4. 4

    不確実性に留意する

    サンプルだけからの識別が確定的であることはまれです。一致するものがない場合は、その旨が表示されます。

このツールが識別できる形式

16進数のダイジェストは長さで判別します(大文字・小文字は問いません):

長さ(16進数の文字数) 最も可能性が高いもの
8 CRC32またはその他の32ビットチェックサム
32 MD5、MD4またはNTLM
40 SHA-1またはRIPEMD-160
56 SHA-224またはSHA3-224
64 SHA-256またはSHA3-256
96 SHA-384またはSHA3-384
128 SHA-512またはSHA3-512

たとえば d63dc919e201d7bc4c825630d2cf25fdc93d4b2f0d46706d29038d01 は56文字で、「password」という単語のSHA-224ハッシュです。

パスワードハッシュはプレフィックスと構造で判別します:

  • $2a$、$2b$、$2y$:bcrypt(コストファクターはプレフィックスから読み取ります)
  • $1$:md5crypt、$apr1$:ApacheのMD5(htpasswd)
  • $5$ と $6$:sha256crypt と sha512crypt
  • $y$:yescrypt、$7$ と $scrypt$:scrypt
  • $argon2id$、$argon2i$、$argon2d$:Argon2
  • $pbkdf2-sha256$(passlib)と pbkdf2_sha256$(Django):PBKDF2
  • $P$ と $H$:phpass(WordPress、phpBB)、$S$:Drupal 7
  • * に続く16進数40文字:MySQL 4.1+
  • {SSHA}、{SHA} などの一般的なLDAPスキーム

よく使われる形式では、結果にhashcatのモード(-m)も表示されます:MD5 0、NTLM 1000、SHA-1 100、SHA-256 1400、SHA-512 1700、bcrypt 3200、md5crypt 500、sha256crypt 7400、sha512crypt 1800、phpass 400、Drupal 7 7900、MySQL 4.1+ 300、Django PBKDF2-SHA256 10000。

鍵、トークン、識別子:

  • PEMブロック(-----BEGIN ...-----):秘密鍵(RSA、EC、OpenSSH、PKCS #8)、パスワードで保護された秘密鍵、公開鍵、X.509証明書、証明書署名要求
  • OpenPGPのASCIIアーマー:暗号化されたメッセージ(BEGIN PGP MESSAGE)、鍵ブロック、署名
  • OpenSSH公開鍵(ssh-rsa、ssh-ed25519、ecdsa-sha2-...)
  • JSON Web Token:ヘッダーをデコードして alg と typ を表示します。enc フィールドを持つ5つの部分からなるトークンは、暗号化されたJWEと判定します
  • UUIDとそのバージョン(ハッシュではなく識別子です)

エンコーディング(より具体的な形式に一致しない場合のみ):

  • 16進数、Base32、Base64、Base64url(デコード後のバイト数を表示)、およびURL(パーセント)エンコーディング。
  • デコード後の長さが16バイトの倍数になる16進数またはBase64のデータは、AESなどのブロック暗号の出力である可能性があります。128、256、384、512バイトの場合は、RSAで暗号化されたデータや署名である可能性もあります。16、20、28、32、48、64バイトのBase64またはBase32のデータは、MD5、SHA-1、SHA-2の生のハッシュである可能性があります。

識別でわからないこと

  • 100%確実な正確なアルゴリズム。 16進数64文字の文字列はSHA-256またはSHA3-256と表示されますが、BLAKE2sなどの256ビットハッシュもまったく同じに見えます。MD5、MD4、NTLMのハッシュはいずれも16進数32文字です。
  • どの暗号で暗号化されたか。 暗号化されたデータはランダムに見えます。長さから候補を絞り込めるだけなので、AESやRSAは可能性にとどまり、確実ではありません。
  • 鍵の強度。 bcryptハッシュはプレフィックスにコストファクターが示されますが($2y$10$ = コスト10)、元となるパスワード自体の強度はわかりません。
  • ソルトが付与されているかどうか。 最新のパスワードハッシュ(bcrypt、Argon2)は常にソルト付きですが、古い方式(生のMD5/SHA)は付いている場合とそうでない場合があります。
  • 平文。 識別ではハッシュを逆算できません。解読は別のプロセスであり、自分が所有するデータに対してのみ合法です。

判定を誤る場合

  • 独自のプレフィックスが付いたトークン。 アプリが独自のプレフィックスでハッシュをラップしていることがあります。まずそのラッパーを取り除いてください。
  • 二重エンコード。 バイナリハッシュを16進数化し、さらにBase64でラップしたものは誤って識別されます。一度デコードしてから再実行してみてください。
  • 一般的でない長さ。 切り詰められたハッシュ(SHA-256の先頭16文字をIDとして使用したものなど)は、上の表のどのダイジェストの長さにも一致しないため、ただの16進数データとして表示されます。
  • 複数の値をまとめて貼り付けた場合。 確認できるのは1つの値だけです。ハッシュの一覧を貼り付けると最初の行だけが確認されるので、他の値は1つずつ貼り付けてください。

ユースケース

  • セキュリティ監査:暗号方式の移行前に、コードベース全体のハッシュ種別を洗い出す。
  • CTFチャレンジ:未知のデータに対する素早い初回チェック。
  • インシデント対応:漏洩した認証情報の形式を特定する。
  • フレームワークのデバッグ:ライブラリがどのエンコーディングを生成するかを突き止める。

倫理に関する注意

ハッシュ形式を特定することは受動的な調査にすぎません。許可なく他人のハッシュを解読する行為は、ほとんどの法域でコンピュータの不正利用に関する法律に違反します。自分が所有する、または分析を許可されているハッシュのみを対象にしてください。

よくある質問

部分的には可能です。MD5は32文字の16進数、SHA-1は40文字です。ただし両者の長さが同じ範囲にある場合、ハッシュだけでは区別できません。通常はコンテキスト(データベースの列名、フレームワークのデフォルト設定、漏洩したスキーマなど)から判断できます。

いいえ。これは識別のみを行うツールです。ハッシュの逆算や暗号文の復号には、それぞれ別のツール(および鍵、または解読のための計算リソース)が必要であり、その処理は自分が所有する素材に対してのみ合法です。

現在の推奨はArgon2id(または高いコストファクターのbcrypt)です。PBKDF2-SHA256やscryptも許容範囲です。一方、素のMD5、SHA-1、ソルトなしのSHA-256はパスワードの保存には安全ではありません。

いいえ。貼り付けた値は形式の判定のため当社のサーバーに送信されますが、データベースには保存されず、ページのリンクにも追加されません。2つのステップの間はこのブラウザのタブ内に保持され、「やり直す」を押すと消去されます。

関連ツール

このツールは他の言語でも利用できます