L'uso della stessa chiave per due distinti algoritmi incorre nel rischio di interazioni. Un esempio estremo è quando si utilizza sia AES / CBC per la crittografia che CBC-MAC come algoritmo MAC: se si utilizza la stessa chiave per entrambi, è ovvio che il MAC può essere banalmente utilizzato. Per AES / CBC + HMAC, il sentimento della maggior parte dei crittografi è che i due algoritmi sono sufficientemente "diversi" l'uno dall'altro che queste interazioni non avvengono, ma mettendo una precisa definizione matematica sotto quel termine sembra impegnativo.
Fondamentalmente, questo è territorio inesplorato, quindi non farlo. Derivare una chiave di crittografia e una chiave MAC da una determinata chiave master, utilizzando una funzione di derivazione chiave , è il metodo prudente e sicuro : assicura che non possano verificarsi interazioni mortali. Dato che hai un codice HMAC, usa HKDF per tale derivazione: è facile da implementare e ha ricevuto la benedizione di molti crittografi.
In alternativa , puoi abbandonare CBC e HMAC e invece utilizzare una modalità di crittografia autenticata che combina crittografia e MAC con la stessa chiave. Queste sono modalità specializzate in cui le interazioni sono state analizzate in modo approfondito e tutti i dettagli cattivi hanno funzionato. GCM e EAX sono utilizzabili senza problemi legali e vanno bene; GCM è anche uno standard NIST e sta iniziando a essere ampiamente utilizzato (ad esempio come parte di SSL / TLS ).