Windows ha una buona storia per la gestione di certificati e chiavi private con l'archivio certificati e l'archivio chiavi. Molti servizi cloud (la maggior parte?) Hanno una buona storia per il trasporto di certificati in modo che possano essere utilizzati per SSL / TLS. Non conosco nessuna gestione particolarmente valida per le chiavi HMAC (la cosa più vicina è un sistema di trasporto generale delle impostazioni).
I certificati hanno abbastanza metadati che un sistema / servizio admin / (dev) op può vedere quale viene utilizzato per aiutare a diagnosticare perché qualcosa non funziona, e può essere fatto sulla parte non sensibile dei dati ( la chiave pubblica). Una chiave HMAC, d'altra parte, deve essere rivelata nella sua interezza e confrontata byte per byte (o hex nybble per hex nybble, ecc.) O avere qualche forma di hashing applicata ad essa per offuscare il valore ma permetterne comunque il valore da confrontare su macchine.
Queste ragioni, principalmente, riguardano la "facilità di gestione" da parte del cliente. Essere in grado di essere usato correttamente è un aspetto importante per la sicurezza, ma è meno ovvio. È ancora necessario disporre di un modello di registrazione appropriato per i certificati, utilizzando la propria CA per controllare la denominazione dell'oggetto (che richiede la revoca come meccanismo di annullamento) o memorizzando il certificato (o la chiave pubblica) nello stesso modo in cui si sarebbero archiviati i propri Chiave HMAC (che può evitare la necessità di revoca) ... vuoi solo lasciare che i appropriati certificati autentichino un particolare utente.
La gestione delle chiavi private di Windows consente alle applicazioni di utilizzare la chiave senza poterla esportare, il che significa che gli operatori di sistema che hanno accesso solo alle istanze in esecuzione non possono quindi agire come il sistema a casa. Una chiave HMAC ha il problema che "usarlo" e "esfiltrarlo" sono la stessa autorizzazione. Questo è un problema di sicurezza operativa. Un'applicazione client eccessivamente loggy può facilmente mettersi nei guai con la registrazione della chiave HMAC; ma per un certificato richiederebbe a) le autorizzazioni della chiave privata per consentire l'esportazione del materiale della chiave eb) qualcuno che tenti di spostare l'oggetto chiave in una forma registrabile.
Oh, e i certificati di autenticazione client possono anche avere le loro chiavi private su un HSM, rendendo l'exfiltration ancora più difficile, e in base a ciò che la tua API consente ad alcuni dei tuoi chiamanti potrebbe ritenere di aver bisogno della sicurezza HSM.
Quindi: principalmente la facilità di gestione e un paio di motivi op-sec.