¿Usar frases de texto plano como un par público / privado?

5

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

  1. Tome la dirección de correo electrónico de un usuario y utilícela como clave pública
  2. Tome una contraseña del usuario y use esto para derivar una clave privada
  3. 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:

  1. Alice quiere cifrar una imagen para que la use un usuario en particular
  2. Alice escribe la dirección de correo electrónico de ese usuario (o alguna otra cadena para el destino, por ejemplo, un grupo)
  3. 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.

    
pregunta Clint 22.09.2015 - 15:31
fuente

2 respuestas

3

No puede usar cadenas arbitrarias como pares de claves privadas / públicas. Estos deben ser generados de acuerdo con las características matemáticas del algoritmo PKI que usa (RSA, por ejemplo).

Sin embargo, podría crear una aplicación que use el mismo flujo de trabajo que describió pero que usa PKI para el cifrado, siempre que esté listo para hacer algunas concesiones.

Primero, comienza con un cifrado asimétrico típico (use una biblioteca estándar, por favor: no intente codificar uno): su aplicación utiliza la clave privada del remitente para firmar los datos y la clave pública del receptor para cifrarlos. El problema es que, muy a menudo, no tiene acceso a una clave pública validada para el receptor.

Para resolverlo, todos los usuarios generan su propio par de claves (o pares) y registran las claves públicas en una plataforma común (un servidor de claves). Esto debería incluir algún tipo de validación de usuario para asegurarse de que la clave realmente pertenece al principio de seguridad que está asociado a ellos o corre el riesgo de que alguien registre una clave con un identificador que no les pertenece.

Entonces, cuando un usuario necesita la clave pública de alguien, puede solicitarla al servidor de claves (a través de un canal cifrado y autenticado) según sea necesario.

Por supuesto, el demonio está en los detalles: construir un sistema así es extremadamente difícil: es necesario tener un sistema de validación para las claves que sea eficiente y práctico. Además, debe tener en cuenta el hecho de que los usuarios perderán de manera rutinaria sus propias claves, olvidarán sus contraseñas, cambiarán su correo electrónico, etc. Los servidores de claves también deben ser extremadamente seguros y, al mismo tiempo, operados de manera transparente porque cualquiera que los controle también controla la comunicación de todos (podrían reemplazar cualquier clave pública por su propia forma más o menos transparente).

Todos estos "pequeños" detalles son extremadamente difíciles (y caros) de resolver, por lo que, a menos que tengas MUCHOS recursos disponibles, probablemente te irá mejor si te ciñas a un criptográfico simétrico simple.

    
respondido por el Stephane 22.09.2015 - 15:51
fuente
0

Echa un vistazo a mi experimento brainkeys. enlace

Toma una frase y la convierte en un par de llaves público / privado de SSH. Basado en el concepto y el código del cerebro.

    
respondido por el Jonathan Wilkins 24.09.2015 - 03:35
fuente

Lea otras preguntas en las etiquetas