Генерация 128-битных ключей с помощью keytool - PullRequest
7 голосов
/ 19 мая 2009

Есть ли способ генерировать 128-битную пару ключей, подходящую для шифрования, с помощью программы Sun keytool? Кажется, что алгоритмы, доступные в http://java.sun.com/javase/6/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator, либо не поддерживаются, либо не допускают использование ключей короче 512 бит.

Пара ключей будет использоваться с ff. фрагмент кода:

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

где output - это некоторый OutputStream, где будут сохранены зашифрованные данные, а input - некоторый InputStream, где будут считываться данные в незашифрованном виде.

Ответы [ 3 ]

5 голосов
/ 20 апреля 2012

Вам просто нужно указать другой тип магазина

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

2 голосов
/ 19 мая 2009

Сертификаты используются для криптографии с открытым ключом и не содержат ключей шифрования для симметричного блочного шифра AES-128. Вместо этого криптография с открытым ключом используется только для шифрования или согласования 128-битного ключа AES, а остальная часть диалога использует AES.

128-битный ключ AES не является сертификатом, это всего лишь 128 бит от криптографически сильного генератора случайных чисел или полученный из ключевой фразы с использованием алгоритма хеширования, такого как PBKDF2 . Как вы получите эти биты, будет зависеть от вашего приложения. SSL / TLS должен согласовывать случайный ключ, но программа шифрования жесткого диска получит ключ из ключевой фразы.

0 голосов
/ 19 мая 2009

Было бы разумно, чтобы более короткие, чем 512-битные пары ключей не могли быть сгенерированы. Криптография с открытым ключом нуждается в более длинном ключе, чем криптография с симметричным ключом, чтобы поддерживать тот же уровень безопасности. 128-битная пара ключей не рекомендуется для криптографии с открытым ключом.

...