2. Définition de HMAC (Definition of HMAC)
La définition de HMAC nécessite une fonction de hachage cryptographique (notée H) et une clé secrète K. Nous supposons que H est une fonction de hachage cryptographique qui hache des données en itérant une fonction de compression de base sur des blocs de données. Nous notons B la longueur en octets de tels blocs (pour tous les exemples de fonctions de hachage ci-dessus, B=64), et L la longueur en octets de la sortie de hachage (L=16 pour MD5, L=20 pour SHA-1). La clé d'authentification K peut être de n'importe quelle longueur jusqu'à B (la longueur de bloc de la fonction de hachage). Les applications utilisant une clé de plus de B octets hacheront d'abord la clé en utilisant H, puis utiliseront la chaîne de L octets résultante comme clé réelle de HMAC. Dans tous les cas, la longueur minimale recommandée pour K est de L octets (la longueur de sortie du hachage). Pour plus d'informations sur les clés, voir la section 3.
Nous définissons deux chaînes fixes et distinctes ipad et opad comme suit ('i' et 'o' sont des mnémotechniques pour inner et outer) :
ipad = the byte 0x36 repeated B times
opad = the byte 0x5C repeated B times
Pour calculer le HMAC sur les données text, nous effectuons :
H(K XOR opad, H(K XOR ipad, text))
c'est-à-dire :
- Ajouter des zéros à la fin de K pour créer une chaîne de B octets (par exemple, si la longueur de K est de 20 octets et B=64, alors 44 octets de zéros 0x00 seront ajoutés à K)
- Faire un XOR (ou exclusif bit à bit) de la chaîne de B octets calculée à l'étape (1) avec ipad
- Ajouter le flux de données 'text' à la chaîne de B octets résultant de l'étape (2)
- Appliquer H au flux généré à l'étape (3)
- Faire un XOR (ou exclusif bit à bit) de la chaîne de B octets calculée à l'étape (1) avec opad
- Ajouter le résultat de H de l'étape (4) à la chaîne de B octets résultant de l'étape (5)
- Appliquer H au flux généré à l'étape (6) et produire le résultat
À titre indicatif, un exemple de code basé sur MD5 est fourni en annexe.