RADIUS : Remote Authentication Dial-In User Service
Le protocol RADIUS
Pourquoi UDP ?
Pour un protocol d'authentification, on aurai pu s'attendre à voir TCP, et pourtant c'est le protocol UDP qui est utilisé, voici les raisons de ce choix :
- UDP permet la réémission d’une demande d’authentification à un serveur secondaire si le serveur primaire ne répond pas
- RADIUS est un protocol sans état.
- UDP simplifie la mise en œuvre du serveur.
- RADIUS n’exige pas une détection "sensible" de la perte de donnée
Les principaux types de paquets
Il existe 4 types de paquets pour effectuer une authentification RADIUS :
Access-Request
Envoyé par le NAS contenant les informations sur le client qui souhaite se connecter (login/mot de passe, adresse MAC...)
Access-Accept
Envoyé par le serveur pour autorisé la connexion si la vérification des informations est correct.
Access-Reject
Envoyé par le serveur pour refuser une connexion en cas d’échec de l’authentification ou pour mettre fin à une connexion.
Access-Challenge
Envoyé par le serveur pour demander la réémission dun access-request ou des informations complémentaires.
Le format des trames

Code (1 octet):
Le code permet de définir le type de trame dont il s'agit, voici quelques types de tames :
1 : access-request
2 : access-accept
3 : access-reject
4 : accounting-request
5 : accounting-response
11 : access-challenge
Identifier (1 octet) :
L'identifier est unique pour chaque authentification, cependant il est identique en cas de retransmission.
Length (2 octets) :
Ce champ contient la taille total du message (de 20 à 4096 octets), cette taille prend en compte également le code et l'identifier, et non pas seulement ce qui suit le champ length.
Request Authenticator (16 octets):
Ce champ contient un nombre aléatoire unique, il servira au client RADIUS pour s'assurer que c'est bien le serveur RADIUS qui lui à répondu.
Response Authenticator (16 octets):
Ce champ est généré de la façon suivante :
MD5 (Code + ID + Length + RequestAuth + Attributes + Secret)
Le fait d'utiliser le Secret permet d'assurer que le client et le serveur RADIUS utilisent bien le même secret, et l'utilisation du RequestAuth permet d'assurer au client que la réponse du serveur correspond bien à sa requête.
Les attributs

Type (1 octet):
Il existe de nombreux attributs, en voici quelques exemples :
1 : User-Name
2 : User-Password
3 : CHAP-Password
4 : NAS-IP-Address
5 : NAS-Port
6 : Service-Type...
Length (1 octets):
Taille total du message (max 254 octets), la aussi le champ length compte le champ type et length.
Value (1-253 octets):
Il existe 5 types de valeurs qui sont autorisés :
text 1-253 octets
string 1-253 octets
address 32 bit
integer 32 bit
time 32 bit
User-Password :
Le mot de passe ne passe pas en claire, il est encodé, pour cela il est coupé en blocks de 16 octets : p1, p2,...
c1 = p1 XOR MD5(Secret + Request Authenticator)
c2 = p2 XOR MD5(Secret + c1)
...
Le mot de passe encodé est la concaténation de : c(1)+c(2)+...