scrypt - 暗号化全般

暗号化全般 | IT用語集

scryptとは

scryptは、Colin Percival氏が2009年に開発したメモリハードな鍵導出関数(KDF)です。従来のPBKDF2と異なり、大量のメモリを必要とすることで、GPUやASIC(特定用途向け集積回路)を使用した並列攻撃に対する耐性を高めています。

scryptの主なパラメータ:

  • N(CPUコスト):2のべき乗で指定。大きいほど計算コストが増加
  • r(ブロックサイズ):使用メモリ量に影響
  • p(並列度):並列実行可能な数
  • dkLen:出力する鍵の長さ

必要メモリ量は概算で 128 * N * r バイト となります。

scryptの仕組み

scryptは内部でSalsa20/8コアとPBKDF2-HMAC-SHA256を組み合わせています。大量のメモリを確保し、ランダムなパターンでアクセスすることで、メモリ帯域がボトルネックになるよう設計されています。

from cryptography.hazmat.primitives.kdf.scrypt import Scrypt
import os

def derive_key_with_scrypt(password: str) -> tuple[bytes, bytes]:
    salt = os.urandom(16)
    
    kdf = Scrypt(
        salt=salt,
        length=32,      # 256ビット鍵
        n=2**14,        # CPUコスト(16384)
        r=8,            # ブロックサイズ
        p=1             # 並列度
    )
    
    key = kdf.derive(password.encode())
    return key, salt

def verify_password(password: str, salt: bytes, stored_key: bytes) -> bool:
    kdf = Scrypt(
        salt=salt,
        length=32,
        n=2**14,
        r=8,
        p=1
    )
    try:
        kdf.verify(password.encode(), stored_key)
        return True
    except Exception:
        return False

AIエンジニアとしての実体験

暗号通貨関連のプロジェクトで、scryptを使用したマイニングアルゴリズムの解析を行いました。Litecoinなどの暗号通貨は、ASICマイニングへの耐性を目的としてscryptを採用しています(ただし、現在はscrypt用ASICも存在します)。

また、オフラインで使用するAIアプリケーションのライセンス認証システムで、scryptを使用してライセンスキーから復号化鍵を導出する実装を行いました。メモリ要件が高いため、簡易的なクラッキングツールでの解析が困難になります。

自社サーバー運用への応用

Tarsnap(オンラインバックアップ)

scryptの開発者であるColin Percival氏が運営するTarsnapバックアップサービスは、クライアント側暗号化にscryptを使用しています。

LUKS2でのscrypt使用

# LUKS2でscryptを使用(デフォルトはArgon2id)
cryptsetup luksFormat --type luks2 --pbkdf scrypt /dev/sdb1

# 既存のLUKSボリュームでPBKDFを確認
cryptsetup luksDump /dev/sdb1

関連ブログ記事

最新動向(2026年)

Argon2との比較

現在、新規開発ではArgon2idが推奨されることが多くなっています。Argon2はscryptの設計思想を継承しつつ、より細かいパラメータ調整が可能です。

特性 scrypt Argon2
メモリハード
サイドチャネル攻撃耐性 ○(Argon2id)
パラメータ調整 3パラメータ 4パラメータ
標準化状況 RFC 7914 RFC 9106(PHC優勝)

トラブル事例と対策

⚠️ メモリ不足エラー

問題:Nパラメータが大きすぎてOOM(Out of Memory)が発生

対策:サーバーのメモリ容量に応じてNを調整。コンテナ環境ではメモリ制限に注意

⚠️ 処理時間の長大化

問題:パラメータ設定によりログイン処理に数秒かかる

対策:ユーザー体験とセキュリティのバランスを考慮。100ms〜500ms程度を目安に

権威あるリソース

関連用語

この用語についてもっと詳しく

scryptに関するご質問やセキュリティ設計のご相談など、お気軽にお問い合わせください。