¿Cómo se diseña una arquitectura de criptografía para la clave pública privada?

La base de generar una clave común es generar un valor utilizando un valor compartido (clave pública), de modo que para el atacante activo, es extremadamente difícil descifrar la clave privada en función de la información compartida por el aire.

Conozco algunas técnicas que se utilizan para la criptografía pública / privada, que incluyen RSA, Deffie Hellman y el uso de curvas elípticas para generar la clave secreta compartida.

Por ejemplo, echemos un vistazo a la arquitectura clave de Deffie hellman.

Supongamos que el usuario A tiene una clave secreta Sa y una clave pública Pa. Del mismo modo, el usuario B tiene una clave secreta Sb y una clave pública Pb. La forma en que se genera Pa es usando un número fijo conocido llamado generador (g) y multiplicándolo por sí mismo Sa veces.

Por lo tanto, Pa = ((g exp Sa) mod (p)) y Pb = ((g exp Sb) mod p), donde p es un número primo muy grande y g es un valor de 1 a p – 1.

Ahora los valores de g, p también son conocidos por el atacante, y los valores Pa y Pb se intercambian por el aire durante el intercambio de clave pública (también conocido por el atacante). Sin embargo, A calcula la clave compartida realizando Pb exp Sa = g exp (ab). B calcula de manera similar la clave compartida realizando Pa exp Sb = g exp (ab). Ahora la mejor parte aquí es que incluso con el conocimiento de Pa, Pb, g, p, el atacante (comúnmente conocido como Man in the middle o MITM) encuentra muy difícil calcular la clave compartida o la clave privada a partir de este conocimiento. . (conocido como problema logarítmico discreto).

En estos días, ECDH (claves de Deffie hellman de curva elíptica) son formas comunes de cifrar la mayoría de los sistemas porque los sistemas Elípticos proporcionan el mismo beneficio de seguridad con menos número de bits. Recientemente implementé ECDH para un protocolo de comunicación de seguridad en C, pero creo que también está disponible en las bibliotecas Java y C ++.