El objetivo es diseñar un sistema simple donde los usuarios puedan enviar mensajes cifrados entre ellos (con la ayuda de un servidor).¿Criptografía de clave pública con contraseñas elegidas por el usuario?
En este caso, los clientes no tienen almacenamiento local, por lo que me veo obligado a utilizar contraseñas que los usuarios podrán elegir, recordar y escribir cuando sea necesario. (sé que esto debilita todo el sistema, pero esto es un requisito duro)
Otro requisito es que el servidor no puede almacenar las claves privadas de texto claro o cualquier otro dato que se puede utilizar para descifrar los mensajes (por ejemplo: solamente el usuario puede leer mensajes cifrados, los administradores del servidor no deberían poder).
Mi enfoque sería generar un par de claves asimétrico en el cliente, publicar la clave pública en el servidor junto con una copia encriptada de la clave privada (cifrada con la contraseña del usuario). Los usuarios pueden enviar mensajes cifrados a otros usuarios, utilizando la clave pública publicada del destinatario; cuando un usuario necesita descifrar un mensaje, su clave privada (cifrada) es captada en el cliente desde el servidor, descifrada con la contraseña proporcionada por el usuario y luego utilizada para descifrar mensajes.
¿Tiene esto sentido? ¿Hay algún defecto en el diseño de este sistema? (aparte de la debilidad derivada de los usuarios que eligen contraseñas cortas o malas) ¿Ya se usa este enfoque en escenarios similares?
Gracias :)
Según lo descrito, suena similar a lo que hushmail.com hace. Tienen libros blancos en su sitio que describen la seguridad. –
Gracias, los echaré un vistazo. – Patonza