Ho 5 componenti CRT: primeP, primeQ, primeExponentP, primeExponentQ e crtCoefficient. C'è un modo in cui possiamo generare una coppia di chiavi RSA da questi?
Quando ho visto RSAPrivateCrtKeySpec e RSAPublicKeySpec, i parametri mancanti sono modulo, privateExponent e publicExponent.
Qualcuno può aiutarmi a calcolare il modulo, privateExponent e publicExponent?
Esiste un'implementazione di Bouncy Castle per fare questo?
Grazie! Sam
risposte:
1 per risposta № 1Sì, dovrebbe essere possibile. Beh, a meno che l'esponente pubblico sia davvero grande, ma è improbabile.
Probabilmente puoi indovinare (es. prova 3, 5, 7, 13, 17 e 65537) o forza bruta l'esponente pubblico - poiché solitamente è un piccolo numero primo Il valore 65537 (0x010001, il quarto primo Fermat) è molto probabile. calcola l'esponente privato. Puoi verificare la tua ipotesi usando il segno / verifica con la coppia di chiavi.
Nota che è strano che tu abbia i parametri CRT ma non la chiave pubblica. In realtà, è così strano che probabilmente dovrai codificarlo da solo.
0 per risposta № 2
Fornisci null per i parametri mancanti nelle specifiche CRT. La fabbrica di chiavi lo capirà.
RSAPrivateCrtKeySpec privateSpec = new RSAPrivateCrtKeySpec(null, null, null, p, q, expP, expQ, coeff);
KeyFactory factory = KeyFactory.getInstance("RSA");
privateKey = (RSAPrivateKey)factory.generatePrivate(privateSpec);
Il modulo è primeP * primeQ. Nella maggior parte dei casi, l'esponente pubblico è 65537.