0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python】Python で「hashID」を使ってハッシュ種別を推測する

0
Last updated at Posted at 2025-12-30

はじめに

「この文字列、MD5?SHA-1?NTLM?bcrypt? どれ?」
CTFでも診断でも運用でも、まず最初にぶつかるのがこの“正体当て”問題です。

そこで便利なのが hashID
これは ハッシュ値の“見た目”からアルゴリズム候補を推測するツール/Pythonライブラリです。

重要:hashIDは クラックしません。あくまで「推測して候補を出す」だけ。


hashID とは?

hashID = ハッシュ識別(hash identification)用ツール
長さ・文字種・プレフィックス($1$$6$)・フォーマットなどの特徴から、該当しそうな方式を列挙します。

  • ✅ 候補を複数提示(現実的で良い)
  • ✅ confidence(確度)も出せる
  • ❌ “確定”はできない(似てる形式が多い)
  • ❌ “解析”や“復元”はしない

インストール

pip install hashID

(KaliなどだとCLIツール hashid が入ってる場合もあります)


Pythonでの基本的な使い方

1つのハッシュを判定する

from hashid import HashID

h = HashID()
hash_value = "5f4dcc3b5aa765d61d8327deb882cf99"  # 例: "password" のMD5

results = h.identifyHash(hash_value)

for r in results:
    print(f"{r.name:15}  hashcat={r.hashcat}  john={r.john}")

出力イメージ(例):

MD2              hashcat=None  john=md2
MD5              hashcat=0  john=raw-md5
MD4              hashcat=900  john=raw-md4
Double MD5       hashcat=2600  john=None

ポイント

  • 似た形式(例:MD5 と NTLM)は長さが同じなので両方候補に上がることがあります

複数行(hashes.txt)をまとめて判定する例

from pathlib import Path
from hashid import HashID

BASE_DIR = Path(__file__).resolve().parent
hashes_path = BASE_DIR / "hashes.txt"



h = HashID()

with open(hashes_path, "r", encoding="utf-8") as f:
    for line in f:
        hv = line.strip()
        if not hv or hv.startswith("#"):
            continue

        print(f"source: {hv}")
        results = h.identifyHash(hv) or []
        for r in results:
            if r.hashcat is not None:
                print(f"  {r.name:12} -> hashcat -m {r.hashcat}")
        
        print("")

実戦でよく出るパターン(見た目のヒント)

/etc/shadow でよく見るやつ

  • $1$... → md5crypt 系
  • $5$... → sha256crypt 系
  • $6$... → sha512crypt 系
  • $2y$... → bcrypt 系

こういうプレフィックス付きは、hashIDの推測精度が比較的高いです。


hashID の限界(ここが一番大事)

1) “確定”できない

例:32 hex は MD5 っぽいけど NTLM も同じ見た目。
hashIDは候補を出してくれるけど、最後は 検証 が必要です。

2) ソルト入り・アプリ独自形式は当たりにくい

Webアプリやフレームワークは独自フォーマットや複合形式が多く、推測がブレやすいです。

3) 文字列が“ハッシュ”とは限らない

Base64、UUID、ランダムトークン、署名、暗号文…
「ハッシュっぽいだけ」のものも多いので、前後の文脈が重要。


hashID の正しい使いどころ(おすすめ運用)

hashIDは「最初の5分で迷子にならない」ための道具です。

  • CTFでhashcat / Johnのモード選択前
  • 侵害調査で漏えいデータの形式を素早く分類
  • 運用で古い設定・DB dumpのパスワード列調査(監査目的)

ありがちな失敗と対策

失敗:候補の先頭を盲信して時間を溶かす

対策

  • 同じ長さの候補(MD5/NTLMなど)を並行して試す
  • 可能なら“出どころ”を見る(Windows系ならNTLM寄り、など)

失敗:入力が整形されてなくて判定が崩れる

対策

  • 改行・空白・引用符・hash:salt 形式を事前に整える
  • /etc/shadow なら “丸ごと1行” が必要な場合もある

まとめ

  • hashID は「ハッシュの正体当て」を高速化するためのPythonライブラリ
  • できること:候補の列挙(confidence付き)
  • できないこと:確定・復元・クラック
  • 最強の使い方:
    hashIDで候補 → hashcat/Johnで検証(実証がゴール)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?