2010-03-17 73 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,传球密码。