Pergunta

Este é o código que estou usando para gerar um Keyy DH:

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

(sem a tentativa necessária, é claro).

Fiz alguns testes executando esse código iterativamente e variando o tamanho da chave (em particular, aumentando de 128 com uma etapa de 128 até 1024. 1024 seria o tamanho desejado.

Primeiro de tudo, executar cada geração de tamanho 10 vezes para ter algum desvio de DST mínimo nos resultados fornece alta flutuação de resultados, em média, de qualquer maneira, o tempo necessário para criar as chaves (1024 bits) é: 683027ms, que completa cerca de 11 minutos para criar uma chave.

As perguntas são:

  1. Alguém mais está obtendo os mesmos resultados?
  2. Existe alguma otimização a ser executada para alcançar tempos mais baixos?
  3. De que é a alta flutuação dependente? (ou seja, para gerar uma chave de 1024 bits que pode levar de 18 segundos a 30 minutos ...)

Os testes foram executados em um telefone nexus-one

Agradecemos antecipadamente por esclarecer a "edição"

Cumprimentos

Foi útil?

Solução

Fiz algumas codificações/pesquisas adicionais e, aparentemente, a chamada que mais é o tempo (bateria?) Consumindo:

new SecureRandom()

Em particular, porém, uma vez que para DH os parâmetros (G, P, L) podem ser pré-computados e codificados, é uma sugestão sábia para fazê-lo de antemão e usar os valores gerados para gerar o par de chaves (que será quase instantâneo ).

Código de exemplo:

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

Onde p, g e l são:

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

E x e y podem ser gerados offline com:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top