2012-02-09 26 views
6

Por un lado, oigo a la gente decir que las dos teclas son totalmente intercambiables, la primera descifrará lo que el segundo encriptado. Esto me hace pensar que las dos claves son intercambiables.¿Las claves públicas y privadas son intercambiables?

Pero, por otro lado, las claves generadas por RSA parecen tener diferente longitud, y en otro tema el cifrado con una clave privada se llamaba "firma" y se consideraba menos seguro que cifrar con una clave pública. (2)

Además de eso, surge la idea de que la clave privada no se debe divulgar cuando la clave pública se distribuya abiertamente en la naturaleza. (3)

Tenía planeado recibir datos de un servidor único, por lo que mi idea era mantener una clave pública en ese servidor para cifrar datos y distribuir una clave privada a todos los clientes posibles, pero esto va en contra (3) Por el contrario, si distribuyo claves públicas y encripto mis datos con la clave privada, el cifrado es menos seguro de acuerdo con (2).

¿Debo distribuir una clave pública y encriptar con una privada para satisfacer (2) o al revés?

NB: en mi caso, el rendimiento no es un problema.

+0

No? Nunca distribuya una clave privada – sehe

+0

la firma no es "menos segura" que el cifrado. –

Respuesta

4

Su clave pública se utiliza para encriptar un mensaje, el privado para descifrarlo. Por lo tanto, con la clave pública que distribuye, cualquier persona puede encriptar un mensaje con la seguridad de que solo usted (o alguien con su clave privada) puede descifrarlo. Para responder a su pregunta directamente, no, no son intercambiables. Nunca deberías distribuir tu clave privada.

Si desea compartir una llave con múltiples clientes posibles, entonces realmente hay dos opciones. O bien abandona la criptografía asimétrica y encuentra una forma segura de distribuir una clave simétrica, para usar con algo como AES en lugar de RSA, a cada uno de ellos, o le pide a cada uno que genere un par de claves y le proporcione su clave pública. Luego puede descifrar lo que proviene del servidor y volver a cifrarlo para cada cliente. La cantidad de clientes ayudará a determinar su elección entre los dos.

-1

claves públicas cifrar. claves privadas descifrar ellos no cambian.

Lo que debe hacer para hacerlo bien es que cada cliente (cliente) tenga un par de claves privadas/públicas. Cuando el servidor necesita enviar algunos datos, debe solicitar la clave pública del cliente (cliente) y usarla para el cifrado. Luego, el cliente (y solo el cliente correcto) podrá descifrar la información que reciba (utilizando su clave privada cuidadosamente guardada).

11

La respuesta depende de si hace su pregunta por curiosidad matemática o por razones criptográficas puramente prácticas.

  • Si va a implementar un sistema de cifrado que debe Nunca revelar su clave privada, por lo que en este sentido son las claves absolutamente no intercambiables. Además, el escenario de uso que describe parece una buena combinación para la autenticación en lugar de la confidencialidad, por lo que el mensaje que envía el servidor a los clientes debe estar firmado y no cifrado. Si también necesita confidencialidad, necesita algunos pasos más en su protocolo.

  • Desde un punto de vista matemático, la respuesta es OTOH "sí", suponiendo que utiliza una representación interna de la clave privada que solo contiene el módulo N y el exponente D, y el otro exponente E se genera aleatoriamente. La fórmula que describe la relación entre los dos exponentes es 1 = E * D (mod phi (N)), así que desde un punto de vista matemático en realidad no importa qué exponente sea cuál.

Pero, por otro lado, RSA generadas teclas parecen tener diferente longitud

Si está utilizando una aplicación que produce claves privadas RSA que son significativamente más largas que las claves públicas correspondientes, esto casi siempre significa que la implementación es absolutamente no adecuada para usar claves públicas y privadas indistintamente. La diferencia de longitud es generalmente debido a una combinación de los siguientes:

  • El exponente público E no se genera aleatoriamente, pero es un pequeño, fija constante, tal como 3 o 0x10001. El exponente privado D, por otro lado, será casi tan grande como el módulo, por lo que los datos de la clave privada serán casi dos veces mayores que los datos de las claves públicas. Si solo obtuvo una clave privada de RSA (N, D), su primera suposición sobre el exponente público sería cualquiera de los valores 3 o 0x10001, y sería fácil verificar si la suposición es correcta. Si desea que las claves sean intercambiables, el exponente que elija primero debe seleccionarse aleatoriamente como un entero impar mayor que 1 y menor que phi (N) y sin factores primos en común con N o phi (N).
  • Los datos clave privada incluye los factores P, Q N. del módulo público
  • Los datos clave privada incluye el exponente público E.
+0

Gracias por establecer la distinción entre las matemáticas y el uso práctico de un sistema real. He visto el tema presentado en ambos sentidos y parecía contradictorio ya que no se hizo la distinción. Además, creo que algunos sistemas prácticos almacenan la clave pública en un archivo de datos de modo que si conoce la clave privada, puede extraer la clave pública, lo que lleva a algunas personas a la conclusión de que puede volver a crear una clave pública con una clave privada. – adg

+3

@adg En algunos casos, la información guardada en la clave privada incluye los factores primos (P, Q) y el exponente privado (D). Esto es suficiente para derivar el exponente público (E). –

+0

Muchas gracias por la excelente aclaración. Parece que las explicaciones que afirman que las claves en el par son matemáticamente o funcionalmente equivalentes no son correctas, al menos en algunas implementaciones. – adg

Cuestiones relacionadas