Cifrado usando AES 256, ¿necesito IV? [duplicar]

18

Estoy buscando encriptar con AES usando una clave de 256 bits, y me doy cuenta de que hay varios métodos en varios idiomas, por ejemplo enlace , y me doy cuenta de que el parámetro IV es opcional. ¿Esto significa que puedo implementar totalmente el cifrado / descifrado AES con una única cadena de 256 bits como clave? ¿Para qué sirve la IV, y se reducirá significativamente la seguridad si la omito?

Disculpas por mi ignorancia, me echaron de cabeza por primera vez en una tarea que me siento bastante desorientada al tratar de juntar todo :)

¡Gracias!

    
pregunta DanH 02.05.2013 - 10:53
fuente

2 respuestas

10

Si usa cada tecla solo una vez, no usar una IV está bien. Si usa una clave varias veces, debe usar un IV diferente cada vez, por lo que un par (clave, IV) no se reutiliza.

Los requisitos exactos para el IV dependen del modo de encadenamiento elegido, pero un valor aleatorio de 128 bits por lo general está bien. Debería ser diferente para cada mensaje que cifres. Guárdelo junto con el texto cifrado, normalmente como un prefijo.

    
respondido por el CodesInChaos 02.05.2013 - 10:57
fuente
17

Suponga que encripta dos mensajes con la misma clave, y los dos mensajes comienzan con los mismos 16 bytes de texto sin formato. (16 bytes es el tamaño de bloque para AES, independientemente del tamaño de la clave). ¿El primer bloque de texto cifrado será el mismo? Si es así, ya estás filtrando algo de información al atacante. Si esta información es confidencial o no depende de su aplicación, pero ya es una mala señal. Si el cifrado pierde más que el signo de los mensajes, no está haciendo su trabajo.

La idea básica de un IV es anteponer un poco de contenido aleatorio a cada mensaje, de una manera basada en principios. Cómo funciona esto depende precisamente del modo. (La operación AES principal solo funciona en bloques de 16 bytes. Un modo es una forma de extender esto a mensajes más largos). Por ejemplo, con CBC , el cifrado de cada bloque se calcula a partir de la clave, el bloque de texto plano y el texto cifrado del bloque anterior; para el primer bloque, se utiliza el IV en lugar del texto cifrado del bloque anterior inexistente. Normalmente, la IV se envía en texto claro junto con el texto cifrado, por lo general, se envía a los primeros 16 bytes del mensaje cifrado.

El modo

CTR utiliza técnicamente un contador y no un IV, pero operacionalmente funcionan de manera muy similar : el remitente genera un valor aleatorio de 16 bytes al azar y se envía al comienzo del mensaje cifrado. Con el modo CTR, reutilizar ese valor para otro mensaje es catastrófico, porque CTR funciona al XORAR el texto sin formato con una secuencia pseudoaleatoria deducida de la clave y el contador. Si tiene dos mensajes encriptados que usan el mismo valor de contador, su XOR es el XOR de los dos colores.

Hay más ataques contra los IV elegidos incorrectamente de los que he enumerado aquí. Genere un IV aleatorio para cada mensaje (utilizando un generador aleatorio de calidad criptográfica, el mismo que usaría para generar una clave), y estará bien.

Hay una excepción: si genera una clave nueva para cada mensaje, puede elegir un IV predecible (todos los bits 0 o lo que sea). Aún necesita usar un modo con un IV (el BCE no está bien, por ejemplo, expone las repeticiones en el texto simple ya que dos bloques de entrada idénticos tendrán el mismo cifrado). Sin embargo, ese es un caso raro (surge para el almacenamiento, no para la comunicación).

Tenga en cuenta que el cifrado a priori solo garantiza la confidencialidad de los datos, no su integridad. Dependiendo de lo que haga con los datos, esto puede ser un problema. En particular, si un atacante puede enviar textos cifrados tentativos para ser descifrados, o puede proporcionar textos adicionales para encriptar, esto puede exponer cierta información. Algunos modos, como EAX y GCM proporciona cifrado autenticado : un texto cifrado solo se descifra si es genuino. Usa uno de estos si es posible.

Tenga en cuenta también que AES-128 es tan seguro en la práctica como AES-256 .

Si no te sientes cómodo con lo que estás haciendo, intenta usar una biblioteca de alto nivel en lugar de lidiar directamente con la criptografía.

    
respondido por el Gilles 02.05.2013 - 12:14
fuente

Lea otras preguntas en las etiquetas