Ralentizar el cifrado simétrico

2

Estoy desarrollando un programa en Java. En un solo paso, los datos se deben cifrar y exportar en un archivo.

A partir de ahora estamos cifrando en AES-256

Quiero reducir la velocidad de un posible ataque de fuerza bruta tanto como sea posible.

La respuesta obvia sería hacer que los usuarios elijan contraseñas largas y seguras. ¿Pero también podemos hacer algo para ralentizar el algoritmo?

Mi primera idea es ejecutar el texto sin formato en un bucle que lo desencripta con AES 2000 veces. ¿Hay algún inconveniente en esto, además de que el usuario tardará más en obtener el archivo?

    
pregunta Stefan Rasmusson 07.02.2013 - 13:36
fuente

2 respuestas

6
  

Quiero reducir la velocidad de un posible ataque de fuerza bruta tanto como sea posible. La respuesta obvia sería hacer que los usuarios elijan contraseñas largas y seguras. ¿Pero también podemos hacer algo para ralentizar el algoritmo?

En cuanto a la resistencia de AES a la fuerza bruta, está bien como está. Ya que parece que estás usando contraseñas de entrada de usuario para generar la clave, debes hacer tu fortalecimiento de clave allí al ingresar la clave de entrada varias veces. Consulte La implementación de AES Crypt introduce una contraseña 8192 veces para generar la clave. ¿Es esto necesario? para obtener más información.

    
respondido por el Jeff Ferland 07.02.2013 - 13:52
fuente
2

Fuerza bruta se trata de probar todas las claves o contraseñas posibles. AES usa claves de al menos 128 bits (256 bits en su caso) para que falle la fuerza bruta: con la tecnología existente o previsible no es factible "probar" una proporción no risible del espacio de posible 128 bits claves, por no hablar de claves de 256 bits.

Un ataque de fuerza bruta más efectivo probaría posibles contraseñas que a menudo provienen de un espacio mucho más pequeño de posibles contraseñas (el espacio de contraseñas que una mente humana puede encontrar). Esto se denomina ataque de diccionario . Para que dichos ataques sean menos efectivos, querrá usar un poco de desaceleración en el proceso, ya sea en la transformación de contraseña a clave o en el cifrado en sí. Tiene más sentido, y es mucho mejor para la seguridad, hacer la desaceleración en la transformación de contraseña a clave, en lugar de en el cifrado. Consulte esta respuesta para obtener más información.

La desaceleración es solo una parte de la historia; También quieres un salt . Esto apunta a bcrypt o PBKDF2 . Y también necesitarás algo de integridad comprobada para derrotar los ataques activos (que son más realistas de lo que generalmente se supone). La combinación de un buen hashing de contraseña, cifrado simétrico e integridad comprobada es no es tan fácil como parece , por lo que debe confiar en un estándar existente y una biblioteca que hace el trabajo y ha sido examinado por muchos especialistas. Podría hacerlo peor que usar OpenPGP y Implementación de BouncyCastle Java .

    
respondido por el Thomas Pornin 07.02.2013 - 15:27
fuente

Lea otras preguntas en las etiquetas