Yescrypt

パスワードベースの鍵導出関数 From Wikipedia, the free encyclopedia

yescrypt(イエスクリプト)は、パスワードから鍵素材を導出するためのパスワードベース鍵導出関数(KDF)であり、あわせてパスワード保存用のパスワードハッシュ方式としても用いられる暗号方式である。Openwall の Solar Designer により設計され、scrypt を基礎に拡張したメモリハードな方式として開発された。[1][2]

yescrypt は、パスワードデータベース漏洩後の総当たり攻撃や辞書攻撃への耐性を高めることを目的とする。単に計算回数を増やすだけでなく、計算に必要なメモリ量も攻撃コストに組み込むことで、GPUFPGAASIC などを用いた大規模なオフライン解析を受けにくくするよう設計されている。[3][4]

概要

yescrypt は、2010年代に提案されたパスワードハッシュ方式であり、Password Hashing Competition にも submission の1つとして提出された。提出仕様では、yescrypt は scrypt 互換モードを含みつつ、独自の拡張により柔軟性と攻撃耐性の強化を図る方式として説明されている。[5]

Openwall の公式説明では、yescrypt はパスワードベース鍵導出関数とパスワードハッシュ方式の双方として位置づけられている。実装はネイティブ yescrypt のほか、古典的な scrypt ハッシュの計算にも対応する。[6]

背景

パスワード認証は、他の認証要素の普及後も依然として広く用いられており、パスワードハッシュの漏洩は継続的なセキュリティ問題である。こうした状況に対処するため、PBKDF2bcrypt のような計算コスト重視の方式に加え、scrypt や Argon2 のようなメモリハード方式が提案されてきた。Openwall は、yescrypt の設計理由として、既存方式では高スループット環境や低レイテンシ環境においてメモリ使用量が低くなりすぎ、攻撃者が既存ハードウェアを有利に使える場合がある点を挙げている。[7]

このため yescrypt は、scrypt を基礎としつつ、より広い運用条件に対応できる拡張方式として設計された。Password Hashing Competition 提出仕様でも、yescrypt は scrypt からの差分を中心に説明されている。[8]

特徴

yescrypt の主要な特徴は、パスワードハッシュ計算のコストとして、計算時間だけでなくメモリ消費も重視する点にある。Arch Linux の `crypt(5)` man page では、yescrypt は推奨される新規ハッシュ方式であり、その強度はアルゴリズム設計に基づきつつ、暗号学的な安全性は外層で用いられる SHA-256 により支えられると説明されている。[9]

Openwall は、yescrypt の設計上の利点として、大規模運用向けに大きな参照テーブルを初期化し再利用できる点を挙げている。これは通常、数十ギガバイト以上のメモリを占めるサイト固有の ROM 的な構造を形成し、攻撃者が汎用ハードウェアや既存のボットネット資源をそのまま流用することを難しくする狙いがある。[10]

また Openwall は、yescrypt が scrypt からの追加変更により、低メモリ使用時や ROM を用いない場合でも、GPU に対してより強い減速効果を持ち、FPGAASIC に対しても一定の不利を与えるとしている。[11]

実装と採用

yescrypt の主要実装は Openwall により C で公開されており、軽量な Go 実装も提供されている。加えて、Linux 系システムで広く利用される libxcrypt でも yescrypt がサポートされている。[12][13]

採用例として、Debian 11(bullseye)のリリースノートは「パスワードハッシュは既定で yescrypt を使用する」と説明している。Fedora は Fedora 35 で新規パスワードの既定ハッシュ方式を yescrypt に変更し、Arch Linux も shadow 4.14.0 以降で既定のパスワードハッシュ方式を SHA-512 から yescrypt に切り替えた。Ubuntu 系の man page 群でも yescrypt の利用と設定が案内されている。[14][15][16][17]

Openwall も、recent な採用先として ALT Linux、Arch Linux、Debian 11以降、Fedora 35以降、Kali Linux 2021.1以降、Ubuntu 22.04以降を列挙している。[18]

形式とパラメータ

Arch Linux の `crypt(5)` man page によれば、yescrypt 形式のハッシュは識別用 prefix として `$y$` を用いる。ハッシュ長は 256 bit とされ、塩の長さは最大 512 bit、推奨は 128 bit 以上とされる。さらに処理コスト用のパラメータは 1 から 11 の範囲で指定され、対数的に増加し、必要メモリ量にも影響する。[19]

Ubuntu の `chpasswd(8)` man page では、YESCRYPT の既定コストは `login.defs` 内の `YESCRYPT_COST_FACTOR` により定義され、既定値は 5 と説明されている。[20]

評価と位置づけ

yescrypt は、Linux のパスワードハッシュ実装において現実的な採用が進んでいる点に特徴がある。Arch Linux は、yescrypt を既定に採用した理由として、libxcrypt ですでに利用可能であることと、SHA-512 よりパスワードクラッキング耐性が高いことを挙げている。また、Arch Linux は、Argon2 が Password Hashing Competition の優勝方式である一方、libxcrypt では当時まだ利用できなかったことも理由として示している。[21]

このように yescrypt は、理論的な新規性だけでなく、既存の Unix 系パスワード管理基盤へ比較的統合しやすい方式として普及している。[22]

脚注

関連項目

外部リンク

Related Articles

Wikiwand AI