Estoy escribiendo un programa Java que encripta cadenas con encriptación AES-CBC. (Eventualmente también voy a agregar funciones de esteganografía).
Como usted bien sabe, CBC necesita un IV para cifrar el primer bloque ya que no hay bloques anteriores para heredar.
He investigado acerca de las vías intravenosas y, por lo que puedo encontrar:
- El IV debe ser aleatorio
- El IV debe cambiar de mensaje a mensaje
Actualmente, para facilitar la prueba / depuración, estoy usando un IV fijo.
Sin embargo, ahora que tengo la mayoría de los errores resueltos en mi programa, busco mejorar la seguridad eliminando esa IV solucionada.
Lo que me gustaría saber es: ¿Es seguro usar una segunda clave para la IV?
Por ejemplo, mi programa actualmente solicita al usuario una clave de la longitud adecuada para el proceso de cifrado.
Qué pasa si le pregunté al usuario por cualquiera de los siguientes:
A) 2 claves (de la misma longitud; una para IV y la otra para el cifrado real)
B) 1 tecla dos veces más larga (dividiéndola en dos partes; la primera para la IV y la segunda para la clave real)?
¿Eso sería seguro?