EAP-MD5 認証をサポートする RADIUS サービスを実装しているので、RFC 3579 を読んでいます。残念ながら、特に Message-Authenticator を計算しようとすると、RFC を解釈する方法が少しわかりません。
私は基本的に HMAC-MD5 オブジェクトを作成します (私は C# を使用しています) キーに NAS の共有シークレットを使用し、タイプ (1 バイト) + 識別子 (1 バイト) + 長さ (2 バイト) + 要求オーセンティケーター (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);
どんな助けでも大歓迎です。