私の一部/etc/login.defs
ファイルは次のようになります。
ENCRYPT_METHOD SHA512
# Define the number of SHA rounds.
# If not specified, the libc will choose the default number of rounds (5000).
# The values must be inside the 1000-999999999 range.
# If only one of the MIN or MAX values is set, then this value will be used.
# If MIN > MAX, the highest value will be used.
#
# SHA_CRYPT_MIN_ROUNDS 5000
SHA_CRYPT_MAX_ROUNDS 6000
これについて私が理解していることから、パスワードは6000ラウンドのハッシュを通過するということです。
ここで、hashcat
のようなツールを使用したときに、ハッシュが「x」回のラウンドを通過したことをどのように通知しますか。
私は次のようにハッシュキャットを使うことができます:hashcat -m 1800 -a 0 -o found.txt hash.txt rockyou.txt
そしてそれはまだそれを見つけることができます。それだけでラウンド数を計算できますか?
編集:Linuxボックスが実際に6000ラウンドのハッシュを使用していないことがわかりましたが、6000ラウンドを使用するように設定したと思いました。代わりに5000でした。
いくつかのPythonコードを使用して、Linuxで「SHA512」パスワード暗号化を複製することができました:
from passlib.hash import sha512_crypt
sha512_crypt.encrypt("testing123",rounds=6000,salt="6EGwX1iP")
結果のハッシュは$6$rounds=6000$6EGwX1iP$oMerxGPimb/4ZXcI0Vbt87sNfw07eh7VPzcQwHOls8t3hLYGLQR0KjncrpyAjLTfPC3Fj7jhFoZKeuPRfTbJa/
もちろん、この文字列には、hashcat
に渡すことができるラウンド数があります。
編集:あなたがあなたの答えを見つけたのを見ましたが、完全を期すためにここに追加します。 (そして私はすでにこれを書き留めていました)。
Hashcatはラウンド数を推測せず、/etc/login.defs
で指定されたラウンド数が適切に適用されません。
私はLinuxボックスから例を挙げました:
$ 6 $ elIIOT8d $ lXVE7ZxTaBnvyi3kgrVGOpq.I/tQU9CN.G2FgpcjyxovibRB1TjDbk7NFkOwo7ySt.w8BwnacxQ0876/hz6l //
これは次と同じです:
$ 6 $ rounds = 50&elIIOT8d $ lXVE7ZxTaBnvyi3kgrVGOpq.I/tQU9CN.G2FgpcjyxovibRB1TjDbk7NFkOwo7ySt.w8BwnacxQ0876/hz6l //
ラウンド数が適切に設定されている場合、ハッシュには5000ではなく別の数値が表示されます。
Kali Linuxを実行している私のボックスで、/etc/pam.d/common-password
に移動して行(私の場合は25行目)を見つけることによって、ラウンド数を指定することができました。
パスワード[success = 1 default = ignore] pam_unix.so obscure sha512
「rounds = 1234」をそれに追加しました:
パスワード[success = 1 default = ignore] pam_unix.so obscure sha512 rounds = 1234
ユーザーを保存して作成しました:
$> adduser test3
そして、これが私の/etc/shadow
ファイルに含まれています。
$>tail --lines=1 /etc/shadow
test3:$ 6 $ rounds = 1234 $ SzWcxuIH $ YX1QDmE1PG7grJ/4rJ8LkwggmEffoo9vUCuPAhL3x2sBQZJ8n2a2OeHpFEKaWDH2o.NGYwbLFZNabfOQlQ:9:27:166:166
シグネチャの後にrounds = [反復数]を追加することにより、Hashcatが行う反復回数を手動で指定できます。例:
$ 6 $ rounds = 50&elIIOT8d $ lXVE7ZxTaBnvyi3kgrVGOpq.I/tQU9CN.G2FgpcjyxovibRB1TjDbk7NFkOwo7ySt.w8BwnacxQ0876/hz6l //
ただし、これは/etc/shadow
のラウンド数!= 5000の場合、自動的に適用されます。