Condividi tramite


Creazione di un HMAC

Per calcolare un HMAC

  1. Ottenere un puntatore al provider di servizi di crittografia Microsoft chiamando CryptAcquireContext.
  2. Creare un handle per un oggetto hashHMAC chiamando CryptCreateHash. Passare CALG_HMAC nel parametro Algid . Passare l'handle di una chiave simmetrica nel parametro hKey . Questa chiave simmetrica è la chiave usata per calcolare l'HMAC.
  3. Specificare il tipo di hash da usare chiamando CryptSetHashParam con il parametro dwParam impostato sul valore HP_HMAC_INFO. Il parametro pbData deve puntare a una struttura di HMAC_INFO inizializzata.
  4. Chiamare CryptHashData per iniziare a calcolare l'HMAC dei dati. La prima chiamata a CryptHashData fa sì che il valore della chiave venga combinato usando l'operatore XOR con la stringa interna e i dati. Il risultato dell'operazione XOR viene sottoposto a hashing e quindi i dati di destinazione per HMAC (a cui punta il parametro pbData passato nella chiamata a CryptHashData) viene eseguito l'hashing. Se necessario, è possibile effettuare chiamate successive a CryptHashData per completare l'hashing dei dati di destinazione.
  5. Chiamare CryptGetHashParam con il parametro dwParam impostato su HP_HASHVAL. Questa chiamata fa sì che l'hash interno venga completato e che la stringa esterna venga combinata usando XOR con la chiave. Il risultato dell'operazione XOR viene sottoposto a hashing e quindi viene eseguito l'hashing del risultato dell'hash interno (completato nel passaggio precedente). L'hash esterno viene quindi completato e restituito nel parametro pbData e la lunghezza nel parametro dwDataLen .

Nota

Non usare la stessa chiave simmetrica (sessione) sia per la crittografia dei messaggi che per la generazione mac ( Message Authentication Code ). L'uso della stessa chiave per entrambi aumenta notevolmente il rischio di decodifica dei messaggi da parte di utenti malintenzionati.