Creando una clave privada usando la intervención humana

6

En un sistema hipotético, digamos que un requisito de diseño es que las personas que curiosean en la base de datos de una aplicación web (sysadmin ido pícaro, o lo que sea), no tengan acceso al texto sin formato de los mensajes privados entre usuarios. . En su lugar, se almacena una versión encriptada del texto.

La forma más sencilla de hacerlo es utilizar un esquema de cifrado de clave pública / clave privada. Sin embargo, es (realmente) inefectivo almacenar la clave privada en el sistema, o en el navegador de los usuarios dado un atacante de voluntad fuerte. Esto deja la intervención humana por generación.

A falta de utilizar un applet de java (o HTML5 / Javascript sofisticado), es difícil proporcionar una instancia para que un humano proporcione una entrada aleatoria para generar la clave privada, y aún queda el problema de almacenarla. También hay un problema que requiere que los humanos recuerden una contraseña aleatoria de 16 caracteres utilizando símbolos y caracteres alfanuméricos. Los dongles de clave privada que las empresas tienden a usar también están fuera de discusión.

Entonces, la pregunta es: ¿Cómo tomo una contraseña potencialmente insegura y la transformo en una clave privada segura? ¿Es esto posible?

Mis ideas tienden a flotar hacia que no es realmente posible hasta que un usuario use una frase de contraseña decididamente segura (más de 16 caracteres, mayúsculas y minúsculas con los números), debido a la facilidad de forzamiento de la fuerza bruta en estos días. También un problema sería la falta de un cifrado suficientemente seguro que use su propia entrada para generar una clave para su uso. De nuevo, derivado del problema con el almacenamiento de la clave que se utiliza en la generación.

Además, supongamos que se están utilizando las técnicas adecuadas en todos los demás lugares del sistema (SSL, algos de cifrado actualizados, etc.)

    
pregunta Mike S 10.11.2011 - 14:56
fuente

1 respuesta

3

Intentando escribir la resistencia de contraseña para ataques de fuerza bruta como una ecuación: complejidad * costo de transformación = resistencia . Su límite en el costo de transformación es el tiempo que desea trabajar para verificar (o generar una clave) una contraseña cada vez que sea válida. Las contraseñas deficientes son difíciles de fuerza bruta si la función de derivación tarda un año en ejecutarse, pero también es difícil trabajar como un caso legítimo.

El método "nuevo tradicional" de generar una clave a partir de una contraseña es ejecutarlo a través de PBKDF2 . Bcrypt y scrypt Son dos opciones "más fuertes". Al elegir el número de iteraciones, haga una prueba comparativa y ponga en marcha esa cosa tan alto como le resulte cómodo basándose en la carga prevista. Demasiado bajo y es fácil de romper. Demasiado alto y te negarás el servicio hasta la muerte con operaciones legítimas. El error básico es "¿cuántos intentos de inicio de sesión debo poder manejar por segundo?" Recuerde que, a diferencia del hash de contraseña, no puede aumentar las iteraciones en un momento posterior (a menos que vuelva a cifrar todo, probablemente no quiera hacerlo).

Almacene un archivo sal aleatorio con sus datos encriptados (uno para cada contraseña / clave utilizada) y use ese archivo sal correspondiente con la contraseña. Eso asegurará que cada contraseña debe ser atacada individualmente en lugar de todo el grupo a la vez.

    
respondido por el Jeff Ferland 10.11.2011 - 15:30
fuente

Lea otras preguntas en las etiquetas