2016-03-27 28 views
1

Ich versuche zu verstehen, wie ich die ECDSA-Kurve beim Generieren eines Schlüsselpaars mit Java (7) keytool auswählen kann.Auswählen der Kurve beim Generieren eines ECDSA-Schlüsselpaars mit Java keytool

Es würde auch helfen, herauszufinden, welche Kurve mit den Standardeinstellungen verwendet wurde. Hier

ist der Befehl, den ich verwenden:

keytool -genkeypair -keyalg EC -alias myAlias -keystore myKeystore.jks -storepass myStorepass -keypass myKeypass -validity 730 -keysize 256 -dname "CN=myCn, OU=myOu, O=myO, C=myC" -v 

Antwort

-1

Die Oracle bereitgestellt Java 7 Implementierung verwendet nur die SEC-Kurven. Diese sind identisch mit den standardisierten NIST-Kurven. In Ihrem Fall ist sicher, dass P-256 verwendet wurde. In Java wird jedoch der ursprüngliche SEC-Name verwendet: "secp256r1".


So könnte man die privaten Schlüssel abrufen und kodieren:

KeyStore store = KeyStore.getInstance("JKS"); 
store.load(new FileInputStream(args[0]), args[1].toCharArray()); 
ECPrivateKey key = (ECPrivateKey) store.getKey(args[2], args[3].toCharArray()); 
System.out.println(Base64.getEncoder().encodeToString(key.getEncoded())); 

Dann ASN.1 decode den Inhalt:

SEQUENCE (3 elem) 
    INTEGER 0 
    SEQUENCE (2 elem) 
    OBJECT IDENTIFIER 1.2.840.10045.2.1 
    OBJECT IDENTIFIER 1.2.840.10045.3.1.7 
    OCTET STRING (1 elem) 
    SEQUENCE (2 elem) 
     INTEGER 1 
     OCTET STRING (32 byte) E935A4475D495ADA18A791C1222D5A3424CF540BDE42802F588C664082D10808 

Und dann lookup the value für den zweiten Object Identifier (OID): 1.2. 840.10045.3.1.7:

Deckt "secp256r1" ab, die Domäne der elliptischen Kurve, die in "SEC 2: Empfohlene Parameter der elliptischen Kurven-Domäne" aufgeführt ist. Die SEC-Kurven (Standards for Efficient Cryptography) stellen Parameterbereiche mit elliptischen Kurven bei allgemein erforderlichen Sicherheitsstufen zur Verwendung durch Implementierer von ECC-Standards wie ANSI X9.62, ANSI X9.63, IEEE P1363 und anderen Standards bereit.

0

Für EC können Sie -keysize verwenden, um eine Kurve anzugeben!

Sie können auch etwas Java-Code schreiben, um dies auf eine sauberere Weise zu tun.

Werfen Sie einen Blick auf https://github.com/alokmenghrajani/ec-keytool. Es ist ein einfaches Tool, mit dem Sie JCEKS-Einträge mit bestimmten Kurven erstellen oder sie auf eine Weise anzeigen können, die etwas besser ist als das, was keytool ausgibt.