Estoy trabajando en una aplicación que será utilizada por usuarios relativamente no expertos en tecnología, y si bien las máquinas tendrán acceso a Internet, la aplicación no puede tener ningún tipo de intermediario hospedado.
La aplicación permite a las personas tomar un archivo, comprimirlo y codificarlo como una imagen para compartir en sitios como GitHub para ayudar a compartir cosas como archivos de prueba, etc.
La primera versión de la aplicación funciona bien, pero a veces hay datos que es necesario compartir y que son confidenciales y se requiere cierto nivel de cifrado.
Idealmente, quiero ir por la ruta del par de claves públicas / privadas, pero compartirlas es engorroso y complicado desde la perspectiva del usuario.
Me gustaría poder (de alguna manera):
- Tome la dirección de correo electrónico de un usuario y utilícela como clave pública
- Tome una contraseña del usuario y use esto para derivar una clave privada
- Enrede esto de alguna manera, de modo que puedan usarse de esta manera.
Realmente no importa si la dirección de correo electrónico finalmente se resuelve en otra cosa que luego se usa, pero el flujo general debe ser tal que:
- Alice quiere cifrar una imagen para que la use un usuario en particular
- Alice escribe la dirección de correo electrónico de ese usuario (o alguna otra cadena para el destino, por ejemplo, un grupo)
- Bob descarga la imagen en la aplicación y escribe su contraseña privada para descomprimirla.
La aplicación también podría firmar los datos utilizando las claves privadas para la verificación en el otro lado también.
Sé que podría usar una clave pública / privada derivada de la contraseña, pero eso significa que la contraseña única se podría usar para derivar ambas partes y, en última instancia, sería inútil.