2011-07-20 18 views
5

Estoy usando la implementación de Javascript de RSA from this webpage, y he generado mi par de claves allí. Como tal, tengo p, q, el exponente público, el módulo público, el exponente privado y el inverso privado.Descifrar los datos de RSA en .NET con solo unos pocos valores

¿Cómo puedo usar .NET RSACryptoServiceProvider para descifrar el texto cifrado con solo estos valores? Los documentos de .NET enumeran otros tres campos; DP, DQ y InverseQ que no estoy seguro de cómo suministrar.

Respuesta

5

Hay dos representaciones para una clave privada RSA (cf PKCS#1).

La primera representación consiste en el par (n, d), la segunda representación consiste en un quíntuple (p, q, dP, dQ, qInv). La clave pública se representa como (n, e).

  • n es el módulo público
  • p y q son los dos números primos
  • d es el exponente privado
  • e es el exponente público
  • dP es el coeficiente resto teorema chino de p (e · dP ≡ 1 (mod (p - 1)))
  • dQ es el coeficiente de CRT de q (e · dQ ≡ 1 (mod (q - 1)))
  • qInv es un coeficiente de CRT, un número entero positivo de menos de p tal th en q · qInv ≡ 1 (mod p)

Cada uno de los dos representación clave privada es "completo", es decir, sólo se necesita uno de ellos para poder realizar cálculos RSA. Como tiene todo lo necesario para la primera representación, basta con establecer estos parámetros (es decir, n, p, q, e, d) en su instancia RSAParameters y omitir el resto.

+0

El generador de claves Javascript crea una matriz de enteros de 28 bits. ¿Es correcto extenderlos a 32 bits y representarlos como little endian cuando los convierta en una matriz de bytes? –

+0

Para estar seguro, usaría BigInteger # Parse (String)? – emboss

1

This Wikipedia page parece contener instrucciones sobre cómo calcular estos parámetros, a saber

Los valores dp, dq y qInv, que forman parte de la clave privada se calculan de la siguiente manera:

dp = d mod (p − 1) 
dq = d mod (q − 1) 
qInv = q^−1 mod p 
Cuestiones relacionadas