web-dev-qa-db-ja.com

パスワードにペッパーを使用することは、ケルコフスの原則に違反しますか?

Kerckhoffs's 2番目の原則:

「秘密にする必要はなく、敵の手に落ちても問題ありません。」

コショウはどこかに(コード/サーバー)秘密に保管されていると考えられているため、パスワードにコショウを使用することはこの原則に違反しますか?

2
AleksanderRas

いいえ。原則は、 "暗号のセキュリティがアルゴリズムの機密性"に依存してはならないことを意味します。入力は秘密にすることができます。これには、キー、プレーンテキスト、パスワードが含まれます。


人によって「コショウ」という名前はさまざまなことを指します。少なくとも3つは知っています。その原則に違反する者はいません。最初の2つはセキュリティに悪影響を与えません。

  1. パスワードのハッシュとソルトの暗号化に使用されるキー。
  2. パスワードデータベースの外部に保存される2番目のソルト。
  3. ランダムに生成され、どこにも保存されない2番目のソルト。サーバーとパスワードクラッカーは、パスワードストレッチング手順の一部として、総当たり攻撃を行うことになっています。

定義1はセキュリティを損なわない。これの利点は、キーを秘密にしておくことができれば、オフラインでのクラッキングを防止できることです。

キーはHSMに存在する可能性があります。これは、多くの攻撃に耐性のある追加の防御層を意味します。

最悪の場合、このような暗号化を使用することは、ハッシュを暗号化せずに格納することと同じです。セキュリティは低下しません。 (まるでディスク全体の暗号化を使用しても機密性は低下しません)。


2つは、通常のソルトパスワードハッシュよりも安全です。このコショウが予測不可能である場合(秘密のままであり、ブルートフォースにすることはできません)、オフラインでのクラッキングを防止します。ハッカーがデータの一部のみに読み取り専用アクセスを取得する特定のコンテキストで1つのソルトを使用するよりも優れています。

この方法の以前の正当化は、ハッカーがアクセスできる唯一のタイプのアクセスがデータベースダンプまたはSQLインジェクションである場合、追加の防御層を提供することでした。そのコンテキスト外では意味がありませんが、セキュリティを損なうことはありません。


3つは原則に違反しませんが、元のパスワードストレッチアルゴリズムの実行時間を長くするだけでは劣ります。 (サーバーに複数回実行させるのではなく)

たとえば、scryptを使用すると、安全性が低下します。

5
Future Security