[Protocole RADIUS] calculer "Message-Authenticator Attribute"
Bonjour,
Je suis en train d'essayer de faire un programme en C pour calculer le "Message-Authenticator Attribute" d'une requête RADIUS :
https://www.cisco.com/c/en/us/suppor...-00.html#anc10
=> l'article indique qu'il faut passer en paramètre de la fonction de hashage d'openSSH, les paramètre suivants :
- le secret partagé
- le message (la requête RADIUS en pre-remplissant le "Message-Authenticator Attribute" avec la valeur 0x00)
- le type de hashage : MD5.
J'ai a ma disposition une library pour calculer le MD5 et les fonctions disponibles sont :
- md5Init(MD5_CONTEXT * context)
- md5Update(MD5_CONTEXT * context, uint8_t * data, size_t len)
- md5Final(MD5_CONTEXT * context, uint8_t * result)
Pour calculer le hash d'un fichier, j'ai testé ce code et ça fonctionne :
Code:
1 2 3 4 5 6
|
MD5_CONTEXT context;
uint8_t result[16];
md5Init(&context);
md5Update(&context, file_data, file_len);
md5Final(&context, result); |
Le problème est que maintenant, je n'arrive pas à calculer le bon "Message-Authenticator Attribute". J'ai testé ça :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
memset(&radius_data[MESSAGE_AUTHENTICATOR_OFFSET], 0x00, 16);
MD5_CONTEXT context;
uint8_t result[16];
md5Init(&context);
md5Update(&context, shared_secret, shared_secret_len);
md5Update(&context, radius_data, radius_len);
md5Final(&context, result);
memcpy(&radius_data[MESSAGE_AUTHENTICATOR_OFFSET], result, 16); |
=> j'ai vérifié que le paquet Ethernet généré était correctement structuré mais lorsque je l'envoie à un serveur RADIUS, je vois dans les logs de celui-ci que la valeur de Message-Authenticator est fausse)
Donc j'essaie de comprendre ce que fait exactement la fonction hmac d'openSSL car dans ma library MD5, il n'y a pas le paramètre demandant explicitement de rentrer le secret partagé.
Description du champs Message-Authenticator dans la RFC RADIUS : https://datatracker.ietf.org/doc/htm...9#section-5.14
Donc comment dois-je utiliser ma library pour calculer la bonne valeur ?
Merci d'avance