我的wpa_supplicant.conf
看起来像这样:
network={
ssid="Some name"
scan_ssid=1
key_mgmt=WPA-EAP
eap=PEAP
identity="my-user-id"
password="(clear text password here)"
ca_cert="/usr/share/ca-certificates/mozilla/GeoTrust_Global_CA.crt"
phase2="auth=MSCHAPV2"
}
通过 WPA-EAP 和 MSCHAP-v2 的这种特定组合,有没有办法不在此配置文件中包含我的明文密码?
变更日志似乎声称这是可行的(自 2005 年起!):
* added support for storing EAP user password as NtPasswordHash instead
of plaintext password when using MSCHAP or MSCHAPv2 for
authentication (hash:<16-octet hex value>); added nt_password_hash
tool for hashing password to generate NtPasswordHash
一些注意事项:
使用不同的密码不是一种选择,因为我无法控制该网络(这是一个公司网络,并且使用单个用户名/密码来访问所有服务,包括连接到 Wifi)。
关于重复的一句话:
- 40: 使用 wpa-supplicant-without-plain-text-passwords关于预共享密钥
- 74500:wpa-supplicant-store-password-as-hash-wpa-eap-with-phase2-auth-pap使用 PAP 作为第 2 阶段身份验证(不是 MSCHAP-v2)。
- 85757:将密码存储为 wpa-supplicant-conf 中的哈希值与这个问题非常相似,但被(错误地)作为重复的问题关闭74500;不幸的是,对所谓的重复项给出的答案特定于 PAP,并不适用于 MSCHAP-v2 案例。85757本身有一个答案,声称无论协议如何,本质上都是不可能的,但理由是无效的1
1该 anser 声称使用散列密码意味着散列成为密码。这在技术上是正确的,但至少哈希是仅无线网络密码,与泄露授予访问权限的共享密码相比,这是重大进步多种的服务。
答案1
打开终端并输入:
wpa_passphrase YOUR_SSID YOUR_PASSWORD
示例输出:
network={
ssid="YOUR_SSID"
#psk="YOUR_PASSWORD"
psk=6a24edf1592aec4465271b7dcd204601b6e78df3186ce1a62a31f40ae9630702
}
打开该wpa_supplicant.conf
文件并添加以下行:
psk=6a24edf1592aec4465271b7dcd204601b6e78df3186ce1a62a31f40ae9630702
答案2
您可以自行生成NtPasswordHash
(又名 NTLM 密码哈希),如下所示:
echo -n plaintext_password_here | iconv -t utf16le | openssl dgst -md4 -provider legacy
在 wpa_supplicant.conf 文件中添加“hash:”前缀,即
password=hash:6602f435f01b9173889a8d3b9bdcfd0b
在 macOS 上, iconv 代码是UTF-16LE
echo -n plaintext_password_here | iconv -t UTF-16LE | openssl dgst -md4 -provider legacy
请注意,您不会获得太多安全感。如果攻击者找到带有哈希值的文件,那么他们可以轻松地加入网络(就像您的计算机一样),因此对密码进行哈希处理根本没有帮助。如果密码在其他地方使用,那么攻击者将不得不使用暴力来查找原始密码(即尝试最可能的密码并计算其哈希值,直到找到匹配项)。由于您可以在普通 PC 上每秒计算大约 10 亿个哈希值,因此这不是一个大障碍,并且攻击者可以轻松使用预先计算的表,因为哈希值是未加盐的。 NT 作为密码哈希算法确实很糟糕。