2010-03-17 11 views
9

Para generar una llave maestra válida por pares para una red WPA2, un enrutador utiliza el algoritmo PBKDF2-HMAC-SHA1. Entiendo que la función sha1 se realiza 4096 veces para derivar el PMK, sin embargo, tengo dos preguntas sobre el proceso.PBKDF2-HMAC-SHA1

Disculpe el pseudo código.

1) ¿Cómo se formatea la entrada a la primera instancia de la función SHA1? SHA1 ("network_name" + "network_name_length" + "network_password")

¿Está formateado en ese orden, es el valor hexadecimal del nombre de la red, la longitud y la contraseña o ASCII directo?

Luego, de lo que deduzco que el resumen de 160 bits recibido se alimenta directamente a otra ronda de hash sin ningún tipo de salazón adicional. De esta manera: SHA1 ("resumen de 160 bits de la última ronda de hash") Levántate y repite.

2) Una vez que esto ocurre 4096 veces, se utilizan 256 bits de la salida como la clave maestra por pares. Lo que no entiendo es que si SHA1 produce una salida de 160 bits, ¿cómo llega el algoritmo a los 256 bits necesarios para una clave?

Gracias por la ayuda.

Respuesta

8

sí esa es la derecha, el algoritmo para generar una clave binaria para una red WPA es:

clave = PBKDF2 (frase de contraseña, SSID, 4096, 256)

PBKDF2 se describe en http://www.ietf.org/rfc/rfc2898.txt

Utiliza el algoritmo HMAC para crear un resumen de la entrada. HMAC puede usar cualquier función hash, aquí la especificación llama a SHA1 como usted mencionó. El hash se realiza en un estado intermedio en el algoritmo HMAC:

H(K XOR opad, H(K XOR ipad, text)) 

(H = la función hash elegido, K es la frase de contraseña, texto sería SSID)

Este proceso HMAC se repite 4096 veces por PBKDF2.

algoritmo HMAC: http://www.ietf.org/rfc/rfc2104

Hay una fuente de ejemplo aquí de derivar una clave:

https://www.codeblog.org/viewsrc/openssl-engine-0.9.6a/crypto/evp/p5_crpt2.c

int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen, 
    80:       unsigned char *salt, int saltlen, int iter, 
    81:       int keylen, unsigned char *out) 

sal es el SSID, pase es la contraseña.