Pregunta sobre AES-CBC IVs

3

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?

    
pregunta Android Dev 23.06.2016 - 02:17
fuente

1 respuesta

6

El IV es un valor no secreto aleatorio . Su único propósito es evitar que dos bloques similares generen el mismo texto cifrado, ya que podría proporcionar información acerca de la estructura del texto simple.

En general, simplemente genera el IV al azar y lo concatena al texto cifrado. El IV debe ser de la misma longitud que el bloque para AES-CBC, que es de 128 bits. Simplemente puede concatenar el texto cifrado (por ejemplo, IV + texto cifrado). Sabes que los primeros 16 bytes serán los IV.

EDIT

  

Si es común colocar la IV directamente delante del texto cifrado, ¿no es un riesgo de seguridad hacerlo así?

El único propósito de la IV es aleatorizar el texto cifrado para evitar que dos bloques de texto simple similares produzcan el mismo texto cifrado. Esto es especialmente importante para archivos con una estructura fija. Echa un vistazo aquí sobre por qué esto es importante.

En CBC usted XOR la versión de texto cifrado del bloque anterior con el bloque actual antes de aplicar AES en él. La razón por la que tiene un IV es porque el primer bloque no tiene un bloque-1 con el que se puede colocar en XOR. Por lo tanto, usted acaba de generar 16 bytes aleatorios. Es similar a las contraseñas de salazón.

  

¿Por qué es más seguro colocar un IV aleatorio frente al texto cifrado que elegir un IV estático?

Un IV estático anularía el propósito, ya que aún tendrías todos los primeros bloques similares que produzcan el mismo texto cifrado.

  

En ambos casos, la IV sería claramente visible. No tiene la IV   ¿Te permiten forzar rápidamente el primer bloque?

El IV no es parte de AES, es parte de un modo de operación que AES admite.

Veo que estás bastante confundido acerca de estos conceptos. Si desea una buena lectura y una introducción, debería echar un vistazo a la "Criptografía diaria" de Keith Martin. Es un buen libro que explica todo paso a paso. La criptografía es compleja, difícil y los errores pueden tener consecuencias devastadoras. Tenga cuidado al implementar sistemas de cifrado existentes, si es para usar en una aplicación, es mejor que utilice bibliotecas establecidas y verificadas.

    
respondido por el Lucas Kauffman 23.06.2016 - 02:56
fuente

Lea otras preguntas en las etiquetas