La implementación de AES Crypt codifica una contraseña 8192 veces para generar la clave. ¿Es esto necesario?

16

Estoy considerando encriptar algunos archivos pequeños (cientos de kb cada uno) utilizando la implementación de referencia AES Crypt . En cuanto a la fuente, parece que la clave de cifrado se deriva de la IV y la contraseña al concatenar las dos en un búfer que luego se revisa repetidamente. Así que el IV está actuando como la "sal" para el hachís. Por repetidas veces me refiero a 8192 veces.

Entiendo que el beneficio de esto es aumentar el tiempo requerido para generar la clave, lo que hace que sea más caro realizar ataques de fuerza bruta para descubrir la contraseña. También entiendo que el inconveniente es que lleva más tiempo realizar las tareas legítimas de cifrado y descifrado para los usuarios reales. Además, dado que tanto los usuarios como los atacantes compran máquinas más rápidas con el tiempo, el beneficio y el inconveniente tenderán a cero.

Entonces, mi pregunta es, dada la capacidad actual de la computadora, y suponiendo que un atacante motivado que no posee un clúster dedicado, ¿es 8192 iteraciones insuficientes, excesivas o "simplemente correctas"? Además, omita algo en mi análisis de esta generación de claves: ¿hay alguna otra razón para elegir tantas iteraciones que la conviertan en una buena elección?

    
pregunta kalina 19.11.2010 - 11:07
fuente

5 respuestas

18

El estándar de RSA para la criptografía basada en contraseña recomienda "al menos 1000" iteraciones, por lo que el factor parece estar en el estadio.

Con 8192 iteraciones, esencialmente está aumentando el tiempo necesario para completar un ataque de fuerza bruta en un factor equivalente a agregar 13 bits de entropía a la contraseña o 2 caracteres alfanuméricos (solo con respecto a los ataques de fuerza bruta). Esta es una buena manera de pensar en ello porque es independiente de aumentar el poder computacional.

La pregunta es: dada la seguridad de las contraseñas que usted o sus usuarios usarán, ¿es factible forzarlas? Si le agregas 13 bits, ¿es factible hacerlo con fuerza bruta?

Si sus usuarios están utilizando contraseñas seguras, la respuesta es probablemente no a ambas. Si sus usuarios utilizan una palabra del diccionario, 13 bits probablemente no sea suficiente para insertarla en un territorio seguro. Sus respuestas a estas preguntas cambiarán con el tiempo a medida que las computadoras se vuelvan más poderosas.

    
respondido por el PulpSpy 20.11.2010 - 01:04
fuente
5

En caso de que la contraseña sea una palabra del diccionario, las tablas de arco iris se pueden generar de manera rápida y eficiente. Con las contraseñas con sal, los requisitos de tamaño / tiempo para generar tablas de arco iris útiles aumentan. Múltiples iteraciones de hash (sal + pase) es una manera fácil de disminuir en gran medida la utilidad de las tablas de arco iris. Creo que el esquema MD5 salado de Apache lo hace 1000 veces. El número es completamente arbitrario, solo está elevando significativamente la barra de la cantidad de hardware que tendrías que lanzar al problema para vencer el mecanismo de hash. Usando un mejor mecanismo de hashing (y eso significa ir más allá de SHA-1, note que ni siquiera se encuentra en La Suite B de la NSA más) es una forma. También hay algoritmos que te permiten elegir el tiempo que deseas para hacer algo, que estaría directamente dirigido a la "velocidad de derrota criptográfica" como resultado de la Ley de Moore.

    
respondido por el Marcin 19.11.2010 - 15:08
fuente
3

El número de iteraciones debe ajustarse en función de la potencia disponible, de modo que el tiempo de procesamiento aún se encuentre bajo la dura restricción de la paciencia limitada del usuario; todavía quieres que el número sea lo más alto posible.

Con matemáticas: si procesar una contraseña lleva tiempo T en su sistema (por ejemplo, 1 segundo), pero el atacante está listo para gastar T ' para descifrar una contraseña ( por ejemplo, 3 semanas) y tiene acceso a máquinas que, colectivamente, P son tan poderosas como las suyas, entonces el atacante tiene la ventaja de un factor T '* P / T sobre ti. La defensa contra eso es la contraseña de la entropía: si una contraseña tiene bits de entropía e , el atacante es (en promedio) derrotado si y solo si T '* P / T < 2 e-1 . Suponiendo que T = 1 segundo, T ' = 3 semanas y P = 100 (el atacante tiene cinco PC con alguna GPU, para un presupuesto menos de 3000 $), entonces la contraseña debe tener una entropía de al menos 27,4 bits. Probablemente quiera tener un poco de margen de seguridad y obtener 30 bits. Usted puede , como individuo informado, elija una contraseña que sea más segura que eso (hay un poco de discusión sobre ese tema en esta pregunta ); pero parece bastante optimista esperar que la mayoría de los usuarios también lo hagan.

En las ecuaciones anteriores, el número de iteraciones se utiliza para alterar T . Si bien el número apropiado depende en última instancia de su poder disponible y de la paciencia promedio de los usuarios, es probable que las 8192 iteraciones sean demasiado pequeñas; basado en su descripción del proceso de transformación de la contraseña (hashing repetido, parece una versión reducida de PBKDF2 ), el número Las iteraciones en una PC típica se deben contar en millones .

Hablando de eso, una técnica personalizada de procesamiento de contraseñas debería ser una fuerte advertencia roja: esto no es bueno. Es mucho mejor confiar en algoritmos estandarizados probados como PBKDF2 o bcrypt (este último debería ser el preferido, ya que reduce el " factor de potencia de procesamiento " P de un atacante que usa GPU; consulte esta respuesta para más detalles).

    
respondido por el Thomas Pornin 07.10.2011 - 01:33
fuente
3

Si está eligiendo paquetes de cifrado, recomendaría GPG o PGP sobre AES Crypt. GPG y PGP han recibido una gran cantidad de investigación de la comunidad de criptografía. Por lo que yo sé, AES Crypt no lo ha hecho. Por lo tanto, confiaría más en GPG o PGP que en AES Crypt.

En cuanto al número de veces que se repite el hash de la contraseña, eso se basa en el tiempo que esté dispuesto a esperar durante el cifrado / descifrado y la velocidad de la función hash. Primero, decida cuánto tiempo está dispuesto a esperar: por ejemplo, 100 ms. Luego, elija una serie de iteraciones que harán que el proceso de hashing iterado tome 100 ms en las computadoras que usa. Hecho.

Como @PulpSpy ha explicado con precisión , si se repite el hashing N veces, esto aumenta la entropía efectiva de secreto por aproximadamente lg (N) bits, donde lg representa el logaritmo base-2. Por ejemplo, 8192 = 2 ^ 13 iteraciones corresponden a 13 bits más de entropía efectiva. No es fácil traducir esto en una longitud de contraseña efectiva. (Al contrario de lo que escribió @PulpSpy, 13 bits de entropía no se traducen directamente en 2 caracteres, ya que no todos los caracteres de cada frase de contraseña tienen la misma cantidad de entropía. Como @nealmcb explica correctamente, la entropía por carácter de una frase de contraseña varía, pero es probable que esté generalmente en el rango de 1-2 bits por carácter, por lo que esto podría corresponder a un aumento en la longitud de la frase de contraseña en algún lugar en la vecindad aproximada de 8 caracteres.)

Por último, le advertiré que elegir su clave criptográfica de una frase de contraseña generalmente se considera una práctica arriesgada. Las frases de contraseña elegidas por el hombre a menudo no proporcionan suficiente entropía para protegerse contra los ataques de fuerza bruta en el cifrado. Por lo tanto, no recomiendo las frases de contraseña elegidas por el hombre para las medidas de alta seguridad (o, si debe usar una frase de contraseña elegida por el hombre, use un software para ayudarlo a elegir una frase de contraseña de alta entropía). El mejor software criptográfico tiende a utilizar la aleatoriedad real para sus claves criptográficas siempre que sea posible, en lugar de las frases de contraseña elegidas por el hombre.

    
respondido por el D.W. 08.01.2011 - 01:47
fuente
2

No es "necesario", pero hace que sea más difícil descifrar las contraseñas. Se llama "fortalecimiento de clave": es lógico como agregar dos caracteres (símbolo de número superior / inferior) al final de la contraseña. Es bastante comun Por ejemplo, el WPA que protege su punto de acceso contiene la contraseña 4000 veces.

    
respondido por el Robert David Graham 21.09.2011 - 09:06
fuente

Lea otras preguntas en las etiquetas