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 :
Le problème est que maintenant, je n'arrive pas à calculer le bon "Message-Authenticator Attribute". J'ai testé ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 MD5_CONTEXT context; uint8_t result[16]; md5Init(&context); md5Update(&context, file_data, file_len); md5Final(&context, result);
=> 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)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
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
Partager