Cómo realizar el cifrado después del intercambio de claves Diffie Hellman

1

Esto se siente como una pregunta tonta, pero una mirada rápida en Internet no ha ayudado exactamente.

Estoy implementando 1-de-2 transferencias ajenas utilizando el intercambio de claves DH en Python. He realizado con éxito DH para obtener la clave simétrica en ambos lados, así como las claves derivadas necesarias para el protocolo OT. Curiosamente, ¡no estoy seguro de cómo aplicar la clave a mi mensaje para en realidad "cifrarlo"!

¿Es multiplicación, multiplicación modular? Lo siento por lo que parece una mala pregunta, pero no la veo.

Estoy implementando el protocolo simple de OT en la parte inferior del cuadro en la página 1 de este documento para referencia. Gracias de antemano por su tiempo y ayuda.

    
pregunta jkovba 04.11.2016 - 01:57
fuente

2 respuestas

2

Bien, primer comentario absolutamente obligatorio: NO HAGA SU PROPIO PROTOCOLO DE CIFRADO O ESCRIBA SU PROPIA IMPLEMENTACIÓN DE CRIPTOGRAFÍA. Simplemente no Siempre. No importa cuán buen programador seas; si no tienes mucho conocimiento y práctica con crypto y un grupo de revisores pares con experiencia y experiencia similar, harás un error. Crypto es extremadamente difícil de entender, lleno de casos de vanguardia, requisitos contraintuitivos y canales laterales inesperados ... y si no contabiliza incluso uno solo de ellos, debilitará su esquema, posiblemente para El nivel de compromiso completo.

Editar

Bien, no estoy familiarizado con el esquema descrito en ese documento. Teniendo en cuenta eso, lo siguiente: para uso con el intercambio normal de DH, no esta cosa nueva y curiosa, puede no ser apropiado. Sin embargo, la pregunta que hizo, "Cómo realizar el cifrado después del intercambio de claves Diffie Hellman", se responde a continuación ... excepto, por supuesto, que la respuesta verdadera es "no, utiliza una biblioteca que se encarga de eso". . "

Bien, con eso fuera del camino ... una vez que haya sacado la clave simétrica del intercambio DH, ¡úsela en un cifrado criptográfico simétrico! Hay muchos para elegir, pero el más común es probablemente AES , usando una clave de 128 bits o de 256 bits , en modo CBC , con PKCS7 padding , utilizando un generado aleatoriamente fuerte IV, y con una HMAC del texto cifrado para integridad. Si su clave compartida tiene la longitud incorrecta para el cifrado, puede ejecutarla a través de una función como SHA-256 para producir una clave adecuada para AES de 256 bits.

Puede enviar el IV y el HMAC en claro; son inútiles para un atacante sin la clave y el destinatario debe conocerlos. El destinatario toma el texto cifrado, vuelve a calcular el HMAC y verifica que coincida, luego utiliza el IV suministrado y la clave simétrica compartida para descifrar el mensaje utilizando el mismo cifrado AES en el modo CBC.

No puedo enfatizar lo suficiente lo esencial que es que intentes NOT hacer esto como algo más que una curiosidad. No publique este código. No lo incorpores en nada que puedas publicar. No construyas nada más encima de eso. No confíes en nada enviado a través de este sistema. No asuma que tiene características de seguridad significativas. Idealmente, ni siquiera lo pegues en tu GitHub o lo que sea ... pero si tienes que hacerlo, incluye un comentario en la parte superior muy claramente , rechazando la idoneidad del código que se utilizará para cualquier cosa lo que sea .

Hay pasos que he dejado de lado o que he dejado demasiado vagos. Hay al menos una docena de formas en las que puedes arruinar solo las partes de las que te he hablado, sin importar todas las otras cosas que tienes que hacer. Hay un montón de cosas que sospecho que ya has hecho mal en tu intercambio de claves. Hay un montón de cosas que estoy seguro de que ni siquiera sé que están mal, pero que estás haciendo mal.

He estado en InfoSec profesionalmente durante ocho años, con un interés en el cifrado que se remonta cuatro años antes que eso, y en este momento cuando reviso el código criptográfico de cosecha propia, puedo dar dos respuestas significativas: "Está roto" y "Probablemente está roto". No sé lo suficiente como para afirmar provisionalmente que algo de cosecha propia no está roto, y eso probablemente será cierto para el resto de mi carrera, a menos que decida dedicar una década de mi vida a esto Área específica de seguridad. ¡Crypto es difícil!

Existen bibliotecas, escritas por personas que saben más sobre crypto que prácticamente cualquier otra persona con vida hoy en día, que realizarán prácticamente cualquier tarea criptográfica que les pida. Existen protocolos, diseñados por personas con experiencia similar e implementados con gran experiencia en esas bibliotecas, que convierten los primitivos criptográficos (como el intercambio de claves DH) en un sistema criptográfico útil. Aun así , los errores y las debilidades en esas bibliotecas se encuentran todo el tiempo ... pero al menos se solucionan rápidamente. Usted NO lo hará mejor usted mismo.

    
respondido por el CBHacking 04.11.2016 - 02:58
fuente
0

No estoy familiarizado con el documento de OT que has vinculado. Pero por lo que he visto, no debe usar el secreto compartido de DH directamente como su clave simétrica.

El motivo es que si alguna vez desea rotar sus claves o generar claves adicionales, tendría que hacer DH nuevamente, lo que tiene un costo de CPU relativamente alto.

Alternativamente, use el secreto compartido como punto de partida o valor semilla para generar claves adicionales. Incluso algo tan simple como que ambas partes generen un número aleatorio, y las combine con el secreto compartido para generar su última clave simétrica real. Esta combinación se puede hacer con cualquier algoritmo de hashing criptográfico o Pseudo Random Number Generator (PRNG) . Introduzca una marca de tiempo allí y garantiza claves únicas en cada sesión (suponiendo que no se generen varias claves en el mismo segundo).

Luego, en el futuro, si necesita más claves, simplemente generará nuevos números aleatorios, lo que es mucho más fácil de hacer que completar un nuevo intercambio DH.

Use DH para responder simplemente la "Intercambio de claves" Problema "pregunta . Use otro mecanismo para obtener las claves de sesión.

    
respondido por el Eddie 02.11.2018 - 19:07
fuente

Lea otras preguntas en las etiquetas