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.