2009-05-19 7 views
7

Existe-t-il un moyen de générer une paire de clés de 128 bits compatible avec le chiffrement à l'aide du programme keytool de Sun? Il semble que les algorithmes disponibles dans http://java.sun.com/javase/6/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator ne sont pas pris en charge ou n'autorisent pas les clés plus courtes que 512 bits.Génération de clés 128 bits avec keytool

La paire de clés sera utilisée avec le ff. extrait de code:

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(); 
} 

où la production est une OutputStream où les données chiffrées seront enregistrées et l'entrée est une InputStream où seront lus les données en clair.

Répondre

0

Il serait logique que des paires de clés plus courtes que 512 bits ne puissent pas être générées. La cryptographie à clé publique nécessite une clé plus longue que la cryptographie à clé symétrique pour maintenir le même niveau de sécurité. Une paire de clés de 128 bits n'est pas recommandée pour la cryptographie à clé publique.

+0

Je cherchais à générer un cert de test à utiliser avec AES-128. Est-ce que je vais à ce sujet dans le mauvais sens alors? –

+1

Pourriez-vous expliquer un peu plus en détail ce que vous souhaitez accomplir? –

+0

Question mise à jour avec extrait de code où la paire de clés générée sera utilisée. –

2

Les certificats sont utilisés pour la cryptographie à clé publique et ne contiennent pas de clés de cryptage pour le chiffrement de bloc symétrique AES-128. Au lieu de cela, la cryptographie à clé publique est utilisée uniquement pour crypter ou négocier la clé AES 128 bits et le reste de la conversation utilise AES. La clé AES 128 bits n'est pas un certificat, elle est juste 128 bits d'un générateur de nombres aléatoires cryptographiquement fort ou dérivé d'une phrase secrète utilisant un algorithme de hachage tel que PBKDF2. Comment vous obtenez ces bits dépendra de votre application. SSL/TLS doit négocier une clé aléatoire, mais un programme de chiffrement de disque dur dériverait la clé à partir d'une phrase secrète.

+0

Question mise à jour avec extrait de code où la paire de clés générée sera utilisée. J'espère avoir éclairci toute confusion. Mais, ouais, je suis un débutant crypto. : P –

5

Il vous suffit de spécifier différentes storetype

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

Questions connexes