Sono un po 'confuso come utilizzare AES e HMAC (basata su SHA-256) in modo corretto quando si trasmette il messaggio crittografato dal server al client o viceversaconfuso come utilizzare AES e HMAC
correggetemi per favore se il seguente metodo è sbagliato:
- prendere la chiave protetto dal file di chiave (ad esempio, si consiglia di utilizzare l'AES-256 e abbiamo già una chiave valida lunghezza di 256 bit)
- Genera IV casuale per AES-256 per essere sicuro che lo stesso testo in chiaro abbia un output di codifica differente.
- Calcolare HMAC-SHA-256 utilizzando il testo normale e la chiave di sicurezza. (La prima domanda: dovrei usare IV per il calcolo HMAC? Ad esempio, aggiungere la chiave di sicurezza?)
- Criptare il testo normale usando AES-256.
- messaggio Componi per il cliente come segue: HMAC + IV + ENCRYPTED_MESSAGE
La più grande domanda è: è possibile in qualche modo di non inviare IV del cliente, ma, invece di generare allo stesso modo ed essere ancora crypto sicuro? O va bene anche mandare la IV?
Ho finito con generazione casuale casuale, perché è necessario che lo stesso testo normale finirà in risultati di crittografia diversi.
E quale modalità di funzionamento raccomanderesti? La CBC ha il suo overhead e dovremmo occuparci del padding. Penso che la mia scelta sia OFB/CFB. – Valentin
Dal punto di vista della sicurezza, sono tutti uguali (eccetto ECB, non usarlo). Assicurati di usare una IV fresca se il sistema prende una flebo. Se vuoi risparmiare qualche sforzo, ci sono modalità autenticate che non hanno bisogno di un hmac. GCM è il migliore di loro. Che lingua stai usando? – imichaelmiers
Non consiglierei di prendere la somma SHA1 del primo tasto come seconda chiave. Invece è possibile derivare due chiavi diverse con parametri diversi e PBKDF2 da una passphrase.La cosa migliore è avere due chiavi indipendenti e non fare affidamento su una passphrase (probabilmente) debole. –