関連する質問:
SHA-512 または crypt() を使用したパスワード ストレージ ハッシュ (bcrypt)
PHPを使用してパスワードを安全に保存する方法を見つけようとしています。少し読んだ後、hash() の代わりに crypt() を使用する必要があり、bcrypt (bcrypt) または SHA-512 アルゴリズムのいずれかを使用する必要があることを確認しました。 SHA-512 ベースのアルゴリズムもサポートします。
私のソルトはできるだけランダムにすべきであるという多くの提案もありopenssl_random_pseudo_bytes()
、コアrand()
とmt_rand()
.
私の主な質問は次のとおりです。
bcrypt の使用を選択した場合、どの負荷係数の使用を検討する必要がありますか? PHP 5.5 の場合、新しいパスワード API のデフォルトの負荷係数は 10 であることに気付いたので、少なくともその値が必要になると思います。
負荷率はパスワードの安全性とどのように関連していますか? 私が理解していることから、アルゴリズムは
2^load_factor
何度も繰り返されますが、これがブルートフォースクラッキング手法に対する安全性にどのように変換されるかにもっと興味があります. 「安全」とはどういう意味ですか?クラックするのに10年かかるの?5年?1年?SHA-512 ベースの方法 (またはその逆) よりも bcrypt を選択する必要があるのはなぜですか? SHA-512 は高速ハッシュ方式になるように設計されているため、時間の経過とともに bcrypt ほどうまく機能しないと聞いています。これは本当ですか?どちらの方法にも、crypt を複数回反復できるソルト パラメータがあります。
私の知る限りでは、bcrypt ソルトを生成する次のテスト コードを実装しました。おすすめの方法は?それを行うより良い方法はありますか?
_
function gen_salt($cost)
{
return "$2y$" . $cost . "$" . str_replace('+', '.', base64_encode(openssl_random_pseudo_bytes(22)));
}