Me gustaría saber cómo implementar secreto de reenvío usando GnuPG , y supongo que necesito algún tipo de intercambio de claves autenticado. Suponiendo que ya tengo el siguiente trabajo:
- Alice y Bob han generado sus propios pares de llaves asimétricas regulares
- Alice tiene la clave pública de Bob, y Bob tiene la clave pública de Alice
- Alice y Bob han verificado que tienen las claves correctas y, por lo tanto, se confían mutuamente
- Alice puede enviar mensajes cifrados asimétricamente con la clave pública de Bob, y Bob puede descifrarlos, leerlos y verificar firmas (y viceversa)
El problema que me gustaría resolver es que si alguien logró interceptar y almacenar un mensaje cifrado de la semana pasada y posteriormente logró obtener la clave privada correspondiente de Alice o Bob, entonces podrían descifrar y leer el viejo mensaje Espero que con una clave de sesión temporal (negociada pero no enviada) esto ya no sea posible, ya que el mensaje de la semana pasada se cifraría simétricamente con una clave de sesión aleatoria, y esta clave de sesión fue nunca enviado en cualquier mensaje.
Creo que lo que se necesita es un intercambio de claves autenticado (AKE) como Diffie-Hellman, ¿así que mi programa puede hacer esto utilizando GnuPG como biblioteca?
- Generación de token aleatorio adecuado
- Combinación de este token con clave privada
- (el programa es responsable del almacenamiento de datos temporales en la memoria y la transmisión de mensajes cifrados y firmados)
- Combinación de recibido (token + key) de otra parte con su propia clave privada para dar la clave de sesión temporal
k
- Uso de este
k
acordado como clave de sesión simétrica
Idealmente, esta clave de sesión no tendría que agregarse a ningún conjunto de claves, y crearla sería significativamente más rápido que generar un par de llaves asimétrico.
Confusiones
De acuerdo con las preguntas frecuentes en enlace :
"Diffie-Hellman" es lo que PGP llama algoritmo de cifrado de Elgamal. Si su par de llaves generado por PGP usa una subclave de cifrado Diffie-Hellman, aparecerá en GnuPG como una subclave de Elgamal.
pero de acuerdo con el manual en enlace la generación de claves para ElGamal produce un par de llaves:
La opción 4 crea un único par de llaves de ElGamal que se puede utilizar para realizar firmas y realizar el cifrado.
Esto hace que suene como un par de llaves asimétrico que no es lo que quiero, y también suena como si se agregara al llavero, que suena indeseable e ineficiente. Así que estoy un poco confundido acerca de lo que GnuPG significa por "ElGamal", y no veo cómo un protocolo de intercambio de claves puede considerarse equivalente a un algoritmo de cifrado.
Conclusiones
Gracias a la respuesta de Forest a continuación, entiendo que esto no es posible, aunque parece que GnuPG es más que capaz de hacer las matemáticas requeridas. Lo dejé abierto por un poco más de tiempo, en caso de que alguien más supiera una manera.
Tendré que estudiar más a fondo OTR, que obviamente es una pregunta aparte.
Después de hacer esta pregunta, también me di cuenta de que tal vez debería haberlo puesto en crypto.stackexchange. Mis disculpas si hubiera sido más apropiado ponerlo allí. Gracias por los comentarios!