2009-05-19 15 views
7

Esiste un modo per generare una coppia di chiavi a 128 bit adatta per la crittografia utilizzando il programma keytool di Sun? Sembra che gli algoritmi disponibili in http://java.sun.com/javase/6/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator non siano supportati o non consentano chiavi più corte di 512 bit.Generazione di chiavi a 128 bit con keytool

La coppia di chiavi verrà utilizzata con ff. frammento di codice:

Security.addProvider(new BouncyCastleProvider()); 

KeyStore keyStore = KeyStore.getInstance("PKCS12"); 

FileInputStream keyStoreSource = new FileInputStream("keystore"); 

try { 
    keyStore.load(keyStoreSource, "password".toCharArray()); 
} finally { 
    keyStoreSource.close(); 
} 

String alias = (String) keyStore.aliases().nextElement(); 
PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, "password".toCharArray()); 
X509Certificate certificate = (X509Certificate) keyStore.getCertificate(alias); 

CMSEnvelopedDataStreamGenerator generator = new CMSEnvelopedDataStreamGenerator(); 

generator.addKeyTransRecipient(certificate); 

OutputStream output2 = generator.open(output, CMSEnvelopedDataGenerator.AES128_CBC, BouncyCastleProvider.PROVIDER_NAME); 

try { 
    IOUtils.copy(input, output2); 
} finally { 
    output2.close(); 
    output.close(); 
} 

cui uscita è alcuni OutputStream in cui i dati criptati vengono salvate e ingresso è qualche InputStream dove verranno letti i dati in chiaro.

risposta

0

Avrebbe senso che non fosse possibile generare coppie di chiavi più corte di 512 bit. La crittografia a chiave pubblica ha bisogno di una chiave più lunga rispetto alla crittografia a chiave simmetrica per sostenere lo stesso livello di sicurezza. Una coppia di chiavi a 128 bit non è consigliata per la crittografia a chiave pubblica.

+0

stavo cercando di generare un CERT di prova da utilizzare con AES-128. Allora sto andando nel modo sbagliato? –

+1

Potresti spiegare un po 'più in dettaglio cosa vuoi realizzare? –

+0

È stata aggiornata la domanda con lo snippet di codice in cui verranno utilizzate le coppie di chiavi generate. –

2

I certificati vengono utilizzati per la crittografia a chiave pubblica e non contengono chiavi di crittografia per il codice a blocchi simmetrico AES-128. Invece, la crittografia a chiave pubblica viene utilizzata solo per crittografare o negoziare la chiave AES a 128 bit e il resto della conversazione utilizza AES.

La chiave AES a 128 bit non è un certificato, è solo 128 bit da un generatore di numeri casuali crittograficamente forte o derivata da una passphrase utilizzando un algoritmo di hashing come PBKDF2. Il modo in cui ottieni questi bit dipenderà dalla tua applicazione. SSL/TLS deve negoziare una chiave casuale, ma un programma di crittografia del disco rigido ricaverebbe la chiave da una passphrase.

+0

È stata aggiornata la domanda con lo snippet di codice in cui verranno utilizzate le coppie di chiavi generate. Spero di aver chiarito ogni confusione. Ma, sì, sono un cripto principiante. : P –

5

Hai solo bisogno di specificare diversi StoreType

keytool -genseckey -alias check2 -keyalg AES -keysize 128 -storepass changeit -storetype JCEKS -keystore ks.jck

Problemi correlati