utilizar utilizacion usos unam transmision tipos teoria sobre resueltos resueltas recepcion ppt informacion ejercicios derivadas derivacion demanda curva criptosistemas criptografía criptografia beneficios aplicada alcances agregada .net encryption cryptography encryption-asymmetric

.net - utilizacion - usos tipos y beneficios de utilizar la criptografía



Dada una clave privada, ¿es posible derivar su clave pública? (9)

Depende del algoritmo y de lo que quiere decir con "clave privada".

Las claves privadas de RSA a menudo se almacenan en su formulario "Teorema de resto chino". Por ejemplo, la estructura RSAPrivateKey definida en PKCS # 1 y reutilizada por muchos otros estándares de cifrado toma esta forma. Esta forma incluye los dos números secretos a menudo denotados p y q , de los cuales se calcula el totient. Con totient y el exponente privado, el exponente público se calcula rápidamente.

En cualquier caso, la mayoría de los pares de claves RSA usan 65537 como el exponente público, y el módulo siempre se transporta como parte de la clave privada.

De lo poco que entiendo al leer varios materiales, el par de claves públicas y privadas es la base del cifrado asimétrico y también algo sobre elegir 2 números primos (que es más o menos su clave privada) y multiplicarlos (que es aproximadamente su clave pública), Parece que es posible generar una clave pública si conoce la clave privada. ¿Es correcto o estoy confundiendo algo?

[EDITAR]

Lo que me hizo más confuso fue que no es posible serializar la clave RSA en XML con solo la clave privada (usando .NET class RSACryptoServiceProvider). ¡No estoy seguro si esta limitación es intencional o no!


En CUALQUIER sistema criptográfico de clave pública, la clave pública está matemáticamente relacionada con la clave privada. Es muy sencillo.

La clave pública se deriva de la clave privada en el momento de la generación, y con la clave privada en cualquier punto en el futuro es posible derivar la clave pública fácilmente.

No es factible ir por el otro camino. Dada una clave pública, no es fácil derivar la clave privada. Es por eso que podemos compartir claves públicas de forma segura con otras personas. Si tiene suficientes ciclos de tiempo / CPU, podría forzarlo brutalmente, pero probablemente sea más fácil esperar un ataque matemático en la tecla.


En la mayoría de las implementaciones de sistemas criptográficos asimétricos, el único hecho que está garantizado es que no puede encontrar la clave privada desde la clave pública. A la inversa, encontrar la clave pública desde la clave privada es trivial en la mayoría de los casos.

Por ejemplo, en RSA, puede crear una clave pública desde una clave privada con:

openssl rsa -in private.pem -pubout -out public.pem

Lo que es engañoso es la terminología: "clave privada" se refiere a 2 conceptos diferentes, ya sea que esté hablando de la teoría, o si está hablando de implementación práctica:

  • La clave privada teórica es la pareja (d, n) que comparte una relación simétrica (matemática) perfecta con (e, n) . Si está comparando estos, uno no puede ser calculado a partir del otro.
  • La clave privada práctica (como en la implementación de openssl, por ejemplo), se refiere a un archivo que contiene (d, n) pero también varios valores intermedios importantes para la finalidad de la velocidad de descodificación. Además de eso, la parte teóricamente "desconocida" de la clave pública e a menudo se fija a los valores comunes por convención (que es 0x10001 por defecto en openssl y, aunque puede modificarse, se recomienda encarecidamente que se adhiera a valores muy específicos) ) De modo que deducir la clave pública (e, n) de la clave privada es trivial por más de un motivo.

Es teóricamente posible, pero para claves grandes no es computablemente factible.


Eso depende del sistema criptográfico.

En RSA , tenemos (citando Wikipedia):

La clave pública consiste en el módulo n y el exponente público e (o cifrado) e. La clave privada consiste en el módulo n y el exponente privado d (o descifrado) que debe mantenerse en secreto.

Ahora si tenemos nyd (la clave privada), solo nos falta e para la clave pública. Pero e es a menudo bastante pequeño (menos de tres dígitos), o incluso fijo (un valor común es 65537). En estos casos, obtener la clave pública es trivial.

Para la curva elíptica Diffie-Hellman , la clave privada es d, y la clave pública dG (con G también es pública), por lo que también es trivial.


Existe una idea falsa sobre lo que es la clave privada. La clave privada es solo el par (d, n) y, dado solo eso, no es factible generar la clave pública a menos que se pueda asumir que el exponente público es 65537, que es el caso en casi todas las claves rsa.

Si, por alguna razón, el exponente público es un número mayor, no puede crear la clave pública desde la privada.

Dicho esto, el valor almacenado como "clave privada" para pem files no es solo la clave privada, sino que también contiene los factores primos (entre otras cosas) y, por lo tanto, es fácil generar la clave pública a partir de ella.


Para el caso específico de OpenSSH y ssh-keygen , sí puede :

ssh-keygen -y

Esta opción leerá un archivo de formato OpenSSH privado e imprimirá una clave pública para stdout.

En general, depende del algoritmo y de lo que etiquete la clave privada. Sin embargo, cualquier implementación sensata incluirá la información completa (claves públicas y privadas) en el archivo secreto.


Sí, con acceso a la clave privada se puede generar la clave pública


la clave pública es el módulo N (y el exponente público e, generalmente 65537), la clave privada está dada por los dos primos p, q (y el exponente privado d, a veces también CRT partes d_p, d_q para aceleración) esencialmente usted tiene N = pq y e d = 1 mod ((p-1) (q-1)), también puede calcular d_p y d_q usando la clave privada dada por CRT, el cálculo del módulo de clave pública es una multiplicación "aburrida" y el exponente público está en especificación o calculado utilizando una extensión algoritmo euclid si e estándar no era lo suficientemente bueno. clave pública dada, el cálculo de la clave privada requiere encontrar d (problema de RSA) o p, q (factorizar, ver el tamiz de campo numérico para obtener el mejor algoritmo para hacer esto). Se demuestra que estos problemas son equivalentes en condiciones razonables [Breaking RSA genéricamente es equivalente a factoraje, D. Aggarwal y U. Maurer, 2008]