Si noti che questa domanda descrive un caso ipotetico, che non è mai stato pensato per essere utilizzato nel mondo reale.
Il server comunica con i client con struttura dei messaggi: client_id, initialization_vector, corpo crittografato. Ogni client scambia ogni giorno con messaggi del server 1-5KB in media 100 volte. I messaggi "occasionalmente" possono perdere, a causa di una rete non sicura (ad esempio DNS spoofing).
Le chiavi generate vengono distribuite in modo sicuro ai client da un altro sistema. Quando una chiave viene compromessa, il client può emetterne un'altra, ma attualmente la chiave non ha scadenza (anche dopo alcuni anni). Voglio evitare di mescolare RSA e altre cose asimmetriche per mantenere questo semplice. Il protocollo dei messaggi potrebbe cambiare in futuro, ma la chiave precedentemente emessa verrà utilizzata per una crittografia più potente senza richiedere una nuova edizione.
Questo tipo di sistema è sicuro se utilizzato con e.g AES / CBC + padding? Posso andare avanti con fermezza con questo approccio di base per anni?
Modifica 1:
Message initialization_vector è casuale (AES / CBC) per ciascun messaggio e encrypted_body ha controlli di integrità interni (crittografati con il corpo) (MAC e digest). Cosa lo rende insicuro nonostante quello? La possibilità di compromettere la crittografia AES nel tempo è davvero valida in quel caso?
Modifica 2:
Ecco lo pseudo-codice della crittografia dei messaggi. Quando il messaggio MAC non è valido, la risposta all'errore non è crittografata (per evitare attacchi attivi). Il sistema eliminerà i vecchi messaggi quando la data / ora è precedente a T (per evitare un attacco di risposta).
init_vector := secure_random (); // for AES/CBC or increment init_vector for AES/CTR
mac = hash (client_id + timestamp + init_vector + text); // MD5 or SHA-1
body = encrypt (mac + text); // AES/CBC
message = client_id + timestamp + init_vector + body;