Para fines de aprendizaje, estoy creando una aplicación de chat donde las conexiones se realizan a través de SSL / TLS, y los mensajes se cifran utilizando AES-CBC-256 y las claves AES se cifran con RSA-2048.
La clave AES se genera aleatoriamente (AesProvider.GenerateKey ()) por usuario por sesión (lo que significa una clave para cada persona con la que un usuario está chateando) y la IV se genera aleatoriamente (AesProvider.GenerateIV ()) al pasar la clave generada, cada vez que se crea un mensaje (antes de ser enviado). En el lado de RSA, estoy generando un nombre de sesión aleatorio seguro para almacenar las claves privadas generadas en contenedores y enviar la clave pública. También estoy usando el mismo modelo (un par de claves por usuario por sesión) que en AES.
También debo indicar que estoy usando HMAC-SHA512 para hacer un hash de los mensajes y enviar la clave HMAC encriptada usando la misma clave pública con la que se encripta la clave AES / Iv. Desde que leí que no es necesario regenerarlo a menudo, planeo volver a generar la clave HMAC cada 5000 o 10000 llamadas.
Preguntas: 1) ¿Debo crear solo un par de claves RSA por usuario y usarlo para todas las sesiones, o es bueno cómo está ahora? 2) ¿Se considera seguro usar la misma clave AES y solo cambiar la IV como la explicada anteriormente?