scryptとは
この記事は約 2 分で読めます
scrypt は、大量のメモリを消費することで GPU や ASIC による並列攻撃に対抗する メモリハードなパスワードハッシュ関数です。 2009 年に Colin Percival がオンラインバックアップサービス Tarsnap の鍵導出用に 設計しました。bcrypt が CPU バウンドであるのに対し、 scrypt はメモリバウンドの計算を要求することで、攻撃コストを桁違いに引き上げます。 暗号通貨 Litecoin の Proof of Work アルゴリズムとしても広く知られています。
歴史的背景
2000 年代後半、 GPU の汎用計算 (GPGPU) が急速に普及し、 bcrypt のような CPU バウンドのハッシュ関数に対するブルートフォース攻撃が現実的な脅威となりました。 Colin Percival はこの問題に対し、「計算だけでなくメモリも大量に消費させれば、 GPU の並列性を無力化できる」というアイデアで scrypt を設計しました。 2009 年に Tarsnap のバックアップ暗号化に採用され、 2012 年には RFC 7914 として 標準化されています。 2011 年に登場した Litecoin が scrypt を採用したことで、 暗号通貨コミュニティでも広く認知されるようになりました。
ROMix アルゴリズムの仕組み
scrypt の核心は ROMix と呼ばれるアルゴリズムです。処理は大きく 2 つのフェーズに 分かれます。
初期値から擬似ランダムなブロックを N 個生成し、巨大な配列に格納する。 N = 2^20 (約 100 万) の場合、 1 GB 以上のメモリを消費する。 この配列全体を保持しなければ次のフェーズに進めない。
配列内のランダムな位置を N 回参照しながら値を混合する。 参照先は直前の計算結果に依存するため、事前に予測できない。 メモリを削減すると再計算が必要になり、時間コストが急増する。
この「メモリを削ると計算時間が爆発する」性質が、 scrypt のメモリハード性の本質です。 攻撃者がメモリを節約して並列度を上げようとすると、 1 インスタンスあたりの計算時間が 二乗的に増加するため、トータルの攻撃コストは下がりません。
Argon2、bcrypt との比較
| 特性 | bcrypt | scrypt | Argon2id |
|---|---|---|---|
| 登場年 | 1999 | 2009 | 2015 |
| メモリハード | ✗ | ✓ | ✓ |
| サイドチャネル耐性 | 高い | 低い (データ依存アクセス) | 高い (Argon2id のハイブリッド方式) |
| パラメータの直感性 | コスト 1 つで単純 | N, r, p の関係が複雑 | メモリ・時間・並列度が独立 |
| OWASP 推奨順位 | 2 位 | 3 位 | 1 位 |
| 暗号通貨での採用 | なし | Litecoin, Dogecoin 等 | 一部のマイニング耐性設計 |
パラメータ設計 (N, r, p)
scrypt のパラメータは 3 つあり、それぞれの役割と相互関係を理解することが重要です。
N を 2 倍にするとメモリ使用量と計算時間がともに 2 倍になります。 パラメータの相互依存が複雑なため、 Argon2id のようにメモリ・時間・並列度を 独立に調整できるアルゴリズムと比べると、チューニングの難易度は高めです。ソルトは 16 バイト以上を 使用し、パスワードハッシュの 基本原則に従って保存してください。
Litecoin での採用
2011 年に登場した Litecoin は、 Bitcoin の SHA-256 に代わり scrypt を Proof of Work アルゴリズムに採用しました。当時の狙いは「ASIC による マイニングの寡占化を防ぎ、一般的な PC でもマイニングに参加できるようにする」 ことでした。しかし 2014 年頃から scrypt 対応の ASIC が登場し、 当初の目的は達成されませんでした。この経験は、メモリハード関数であっても 十分なメモリ要求量がなければ専用ハードウェアに対抗できないという教訓を残しています。 暗号通貨のセキュリティについては暗号通貨ウォレットのセキュリティで 解説しています。
よくある誤解
「scrypt は古いから使うべきではない」という意見がありますが、適切なパラメータで 運用すれば 2025 年時点でも十分な安全性を提供します。 OWASP も Argon2id、 bcrypt に 次ぐ第 3 の選択肢として推奨しています。ただし新規システムでは Argon2id を 第一候補とし、 scrypt は既存システムとの互換性が必要な場合に選択するのが実務的です。 暗号の基礎は暗号化の基礎で、 パスワード管理の全体像は安全なパスワード管理ガイドも 参考にしてください。暗号技術の入門書 (Amazon)でさらに深く学べます。
この記事は役に立ちましたか?