La chiave utilizzata in HMAC è, per definizione, simmetrica: la stessa chiave è usata per calcolare il valore MAC e verificare il valore MAC. Gli algoritmi di firma digitale sono asimmetrici, il che significa che la chiave per la verifica è distinta dalla chiave utilizzata per la generazione; questa "differenza" è strong: la chiave utilizzata per la generazione non può essere ricalcolata dalla chiave utilizzata per la verifica (almeno, nessuno ha trovato un modo per farlo in un tempo non ridicolo con la tecnologia esistente).
Le firme digitali hanno senso in situazioni in cui il verificatore deve essere in grado di verificare le firme, ma senza essere autorizzato a generare altre firme a sé stanti. Questo è tipico degli scenari di non ripudio: solo il firmatario deve essere in grado di produrre firme valide, altrimenti la firma non può essere attribuita in modo non ambiguo da terze parti (ad esempio un giudice) a quel particolare firmatario. Tuttavia, negli scenari di autenticazione come Amazon AWS, non ci sono terze parti da convincere; c'è solo il cliente e Amazon. Quando un valore HMAC viene verificato con successo, il server Amazon è convinto che qualcuno che conosce la chiave HMAC sia coinvolto; poiché quella chiave è nota solo al client e al server stesso, e il server ricorda di non aver usato la chiave per quel messaggio stesso, il server conclude facilmente che il client ha calcolato l'HMAC.
Le firme digitali implicano un sovraccarico:
-
Più CPU: generare una firma digitale e verificare una firma digitale richiede più lavoro di HMAC (la differenza è trascurabile per i messaggi di grandi dimensioni, ma può essere significativa per piccoli messaggi di meno di pochi kilobyte).
-
Più larghezza di banda della rete: un valore HMAC molto robusto si adatta a 16 byte, mentre una firma RSA equivalente robusta utilizzerà 256 byte (questo può essere ridotto a circa 64 byte con DSA o ECDSA ). Anche in questo caso, ciò è significativo quando si elaborano molti piccoli messaggi.
-
Più dimensioni di archiviazione: una chiave pubblica RSA (per la verifica) utilizzerà 256 byte; la chiave privata utilizzerà più (circa uno o due kilobyte). ECDSA può aiutare, in una certa misura (fino a circa 32 byte per ciascuna chiave), ma è ancora più grande dei 16 byte per una chiave HMAC.
-
Casuale: molte firme digitali richiedono una casualità per firma, che deve essere ottenuta da un PRNG crittograficamente sicuro .
-
Più complessità: la matematica e il codice coinvolti nelle firme digitali sono più complessi di HMAC (HMAC è solo una coppia di invocazioni di funzioni hash, le firme digitali iniziano con una funzione hash, quindi fare cose più strane). Per motivi di sicurezza, la complessità è non valida .
Quindi non si desidera utilizzare le firme digitali in contesti che possono essere ugualmente bene serviti con un HMAC più semplice. A mio avviso, la ragione più convincente è l'ultima: la complessità dovrebbe essere evitata.