Quais são os requisitos técnicos para uma senha WPA-PSK?

8

Eu estava pensando em gerar uma senha WPA-PSK e vejo na página de manual do OpenBSD wpa-psk(8):

The passphrase must be a sequence of between 8 and 63
ASCII-encoded characters.

Qual é exatamente o critério para "codificado em ASCII" aqui? Só que eles devem ser caracteres de 8 bits com o bit alto desabilitado? Caracteres não imprimíveis são permitidos?

Venha para pensar sobre isso ... Minha abordagem de gerar uma senha aleatoriamente faz algum sentido? Seria melhor gerar apenas 64 bytes aleatórios e usá-lo como chave?

asveikau
fonte

Respostas:

12

> Qual é exatamente o critério para "codificado em ASCII" aqui? Só que eles devem ser caracteres de 8 bits com o bit alto desabilitado? Caracteres não imprimíveis são permitidos?

O Wi-Fi Protected Access da Wikipedia diz que a senha WPA-PSK tem de 8 a 63 caracteres ASCII imprimíveis e inclui esta referência como nota de rodapé:

Cada caractere na frase secreta deve ter uma codificação no intervalo de 32 a 126 (decimal), inclusive. (IEEE Std. 802.11i-2004, anexo H.4.1)
O caractere de espaço está incluído neste intervalo.

> Pense nisso ... Minha abordagem de gerar uma senha aleatoriamente faz algum sentido? Seria melhor gerar apenas 64 bytes aleatórios e usá-lo como chave?

> Acho que ainda gerarei 256 bits usando um RNG seguro ...

O seu roteador sem fio e todos os dispositivos que você deseja conectar à sua rede sem fio permitem inserir manualmente a chave WPA-PSK como 64 caracteres hexadecimais? Caso contrário, talvez você precise usar uma senha ASCII para poder inseri-la em todos os seus dispositivos.

Bavi_H
fonte
Do RFC2898 citado por @studiohack - Ao longo deste documento, uma senha é considerada uma sequência de octetos de comprimento arbitrário cuja interpretação como uma sequência de texto não é especificada. No interesse da interoperabilidade, no entanto, é recomendável que os aplicativos sigam algumas regras comuns de codificação de texto. ASCII e UTF-8 [27] são duas possibilidades. (ASCII é um subconjunto de UTF-8.) #
Asveikau
Além disso, parece que o OpenBSD, Linux, Windows e Mac OS X suportam usando chaves hexadecimais. O único problema que encontrei é que a interface do Maemo não está gostando - mas o arquivo XML que apóia a configuração é compatível.
asveikau
OK, vejo a parte do 802.11i-2004 que diz isso. Você está certo.
asveikau
1

Em http://www.xs4all.nl/~rjoris/wpapsk.html - "Cálculo da chave WPA - da frase secreta à chave hexadecimal Detalhes do cálculo":

Para criptografia WPA-PSK, a chave binária é derivada da senha, de acordo com a seguinte fórmula:

A função PBKDF2 é um método padronizado para derivar uma chave de uma senha. É especificado no RFC2898 com uma explicação clara sobre como calculá-lo. A função precisa de uma função pseudo-aleatória subjacente. No caso do WPA, a função subjacente é HMAC-SHA1. SHA1 é uma função que calcula um hash de 160 bits a partir de uma quantidade arbitrária de dados de entrada. Está claramente explicado no RFC3174. O HMAC é um método padronizado para transformar uma função de hash criptográfico em uma função de autenticação de mensagem com chave. É especificado em RFC2104.

Para resumir, o processo de derivação de chave envolve a iteração de uma função HMAC-SHA1 4096 vezes e, em seguida, novamente para produzir mais bits de chave. A quantidade de computação envolvida é equivalente à computação do hash SHA1 em mais de 1 MByte de dados. Talvez isso explique por que o Javascript nesta página é tão lento.

Quanto à sua pergunta:: 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?Qualquer um deles seria muito forte, desde que você usasse todos os tipos de símbolos, números e caracteres aleatórios do alfabeto na senha do seu bytes aleatórios. A minha maneira de ver: seria impossível adivinhar / hackear os dois (gerados ou aleatórios) ...

studiohack
fonte
1
Hum. Portanto, parece que, com base na minha leitura do RFC, a função PBKDF2 não depende de caracteres ASCII imprimíveis e deve funcionar bem com dados binários. Acho que ainda gerarei 256 bits usando um RNG seguro ... (não tenho tanta certeza de que seria impossível adivinhar. Há pequenas chances de que isso acabe gerando algo que colide com um ponto fraco frase-chave.: P)
asveikau