tengo los valores para p
, q
, n
y e
y me gustaría para calcular la clave privada d
. ¿Cómo puedo hacer esto? ¿Podría alguien darme el código C# de ejemplo? Estoy usando una clase BigInteger
para representar los valores de p
, q
, n
y e
así que asumo que d también será BigInteger
.Generar clave privada RSA en C#
Respuesta
La forma corta es para calcular la inversa de e modulo (p-1) * (q-1). En realidad, solo necesita el mínimo común múltiplo de p-1 y q-1, pero esto no le comprará mucho (sí, hay varios valores posibles para d, esto es normal, todos son equivalentes) .
Si su clase BigInteger
tiene un método inverso modular, entonces esto será fácil: simplemente llámelo. De lo contrario, tendrá que calcularlo usted mismo, utilizando el algoritmo Euclidiano extendido (esto es lo que las clases BigInteger
tienden a usar para calcular las inversas modulares).
De Wikipedia:
Determinar d (utilizando aritmética modular) que satisface la relación de congruencia
- Dicho de otra manera, ed - 1 puede ser dividido uniformemente por el totient (p - 1) (q - 1).
- Esto a menudo se calcula utilizando el algoritmo Euclidiano extendido.
- d se mantiene como el exponente de clave privada.
El algoritmo de Euclides extendido permite encontrar números enteros tales que se cumple lo siguiente:
El algoritmo de Euclides extendido es particularmente útil cuando a y b son primos entre sí , ya que x es la inversa multiplicativa modular de un módulo b.
En esta fórmula establecida a
-e
, b
a (p-1)(q-1)
y gcd(a, b)
al 1 (ya que se requieren electrónico y φ (pq) coprimeros en el algoritmo RSA) y resolver para x
que su d
da. La página de Wikipedia en extended Euclidean algorithm tiene más detalles sobre cómo escribir el algoritmo para resolver x e y. Por ejemplo, puede utilizar esta función recursiva (en pseudo-código):
function extended_gcd(a, b)
if a mod b = 0
return {0, 1}
else
{x, y} := extended_gcd(b, a mod b)
return {y, x-(y*(a div b))}
En .NET, si lo que desea es generar algunas claves RSA que no tiene que implementar el algoritmo RSA mismo. Ya existe una implementación de RSA en .NET Framework que puede usar.
Esta es la forma en que lo hice.
números primos p = 7 y q = 17
Calcular n = p * q = 119
Calcular f (n) = (p-1) * (q-1) = 96
Calcular d = e^-1 mod f (n), por ej., D = 77
- 1. Encriptación con clave privada RSA en Java
- 2. RSA: ¿Cómo generar clave privada en java y usarla en C#?
- 3. Abrir una clave privada RSA de Ruby
- 4. Cargue la clave RSA privada codificada PEM en Crypto ++
- 5. Cómo cargar la clave privada RSA desde el archivo
- 6. C++ clave privada de exportación OpenSSL
- 7. ¿Cómo generar un KeyPair de RSA con una clave privada encriptada con contraseña?
- 8. Convertir clave privada tradicional PEM a clave privada PKCS8
- 9. Cómo leer una clave privada RSA PEM de .NET
- 10. Generar privada y la clave pública OpenSSL
- 11. Flash SecureSocket y la clave privada de RSA
- 12. Uso de una clave pública de RSA para descifrar una cadena cifrada con la clave privada de RSA
- 13. Encriptación RSA en C#: ¿Qué parte define la clave pública?
- 14. PyCrypto: Generar clave RSA protegida con contraseña DES3
- 15. Cómo almacenar clave privada y clave pública en KeyStore
- 16. Convertir clave pública RSA a RSA DER
- 17. Dada una clave privada, ¿es posible derivar su clave pública?
- 18. ¿Necesita C# la palabra clave privada?
- 19. firma de una cadena con la clave privada RSA en Google App Engine SDK Python
- 20. palabra clave privada vs no palabra clave privada
- 21. Excepción de "clave incorrecta" para certificados con clave privada exportable
- 22. Archivo de clave privada para SFTP en NetBeans
- 23. Cifrado RSA de datos grandes en C#
- 24. Desencriptando con clave privada del archivo .pem en C# con .NET crypto library
- 25. Uso de RSA en Python
- 26. Creación de clave privada RSA a partir del archivo PFX (PKCS # 12)
- 27. Openssl convert .PEM que solo contiene clave privada RSA para .PKCS12
- 28. Tengo módulo y exponente privado. ¿Cómo construir una clave privada RSA y firmar un mensaje?
- 29. ¿Cómo funciona la frase de contraseña de clave privada de RSA bajo el capó?
- 30. ¿Podemos tener varias claves públicas con una sola clave privada para RSA?
Sé cómo generar claves desde cero, pero por curiosidad estoy tratando de recuperar d de los valores anteriores. – b3n