3

WPA ハンドシェイク パケットの MIC を計算しようとしましたが、残念ながら失敗しました。より正確には、802.1x パケットを使用しました (仕様にあるように)。

MIC = HMAC_MD5(MIC Key, 16, 802.1x data)

これは関連するコードです:

mic = hmac.new(ptk[0:16],data)
print "mic: " + mic.hexdigest()  + "\n"

hmac.new は hmac lib から取得されます。

import hmac,hashlib,binascii

暗号化のキーは、明らかにペアワイズ一時キー (いわゆるキー確認キー) の最初の 16 バイトで構成されます。PTK は、cowPatty というプログラムによって確認されます。したがって、これら2つの要因が間違っていることを除外できます。これは私の 802.1x データで、16 進値 0103 によって導入されます。

01030077fe010a001000000000000000
01ae11df37f5fb100665ce0c849f5950
c0e7901da3224ddfc9e9434babad5512
73000000000000000000000000000000
00000000000000000000000000000000
00e8b4b90bfc3fd97b657afeb66262ae
940018dd160050f20101000050f20201
000050f20401000050f202

Wireshark が計算する MIC は次のとおりです。

e8b4b90bfc3fd97b657afeb66262ae94

私が計算するMICは次のとおりです。

5492624bb538b52d6aa6261c692bd595

残念ながら、私が何をしようと、同じ MIC を計算することはできません。専門家の誰かが貴重な情報を提供してくれるかもしれません。

よろしくお願いします!

4

1 に答える 1

6

以下は、4 ウェイ ハンドシェイクの 2 番目のメッセージからの EAPOL データ (論理リンク制御の直後から開始) です。

unsigned char eapol[] =
{
    '\x01',        // Version
    '\x03',        // Type
    '\x00','\x77', // Length
    '\xfe',        // Key Descriptor Type
    '\x01','\x0a', // Key information
    '\x00','\x10', // Key length
    // Replay counter
    '\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x01',
    // WPA Key Nounce
    '\x77','\xd6','\x54','\xad','\x0c','\x1f','\xea','\x2f',
    '\x20','\x99','\xf1','\xdd','\x1c','\xae','\xdb','\xd8',
    '\xf7','\xe8','\x86','\xb0','\x81','\x60','\xed','\x7f',
    '\x70','\xdd','\xbb','\x33','\xb6','\xf1','\xd9','\x98',
    // Key IV
    '\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
    '\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
    // Key RSC
    '\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
    // Key ID
    '\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
    // MIC **************** CHANGE HERE ********************
//  '\x0a','\x62','\x24','\x07','\x11','\x36','\xd5','\x67',
//  '\x87','\xc0','\x7b','\x82','\x6b','\x06','\xf7','\xff',
    '\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
    '\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
    // Key Data Length
    '\x00','\x18',
    // Key Data
    '\xdd','\x16','\x00','\x50','\xf2','\x01','\x01','\x00',
    '\x00','\x50','\xf2','\x04','\x01','\x00','\x00','\x50',
    '\xf2','\x04','\x01','\x00','\x00','\x50','\xf2','\x02'
};

MIC フィールドの 16 バイトを「\x00」に置き換えると、有効な EAPOL データが Michael アルゴリズムに対して計算できるようになります。

また、WPA バージョンに基づいた正しいアルゴリズムを使用していることを確認してください。Aircrack-ng のソースでわかるように、WPA1 は MD5 ハッシュ関数で HMAC を使用し、WPA2 は SHA1 ハッシュで HMAC を使用します。

if (ap->wpa.keyver == 1)
    HMAC(EVP_md5(), ptk[j], 16, ap->wpa.eapol, ap->wpa.eapol_size, mic[j], NULL);
else
    HMAC(EVP_sha1(), ptk[j], 16, ap->wpa.eapol, ap->wpa.eapol_size, mic[j], NULL);

Python は HMAC オブジェクトでデフォルトで MD5 を使用していると思います。

于 2013-05-26T09:36:03.207 に答える