Domanda

Questo è il codice che sto usando per generare una coppia di chiavi DH:

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

(senza il try / catch necessario, ovviamente).

Ho fatto alcuni test che eseguono tale codice iterativamente e variando la dimensione della chiave (in particolare rampa dal 128 con passo 128 fino a 1024. 1024 sarebbe la dimensione desiderata.

Prima di tutto, l'esecuzione di ogni generazione hanno 10 volte per avere una certa deviazione std minimo sui risultati dà HIGH fluttuazione dei risultati, in media, ogni caso, il tempo necessario per creare le chiavi ( 1024 bit ) è:. 683027ms, che arrotonda fino a circa 11 minuti per la creazione di una chiave

Le domande sono:

  1. È qualcun altro ottenendo gli stessi risultati?
  2. C'è qualche ottimizzazione per essere eseguito al fine di ottenere tempi inferiori?
  3. Qual è l'alta fluttuazione dipendente? (Cioè per generare una chiave 1024bit può richiedere da 18 secondi a 30 minuti ...)

I test sono stati eseguiti su un Nexus-One di telefono

Grazie in anticipo per far luce sulla "questione"

Saluti

È stato utile?

Soluzione

Ho fatto qualche ulteriore codifica / di ricerca ea quanto pare la chiamata che è la maggior parte del tempo (batteria?) Consumo è:

new SecureRandom()

In particolare, però, dal momento che per DH parametri (g, p, l) possono essere pre-calcolati e hard-coded è un suggerimento saggio di farlo in anticipo e utilizzare i valori generati per generare la coppia di chiavi (che sarà essere quasi istantanea).

Esempio di codice:

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

Se p, g, e l sono:

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

E X e Y possono essere generati in linea 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());
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top