为什么 Windows 以可逆格式存储 Wi-Fi 密码?

信息安全 密码 视窗 无线上网
2021-09-05 08:50:45

跑步

netsh wlan export profile key=clear

在 PowerShell 中,会将您当前存储的 Wi-Fi 设置(包括密码)转储到您当前所在目录中的 xml 文件中。

为什么 Windows 会以可逆格式存储凭据?为什么它不只是存储它发送访问点以完成握手和建立连接的密码哈希?

3个回答

tl;dr - Windows 充当密码管理器,并且像所有密码管理器一样,它必须记住它管理的密码。您可能正在考虑服务器应该存储哈希而不是密码的事情;该策略不适用于此处。

@forest 的回答表明了一个主要警告——如果我们假设无线网络将始终使用以散列密码开始的特定协议,例如 WPA2,那么 Windows可能会忘记原始密码,转而使用特定于协议的散列。


为什么 Windows 会以可逆格式存储凭据?为什么它不只是存储它发送访问点以完成握手和建立连接的密码哈希?

Windows 在这里扮演两个不同的角色:

  1. 密码管理器:
    Windows 可以为您记住网络密码。当它执行此操作时,它充当密码管理器。与任何其他密码管理器一样,它必须存储它管理的密码。

  2. 客户端:
    Windows 必须让 WiFi 网络相信它知道您的密码。为此,它必须知道您的密码。

如果您担心 Windows 会存储您的密码,那么您似乎可以停止使用其密码管理功能。但是,您仍然需要向 Windows 提供网络密码才能登录网络,就像您必须向电子邮件门户提供您的电子邮件密码才能登录一样。


注意:您正在考虑的建议适用于服务器,而不是客户端。

您可能正在考虑服务器不应该记住明文密码,而应该记住它们的哈希值的事情。这不适用于这里,因为 Windows 不是服务器。

如果愿意,您可以散列 WiFi 密码,但散列后的密码将成为新密码。这基本上与使用密钥派生函数生成您的 WiFi 密码相同。


例外:可以保留特定于协议的哈希。

上面的答案是为一般情况协议编写的。

但是,特定协议可能需要对密码进行哈希处理,例如在流行的无线协议 WPA2 中。如果我们假设网络将始终在所有接入点和时间上使用 WPA2 等特定协议,那么如果我们只保留该哈希值,我们就可以忘记原始密码。

只保留散列的问题在于它不是网络密码,而是协议特定的网络密码也就是说,如果网络更新到 WPA3,或者如果它们进入较旧的 WPA 接入点的范围等,则仅在一个协议下保留哈希的客户端将中断。

永远不会发送密码它是散列的,并且该散列用于(间接)加密。

密码可以通过称为PBKDF2 -HMAC-SHA1 的算法传递,该算法具有 256 位输出和从 ESSID(网络名称)派生的盐以生成 PSK,即原始 256 位密钥。此 PSK 用于验证客户端和路由器之间的握手,称为4-Way Handshake,其中派生了随机的每个会话数据加密密钥。

Windows 不存储原始 PSK 而不是密码的原因是为了更好的用户体验。如果有人在将新设备添加到网络时不知道他们的密码,他们可以在 Windows 上查看它,而无需连接到路由器的管理面板。以不可逆的格式存储密码对于存在密码数据库被大量窃取的风险服务器非常有用对于单纯的个人 Wi-Fi 密码,这种风险要小得多。

请注意,这仅适用于 WPA2-PSK。还有其他的 Wi-Fi 加密标准,即使是在 WPA2 标签下,也不使用任何类型的预共享密码,例如可以即时协商密钥的 WPA2-EAP。


为了证明这是可能的,可以在 Linux 上使用wpa_passphrase. 我们将使用该sed命令删除注释行,其中包含原始密码的明文副本:

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

被注释掉的包含原始密码的行已被删除。重要的是要知道,如果这个 PSK 被盗,攻击者将获得与窃取原始密码相同的能力。他们将能够解密存储的会话并对您的接入点进行身份验证。但是,他们不会知道原始密码本身,如果在其他地方使用它可能会很有用(一个坏主意)。

我猜想windows以可逆格式存储这些信息的原因是为了以后可以被操作系统读取。

无论如何,您都可以从设置中读取 WiFi 密钥,有些人认为这有助于告诉他们的朋友无线密钥是什么,以便他们可以加入网络。(Windows 10 曾经有一个名为“wifi sense”的功能,它以明文形式将您的密钥分享给您的联系人。信息在这里

我不明白这是一个安全问题,因为无论如何都可以访问具有密钥的机器的人已经在网络上,即使他们只能访问散列密钥,他们也可以使用它来验证网络.

就个人而言,我首先拥有 wifi 密钥的唯一原因是启用 WPA2。显然,WPA3 不再需要它,因为加密和身份验证是单独的过程。