2009-05-19 12 views
7

Czy istnieje sposób wygenerowania 128-bitowej pary kluczy odpowiedniej do szyfrowania przy użyciu programu Keytool firmy Sun? Wydaje się, że algorytmy dostępne w http://java.sun.com/javase/6/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator nie są obsługiwane lub nie pozwalają na klucze krótsze niż 512 bitów.Generowanie kluczy 128-bitowych z keytoolem

Para kluczy zostanie użyta z ff. Fragment kodu:

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

gdzie wyjście jest jakiś OutputStream gdzie zostaną zapisane zaszyfrowane dane, a wejście jest jakiś InputStream gdzie będą odczytywane dane zwykłego tekstu.

Odpowiedz

0

Ma sens, że nie można wygenerować krótszych niż 512-bitowych par kluczy. Kryptografia klucza publicznego potrzebuje dłuższego klucza niż kryptografia kluczy symetrycznych, aby utrzymać ten sam poziom bezpieczeństwa. 128-bitowa para kluczy nie jest zalecana do kryptografii z kluczem publicznym.

+0

Szukałem wygenerować cert testowy do korzystania z AES-128. Czy robię to w niewłaściwy sposób? –

+1

Czy mógłbyś dokładniej wyjaśnić, co chcesz osiągnąć? –

+0

Zaktualizowane pytanie z fragmentem kodu, w którym będzie używana generowana para kluczy. –

2

Certyfikaty są używane do kryptografii z kluczem publicznym i nie zawierają kluczy szyfrujących dla symetrycznego szyfrowania blokowego AES-128. Zamiast tego, kryptografia klucza publicznego jest używana tylko do szyfrowania lub negocjowania 128-bitowego klucza AES, a reszta konwersacji używa AES.

128-bitowy klucz AES nie jest certyfikatem, to tylko 128 bitów od generatora liczb losowych kryptograficznie lub pochodzącego z hasła z użyciem algorytmu mieszającego, takiego jak PBKDF2. Sposób uzyskania tych bitów zależy od aplikacji. Protokół SSL/TLS musi negocjować losowy klucz, ale program do szyfrowania dysku twardego wyprowadziłby klucz z hasła.

+0

Zaktualizowane pytanie z fragmentem kodu, w którym będzie używana generowana para kluczy. Mam nadzieję, że wyjaśniłem wszelkie zamieszanie. Ale, tak, jestem początkującym w kryptografii. : P –

5

Trzeba tylko określić różne storetype

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

Powiązane problemy