Sobes.tech
Middle

Qu'est-ce que HMAC et comment est-il utilisé?

sobes.tech IA

Réponse de l'IA

HMAC (Code d’authentification de message basé sur une fonction de hachage) est un mécanisme permettant de vérifier l’intégrité et l’authenticité d’un message en utilisant une clé secrète et une fonction de hachage cryptographique.

Algorithme de fonctionnement :

  1. Formation de clés internes et externes à partir de la clé secrète et de constantes (ipad, opad).
  2. Calcul du hachage interne : hash(clé secrète XOR ipad + message).
  3. Calcul du hachage externe : hash(clé secrète XOR opad + hachage interne). C’est cela le HMAC.

Utilisations :

  • Authentification des requêtes API : Le serveur et le client partagent une clé secrète commune. Le client calcule le HMAC pour les données de la requête et l’envoie dans l’en-tête. Le serveur calcule le HMAC avec les mêmes données et la même clé, en le comparant à la valeur envoyée. Si elles correspondent, la requête est considérée comme authentique.
  • Vérification de l’intégrité des données : Si le HMAC du message correspond au HMAC recalculé, on peut être sûr que les données n’ont pas été modifiées pendant la transmission.
  • Utilisation dans JSON Web Tokens (JWT) : HMAC est souvent utilisé comme algorithme de signature numérique (HS256, HS384, HS512) pour assurer l’intégrité des données du jeton.

Exemple de mise en œuvre (pseudocode) :

function hmacSHA256(key, message) {
    // Constantes de padding
    const blockSize = 64; // pour SHA-256
    const ipad = 0x36;
    const opad = 0x5c;

    // Préparation de la clé
    let paddedKey = key;
    if (key.length > blockSize) {
        paddedKey = sha256(key);
    }
    while (paddedKey.length < blockSize) {
        paddedKey += 0x00;
    }

    // Hachage interne
    const innerPaddedKey = xor(paddedKey, ipad);
    const innerHash = sha256(innerPaddedKey + message);

    // Hachage externe (HMAC)
    const outerPaddedKey = xor(paddedKey, opad);
    const hmac = sha256(outerPaddedKey + innerHash);

    return hmac;
}

// Dans les bibliothèques réelles, l’implémentation est optimisée et différente

La différence clé avec le simple hachage avec clé (hash(clé + message) ou hash(message + clé)) est que HMAC est résistant aux attaques d’extension de message, car il utilise deux phases de hachage avec des constantes de padding différentes.