Ai fini dell'apprendimento, sto creando un'applicazione di chat in cui le connessioni vengono effettuate tramite SSL / TLS e i messaggi vengono crittografati utilizzando AES-CBC-256 e le chiavi AES sono crittografate con RSA-2048.
Il tasto AES viene generato casualmente (AesProvider.GenerateKey ()) per utente per sessione (che significa una chiave per ogni persona con cui un utente sta chattando) e l'IV viene generato casualmente (AesProvider.GenerateIV ()) passando in la chiave generata, ogni volta che viene creato un messaggio (prima di essere inviato). Dal lato RSA, sto generando un nome di sessione casuale sicuro per memorizzare le chiavi private generate nei contenitori e l'invio della chiave pubblica. Sto anche usando lo stesso modello (una coppia di chiavi per utente per sessione) come in AES.
Dovrei anche dichiarare che sto usando HMAC-SHA512 per cancellare i messaggi e inviare la chiave HMAC crittografata usando la stessa chiave pubblica con cui la chiave AES / Iv viene crittografata. Da quando ho letto che non ha bisogno di essere rigenerato spesso, sto pensando di rigenerare la chiave HMAC ogni 5000 o 10000 chiamate.
Domande: 1) Dovrei creare solo una coppia di chiavi RSA per utente e usarla per tutte le sessioni, o è buono come è adesso? 2) Sta usando lo stesso tasto AES e solo la modifica della IV come spiegato sopra è considerata sicura?