web-dev-qa-db-ja.com

WindowsがWi-Fiパスワードをリバーシブル形式で保存するのはなぜですか?

ランニング

netsh wlan export profile key=clear

powerShellでは、現在保存されているWi-Fi設定(パスワードを含む)を、現在あるディレクトリ内のxmlファイルにダンプします。

Windowsが資格情報を可逆形式で保存するのはなぜですか?ハンドシェイクを完了して接続を確立するためにアクセスポイントに送信するパスワードのハッシュを保存しないのはなぜですか?

65
Wazanator

tl; dr-Windowsはパスワードマネージャーとして機能し、すべてのパスワードマネージャーと同様に、管理するパスワードを記憶する必要があります。おそらく、サーバーがパスワードの代わりにハッシュを格納することになっていることを考えているでしょう。その戦略はここでは適用されません。

@ forestの回答 は、重要な警告を示しています。つまり、ワイヤレスネットワークがパスワードをハッシュすることから始まる特定のプロトコルを常に使用する場合、 WPA2、次にWindows couldプロトコル固有のハッシュを優先して、元のパスワードを忘れます。


Windowsが資格情報を可逆形式で保存するのはなぜですか?ハンドシェイクを完了して接続を確立するためにアクセスポイントに送信するパスワードのハッシュを保存しないのはなぜですか?

ここでは、Windowsが2つの異なる役割を果たしています。

  1. パスワードマネージャ:
    Windowsはネットワークパスワードを記憶できます。これを行うと、パスワードマネージャーとして機能します。他のパスワードマネージャと同様に、管理するパスワードを保存する必要があります。

  2. クライアント:
    Windowsは、パスワードを知っていることをWiFiネットワークに納得させる必要があります。これを行うには、パスワードを知っている必要があります。

Windowsがパスワードを保存することを心配している場合は、パスワード管理機能の使用を停止するだけで済むようです。ただし、ログインするために電子メールパスワードを電子メールポータルに提供する必要があるのと同様に、ネットワークにログインするには、Windowsにネットワークパスワードを提供する必要があります。


注:あなたが考えているアドバイスは、クライアントではなくサーバーに適用されます。

あなたはおそらくserverが平文のパスワードを覚えるべきではなく、それらのハッシュを覚えるべきであるということを考えているでしょう。 Windowsはサーバーではないので、ここでは当てはまりません。

あなたはcan必要に応じてWiFiパスワードをハッシュしますが、ハッシュされたパスワードは新しいパスワードになります。これは基本的に、キー導出関数を使用してWiFiパスワードを生成するのと同じです。


例外:プロトコル固有のハッシュは保持できます。

上記の回答は一般的なケースのプロトコル用に書かれています。

ただし、一般的なワイヤレスプロトコルであるWPA2などの特定のプロトコルでは、パスワードをハッシュ化する必要があります。ネットワークが常にすべてのアクセスポイントと時間にわたってWPA2のような特定のプロトコルを使用すると想定する場合、そのハッシュを保持するだけで元のパスワードを忘れることがあります。

ハッシュのみを保持することの問題は、それがプロトコル固有のネットワークパスワードと同じくらいネットワークパスワードではないことです。これは、ネットワークがWPA3に更新された場合、または古いWPAアクセスポイントなどの範囲に入った場合に、1つのプロトコルでハッシュだけを保持するクライアントが機能しなくなることを意味します。

121
Nat

パスワードは決してsentです。ハッシュ化され、そのハッシュが(間接的に)暗号化に使用されます

パスワードは、256ビットの出力とESSID(ネットワーク名)から派生したソルトを使用して PBKDF2 -HMAC-SHA1と呼ばれるアルゴリズムを介して渡すことができ、生の256ビットキーであるPSKを生成します。このPSKは、クライアントとルーター間で 4-Way Handshake と呼ばれる、ランダムなセッションごとのデータ暗号化キーが交換されるハンドシェイクを暗号化するために使用されます。認証にも使用されます。

Windowsがパスワードではなく生のPSKを保存しないのは、ユーザーエクスペリエンスを向上させるためです。ネットワークに新しいデバイスを追加するときに誰かが自分のパスワードを知らない場合は、ルーターの管理パネルに接続しなくても、Windowsでパスワードを表示できます。パスワードを元に戻せない形式で保存するのは サーバーに便利 であり、パスワードのデータベースが大量に盗まれるリスクがあります。単なる個人用Wi-Fiパスワードの場合、このリスクはそれほど顕著ではありません。

これはWPA2-PSKにのみ適用されることに注意してください。他のWi-Fi暗号化標準があり、WPA2ラベルの下でも、オンザフライでキーをネゴシエートできるWPA2-EAPなどの事前共有パスワードを使用していません。


これが可能であることを示すために、これはLinuxで wpa_passphrasesedコマンドを使用して、元のパスワードのプレーンテキストのコピーを含むコメント行を削除します。

$ wpa_passphrase MyNetworkName MySecretPassword | sed '/^\s*#/d'
network={
    ssid="MyNetworkName"
    psk=652f56f4a475711020fe175020912964f30bede1de36e7c08ed9da7eaf6d68c2
}

元のパスフレーズを含むコメント化された行は削除されました。このPSKが盗まれた場合、攻撃者が元のパスワードを盗んだ場合と同じ機能を攻撃者に与えることに注意することが重要です。保存されたセッションを復号化し、アクセスポイントに対して認証できます。ただし、元のパスワード自体はわからないため、他の場所で使用されている場合に役立ちます(悪い考えです)。

35
forest

Windowsがこの情報を可逆形式で保存する理由は、後でOSが読み取れるようにするためだと思います。

とにかく設定からWiFiキーを読み取ることができます。これは、ネットワークに参加するためにワイヤレスキーが何であるかを友達に教えるのに役立つ人もいます。 (Windows 10には、キーをプレーンテキストで連絡先に共有する「wifiセンス」と呼ばれる機能がありました。情報 ここ

これがセキュリティの問題であることはわかりません。キーを持つマシンにアクセスできる誰かがすでにネットワークに接続しているため、ハッシュされたキーにしかアクセスできない場合でも、それを使用してネットワークに認証できます。 。

個人的には、最初にwifiキーを持っている唯一の理由は、WPA2を有効にすることです。どうやら、暗号化と認証は別のプロセスであるため、WPA3には必要ありません。

0
bobsburner