scryptの作者コリン・パーシヴァルは、FreeBSDプロジェクトのセキュリティ責任者を長く務めた人物だ。そのFreeBSDは、ソニーのPlayStation 4・PlayStation 5のシステムソフトウェア(Orbis OS)の基盤としても使われている——日本を代表するゲーム機の中核に、scryptを生んだのと同じOSの血統が流れているという、意外なつながりがある。
memory-hard関数とは何か
memory-hardアルゴリズムは、1つのハッシュを計算するために大量の中間データをメモリに保持する必要があるよう意図的に設計されています。値を再計算するコストを払ってメモリを節約しようとすると、代わりに計算時間が大幅に増加します——つまり攻撃者はメモリか速度のどちらかを犠牲にしなければなりません。
これが専用ハードウェアでの攻撃をなぜ困難にするか
ASICチップとGPUは単純な算術演算を大規模に並列実行するのに非常に効率的ですが、各並列計算スレッドにメモリを追加することははるかにコストがかかり、スケーリングも悪くなります。Scryptは、このようなハードウェアでの総当たり攻撃を、古典的なハッシュ関数と比べて経済的に魅力のないものにします。
なぜこれが必要か
- GPUファームによる攻撃に耐性のあるパスワードハッシュ化アルゴリズムを選ぶ。
- 暗号学の文脈でmemory-hard関数の概念を理解する。
- 特定のシステムに対してscryptとbcrypt、Argon2のトレードオフを比較する。
実際に必要なメモリ量
scryptの1回の計算に必要なメモリ量は、おおよそ128 × N × rバイトです。典型的なパラメータ(N=16384、r=8)では、これは1ハッシュあたり約16メガバイトになります——1回のログインでは些細な量ですが、サーバーが数千件の同時認証を処理する必要がある場合、合計メモリ量はパラメータ選択における単なる抽象的なセキュリティ要件ではなく、現実的な制約になります。