Salt(ソルト) - 暗号化全般

暗号化全般 | IT用語集

Saltとは

Salt(ソルト)は、パスワードをハッシュ化する前に追加するランダムなデータです。各パスワードに一意のソルトを使用することで、以下の攻撃を防ぎます:

  • レインボーテーブル攻撃:事前計算されたハッシュ辞書が無効化
  • 同一パスワードの検出:同じパスワードでも異なるハッシュに

Saltの要件

  • ランダム生成:暗号学的に安全な乱数生成器を使用
  • 十分な長さ:最低16バイト(128ビット)以上
  • 一意性:各パスワードに異なるソルト
  • 保存:ハッシュと一緒に平文で保存(秘密である必要なし)

実装例

import os
import hashlib

# 悪い例:ソルトなし
bad_hash = hashlib.sha256(b"password").hexdigest()
# 同じパスワードは常に同じハッシュ → 危険

# 良い例:ソルトあり
salt = os.urandom(16)  # 16バイトのランダムソルト
good_hash = hashlib.pbkdf2_hmac('sha256', b"password", salt, 100000)
# ソルトとハッシュを一緒に保存
stored = salt + good_hash

# さらに良い例:bcrypt(ソルト自動生成・保存)
import bcrypt
hash = bcrypt.hashpw(b"password", bcrypt.gensalt())
# $2b$12$... 形式でソルトが含まれる

Pepper vs Salt

  • Salt:ハッシュと一緒に保存、公開可能
  • Pepper:アプリケーション側で秘密に保持する追加の値

関連用語

📝 関連ブログ記事

【2026年最新】OpenSSLの深刻な問題とは?

パスワード管理のご相談