zoukankan      html  css  js  c++  java
  • EAP-MD5计算方法

    一、说明

    领导要求确认设备进行802.1X认证时,是否直接将用户名密码明文传给交换机。配好端口镜像、搭好Radius环境后进行了抓包分析。

    二、计算

    2.1 802.1X认证过程

    完整流程如下:

    客户端与交换机间的数据截获如下,5个数据与上图描述一致:

     

    2.2 分析场景复现

    配置的用户名密码为test/123456,在客户端发往交换机----Nearest MAC地址01:80:c2:00:00:03,该地址为保留地址,目的地址该地址表示发送二层广播包-----的第二和第四个包中发现了用户名,但未发现密码。

    参考网上资料也说密码是加密的,下边第二张图中的EAP-MD5 Value字段的值“51224bd42783bf78e1a5093474122801”即是加密后的密码。

    2.3 密码计算

    到这已经算完成了领导给的任务:设备将用户名明文传给交换机,密码加密后传给交换机。

    但处理问题需要追根究底:密码加密传输到底是怎么个加密法?你确定吗?你能自己把密码重新计算出来吗?

    网上资料来看密码都是经过如下计算:

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

    “||”是直接拼接在后面的意思,但大多资料都没说清这几个值以什么类型拼接,自己计算时一直算不对,在此总结一下:

    id----第三个数据包中的id字段值,以一字节长度整型拼接

    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=

  • 相关阅读:
    第二章-2、显示/隐藏/切换
    第二章-1、打开链接
    1、创建自定义原件库
    3、常用小例子
    2、快捷键
    IOS开发中(null)与<null>的处理
    iOS UIPageControl的操作,设置圆点大小,显示图片等
    iOS 支付回调区分支付宝和微信的方法
    iOS 字符串的操作,去掉某一个字符或者替换成其他字符
    iOS 判断当前网络状态
  • 原文地址:https://www.cnblogs.com/lsdb/p/10722665.html
Copyright © 2011-2022 走看看