EAP-MD5計算方法

1、說明

領導要求確認設備進行802.1X認證時,是否直接將用戶名密碼明文傳給交換機。配好端口鏡像、搭好Radius環境後進行了抓包分析。html

 

2、計算

2.1 802.1X認證過程

完整流程以下:編碼

客戶端與交換機間的數據截獲以下,5個數據與上圖描述一致:加密

 

 

2.2 分析場景復現

配置的用戶名密碼爲test/123456,在客戶端發往交換機----Nearest MAC地址01:80:c2:00:00:03,該地址爲保留地址,目的地址該地址表示發送二層廣播包-----的第二和第四個包中發現了用戶名,但未發現密碼。spa

參考網上資料也說密碼是加密的,下邊第二張圖中的EAP-MD5 Value字段的值「51224bd42783bf78e1a5093474122801」便是加密後的密碼。rest

 

2.3 密碼計算

到這已經算完成了領導給的任務:設備將用戶名明文傳給交換機,密碼加密後傳給交換機。code

但處理問題須要追根究底:密碼加密傳輸究竟是怎麼個加密法?你肯定嗎?你能本身把密碼從新計算出來嗎?htm

網上資料來看密碼都是通過以下計算:blog

R = MD5(id||P||C)

「||」是直接拼接在後面的意思,但大多資料都沒說清這幾個值以什麼類型拼接,本身計算時一直算不對,在此總結一下:md5

id----第三個數據包中的id字段值,以一字節長度整型拼接ci

P----密碼,以ASCII碼形式拼接

C----第三個數據包中返回的MD5值,bin十六進制形式。

從上圖能夠看到交換機返回的id爲4,MD5挑戰值爲"9ec74cf5cbaa27781b1c6203766430fe"。而另外在Radius設置的密碼爲123456

編寫如下代碼進行計算:

import hashlib
import binascii

# 我這裏交換機返回的id爲4,注意是整型
id = 4
# 我這裏密碼是123456
password = "123456"
# 我這裏交換機返回的md5鹽值是"9ec74cf5cbaa27781b1c6203766430fe"
challenge = "9ec74cf5cbaa27781b1c6203766430fe"

# 將id轉爲一字節長度整型
id = id.to_bytes(1,"big")
# 將password進行編碼
password = password.encode("ASCII")
# 將challenge改爲bin十六進制
challenge = binascii.a2b_hex(challenge)
# 拼接
con_value = id + password + challenge

# 計算。R = MD5(id||P||C)
md5_value = hashlib.md5(con_value).hexdigest()
pass

計算結果以下,獲得的密碼串爲「51224bd42783bf78e1a5093474122801」,與2.2圖二中的密碼串一致。

 

參考:

https://hal.inria.fr/hal-01534313/document

https://www.jianshu.com/p/b8b2b1b75207

https://www.huawei.com/ilink/en/download/HW_311147?Addr=

相關文章
相關標籤/搜索