Il KeyPairGenerator EC standard JDK è adatto all'uso con gli algoritmi ECDSA e ECDH?

1

Ho visto vari riferimenti sul web per generare Curve ellittiche KeyPair s in Java, e i due esempi più comunemente citati (ovviamente) utilizzano il provider JDK predefinito e BouncyCastle.

Ma ciò che mi confonde è che il provider predefinito JDK supporta un singolo KeyPairGenerator nome dell'algoritmo di EC mentre BouncyCastle supporta anche questo e due ulteriori nomi di algoritmo distinti di ECDSA e ECDH :

Esempio di provider predefinito JDK:

KeyPairGenerator g = KeyPairGenerator.getInstance("EC");
ECGenParameterSpec spec = new ECGenParameterSpec("secp256r1");
g.initialize(spec);
KeyPair keyPair = g.generateKeyPair();

Esempio di fornitore di BouncyCastle ECDSA :

KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA", "BC");
ECGenParameterSpec spec = new ECGenParameterSpec("secp256r1");
g.initialize(spec);
KeyPair keyPair = g.generateKeyPair();

Esempio di fornitore di BouncyCastle ECDH :

KeyPairGenerator g = KeyPairGenerator.getInstance("ECDH", "BC");
ECGenParameterSpec spec = new ECGenParameterSpec("secp256r1");
g.initialize(spec);
KeyPair keyPair = g.generateKeyPair();

In sintesi, il provider BouncyCastle supporta tutti e tre i nomi degli algoritmi, EC , ECDSA e ECDH mentre il provider predefinito JDK supporta solo EC .

Perché la discrepanza? C'è qualche differenza significativa nelle chiavi risultanti utilizzate in uno qualsiasi di questi approcci?

    
posta Les Hazlewood 02.08.2018 - 19:46
fonte

1 risposta

1

La documentazione di Oracle Java è un po 'scarna sull'argomento, ma assomiglia al SunJCE, una chiave generata come EC può essere usata con ECDH o ECDSA. ( fonte ):

(Nonsonounespertodicurveellittiche,ma)Inteoria,ritengochei parametri di dominio per ECDH e ECDSA hanno la stessa forma, cioè l'equazione della curva e un punto base G

(CURVE, G)

( Vedrai spesso il modulo espanso

(p, a, b, G, n, h)

dove p, a, b è l'equazione della curva e n, h sono valori derivati da G , fornito per salvare il calcolo )

E i keypairs per entrambi gli algoritmi sono gli stessi, ovvero:

priv_key: an integer d in [1, n-1]
pub_key: a point on the curve Q = (x,y) = d*G

Bottom line: Sì, le chiavi sono intercambiabili tra ECDH e ECDSA. Dopo aver esplorato la documentazione Oracle, sono troppo pigro per passare attraverso Bouncy Castle, ma suppongo che EC , ECDH e ECDSA siano tutti alias della stessa cosa, messi lì per evitare confusione.

    
risposta data 02.08.2018 - 23:11
fonte

Leggi altre domande sui tag