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回生成しません)。しかし、塩分を推測する必要はありません。塩分はパスワードハッシュにあります。
おすすめの本:パスワードを安全にハッシュする方法は?
答え2
mkpasswd
また、リクエスト塩それ以外の場合は、実行するたびに1つが生成されます。次のように生の文字列を分解すると、$区切り文字で表示されます。ハッシング 6そしてnxIRLUXhRQlj
塩。
ランニング中に塩を追加すると、mkpasswd
最初に正しい結果が得られます。
$ mkpasswd -m sha-512 "test" "nxIRLUXhRQlj"
$6$nxIRLUXhRQlj$t29nGt1moX3KcuFZmRwUjdiS9pcLWpqKhAY0Y0bp2pqs3fPrnVAXKKbLfyZcvkkcwcbr2Abc8sBZBXI9UaguU.
使う塩防ぐレインボーテーブル攻撃パスワードをハッシュする前に、パスワードにランダムな部分を追加するためです。