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.)