Bcryptなどのハッシュ関数によってパスワードがソルトでソルトされた後、ペッパー(大きな定数)はどのように使用されますか?
Sybex CISSP公式学習ガイド、第8版(2018)から:
塩味のパスワードに唐辛子を追加すると、セキュリティが向上し、解読が難しくなります。
コショウは単にソルト付きパスワードの最初または最後に連結されていますか?それはソルトされたパスワードに連結され、その後再びハッシュされますか?
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)) |
+-------+------------+--------------------------------------+
ペッパーの使用方法、セキュリティの向上、または「ペッパー」という用語の意味については、一般的に合意されていません。
結論として、アプリケーションでペッパーを使用する必要があるかどうかについてコンセンサスがあるとは思いません。私が見たほとんどのアプリケーションは、パスワードハッシュアルゴリズムにペッパーを組み込んでいません。
より良い方法は、サーバー側のキーをパスワードハッシュ手順に追加することです。ハッシュする前にパスワードに追加する代わりに、すでに計算されたパスワードハッシュを暗号化できます。
キー/ペッパーが秘密のままである限り、ペッパーがパスワードを保護することに注意してください。典型的なシナリオはSQLインジェクションです。