Answers:
> 此处“ ASCII编码”的标准是什么?只是它们必须是未设置高位的8位字符?是否允许使用不可打印的字符?
Wikipedia的Wi-Fi保护访问说WPA-PSK密码短语是8到63个可打印ASCII字符,并将此引用作为脚注包括在内:
密码短语中的每个字符必须具有32到126(十进制)范围内的编码。(IEEE标准802.11i-2004,附件H.4.1)
此范围中包含空格字符。
> 想一想...我随机生成密码短语的方法有意义吗?仅生成64个随机字节并将其用作密钥会更好吗?
> 我想我仍然会使用安全的RNG生成256位...
您的无线路由器和要连接到无线网络的每个设备是否都允许您以64个十六进制字符的形式手动输入WPA-PSK密钥?如果不是,那么您可能必须使用ASCII密码才能在所有设备中输入它。
从http://www.xs4all.nl/~rjoris/wpapsk.html- “ WPA密钥计算-从密码短语到十六进制密钥的计算详细信息”:
对于WPA-PSK加密,二进制密钥是根据以下公式从密码短语派生的:
函数PBKDF2是从密码短语中获取密钥的标准化方法。在RFC2898中对其进行了详细说明,并对其进行了清晰的说明。该函数需要基础的伪随机函数。对于WPA,基本功能是HMAC-SHA1。SHA1是从任意数量的输入数据计算出160位哈希的函数。RFC3174中对此进行了明确说明。HMAC是将密码哈希函数转换为键控消息身份验证功能的标准化方法。在RFC2104中指定。
总而言之,密钥派生过程涉及将HMAC-SHA1函数迭代4096次,然后再次进行此操作以产生更多密钥位。涉及的计算量等同于计算1 MB数据上的SHA1哈希。也许这可以解释为什么此页面上的Javascript这么慢。
关于您的问题:Does my approach of randomly generating a passphrase make any sense? Would it be better to just generate 64 random bytes and use that as a key?
只要您在随机字节密码短语中使用了各种符号,数字和随机字母字符,那么任一种都会非常强大。我的看法:不可能(猜测或破解)它们(生成的或随机的)...