2010-03-17 19 views
9

Per generare una chiave master pairwise valida per una rete WPA2, un router utilizza l'algoritmo PBKDF2-HMAC-SHA1. Capisco che la funzione sha1 viene eseguita 4096 volte per derivare il PMK, tuttavia ho due domande sul processo.PBKDF2-HMAC-SHA1

Scusa lo pseudo codice.

1) Come viene formattato l'input per la prima istanza della funzione SHA1? SHA1 ("network_name" + "network_name_length" + "network_password")

E 'formattato in questo ordine, è il valore esadecimale del nome della rete, lunghezza e password o ASCII dritto?

Quindi da quello che ho raccolto il digest 160 bit ricevuto viene inserito direttamente in un altro giro di hashing senza alcuna aggiunta di salatura. In questo modo: SHA1 ("Digestione a 160 bit dall'ultimo giro di hashing") Aumenta e ripeti.

2) Una volta eseguita questa operazione, 4096 volte 256 bit dell'uscita vengono utilizzati come chiave master a coppie. Quello che non capisco è che se SHA1 produce output a 160 bit, in che modo l'algoritmo arriva ai 256 bit richiesti per una chiave?

Grazie per l'aiuto.

risposta

8

sì che è di destra, l'algoritmo per generare una chiave binaria per una rete WPA è:

key = PBKDF2 (password, SSID, 4096, 256)

PBKDF2 è descritto in http://www.ietf.org/rfc/rfc2898.txt

Usa l'algoritmo HMAC per creare un digest dell'input. HMAC può usare qualsiasi funzione di hash, qui la specifica chiama SHA1 come hai menzionato. L'hash è fatto su uno stato intermedio all'interno HMAC:

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

(H = funzione hash scelta, K è la frase, testo sarebbe SSID)

Questo processo HMAC è ripetuto 4096 volte da PBKDF2.

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

C'è una sorgente di esempio qui di derivare una chiave:

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) 

sale è l'SSID, passaggio è la password.