Creazione di un HMAC
Per calcolare un HMAC
- Ottenere un puntatore al provider di servizi di crittografia Microsoft chiamando CryptAcquireContext.
- 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.
- 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.
- 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.
- 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.