ハッシュとパスワードの保護方法についてはよく読みましたが、それでも混乱しています。
パスワードがクライアント側でハッシュされている場合、攻撃者が盗聴して使用できるため、役に立たないのではないでしょうか。
パスワードがサーバー側でハッシュ化されている場合、プレーンテキストで転送され、攻撃者が盗聴して使用することができますか?
だから私の推論ではすべてのハッシュは役に立たない。誰かがこれがどのように機能するか説明できますか?
データベースが危険にさらされている場合に、ユーザーを保護するためにパスワードハッシュが使用されます。サーバーへのパスワードの送信は、まったく異なるセキュリティシナリオです。
質問の冒頭にあるトラフィックスニッフィングについてのあなたの主張はどちらも正しいです。プレーンテキストでパスワードを送信すると、攻撃者がパスワードを盗聴することができます。クライアント側でハッシュを計算すると、本質的にはハッシュがパスワードになるため、攻撃者はハッシュを盗聴し、代わりにそれを使用できます。
最後に質問に答えるには:
HTTPSはSSL(またはTLS)を使用して、エンドポイント間のセキュリティを提供します。これは本質的に、暗号化されているため、攻撃者がデータを傍受できないことを意味します。また、信頼性も提供されているため、データを注入することもできません。 SSLを使用する場合、サーバーにはその公開鍵を含む証明書があります。証明書は、ブラウザーが信頼するCAによって署名されているため、証明書が正しいことを確認できます。ブラウザがセッションキーを生成し、サーバーの公開キーを使用して暗号化します。サーバーだけが秘密鍵を知っているため、サーバーだけがそれを復号化できます。サーバーとクライアントの両方がセッションキーを知ったら、安全に通信できます。
ISPまたはプロキシは、中間者攻撃を使用して、偽の証明書を提示する可能性があります。その証明書を受け入れると、彼らは会話を復号化し、独自のデータを挿入できます。ただし、証明書が無効であることをブラウザから警告されます。一部の政府は、この目的のために発行された実際の証明書を取得しています。そのため、証明書を検査しない限り、気付かないでしょう。
攻撃者がWPA2パスワードを知っている場合、攻撃者はネットワークに接続できます。これにより、トラフィックを盗聴できます。
状況によっては、パスワードをHTTPS経由で送信し、PBKDF2やbcryptなどの強力な鍵導出アルゴリズムを使用してサーバー側でハッシュします。
多項式が言ったように、ハッシュとは送信されたパスワードを保護することではありません。それは、誰かがあなたのデータベースに侵入した場合、彼らが即座にすべてのパスワードを持っているわけではないようにするためです。
MITM攻撃に関心がある場合は、ナンスを使用することをお勧めします。パスワードを送信したいとします。まず、ランダムな文字列を生成するリクエストをサーバーに送信します。返された文字列を受け取り、hash(pass)を送信する代わりに、hash(hash(pass)+ nonce)を送信します。次に、サーバーはそれを格納されたハッシュ+ナンスと比較して認証します。攻撃者はハッシュをスニッフィングしても、各ナンスは1回限りの使用であるため、ハッシュを再利用することはできません。
パスワードハッシュは、ネットワーク経由で送信されるときのパスワードのセキュリティのためではなく、サーバー上のstorageのためのものです。パスワードをハッシュ化するのは、悪意のあるユーザーがサーバーのファイルやデータベースをのぞき見することが時々(私たちが望むよりも)発生するためです。ネットワーク上で何が起こるかについて、2つのことが必要です。
integrityが必要なのは、認証は常に、後で交換される一部のデータに関連しているためです。攻撃者が MitM attack を実行して、認証が行われるのを待ってから、ライブの「認証された」接続をハイジャックすることは望ましくありません。
機密性が必要なのは、攻撃者が転送中のパスワード、またはパスワードのハッシュさえも観察したくないためです。ホーム」。より一般的には、交換しようとしている機密データを機密に保つことをお勧めします(常にそうであるとは限りませんが、それでもよく起こります)。
[〜#〜] ssl [〜#〜] は両方を提供します。 SSL(Webコンテキストでは [〜#〜] https [〜#〜] と呼ばれます)を使用する場合、接続は変更から保護され、暗号化され、クライアントは適切なサーバーと通信することが合理的に確実です。これらの状況では、パスワードはハッシュを適用せずにクライアントからサーバーに送信できます。これは、ログイン名とパスワードを入力するほとんどのWebサイトでまさにそうなります。サーバーは、データベースのどこかに、ユーザーが送信したパスワードの検証を可能にするデータを保存する必要があります。 thatデータ要素は、ハッシュされたパスワードである必要があります(通常の保護機能:低速ハッシュ、ソルト...)。