scrypt
scrypt は Colin Percival が設計したメモリーハードな鍵導出関数(KDF)である。大きなメモリ要求によって GPU/ASIC による並列総当たり攻撃を妨げ、パスワードハッシュや鍵導出に利用される。
目的
CPU コストに加えてメモリーハード性を上乗せし、専用ハードウェア(ASIC)攻撃のコストを大幅に引き上げる。
メカニズム
PBKDF2 と ROMix を基盤とし(BlockMix がメモリ上の充填済み配列へランダムアクセスする)。パラメータは N(メモリ/時間コスト)、r(ブロックサイズ)、p(並列度)で、約 N×r×128 バイトのメモリを確保する。一般的な設定は N=2^15、r=8、p=1 である。
ユースケース
- Litecoin のマイニング
- Tarsnap バックアップの暗号化
- パスワードハッシュ(bcrypt の代替)
- ETH 2.0 の鍵導出
例
- 入力
password, salt, N=2^15, r=8, p=1Output256-bit keyNeeds about 32 MB of memory
よくあるエラー
- An N value too low loses the memory-hard property
- Tune per environment; N≥2^15 recommended for servers
関連用語
PBKDF2
PBKDF2(Password-Based Key Derivation Function 2)はPKCS#5で標準化されたKDFであり、HMACの反復によりパスワードから鍵を導出する。パスワードハッシュと鍵導出で広く使われる。 用語集
Key Derivation
鍵導出(Key Derivation)は、低エントロピーのパスワードや高エントロピーのマスター鍵から暗号鍵を生成するプロセスである。KDF(PBKDF2、scrypt、Argon2 など)を使い、総当たり攻撃のコストを引き上げる。 用語集
Salt
ソルトとは、パスワードのハッシュ化時に加えるランダムな値のことで、同一パスワードでも異なるハッシュを生成させ、レインボーテーブルやパスワードの一致検出を無効化する。 用語集