¿Es seguro escribir la sal Y / O la IV al comienzo de un archivo cifrado?

16

Quiero cifrar un archivo con AES en modo CBC (quizás otro modo sea mejor para el cifrado de archivos ... No lo sé, ¡pero las sugerencias son bienvenidas!).

Lo que generalmente hago es que primero escribo algunos datos aleatorios (256 bits, solo para enturbiar las aguas), luego mi sal y mi IV (que son uuid4 ... o generadas a partir de un PRNG seguro) en el comienzo del archivo encriptado, y luego, los bloques encriptados.

Me pregunto si esa solución es menos segura que otra. De todos modos, realmente no sé cómo podría hacerlo de otra manera!

    
pregunta SuperPython 20.01.2014 - 14:10
fuente

3 respuestas

38

Las sales y IV no son lo mismo; Las sales son para el hashing de contraseñas, IV son para iniciar algunos modos de cifrado. Sin embargo, ninguno de los dos debe ser secreto; De lo contrario los llamaríamos "llaves". Es seguro colocar la IV y / o la sal en los encabezados de los archivos.

Su adición de "unos pocos datos aleatorios (256 bits, solo para enturbiar las aguas)" es el equivalente informático de sacrificar un pollo para propiciar a los dioses. Si se necesitan tales rituales para hacerte sentir bien, entonces ¿por qué no? pero creer que cambia algo a tu seguridad real sería algo ingenuo.

El modo CBC requiere un IV aleatorio e impredecible; Es un requisito difícil. Usar un UUID es peligroso de varias maneras:

  • Solo el UUID "v4" usa un PRNG.
  • Nadie garantiza que el PRNG utilizado para UUID v4 sea criptográficamente sólido.
  • Incluso si es fuerte, todavía hay seis bits fijos en el UUID (los que dicen "este es un UUID v4"); solo 122 bits son aleatorios.

CBC ya no es el mejor modo en clase; nos encontramos mejor En particular:

  • CBC tiene requisitos estrictos para la generación IV (se ha demostrado que Chosen-Plaintext Attacks son especialmente efectivos contra los pobres Generación IV).
  • CBC necesita relleno, y se ha demostrado que el manejo del relleno es delicado (el descifrado se puede convertir en un "oráculo de relleno" si se hace incorrectamente).
  • CBC no garantiza la integridad. Generalmente, cuando necesita cifrar (por confidencialidad), también necesita detectar de manera confiable las alteraciones hostiles. Para eso, necesitas un MAC . Ensamblar un MAC y el cifrado es tricky .

Los modos más nuevos resuelven estos problemas, tolerando un IV simple (es suficiente con un contador que no se repita), no necesitando relleno, y al tener un MAC integrado donde la integración se ha realizado de manera adecuada. Consulte en particular GCM y EAX .

    
respondido por el Tom Leek 20.01.2014 - 15:09
fuente
4

Para responder a su pregunta: sí, es perfectamente seguro escribir el IV al comienzo del texto cifrado.

Sin embargo, no estoy seguro de a qué te refieres cuando hablas de "sal": en teoría, "sal" es un valor aleatorio que se mezcla con el valor de texto claro antes de pasarlo a uno forma hash función. La razón por la que existe es para asegurarse de que la misma entrada no dará como resultado la misma salida para defenderse contra los ataques de cumpleaños y contra las tablas hash calculadas.

En el caso de cifrado, el IV de su modo de operación debería proporcionar la misma funcionalidad.

En cuanto a qué modo elegir, depende mucho de cuáles sean sus requisitos: marque esta respuesta y esta página que establece varios modos de operación y sus ventajas / desventajas.

Si no conoce los requisitos exactos para los datos finales, debe seleccionar el modo con la mayoría de las funciones (CWC o OCM, probablemente)

    
respondido por el Stephane 20.01.2014 - 14:59
fuente
3

Un hash criptográficamente seguro no cifrado, en teoría no debería proporcionar ninguna sugerencia sobre el contenido del mensaje, siempre que el mensaje sea único. Pero cuando un intruso sospecha que el mensaje es uno de un número finito de mensajes conocidos, puede comparar el hash con los hashes de estos mensajes conocidos y descubrir que es uno de ellos.

Ejemplo: Supongamos que obtendría una copia ilegal de una película con derechos de autor, y ahora me gustaría redistribuirla. El propietario de los derechos de autor me está sospechando de la piratería de películas y, por lo tanto, está espiando nuestra conexión. Están al tanto de todas las copias ilegales que circulan en Internet y se obtuvieron para calcular sus hashes.

Cuando uso su esquema de cifrado, pueden ver los hashs de los archivos que envío y compararlos con los hashes de los archivos de los que tienen copias. Cuando descubren que uno de mis mensajes coincide con uno de sus hashes, han demostrado con una certeza extremadamente alta que distribuí su contenido protegido por derechos de autor, incluso sin tener que descifrar el cifrado.

Agregar una sal no ayuda mucho, porque cuando la sal no está encriptada, pueden volver a calcular los hashes de sus archivos con la sal de cada mensaje.

Agregar datos sin sentido para "enturbiar el agua" antes de que el hash no agregue ninguna seguridad, porque solo es seguridad por oscuridad. No pasará mucho tiempo para que un criptoanalista se dé cuenta de que se pueden ignorar los datos.

Conclusión: Cifre mejor el hash junto con el contenido.

    
respondido por el Philipp 20.01.2014 - 14:50
fuente

Lea otras preguntas en las etiquetas