オープンチャネルを介した送信中のパスワード保護(パート1)

認証にhttpsを使用することは、長い間良い習慣でした。 ただし、証明書を購入する必要があるため、多くのWebリソース所有者がまだ認証にオープンチャネルを使用しており、職場のネットワークにアクセスできる攻撃者によってアクセスパスワードが傍受される可能性があります。 一般にhttpsを使用しても、送信トラフィックの傍受に対する保護は保証されないことに注意してください。 現在、企業ネットワーク上のhttpsトラフィックを正常に読み取ることができる特別なプロキシとドメインポリシーの使用に基づくソリューションがあります。 さらに、パスワードを傍受から保護する方法について。



今はどうですか? 最も典型的な状況は、サーバーがユーザーパスワードH(pwd)をハッシュデータベースに保存し、認証プロセス中にユーザーからパスワードを受信し、ハッシュを計算して標準と比較することです。 パスワード自体ではなく、パスワードハッシュ値をデータベースに保存すると、悪意のある管理者またはサードパーティの違反者による認証データの盗難から身を守ることができます。 ただし、これにもかかわらず、認証中は毎回、パスワードは通信チャネルのクリアチャネルで送信されます。 また、パスワードを傍受すると、攻撃者は対応するアカウントにフルアクセスできます。 パスワードの傍受を防ぐために、 ダイジェスト認証メカニズムが考案されました。 理解しやすいように、アルゴリズムを少し単純化しました。 各セッションで、サーバーはランダムなRndをクライアントに送信し、クライアントは応答としてH(Rnd + H(pwd))を送信します。 その結果、インターセプトは攻撃者に何も与えませんが、今では弱点があります-サーバーデータベースです。 データベースまたはパスワードハッシュに保存されているパスワードを使用すると、認証に必要なクライアントの応答を再作成できます。 このようなデータベースの盗難は、認証メカニズムのセキュリティに対する深刻な脅威になります。



以下は、追加の脅威を作成せずに、送信されたパスワードが傍受されるのを防ぐ方法の例です。 同時に、小さな変更はサービスにのみ影響し、ユーザーには影響しません。



だから:

  1. サーバーは、クライアントH(pwd)のパスワードハッシュをデータベースに保存します。
  2. クライアントはログインをサーバーに送信します。
  3. サーバーは、クライアントのH(pwd)で暗号化されたランダムなRnd番号をクライアントに送信します。
  4. クライアントはパスワードを使用してランダムなRnd番号を計算し、ランダムなRnd番号を使用してpwdパスワードを暗号化し、サーバーに送信します。
  5. サーバーは、乱数Rndを使用してクライアントパスワードを復号化し、パスワードハッシュを計算して標準と比較します。


画像

理解しやすい人のために、コードを読むことはです。 PHPのサーバー側。 クライアント-Javascript。 また、 デモを見ることができます。 Chrisa Venessライブラリ上に構築されたAES暗号化

もちろん、このソリューションは万能薬ではなく、httpsを使用する方法がない場合にのみ使用するのが理にかなっています。 ただし、説明されているアルゴリズムを使用すると、送信されたパスワードがスニッフィングおよびMitM攻撃から保護されます。



パート2



All Articles