/ / Java - Generación de par de claves RSA a partir de 5 componentes de CRT: java, criptografía, rsa, bouncycastle

Java - Generación de par de claves RSA a partir de 5 componentes de CRT: java, criptografía, rsa, bouncycastle

Tengo 5 componentes de CRT: primeP, primeQ, primeExponentP, primeExponentQ y crtCoefficient. ¿Hay alguna manera de que podamos generar un par de claves RSA a partir de estos?

Cuando miré RSAPrivateCrtKeySpec y RSAPublicKeySpec, los parámetros que faltan son módulo, privateExponent y publicExponent.

¿Puede alguien ayudarme a calcular módulo, privateExponent y publicExponent?

¿Hay una implementación de Bouncy Castle para hacer esto?

¡Gracias! Sam

Respuestas

1 para la respuesta № 1

Sí, eso debería ser posible. Bueno, a menos que el exponente público sea realmente grande, pero eso es poco probable.

Probablemente puedas adivinar (es decir, pruebe 3, 5, 7, 13, 17 y 65537) o fuerza bruta al exponente público, ya que generalmente es un número primo pequeño. El valor 65537 (0x010001, el cuarto número primo de Fermat) es más probable. Luego puede calcular el exponente privado. Puede verificar su conjetura utilizando el signo / verificar con el par de claves.

Tenga en cuenta que es un poco extraño que tenga los parámetros CRT pero no la clave pública. En realidad, eso es tan extraño que probablemente tenga que codificar esto usted mismo.


0 para la respuesta № 2

Simplemente suministre valores nulos para los parámetros faltantes en la especificación CRT. La fábrica de llaves lo resolverá.

RSAPrivateCrtKeySpec privateSpec = new RSAPrivateCrtKeySpec(null, null, null, p, q, expP, expQ, coeff);
KeyFactory factory = KeyFactory.getInstance("RSA");
privateKey = (RSAPrivateKey)factory.generatePrivate(privateSpec);

El módulo es primeP * primeQ. En la mayoría de los casos, el exponente público es 65537.