sha-516 ハッシュパスワード文字列をテストするために、次のシェルスクリプトを作成しました。
myhash='$6$nxIRLUXhRQlj$t29nGt1moX3KcuFZmRwUjdiS9pcLWpqKhAY0Y0bp2pqs3fPrnVAXKKbLfyZcvkkcwcbr2Abc8sBZBXI9UaguU.' #Which is created by mkpasswd for test
i=0
while [[ 1 -eq 1 ]]
do
testpass=$(mkpasswd -m sha-512 "test")
i=$[ $i + 1 ]
if [[ "$testpass" == "$myhash" ]];
then
echo -e "found\n"
break
else
echo -e "$myhash /= $testpass :-> $i Testing....\n"
fi
done
走った後216107数値ループテスト 一致する項目が見つかりませんでした。しかし、私のLinux OS(Ubuntu)システムでは、ログイン資格情報を非常にすばやく一致させることができます。私の質問はなぜそれほど早く同じ結果が得られないのですか?
ベストアンサー1
パスワードハッシュ(入力時myhash
)には、どのハッシュ関数が使用されたか、どのパラメータ(コスト、塩分、ハッシュ関数出力など)が使用されたかを示すいくつかのメタデータが含まれています。最新のUnixパスワードハッシュ形式では、部分は次のように区切られています$
。
6
表現するUnix反復SHA-512法(似ているが同じではないデザインPBKDF2)。- パラメータがないため、コスト要素はデフォルトです。
nxIRLUXhRQlj
塩です。t29nGt1moX3KcuFZmRwUjdiS9pcLWpqKhAY0Y0bp2pqs3fPrnVAXKKbLfyZcvkkcwcbr2Abc8sBZBXI9UaguU.
予想される出力です。
実行されるたびに、mkpasswd -m sha-512
ランダムなソルトを使用してパスワードハッシュを生成します。したがって、このコマンドを実行すると、毎回異なる出力が生成されます。
パスワードを入力すると、システムは計算して出力にiterated_sha512(default_cost, "nxIRLUXhRQlj", typed_password)
なることを確認します"t29nGt1moX3KcuFZmRwUjdiS9pcLWpqKhAY0Y0bp2pqs3fPrnVAXKKbLfyZcvkkcwcbr2Abc8sBZBXI9UaguU."
。
プログラムが実行する操作は異なります。ランダムなソルトを作成し、それを暗号化ハッシュ関数の出力と比較しますmyhash
。これは、無視できる確率で同じソルトを生成する場合にのみ一致します(コンピュータは生涯にわたって同じソルトを2回生成しません)。しかし、塩分を推測する必要はありません。塩分はパスワードハッシュにあります。
おすすめの本:パスワードを安全にハッシュする方法は?