2010-03-17 108 views
9

要生成WPA2網絡的有效成對主密鑰的路由器使用PBKDF2-HMAC-SHA1算法。我知道sha1函數執行4096次來派生PMK,但是我有兩個關於這個過程的問題。PBKDF2-HMAC-SHA1

藉口僞代碼。

1)如何被輸入到SHA1函數的第一個實例格式化? SHA1(「網絡名」 +「network_name_length」 +「network_password」)

是它的順序格式,它是網絡名稱,長度和密碼,或者直接的ASCII的十六進制值?

然後從我收集了160位的摘要收到送入直接進入另一輪沒有任何額外的鹽析散列的。像這樣:SHA1(「上一輪哈希的160位摘要」)上升和重複。

2)一旦發生這種情況的輸出的4096個256比特用作成對主密鑰。我不明白的是,如果SHA1產生160bit的輸出,請問該算法在一個鍵所需的256位到達?

感謝您的幫助。

回答

8

耶這就是正確的,則該算法以產生用於WPA網絡的二進制鍵是:

鍵= PBKDF2(密碼,SSID,4096,256)

PBKDF2在http://www.ietf.org/rfc/rfc2898.txt

描述它使用HMAC算法創建輸入的摘要。 HMAC可以使用任何散列函數,這裏的規範要求您提到SHA1。散列是HMAC算法內上形成的中間狀態進行:

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

(H =所選擇的散列函數,K是密碼短語,文本將是SSID)

該HMAC處理通過重複4096次PBKDF2。

HMAC算法:http://www.ietf.org/rfc/rfc2104

這裏有一個導出密鑰的來源例如:

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) 

鹽是SSID,傳球密碼。