PHPでは、 hash_pbkdf2関数は一般的に使用される暗号化ツールであり、パスワードを暗号化および保存するためによく使用されます。この関数は、PBKDF2(パスワードベースのキー派生関数2)アルゴリズムに基づいています。繰り返しハッシュすることにより、暗号化の計算がより複雑になり、パスワードのセキュリティが向上します。 hash_pbkdf2関数の重要なパラメーターは、反復、つまり反復数です。このパラメーターは、パスワードハッシュの計算の複雑さとシステムの全体的なセキュリティに直接影響します。
反復数は、同じデータでハッシュ関数の実行回数を指します。 PBKDF2アルゴリズムでは、追加の反復のたびに、パスワードと塩値で新しいハッシュが実行され、攻撃者がパスワードをブルートするために必要な計算コストが増加します。
関数プロトタイプは次のとおりです。
<span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-title function_ invoke__">hash_pbkdf2</span></span><span>(
</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$algo</span></span><span>,
</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$password</span></span><span>,
</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$salt</span></span><span>,
</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$iterations</span></span><span>,
</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$length</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>,
</span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-variable">$binary</span></span><span> = </span><span><span class="hljs-literal">false</span></span><span>
)
</span></span>
その中で、 $ iterationsはハッシュ反復の数を制御するパラメーターです。
反復数を増やすことの直接的な効果は、計算コストを増加させることです。合法的なユーザーの場合、ログインするには数ミリ秒しかかかりませんが、攻撃者に対して大規模なブルートフォース攻撃を実行する場合、追加の反復がそれぞれ計算量の複数の増加を意味します。たとえば、1000回の反復を使用すると、1000秒あたりのパスワードを試すことができます。それが100,000に増加した場合、1秒あたり10パスワードしか試すことができないため、攻撃効率が大幅に低下します。
最新の攻撃者は、GPU、FPGA、またはASICデバイスを使用して並行して割ることがよくあります。そのシリアル構造により、PBKDF2はこれらのハードウェアがアクセラレーションした攻撃をある程度抑制することができます。反復回数を増やすことで、これらのデバイスの利点をさらに減らすことができるため、攻撃者が強力なハードウェアを持っていても、亀裂の難しさが大幅に増加します。
辞書攻撃は、事前に計算されたパスワードハッシュリストに依存しています。 PBKDF2の反復メカニズムは塩値( $塩)の使用と組み合わされるため、同じパスワードが異なる塩値を使用しても、異なるハッシュ結果が得られます。多数の反復により、辞書の生成プロセスが非常に遅くなり、そのような攻撃の実現可能性がさらに弱まります。
より高い反復はより大きなセキュリティをもたらしますが、制限なしに改善することはできません。サーバーがログイン要求を処理するたびに、対応するハッシュ操作を実行する必要があります。反復が多すぎると、パフォーマンスが明らかなボトルネックを引き起こし、サービス拒否攻撃のための攻撃面にさえなります。したがって、適切な数の反復を選択することが重要です。
OWASP(Open Web Application Security Project)の推奨によると、推奨される推奨反復の数は2025年までに少なくとも310,000になります。この値は、攻撃者のコンピューティングパワーと相対的なバランスを維持するために、コンピューターハードウェアの進歩により年々調整する必要があります。
310,000以上など、業界が現在推奨している最小の反復数を使用します。
システムのパフォーマンス許容度を定期的に評価し、実際のハードウェアに従って微調整します。
パスワードポリシーは、強力なパスワード要件、マルチファクター認証などのハッシュポリシーと組み合わせて使用する必要があります。
虹のテーブル攻撃を防ぐために、ユニークで十分にランダムな塩値が使用されていることを確認してください。
hash_pbkdf2関数の反復回数は、パスワードセキュリティを保護する重要な要因の1つです。このパラメーターを合理的に設定すると、システムのブルートフォース亀裂に抵抗する能力が大幅に向上するだけでなく、さまざまな形態の暗号攻撃を防ぎます。認定システムを設計するときは、より強力な安全ラインを構築するために、このパラメーターを完全に理解し、合理的に使用する必要があります。