Sorprendentemente, hay muy poca información en la web sobre el uso de la API liviana de Bouncy Castle. Después de mirar a su alrededor por un tiempo yo era capaz de armar un ejemplo básico:Bouncy Castle Generación de par de llaves RSA usando API liviana
RSAKeyPairGenerator generator = new RSAKeyPairGenerator();
generator.init(new RSAKeyGenerationParameters
(
new BigInteger("10001", 16),//publicExponent
SecureRandom.getInstance("SHA1PRNG"),//prng
1024,//strength
80//certainty
));
AsymmetricCipherKeyPair keyPair = generator.generateKeyPair();
tengo una comprensión básica de RSA y las matemáticas que sucede detrás de las escenas, así que entiendo lo que publicExponent
y strength
son. Supongo que publicExponent
se refiere a un coprime de phi(pq)
y por lo que veo puede ser pequeño (como 3) siempre que se use el relleno adecuado. Sin embargo, no tengo idea de a qué se refiere certainty
(en algún lugar se menciona que podría referirse a un porcentaje, pero quiero estar seguro). El uso de SecureRandom
es autoexplicativo. El documentation of RSAKeyGenerationParameters es completamente inútil (no es sorpresa). Mi única conjetura es que tiene algo que ver con la precisión de las claves generadas, pero una vez más quiero estar seguro. Entonces mi pregunta es ¿cuáles son los valores apropiados para certainty
y publicExponent
?
P.S. No responda con "depende del contexto: qué tan segura quiere que sea la información". Es bastante seguro asumir el más alto nivel de seguridad (es decir, clave RSA de 4096 bits o superior) a menos que se especifique lo contrario ... También agradecería enlaces a fuentes que den buen ejemplo del uso de la API Lightweight de Bouncy Castle (no estoy en todos interesados en la implementación de JCA o cualquier ejemplo relacionado con ella).
Dado que el punto de la "prima probable" es que no se puede factorizar, ¿cómo se puede comprobar si es relativamente primo a otro número? ¿No es la verificación de la excelencia relativa simplemente otra verificación probabilística? – Jherico
La exactitud relativa se puede comprobar fácilmente calculando GCD. Si es 1, 2 números son primos relativos. –
* No * es imposible generar enteros primos comprobables, pero es más caro y se considera innecesario para RSA. Ueli Maurer dio un algoritmo rápido para esto hace muchos años. –