¿Cuáles son los requisitos técnicos para una frase de contraseña WPA-PSK?

8

Estaba pensando en generar una frase de contraseña WPA-PSK, y veo en la página de manual de OpenBSD wpa-psk(8):

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

¿Cuál es exactamente el criterio para "codificado en ASCII" aquí? ¿Solo que deben ser caracteres de 8 bits con el bit alto sin configurar? ¿Se permiten caracteres no imprimibles?

Ahora que lo pienso ... ¿Tiene algún sentido mi enfoque de generar aleatoriamente una frase de contraseña? ¿Sería mejor simplemente generar 64 bytes aleatorios y usar eso como clave?

asveikau
fuente

Respuestas:

12

> ¿Cuál es exactamente el criterio para "codificado en ASCII" aquí? ¿Solo que deben ser caracteres de 8 bits con el bit alto sin configurar? ¿Se permiten caracteres no imprimibles?

El acceso protegido de Wi-Fi de Wikipedia dice que la frase de contraseña WPA-PSK tiene de 8 a 63 caracteres ASCII imprimibles , e incluye esta referencia como una nota al pie:

Cada carácter en la frase de paso debe tener una codificación en el rango de 32 a 126 (decimal), inclusive. (IEEE Std. 802.11i-2004, Anexo H.4.1)
El carácter de espacio se incluye en este rango.

> Ahora que lo pienso ... ¿Tiene algún sentido mi enfoque de generar aleatoriamente una frase de contraseña? ¿Sería mejor simplemente generar 64 bytes aleatorios y usar eso como clave?

> Creo que todavía generaré 256 bits usando un RNG seguro ...

¿Su enrutador inalámbrico y cada dispositivo que desea conectar a su red inalámbrica le permiten ingresar manualmente la clave WPA-PSK como 64 caracteres hexadecimales? De lo contrario, es posible que deba usar una frase de contraseña ASCII para poder ingresarla en todos sus dispositivos.

Bavi_H
fuente
De RFC2898 citado por @studiohack: en todo este documento, una contraseña se considera una cadena de octetos de longitud arbitraria cuya interpretación como una cadena de texto no está especificada. Sin embargo, en aras de la interoperabilidad, se recomienda que las aplicaciones sigan algunas reglas comunes de codificación de texto. ASCII y UTF-8 [27] son ​​dos posibilidades. (ASCII es un subconjunto de UTF-8.)
asveikau
Además, parece que OpenBSD, Linux, Windows y Mac OS X son compatibles con el uso de claves hexadecimales. El único problema que he encontrado es que la interfaz de usuario de Maemo no le gusta, pero el archivo XML que respalda la configuración lo admite.
asveikau
OK, veo la parte de 802.11i-2004 que dice eso. Tienes razón.
asveikau
1

De http://www.xs4all.nl/~rjoris/wpapsk.html - "Cálculo de clave WPA - De frase de contraseña a clave hexadecimal Detalles del cálculo":

Para el cifrado WPA-PSK, la clave binaria se deriva de la frase de contraseña de acuerdo con la siguiente fórmula:

La función PBKDF2 es un método estandarizado para derivar una clave de una frase de contraseña. Se especifica en RFC2898 con una explicación clara sobre cómo calcularlo. La función necesita una función pseudoaleatoria subyacente. En el caso de WPA, la función subyacente es HMAC-SHA1. SHA1 es una función que calcula un hash de 160 bits a partir de una cantidad arbitraria de datos de entrada. Se explica claramente en RFC3174. HMAC es un método estandarizado para convertir una función hash criptográfica en una función de autenticación de mensaje con clave. Se especifica en RFC2104.

Para resumir, el proceso de derivación de claves implica iterar una función HMAC-SHA1 4096 veces, y luego hacer eso nuevamente para producir más bits clave. La cantidad de cálculo involucrada es equivalente a calcular el hash SHA1 sobre 1 MByte de datos. Quizás eso explica por qué el Javascript en esta página es tan lento.

En cuanto a su pregunta: 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?cualquiera de los dos sería muy fuerte, siempre que utilizara todo tipo de símbolos, números y caracteres alfabéticos aleatorios en su frase de contraseña de bytes aleatorios. A mi modo de verlo: ambos (generados o aleatorios) serían imposibles de adivinar / piratear ...

studiohack
fuente
1
Hm. Entonces, según mi lectura del RFC, la función PBKDF2 no depende de que sea caracteres ASCII imprimibles, y debería funcionar bien con datos binarios. Creo que todavía generaré 256 bits usando un RNG seguro ... (aunque no estoy tan seguro de que sea imposible de adivinar. Hay pequeñas probabilidades de que esto termine generando algo que choca con un débil frase de contraseña.: P)
asveikau