在实现支持 EAP-MD5 身份验证的 RADIUS 服务时,我一直在阅读 RFC 3579。不幸的是,我有点不确定如何解释 RFC,尤其是在尝试计算 Message-Authenticator 时。
我基本上创建了一个 HMAC-MD5 对象(我正在使用 C#)使用 NAS 的共享密钥作为密钥并连接类型(一个字节)+标识符(一个字节)+长度(两个字节)+请求验证器(16 个字节) + 所有属性(Access-Request 中的 Message-Authenticator 除外)但计算的值与数据包中的值不匹配。
遵循 RFC,这似乎是正确的。我是否正确解释了 RFC?
这是代码:
RadiusPacket packet = Objects.Packet;
byte[] toHMAC;
toHMAC = new byte[1] { (byte)packet.Code };
toHMAC = ByteArray.Combine(toHMAC, new byte[1] { packet.Identifier });
// reversed to match endian of packet
toHMAC = ByteArray.Combine(toHMAC, ByteArray.Reverse(packet.LengthAsBytes));
toHMAC = ByteArray.Combine(toHMAC, packet.Authenticator);
for (int i = 0; i < packet.Attributes.Length; i++)
{
if (packet.Attributes[i].Type != RadiusAttributeType.MessageAuthenticator)
{
toHMAC = ByteArray.Combine(toHMAC, packet.Attributes[i].RawData);
}
}
HMACMD5 md5 = new HMACMD5(Encoding.ASCII.GetBytes(Objects.NAS.SharedSecret));
// this DOES NOT match what is in the received packet...
byte[] hmac = md5.ComputeHash(toHMAC);
任何帮助将非常感激。