RFR CSR for 8213400: Support choosing curve name in keytool keypair generation

Adam Petcher adam.petcher at oracle.com
Thu Nov 8 15:03:36 UTC 2018


On 11/7/2018 8:53 PM, Weijun Wang wrote:

> Oh, I didn't know that.
>
> To make sure -keyalg matches KeyPairGenerator.getInstance(), I'd like to support it. If I read the impl correctly, you don't need to initialize it anymore and if you really want to initialize it the params must be the same. Currently keytool always calls initialize(). In this case, there will be no default -keysize, and initializa() will be not be called if user has not specified one. If user provides -groupname or -keysize just use it and keytool fails if API call fails.

This is correct. If you are using the "X25519" and "X448" algorithm 
name, then there is no need to initialize with parameters, because they 
are decided by the algorithm name. You can still initialize, and 
different providers may be more permissive than others if you try to use 
different parameters than what is specified by the algorithm name. For 
example: KeyPairGenerator.getInstance("X448").initialize(255). SunEC is 
very strict, and will not allow this sort of thing.

X25519/X448 keys can only be used for KeyAgreement, so they aren't 
supported in keytool anyway, right? If this is the case, then you don't 
need to worry about adding any code to keytool for them. Though I expect 
EdDSA to work in a similar way (algorithm names "Ed25519" and "Ed448"). 
Still, I don't know if it is worthwhile to add special code for it. For 
all algorithms, if no -keysize or -groupname is specified, then keytool 
could skip the initialize on the KPG, and the implementation defaults 
(if available) will be used. The hard part is deciding whether to emit a 
warning in this case, and that will probably be algorithm-specific.

>> On Nov 8, 2018, at 8:01 AM, Xuelei Fan <xuelei.fan at oracle.com> wrote:
>>
>> On 11/7/2018 3:38 PM, Weijun Wang wrote:
>>> This sounds a little misleading to me. Alg name and alg params are 2 different things. This is like asking user to call KeyPairGenerator.getInstance("secp256r1").
>> Well, KeyPairGenerator.getInstance("x25519") is a case that JDK 11 has supported now.
>>
>> Otherwise, there is a need to check the conflict of alg name and group name.

This only works because "X25519" (and "X448") is both an algorithm name 
and a parameter spec name. This makes sense for X25519/X448, but not for 
all algorithms.

I don't think there is any need to check for algorithm/group conflicts 
in keytool, because it is checked in the crypto provider already. All 
keytool needs to do is pass down the algorithm name and group name (as a 
NamedParameterSpec/ECGenParameterSpec) and see if it works. If we want 
to support "secp256r1" in -keyalg, then we can accomplish that by adding 
it as an algorithm name for KeyPairGenerator. Though I'm not sure this 
is a good idea.



More information about the security-dev mailing list