web-dev-qa-db-ja.com

塩辛いパスワードでペッパーをどのように使用しますか?

Bcryptなどのハッシュ関数によってパスワードがソルトでソルトされた後、ペッパー(大きな定数)はどのように使用されますか?

Sybex CISSP公式学習ガイド、第8版(2018)から:

塩味のパスワードに唐辛子を追加すると、セキュリティが向上し、解読が難しくなります。

コショウは単にソルト付きパスワードの最初または最後に連結されていますか?それはソルトされたパスワードに連結され、その後再びハッシュされますか?

3

Saltは、辞書攻撃を緩和するために使用されるランダムな文字列です。

+-------+------------+-----------------------+
|  id   |    salt    |       hashed_pw       |
+-------+------------+-----------------------+
| user1 | 9060d63fe0 | hash(pass19060d63fe0) |
| user2 | 39b3cdd660 | hash(pass239b3cdd660) |
+-------+------------+-----------------------+

Pepperは、saltよりも秘密の固定文字列であり、これにより、saltされたパスワードに対するブルートフォース攻撃が軽減されます。

コショウは単にソルト付きパスワードの最初または最後に連結されていますか?それはソルトされたパスワードに連結され、その後再びハッシュされますか?

ピーマンは単純に連結されるべきではありません。なぜなら、それはブルートフォースを不可能にすることを目的としているからです。それもハッシュ化する必要があります。

パスワードabcd1234とソルト9060d63fe0を想定します。これら2つがbcryptでラウンド9でハッシュされている場合、結果は$2a$09$T.FYSHNRG5W.EiS3ieAU/OqdnNLXtou3yZk98/ZJ0Y7JXAoFlVWKSになります。

どういうわけかハッカーがパスワードを強制し、値abcd12349060d63fe0を見つけた場合、ハッカーはソルト値が9060d63fe0であり、パスワードがabcd1234であることを知っています。これはソルトがDBに保存されているためです。

しかし、コショウが適用されていると仮定しましょう。コショウabab4321、パスワードabcd1234、ソルト9060d63fe0。ハッカーがブルートフォースに成功してabab4321abcd12349060d63fe0を見つけた場合、ハッカーはペッパーがどの部分で、パスワードがどれであるかを知ることができません。

ペッパーは、次のようにハッシュする前に適用できます。

+-------+------------+-----------------------------+
|  id   |    salt    |          hashed_pw          |
+-------+------------+-----------------------------+
| user1 | 9060d63fe0 | hash(pepperpass19060d63fe0) |
| user2 | 39b3cdd660 | hash(pepperpass239b3cdd660) |
+-------+------------+-----------------------------+

またはこのようにハッシュした後

+-------+------------+--------------------------------------+
|  id   |    salt    |              hashed_pw               |
+-------+------------+--------------------------------------+
| user1 | 9060d63fe0 | hash(pepper + hash(pass19060d63fe0)) |
| user2 | 39b3cdd660 | hash(pepper + hash(pass239b3cdd660)) |
+-------+------------+--------------------------------------+
5
user186505

ペッパーの使用方法、セキュリティの向上、または「ペッパー」という用語の意味については、一般的に合意されていません。

  • ほとんどのソースは、ペッパーをハッシュに統合する必要があることを示しています。ただし、 Dropbox は、ハッシュではなく暗号化を使用することを明示的に選択しました。これにより、ペッパーを簡単に変更できるようになります。
  • コショウをどこかに保存することをお勧めします。ただし、パスワードとともに少しのデータをハッシュし、それを破棄して、保存せずに これも可能 です。つまり、パスワードを検証する必要がある場合、ペッパーをブルートフォースにする必要があります。保存されていないこのランダムなデータは、コショウとも呼ばれ、保存されている種類と混同されます。
  • ハッシュが危険にさらされるとアプリケーション全体が危険にさらされるため、アプリケーション内に保存すると、ペッパーも危険にさらされると主張する人もいます。これは、ペッパーが実際のセキュリティを提供しないことを意味します。
  • 多くの場合、パスワードのハッシュ関数はソルトをサポートしていますが、ペッパーはサポートしていません。これは、コショウを自分で入れる方法を発明する必要があることを意味します。これは一般的に暗号化では悪い考えであり、 深刻な問題 につながる可能性があります。

結論として、アプリケーションでペッパーを使用する必要があるかどうかについてコンセンサスがあるとは思いません。私が見たほとんどのアプリケーションは、パスワードハッシュアルゴリズムにペッパーを組み込んでいません。

1
Sjoerd

より良い方法は、サーバー側のキーをパスワードハッシュ手順に追加することです。ハッシュする前にパスワードに追加する代わりに、すでに計算されたパスワードハッシュを暗号化できます。

  1. これは必要なときにいつでもキーを交換できます(すべてのパスワードハッシュを復号化し、新しいキーで再暗号化します)。
  2. ペッパーの場合と同じ利点が得られます。攻撃者はキー/ペッパーを取得するためにサーバーで追加の特権を必要とします。ハッシュだけでは機能しません。

キー/ペッパーが秘密のままである限り、ペッパーがパスワードを保護することに注意してください。典型的なシナリオはSQLインジェクションです。

0
martinstoeckli