web-dev-qa-db-ja.com

ハッシュの代わりに暗号化を使用してデータベースにパスワードを保存しないのはなぜですか?

ハッシュは一方向の方法です。ユーザーがパスワードを紛失した場合、サーバーからそのパスワードを取得することはできません。ハッシュの代わりに暗号化を使用してデータベースにパスワードを保存しないのはなぜですか。

1
lasan

ユーザーがデータベースからパスワードを取得できる場合、次のことができるためです。

  • システム/データベース管理者。
  • ユーザーのインターネットアクセスを代行する学校/雇用主/政府。
  • コーヒーショップでWiFiを仕掛けたハッカー。
  • ユーザーの電子メールアカウントを作成したハッカー。
  • サーバーを仕掛けたハッカー。

これらのケースのいくつかでは、アクセスのしやすさは、システムが他のエクスプロイトに対して脆弱かどうかに依存しています。また、ユーザーのパスワードの衛生状態に応じて、損害が悪化または軽減される場合もあります。

ただし、すべてのケースは、ハッシュが完全ではないにしてもほとんどの場合、他の人のパスワードにアクセスしてはならない人をブロックするシナリオを表しています。暗号化はここでは役に立ちません。


また、ユーザーがWebサイトの意図する目的のために、システムから実際のログイン資格情報を取得する必要がないことも注目に値します。ユーザーがパスワードを忘れた場合、システムはそれを安全にリセットまたはnew、既知の値に変更できるメカニズムを提供する必要があります。

上記のすべてのシナリオで、パスワードハッシュに切り替えて、リセット(回復ではなく)プロセスを実装すると、攻撃者はユーザーのアカウントにアクセスできなくなりますか?いいえ。しかし、それは確かに基準を引き上げ、ユーザーへの損害がその1つのアカウントのみに隔離されることを保証します-ユーザーが同じパスワードを使用したすべてのアカウントではありません。

6
Iszi

ユーザーがログインするとき、パスワードが正しいかどうかを知る必要があります。

パスワードをハッシュするということは、パスワードを知る必要はなく、ハッシュだけを知っているということです。ハッシュは一方向であるため、誰かがデータベースを漏らした場合、ハッシュはハッシュだけであり、パスワードを取得するためにすべてをブルートフォースで実行する必要があります。 salt、bcrypt、および多くのラウンドを使用すると、すべてのパスワードを解読することが非常に困難になります。

暗号化は元に戻すことができます。ユーザーがパスワードを送信し、サイトは保存された値を復号化して比較します。問題は、サイトに復号化キーがあることです。誰かがあなたのサイトをハッキングした場合、彼はキーを取得し、すべてのパスワードを簡単に解読します。よくない。

パスワードをクリアテキストにしておくのと同じくらい安全ではありません。

5
ThoriumBR

ハッシュと暗号化の主な利点:

  • webサイトの管理者がパスワードを知らない(Isziの回答を参照)。
  • データベースが侵害された場合、攻撃者がN(10 ^ 4、10 ^ 6、...)の適切にソルト処理されたハッシュからパスワードを取得するよりも、単一の暗号化キーを破る方が簡単です(ThoriumBRの回答を参照)。
  • thatパスワードを忘れたとしても、実際に取得する必要はありません。適切なパスワードリセットメカニズムがあれば十分です。元のパスワードをリセットするのではなく取得したい唯一の理由は、多くのWebサイトで同じパスワードを使用している場合(そしてどこにでもパスワードをリセットする手間をかけたくない場合)ですが、これは really bad ですが、パスワードが非常に強力であってもです。
2
A. Darwin