知識マップ: ハッシュ文字列から方式を見分ける実務手順
記事「ハッシュ文字列から方式を見分ける実務手順」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
この記事は、ログやDBに残るハッシュ文字列の方式を見分ける手順を扱っており、bcryptやArgon2のように先頭に方式名を置くMCFやPHC string format系の保存形式は文字列だけでほぼ特定できる一方、プレーンな16進やBase64だけの文字列は長さと文字種から候補を絞ることしかできないと整理しています。sha256crypt・sha512crypt・md5cryptはいずれもcrypt(3)関数の出力形式でSHA-256・SHA-512・MD5を反復適用しており、openssl passwdで同じsaltを与えて再計算すれば形式を検証できます。また64桁の16進はSHA-256だけでなく複数のアルゴリズムが候補になるため長さだけでの断定は避けるべきであり、NTハッシュはMD5ではなくMD4をもとに計算される点でNTLMとも区別すべきだとしています。候補方式が分かったあとはhashcatのモード番号に翻訳して調査を進めます。
flowchart LR
accTitle: ハッシュ形式識別の知識マップ
accDescr: ハッシュ文字列の判定手がかりとして接頭辞ベースの保存形式であるMCF・PHC string formatと、文字種・長さだけによる推定がどう関係し、crypt(3)系のmd5crypt・sha256crypt・sha512crypt、bcrypt、Argon2などの具体的な形式や、NTハッシュとNTLMの違い、hashcatやopenssl passwdによる検証手段までを示す図
password_hash_string["パスワードハッシュ文字列"]
length_based_misidentification["長さだけによる誤判定"]
crypt_3_function["crypt(3)"]
modular_crypt_format["MCF(Modular Crypt Format)"]
phc_string_format["PHC string format"]
argon2["Argon2"]
bcrypt["bcrypt"]
sha256crypt["sha256crypt"]
sha512crypt["sha512crypt"]
md5crypt["md5crypt"]
sha_256["SHA-256"]
sha_512["SHA-512"]
md5["MD5"]
hex_encoding["16進表現(hex encoding)"]
nt_hash["NTハッシュ"]
md4["MD4"]
ntlm["NTLM"]
openssl_passwd["openssl passwd"]
hashcat["hashcat"]
pbkdf2["PBKDF2"]
scrypt["scrypt"]
ldap_scheme_prefix["LDAPスキームプレフィックス({SHA}等)"]
base64_encoding["Base64(RFC 4648)"]
sha_1["SHA-1"]
crypt_3_function -->|"利用する"| modular_crypt_format
phc_string_format -->|"の後継"| modular_crypt_format
argon2 -->|"利用する"| phc_string_format
bcrypt -->|"利用する"| modular_crypt_format
sha256crypt -->|"利用する"| crypt_3_function
sha512crypt -->|"利用する"| crypt_3_function
md5crypt -->|"利用する"| crypt_3_function
sha256crypt -->|"利用する"| sha_256
sha512crypt -->|"利用する"| sha_512
md5crypt -->|"利用する"| md5
hex_encoding -.->|"原因になり得る"| length_based_misidentification
modular_crypt_format -->|"防止する"| length_based_misidentification
nt_hash -->|"利用する"| md4
ntlm -->|"利用する"| nt_hash
sha512crypt -->|"で確認できる"| openssl_passwd
sha256crypt -->|"で確認できる"| openssl_passwd
md5crypt -->|"で確認できる"| openssl_passwd
md5 -->|"で構成できる"| hashcat
sha_256 -->|"で構成できる"| hashcat
sha512crypt -->|"で構成できる"| hashcat
bcrypt -->|"で構成できる"| hashcat
nt_hash -->|"で構成できる"| hashcat
pbkdf2 -->|"で構成できる"| hashcat
scrypt -->|"で構成できる"| hashcat
ldap_scheme_prefix -.->|"利用する"| base64_encoding
ldap_scheme_prefix -.->|"利用する"| sha_1
ldap_scheme_prefix -->|"防止する"| length_based_misidentification
概念間の関係(全27件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- crypt(3)はMCF(Modular Crypt Format)を利用します。
- PHC string formatはMCF(Modular Crypt Format)の後継に当たります。
- Argon2はPHC string formatを利用します。
- bcryptはMCF(Modular Crypt Format)を利用します。
- sha256cryptはcrypt(3)を利用します。
- sha512cryptはcrypt(3)を利用します。
- md5cryptはcrypt(3)を利用します。
- sha256cryptはSHA-256を利用します。
- sha512cryptはSHA-512を利用します。
- md5cryptはMD5を利用します。
- 16進表現(hex encoding)は長さだけによる誤判定の原因になることがあります。
- MCF(Modular Crypt Format)は長さだけによる誤判定を防ぎます。
- NTハッシュはMD4を利用します。
- NTLMはNTハッシュを利用します。
- sha512cryptはopenssl passwdで確認できます。
- sha256cryptはopenssl passwdで確認できます。
- md5cryptはopenssl passwdで確認できます。
- MD5はhashcatで構成できます。
- SHA-256はhashcatで構成できます。
- sha512cryptはhashcatで構成できます。
- bcryptはhashcatで構成できます。
- NTハッシュはhashcatで構成できます。
- PBKDF2はhashcatで構成できます。
- scryptはhashcatで構成できます。
- LDAPスキームプレフィックス({SHA}等)はBase64(RFC 4648)を利用します。
- LDAPスキームプレフィックス({SHA}等)はSHA-1を利用します。
- LDAPスキームプレフィックス({SHA}等)は長さだけによる誤判定を防ぎます。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。