Reenviar el secreto con GnuPG

6

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!

    
pregunta user171587 26.02.2018 - 11:17
fuente

1 respuesta

7

¿Hay algo como esto?

En realidad, existe un borrador específicamente para hacer esto, titulado Extensiones de secreto de reenvío para OpenPGP . La esencia del borrador es que se deben crear claves temporales para cada mensaje y eliminarlas de manera segura después de que se usen. Esto se encuentra con algunos problemas. Lo más importante es que una extensión OpenPGP no podrá garantizar que los datos se se eliminen de forma segura de un dispositivo de almacenamiento. Muchos dispositivos de almacenamiento no permitirán que los datos se borren en su lugar. Esto se hace mediante unidades de estado sólido como una forma de nivelación de desgaste , con el propósito de reducir el desgaste en cualquier área individual de almacenamiento. Ciertos sistemas de archivos emplean una técnica para mejorar la confiabilidad en caso de fallas llamadas copy-on-write que tiene el el efecto secundario de causar escrituras en la misma ubicación para no sobrescribir los datos que anteriormente estaban allí. Además, muchos sistemas toman instantáneas de su estado, anulando el propósito de borrar de forma segura una clave.

¿Qué dificulta el secreto hacia adelante con PGP?

La principal diferencia entre algo como PGP y TLS es que TLS es rápido. Puede estar seguro de que un apretón de manos se completará en uno o dos segundos. Esto le permite almacenar el material de la clave temporal completamente en la memoria. Por otro lado, un mensaje encriptado con PGP puede quedar sin leer por un período de tiempo indefinido, lo que aumenta las posibilidades de que una clave sea robada. Por lo tanto, el secreto hacia adelante es fácil de implementar con sistemas en vivo que comienzan y finalizan el intercambio de claves en una sola sesión, pero mucho más difícil de implementar en un sistema altamente asíncrono donde no hay garantía de que un mensaje sea leído rápidamente.

En general, las razones principales por las que PGP es mucho más difícil de usar con el secreto hacia adelante son:

  • PGP es interactivo, por lo que no puede mantener las claves efímeras en la memoria por solo una fracción de segundo.
  • Las claves deben almacenarse en un dispositivo de almacenamiento no volátil, en cuyo punto el borrado seguro es incierto.

Posibles alternativas

La alternativa más viable que tiene ahora es tener subclaves de cifrado de corta duración. Cree una llave maestra de larga duración, preferiblemente almacenada en un dispositivo externo (y por lo tanto, resistente al compromiso). Las subclaves deben mantenerse durante un período más corto y revocarse después de un período de tiempo mínimo, por ejemplo, un mes o una docena de mensajes. Cuando revoque una clave, actualice su clave pública para incluir subclaves recién generadas. Las personas que se comunican con usted deberán actualizar periódicamente su copia de su clave pública para poder comunicarse con usted. Deberá saber cómo funciona su sistema para evitar dejar rastros de claves privadas anteriores en su dispositivo. Esto se puede mitigar manteniéndolos en una tarjeta inteligente diferente, ya que están diseñados para almacenar estas claves y, a menudo, también pueden borrarse de manera segura en cualquier momento. GnuPG admite el uso de tarjetas inteligentes como fuente de material clave.

También puede utilizar OTR , que permite la comunicación cifrada en tiempo real con el secreto de reenvío. Es un complemento para varios sistemas de mensajería que encripta datos usando el intercambio de claves Diffie-Hellman y AES. Actualmente se admite en varias aplicaciones de mensajería de medios sociales (por ejemplo, el mensajero de Facebook), así como en IRC y XMPP. También hay un complemento para Pidgin , un cliente de chat que admite una amplia variedad de protocolos. Cualquier protocolo que admita Pidgin se puede cifrar mediante OTR.

    
respondido por el forest 26.02.2018 - 13:33
fuente

Lea otras preguntas en las etiquetas