ソルト(暗号学) とは?
暗号ソルトは、ハッシュ関数または鍵導出関数で処理される前にパスワードや他の入力と組み合わされるランダム値で、同一の入力が異なる出力を生成することを保証し、事前計算された攻撃テーブルを無効にします。
別名: salt, cryptographic salt
ソルトがなければ、同一のパスワードは常に同一のハッシュを生成します。一般的なパスワードをそのハッシュ値にマッピングした事前計算テーブル(レインボーテーブル)を持つ攻撃者は、盗まれたデータベース内の一致するハッシュを瞬時に検索できます。ソルティングは、ハッシュ化前に各パスワードに固有のランダム値を混入させることでこの攻撃を阻止します。2 人のユーザーが同じパスワードを持っていても、異なるソルトにより異なるハッシュ出力が保証されます。
ソルトは秘密である必要はありません。通常、ハッシュや導出鍵と共に平文で保存されます。その目的は、事前計算テーブルを使う代わりに攻撃者に各ハッシュを個別に計算させることです。16 バイトのランダムソルトは各パスワードに対して 2^128 通りのバリエーションを提供し、事前計算を完全に非現実的にします。
ソルトは 2 つの文脈で不可欠です。パスワードハッシュ化(データベース内の保存されたパスワードハッシュを保護する場合)と鍵導出(同じパスフレーズが異なる操作で異なる導出鍵を生成することを保証する場合)です。どちらの場合も、ソルトは暗号学的に安全な乱数生成器を使って生成され、操作ごとに固有でなければなりません。ユーザーや暗号化操作をまたいで再使用してはなりません。
Vaulted における ソルト(暗号学) の使われ方
Vaulted のシークレットにパスフレーズを追加すると、Web Crypto API を通じてクライアントサイドでランダムな 16 バイトのソルトが生成されます。このソルトはパスフレーズと 100,000 回のイテレーションと共に PBKDF2 に入力されて AES-KW ラッピング鍵を導出します。ソルトはその後 URL フラグメントに含まれ、受信者のブラウザがパスフレーズから同一のラッピング鍵を再導出できるようにします。パスフレーズを持つ各シークレットは独自の固有ソルトを取得し、異なるシークレットで同じパスフレーズを使っても異なるラッピング鍵が生成されます。