Featured image of post Password Hashing Competition(PHC)調査レポート

Password Hashing Competition(PHC)調査レポート

Password Hashing Competition の目的、経緯、評価基準、主要提出物(受賞・選定)とその意義をまとめた調査レポート。

概要

Password Hashing Competition(PHC)は、2013年に公開募集が行われ、2013〜2015年にかけて実施されたオープンコンペティションで、モダンなパスワードハッシュ関数(パスワードベースKDF: PBKDF)を選定することを目的としました。AESやSHA-3の選定プロセスにならい、コミュニティと専門家の審査により実用的で安全な設計を推奨することを目指しています。

本調査は PHC の成立背景、運営、評価基準、主要提出物と最終結果、及び実務上の意味を整理したものです。

背景と経緯

  • 発起人・運営: Jean-Philippe Aumasson によって立ち上げられ、暗号設計者・実務家からなるパネルが運営に関与しました。
  • 期間: コールフォーサブミッション(CFH)は2012年秋に公表され、提出期限は2014年3月31日。2014年12月に9件のファイナリストを発表、2015年7月に最終選定が発表されました。
  • 投稿数: 第一次募集で合計24件の提出がありました。

目的と評価基準

PHC の主な目的は「現代の脅威に耐えるパスワードハッシュ関数を選定・普及させる」ことです。評価で重視されたポイントは主に以下です。

  • セキュリティ(抵抗性): 総当たり攻撃や辞書攻撃に対するコスト、GPU/ASIC による並列クラックへの耐性
  • メモリハードネス: 攻撃コストを上げるために大量メモリを必要とする性質
  • サイドチャネル耐性: タイミングやキャッシュに起因する情報漏洩への強さ
  • 実装容易性と移植性: 参照実装の品質、プラットフォーム間での移植のしやすさ
  • 柔軟性とパラメータ化: メモリ量・時間(反復)・並列度などで運用に応じた調整が可能か
  • 性能: セキュリティと実用性のバランス(認証遅延などの運用上の許容)

選考はコミュニティレビュー、暗号解析、実装検証、及び実用性評価の組合せで行われました。

ファイナリストと最終結果

  • 勝者(Winner): Argon2 — Alex Biryukov, Daniel Dinu, Dmitry Khovratovich による設計。メモリハードネス、実装の洗練度、パラメータ柔軟性、参照実装の品質などが評価されました。
  • 特別言及(Special recognition): Catena、Lyra2、yescrypt、Makwa

備考:

  • PHC は 9 件のファイナリストを短縮リストとして発表しており、その中から最終的に Argon2 が勝者として選ばれました。

代表的な提出物(簡潔)

  • Argon2: メモリハードネスを重視した設計で、Argon2i/Argon2d/Argon2id のバリアントを持つ。パラメータ(メモリ、時間、並列度)でコストを調整可能。参照実装が公開され広く採用。
  • Catena: フレームワーク的アプローチとサイドチャネル耐性を重視した設計。順序付けや更新(password hardening)に関する機能が特徴。
  • Lyra2: スポンジ構造を用いた設計で、メモリと並列性の取り扱いに独自性がある。
  • yescrypt: scrypt を起点に機能を拡張し、scrypt からの移行経路が用意されている。柔軟なオプションを提供。
  • Makwa: RSA に基づく一風変わった設計で、デリゲーション(外部サービスへの処理委任)機能が注目された。

(上記は要約。実装・内部設計はそれぞれ固有のトレードオフがあるため、採用時は原論文と参照実装を確認すること)

PHC の意義と採用への影響

  • 標準化と普及: PHC の勝者である Argon2 はその後広く採用され、RFC や多くのライブラリでサポートされるようになりました(例: argon2 の参照実装、各言語バインディング、libsodium 等)。
  • 意識向上: パスワード保護におけるメモリハードネスや設計上の注意点(ソルト、パラメータ管理、定数時間比較など)に対する実務的な理解を促しました。
  • 運用ガイド: PHC の議論は、実環境でのベンチマーキングや段階的ロールアウト、既存ハッシュからの移行戦略(ログイン時再ハッシュ方式など)など、実務面での指針形成にも寄与しました。

実務的な推奨(PHC を踏まえて)

  • Argon2(特に Argon2id)を第一候補として検討する。運用上は必ず実環境でベンチして、認証にかけられる許容時間(目安 0.5〜1 秒)を満たすように memorytime を調整する。
  • ソルトはランダムかつ十分長(例: 16 バイト以上)にする。ハッシュ文字列にはパラメータ情報を含めておく(将来のパラメータ変更に対応するため)。
  • 移行戦略: ユーザがログインしたタイミングで既存ハッシュを検証後に新しいハッシュに置き換える方式が現実的。全ユーザ強制リセットは UX に影響する。
  • 実装注意: 定数時間比較、依存ライブラリのメンテナンス、pepper(サーバ側で別管理する機密)運用の是非とリスク評価。

参考・一次情報


作成: 調査エージェント — 2025-12-19

comments powered by Disqus
Hugo で構築されています。
テーマ StackJimmy によって設計されています。