L'utilizzo di una chiave per più scopi è considerato in cattivo stile in generale. Non implica direttamente una vulnerabilità. Violetto occasionalmente questo principio, se è conveniente per la progettazione del protocollo.
Il motivo più importante è che, se si utilizza la stessa chiave per più schemi, è necessario considerare le interazioni tra i diversi schemi. Con chiavi indipendenti non devi preoccuparti di questo.
Un'altra preoccupazione è che uno schema potrebbe rompersi, consentendo il recupero delle chiavi. Tale ripristino delle chiavi interrompe quindi tutte le parti del protocollo che utilizzavano quella chiave. Ad esempio, se implementi un algoritmo MAC errato, un'interruzione contro tale algoritmo potrebbe non solo interrompere l'autenticazione ma anche la riservatezza del tuo messaggio.
Alcuni esempi pratici:
- L'utilizzo di AES-CBC per la crittografia con AES-CBC-MAC è totalmente interrotto se si utilizza la stessa chiave.
- L'uso di AES per la crittografia insieme a HMAC-MD5 / SHA-1 / SHA-2 non ha interazioni note. Non è plausibile che ci siano tali interazioni.
-
AES-CCM è una modalità che utilizza AES-CTR per la crittografia e AES-CBC-MAC come MAC. Questa modalità è altrettanto strong di AES.
Questi esempi mostrano che la sicurezza pratica di una tale combinazione può variare da totalmente infranta a provabile sicura.
L'approccio corretto è iniziare con una chiave master e utilizzare una funzione di derivazione della chiave, come ad esempio HKDF, per derivare le singole chiavi. Queste chiavi sono indipendenti, impedendo le interazioni tra i diversi schemi. Non è possibile recuperare la chiave master dalle singole chiavi, quindi un'interruzione contro una parte del sistema non infrange tutto il resto sulla base di quella chiave master.