最初:私はこの質問をstackoverflowで質問しましたが、ここにもう一度投稿するようにお願いされました。元の質問を見る ここ 。
新しいPHP 5.5パスワードハッシュ/暗号化APIの[初期]ドキュメントページによると、使用されているアルゴリズム_CRYPT_BLOWFISH
_は「現在PHPでサポートされている最強のアルゴリズム」です(全文を入力してください)検索してページ上の見積もりを見つけます)。
私の質問は、これはいくつかの数値、ベンチマークなどで証明できますか?
PHPのcrypt()
によると ドキュメントページ _CRYPT_BLOWFISH
_は22文字のソルトを使用して60文字のハッシュを生成し、_CRYPT_SHA512
_は16文字のソルトを使用して生成します118文字のハッシュ。どちらのアルゴリズムにも変更可能なコスト要因があるため、最初はSHA512の方が(長くなるため)強く見えます。
コストの指数表記を使用したbcryptと線形表記を使用したsha512-cryptは無関係です。 CPUコストをデフォルトのパラメーターと比較しても意味がありません。
実際には、時間の予算、たとえば10msを選択します。次に、その予算に一致するようにハッシュのコスト係数を調整します。したがって、攻撃者が防御側と同じハードウェアを使用した場合、適切なパスワードハッシュはすべて同じになります。
攻撃者は、防御側とは異なるハードウェアを使用します。防御側は標準のCPUを使用します。攻撃者は少なくともGPUを使用します。高度な攻撃者の場合は、おそらくFPGAまたはASICを使用します。
異なるハッシュの違いは、さまざまな種類のハードウェアでどれだけうまく実行できるかです。 BCryptには、数キロバイトの非常に高速なメモリが必要です。これは一般的なCPUではうまく機能しますが、GPUではうまく機能しません。そのため、bcryptはGPUに非常に適していません。 FPGAでは、特にRAMが統合されている場合、bcryptの利点は小さくなります。しかし、それはまだ少し良いです。
「数学的証明」は、Nを任意に選択できることです。
t(bcrypt) * (2^N) >> t(sha)
最後のハッシュは衝突を回避するためのものなので、次の条件が満たされていれば安全です
hash >> password
塩はすべてレインボーテーブルを避けるためのものなので、あなたが安全である限り
(Rainbow table size) * (salt) >> (attacker storage space)