Pregunta

Este es el código que estoy usando para generar un par de claves DH:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DH");
keyGen.initialize(1024, new SecureRandom());
KeyPair ackp = keyGen.generateKeyPair();

(sin el try / catch es necesario, por supuesto).

He hecho algunas pruebas que ejecutan dicho código de forma iterativa y variando el tamaño de la clave (en particular, el aumento gradual de 128 con un paso de 128 hasta 1024. 1024 sería el tamaño deseado.

En primer lugar, corriendo cada generación tamaño 10 veces para tener alguna desviación std mínimo sobre los resultados proporciona una alta fluctuación de los resultados, en promedio, de todos modos, el tiempo necesario para la creación de las teclas ( 1.024 bits ) es:. 683027ms, que se redondea hasta alrededor 11 minutos para la creación de una clave

Las preguntas son:

  1. ¿Hay alguien más conseguir los mismos resultados?
  2. ¿Hay alguna optimización para ser ejecutado con el fin de lograr tiempos inferiores?
  3. ¿Cuál es la alta fluctuación depende de? (Es decir, para generar una clave 1024bit puede tomar de 18 segundos a 30 minutos ...)

Las pruebas se han ejecutado en un Nexus-Un teléfono

Gracias de antemano por arrojar alguna luz sobre la "cuestión"

Regards

¿Fue útil?

Solución

He hecho un poco más de codificación / investigación y al parecer la llamada que está la mayor parte del tiempo (batería?) Que consume es:

new SecureRandom()

En particular, sin embargo, ya que para DH los parámetros (g, p, l) pueden ser pre-computado y duro codificadas que es una sugerencia prudente hacerlo de antemano y utilizar los valores generados para generar el par de claves (que se ser casi instantánea).

código de ejemplo:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DH");
keyGen.initialize(new DHParameterSpec(p, g, l));
KeyPair ackp = keyGen.generateKeyPair();

Donde p, g, y l son:

final BigInteger p = new BigInteger("X");
final BigInteger g = new BigInteger("Y");
final int l = 1023;

y X e Y pueden ser generados fuera de línea con:

AlgorithmParameterGenerator paramGen = AlgorithmParameterGenerator.getInstance("DH");
paramGen.init(1024, new SecureRandom());
AlgorithmParameters params = paramGen.generateParameters();
DHParameterSpec dhSpec = (DHParameterSpec)params.getParameterSpec(DHParameterSpec.class);
System.out.println("p: " + dhSpec.getP() + "\ng: " + dhSpec.getG() + " \nl: " + dhSpec.getL());
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top