¿Es seguro publicar algo cifrado con una contraseña si hace que sea increíblemente difícil de descifrar?

6

Digamos que tienes una clave privada muy importante que no quieres perder. Piensas en publicarlo en enlace , pero luego vuelves a considerar que eso elimina el punto. Así que piensas en cifrar con la ayuda de derivación de clave de contraseña , pero eso normalmente no es suficiente. Sabes esto porque se usan algoritmos similares para proteger las contraseñas en los servidores, y cuando esos hash se filtran, aunque las contraseñas son seguras por un tiempo, el servidor aún les dice a todos que cambien su contraseña. Esto implica que no es seguro que sean públicos durante largos períodos de tiempo.

Por lo general, un servidor insiste en que el hash de contraseña tome solo 1 segundo o algo así. Ya que esta es una contraseña para la recuperación, no te importa si toma un tiempo. Usted está bien si toma mucho tiempo, como 24 horas, por ejemplo.

Si configura la derivación de la clave de su contraseña para que tome un tiempo realmente largo, como un día en una computadora típica, ¿es seguro publicar contenido cifrado con esa clave públicamente? ¿O seguirás siendo vulnerable a la fuerza bruta?

    
pregunta PyRulez 08.05.2016 - 17:51
fuente

2 respuestas

5

La razón para el fortalecimiento de la clave es que las contraseñas no tienen tanta entropía como se espera para la clave. El tiempo que toma romper una tecla es proporcional al número de teclas posibles. Los algoritmos de fortalecimiento utilizados en las contraseñas compensan la escasa entropía aumentando la constante de proporcionalidad. Pero la brecha es tan grande que el fortalecimiento no puede compensar. Una contraseña con 64 bits de entropía es muy difícil de memorizar: son 10 caracteres ASCII imprimibles al azar (si empiezas a imponer características memorables, la entropía se va mucho hacia abajo) o 14 al azar letras minúsculas, pero para alcanzar 128 bits de "dificultad de craqueo", que corresponde al tamaño de clave más común para el cifrado simétrico, necesitaría un silbido 2 ^ 64, aproximadamente un siglo de tiempo de CPU.

En su escenario, una contraseña memorable es el método incorrecto. Sería una contraseña que raramente usa, pero que necesita ser muy fuerte y, por lo tanto, difícil de memorizar.

Use una clave aleatoria, en lugar de una clave derivada de la contraseña, e imprímala . Guarde la impresión en un lugar seguro.

Si el software que usa requiere una contraseña, genere una contraseña aleatoria con tanta entropía como la clave. 20 caracteres imprimibles en ASCII, o 28 letras minúsculas al azar, o algo equivalente, te dan 128 bits de entropía. Si la tecnología avanza hasta el punto de que esto se puede romper, la clave que está cifrando probablemente ya no estará segura de todos modos. Ya que su contraseña tiene suficiente entropía para una clave, no necesita fortalecerla. Una vez más, imprímelo.

Una vez que recorras esa ruta, también puedes imprimir la clave original y olvidarte de cargarla. Pero agregar un nivel de direccionamiento indirecto tiene ventajas. Esto significa que un adversario debe obtener tanto una copia de la clave cifrada como una copia de la clave de cifrado de la clave. Con esta separación, si una de las partes está comprometida, es posible que tenga tiempo para actuar antes de que la segunda también esté comprometida. También puede almacenar la clave de cifrado de clave en varias partes separadas. Hay algoritmos de intercambio secreto que permiten dividir una clave en n piezas para que pueda recuperarse de cualquier pieza de k , pero no menos. Si desea mantener las cosas simples, puede generar múltiples claves de cifrado de claves, cargar la clave maestra cifrada con cada uno de estos, y dividir las claves de cifrado de claves y enviar las piezas para que se necesite más de un solo lugar para recuperar todo. .

    
respondido por el Gilles 08.05.2016 - 19:57
fuente
2

Para mayor claridad para otros lectores, la derivación de clave basada en contraseña es hash, no cifrado. Está diseñado para producir claves de cifrado a partir de contraseñas, no cifrar contraseñas. Haría la contraseña con la función (a la que me referiré como PBKDF) y luego cifrará los datos con la clave resultante.

Una contraseña segura con un algoritmo fuerte tardaría eones en interrumpirse: si las personas que diseñaron el sistema de almacenamiento de contraseñas hicieron un buen trabajo y los algoritmos involucrados no tienen puntos débiles, el posible rompeolas de hash estaría milenios muerto antes de la la contraseña fue recuperada Los operadores de servidores responsables piden a las personas que cambien sus contraseñas para la defensa en profundidad.

De forma similar, llevaría enormes cantidades de tiempo para romper un buen cifrado. Para la fuerza bruta AES-256, tendría que esperar varias veces la edad del universo .

Si usa una contraseña segura y tantas iteraciones de un PBKDF que se necesita un día completo para generar una clave desde una posible contraseña, podría ser más fácil para un atacante forzar la clave derivada en lugar de pasar por la Proceso de adivinar contraseñas y obtener la clave a partir de ellas.

Por lo tanto, si solo usa una contraseña con al menos tanta entropía como las claves generadas por el PBKDF, podría ahorrar tiempo y simplemente cifrar los datos con la clave de una iteración sin comprometer su seguridad en absoluto.

    
respondido por el Ben N 08.05.2016 - 19:03
fuente

Lea otras preguntas en las etiquetas