No veo cómo "-salt" en la herramienta de línea de comandos openssl mejora la seguridad en absoluto

13

Hago esto para cifrar un solo archivo:

openssl aes-256-cbc -a -salt -in file.txt -out file.enc

y luego ingrese alguna contraseña regular de texto simple.

No entiendo cómo -salt mejora la seguridad de esto. La razón es que la sal se almacena allí al principio del archivo, de esta manera:

Salted__<eight salt bytes>

La sal que está disponible para la galleta de una manera tan obvia, ¿cuál es el propósito de la misma? No veo cómo haría más difícil un ataque de diccionario ... especialmente dado el hecho de que, por lo que sé, openssl solo usa una iteración para generar el IV a partir de la contraseña / sal: corríjame si ' Estoy equivocado.

    
pregunta SecurityClown 26.10.2012 - 13:54
fuente

2 respuestas

21

El objetivo de la sal es prevenir los ataques de precomputación, como tablas de arco iris . Sin sal, cualquiera podría simplemente generar un enorme diccionario de hashes y sus plaintexts asociados, e inmediatamente romper cualquier hash conocido. Con la sal, este diccionario es inútil, ya que no es factible generar dicho diccionario para todas las sales posibles.

Hice un informe bastante detallado que cubre este problema en ¿Cómo almacenar sal? , que vale la pena leer.

    
respondido por el Polynomial 26.10.2012 - 14:09
fuente
11

OpenSSL usa el salt en combinación con la contraseña para generar dos valores: el IV y la clave de cifrado real.

  • La clave de cifrado debe derivarse de la contraseña y de los datos presentes en el encabezado del archivo (porque queremos poder descifrar el archivo solo con el conocimiento de la contraseña). Sin embargo, no queremos obtener exactamente la misma clave cada vez que usamos la misma contraseña, ya que de lo contrario los atacantes podrían intentar romper los archivos de N a un costo menor que N veces costo de romper uno. Un ejemplo de costos compartidos son las tablas precomputadas (tablas de asignaciones de contraseña a clave), tablas de arco iris es un caso especial de tablas precomputadas.

  • El IV debe ser lo más aleatorio posible; de nuevo, dos archivos distintos deben usar un IV distinto, incluso si están cifrados con la misma contraseña. Un posible diseño hubiera sido agregar el IV en el encabezado del archivo (después de todo, el IV no debe ser secreto, de lo contrario lo llamaríamos una clave, no un IV). Los desarrolladores de OpenSSL prefirieron obtener el IV de la contraseña, al igual que la clave (es decir, producen a partir de la contraseña una secuencia larga, que se dividen en dos, una mitad es la clave de cifrado, la otra mitad es la IV). Esto es válido, siempre y cuando se agregue algún elemento distinto a la mezcla, porque dos archivos distintos deben tener un IV distinto. La sal también hace eso.

Tenga en cuenta que el método de cifrado utilizado por OpenSSL no es estándar; es "lo que hace OpenSSL" pero no está documentado en ninguna parte excepto en el código fuente de OpenSSL. Como un formato de archivo de cifrado, es un poco pésimo. En particular:

  • Parece que no hay manera de configurar cuántas iteraciones deben usarse en la derivación de contraseña a clave. Este es un problema porque la lentitud configurable es importante para hacer frente al problema principal de las contraseñas, que es que, después de todo, son contraseñas, es decir, cosas con una entropía no demasiado alta en el mejor de los casos.

  • El sistema de encriptación no incluye un MAC , por lo que las alteraciones no se detectan necesariamente (no se detectan < em> en absoluto si los dos últimos bloques del archivo rellenado no están modificados).

Por lo tanto, le recomendamos que utilice, si es posible, una mejor herramienta para el cifrado de archivos con contraseña. Por ejemplo, GnuPG .

    
respondido por el Thomas Pornin 26.10.2012 - 14:47
fuente

Lea otras preguntas en las etiquetas