PHPでは、 Crypt()関数はハッシュ暗号化の重要なツールであり、Blowfish(通常は2Y $と表現される)やSHA-512( 6ドルとして使用)を含むさまざまな暗号化アルゴリズムをサポートします。両方のアルゴリズムは、パスワードのハッシュと検証に広く使用されていますが、パフォーマンスと適用可能なシナリオが大きく異なります。この記事では、PHP Crypt()関数におけるブローフィッシュとSHA-512のパフォーマンス比較について詳しく説明し、例に基づいてその利点と短所を分析します。
Blowfishは対称キーベースの暗号化アルゴリズムであり、PHPでBCRyptの実装の1つとして使用され、強いハッシュ値を生成します。 BCRYPTは、パスワードハッシュ用に設計されており、デフォルトのコスト係数は10です。つまり、計算プロセスは意図的に遅延してブルートフォースの亀裂を防ぎます。
パスワード用に設計:BCRYPTの設計目標はパスワードハッシュであり、虹のテーブルやブルートフォースの亀裂に抵抗できます。
調整可能なコスト要因:コストパラメーターを増やすことにより、ハッシュの難易度を強化できます。
安定したパフォーマンス:ほとんどの場合、実行時間は比較的安定しているため、時間攻撃を防ぐのに役立ちます。
$password = 'mypassword';
$hash = crypt($password, '$2y$10$usesomesillystringforsalt$');
echo $hash;
SHA-512はSHA-2ファミリーのメンバーであり、パスワードハッシュ用に特別に設計されているのではなく、主にデータの整合性検証に使用される、より一般的なハッシュ機能です。 PHPのCrypt()でもサポートされていますが、そのセキュリティは塩の値とアプリケーションのコンテキストに依存します。
高速速度:SHA-512は、ブローフィッシュよりも計算が速く、非パスワードデータの高速ハッシュに適しています。
アルゴリズムの標準化:NISTが推奨する標準ハッシュアルゴリズムであり、ファイルチェックサム署名で広く使用されています。
コスト因子制御の不足:ブローフィッシュとは異なり、SHA-512は計算コストを簡単に調整できません。
ブルートフォース攻撃の影響を受けやすい:コンピューティング速度が高速なため、パスワードハッシュの潜在的なセキュリティリスクになります。
$password = 'mypassword';
$hash = crypt($password, '$6$rounds=5000$usesomesillystringforsalt$');
echo $hash;
ブローフィッシュとSHA-512のパフォーマンスの違いを評価するために、同じサーバー環境で次のテストを実行できます。
$start = microtime(true);
crypt('mypassword', '$2y$10$usesomesillystringforsalt$');
$blowfish_time = microtime(true) - $start;
$start = microtime(true);
crypt('mypassword', '$6$rounds=5000$usesomesillystringforsalt$');
$sha512_time = microtime(true) - $start;
echo "Blowfish時間:{$blowfish_time} 2番\n";
echo "SHA-512時間:{$sha512_time} 2番\n";
一般的なPHP操作環境では、ブローフィッシュの実行時間は通常、SHA-512の実行時間です。この「遅さ」は(強化されたセキュリティのために)設計されていますが、多数のリクエストを処理するときにパフォーマンスに影響を与える可能性があります。
ユーザーログインシステムを開発している場合は、より安全になり、ブルートフォース抵抗があるように設計されているため、BlowFish(BCRYPT)を使用することをお勧めします。
非感受性データの一意の識別生成など、高速ハッシュのみが必要な場合は、SHA-512を使用できます。
PHP 5.5から始めて、 crypt()の代わりにpassword_hash()とpassword_verify()を使用することをお勧めします。そのため、パスワードハッシュロジックはより簡単かつ安全に管理できるようにすることをお勧めします。
$hash = password_hash('mypassword', PASSWORD_BCRYPT);
if (password_verify('mypassword', $hash)) {
echo '正しいパスワード';
}
Crypt()関数は依然としてサポートされており、パスワードハッシュに使用されていますが、BlowFishとSHA-512の選択は特定のアプリケーションシナリオに基づいている必要があります。 Blowfishはより強力なパスワードセキュリティを提供しますが、SHA-512は速度の点で最高です。パスワードセキュリティが必要なシナリオでは、Blowfishを優先し、最新のPHPパスワード処理機能と組み合わせて使用して、システムの長期的なセキュリティとメンテナンスを確保する必要があります。
Web認証システムでパスワードハッシュを使用する開発者については、より多くのベストプラクティスについては、次のURLを参照してください。
https://m66.net/security/password-hashing