Hash 如何从PMK(WPA模拟)计算PTK

Hash 如何从PMK(WPA模拟)计算PTK,hash,wpa,Hash,Wpa,我正在写一个WPA模拟,但我无法计算出从PMK到PTK的转换 我使用openssl库计算了PMK=PBKDF2_HMAC_sha1密码,essid,strlenessid,4096,32。PTK类似于一些散列函数pmk,anouse+snouse+bssid+clientssid,迭代,但在我使用的文本中并不清楚。我试着检查aircrack的源代码,但都有点混乱 谁能告诉我需要哪个散列函数,参数是什么 编辑:找到了一个解决方案。希望这对某人有所帮助,代码转储如下: /* Calculat

我正在写一个WPA模拟,但我无法计算出从PMK到PTK的转换

我使用openssl库计算了PMK=PBKDF2_HMAC_sha1密码,essid,strlenessid,4096,32。PTK类似于一些散列函数pmk,anouse+snouse+bssid+clientssid,迭代,但在我使用的文本中并不清楚。我试着检查aircrack的源代码,但都有点混乱

谁能告诉我需要哪个散列函数,参数是什么

编辑:找到了一个解决方案。希望这对某人有所帮助,代码转储如下:

    /* Calculate PMK */
    pmk = (unsigned char *) error_checked_malloc(sizeof(unsigned char) * PMK_SIZE);
    if(PKCS5_PBKDF2_HMAC_SHA1(passphrase, strlen(passphrase)-1, essid, 
                                            strlen(essid), PMK_ITERATION, PMK_SIZE, pmk) != 0) /* ignore LF or NULL with strlen(passphrase)-1 */
                    {
    if(SHOWPMK || verbosity >= 2)
            printf("\nPMK(#%04d)", num);
    else
            fprintf(stderr, "%s: PKCS5_PBKDF2_HMAC_SHA1 failed on PMK\n", PROG_NAME);

    /* Calculate PTK */
    /* PTK = PRF-X(PMK, "Pairwise key expansion", Min(AA, SA) || Max(AA, SA) || Min(ANonce, SNonce) || Max(ANonce, SNonce)) */

    HMAC(EVP_sha1(), name, 4, somestring, 36, ptk, NULL);
    // PTK[0:16] = KCK
    **************************/

    ptk = (unsigned char *) error_checked_malloc(sizeof(unsigned char) * PTK_SIZE);
    if(HMAC(EVP_sha1(), pmk, PMK_SIZE, pke, PKE_SIZE, ptk, NULL) != 0)
    {
            if(SHOWPTK || verbosity >= 2)
                    printf("\nPTK(#%04d)", num);
            else
                    fprintf(stderr, "%s: HMAC_SHA1 failed on PTK\n", PROG_NAME);

    /* Calculate MIC | PRF-384 CCMP or PRF-512 TKIP */
    if(TKIPFLAG)
            HMAC(EVP_md5(), ptk, PTK_SIZE-4, eapol, eapolsize, kckmic, NULL);
    else
            HMAC(EVP_sha1(), ptk, PTK_SIZE-4, eapol, eapolsize, kckmic, NULL);

两个问题:1你能告诉我们,你是如何用openssl计算PMK的吗?2你正在使用的文本的参考是什么?这是大约两年前的事了。我终于明白了。谢谢好的,没问题,但是如果你已经有了一个解决方案,你能1发布解决方案还是2删除问题?