PBKDF2-HMAC-SHA1
要生成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位到达?
感谢您的帮助。
耶这就是正确的,则该算法以产生用于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,传球密码。