Conceptual feedback on new ECC JEP
Roger Riggs
Roger.Riggs at Oracle.com
Fri Sep 7 19:19:09 UTC 2018
Hi,
In general, System properties should be avoided, they add complexity to
configurations and
especially if they change sensitive behavior. In any case, the defaults
should be secure-by-default;
not the other way around.
Perhaps two different providers, one secure and one more secure.
$.02, Roger
On 9/7/2018 3:08 PM, Adam Petcher wrote:
> This is a good suggestion. I don't have particularly strong feelings
> about using separate providers vs a property in a single provider. I
> think the fundamental issues are the same, and this choice mostly
> affects API details.
>
> Do you think this should be a system property, security property, or
> something else? Should it be modifiable at any time? Perhaps it has to
> be in order to address Mike's desire to put the provider in
> "import/export mode". Would the property affect existing keys? Again,
> I think it would have to, so you can generate a key, turn off
> branchless mode, and then export it. What about curves other than
> P256, P384, and P521? We can't do branchless operations in those
> curves, so any attempt to use them when this property is enabled would
> result in an exception.
>
> The questions above are for everybody, if you have thoughts on any of
> this, please share. My initial thoughts are that using a property may
> give us some additional flexibility, and may improve the interface,
> but the main cost is additional complexity in the implementation,
> since we'll need to implement some checks that would otherwise be
> accomplished by provider selection and having separate code.
>
> On 9/7/2018 1:53 PM, Anthony Scarpino wrote:
>> Adam,
>>
>> I tend to agree with Mike that disallowing import/export of keys
>> using BigInteger is not the value of a branchless implementation. As
>> you point out in the JEP the provider is greatly hindered by this
>> design choice. I feel it would be better to implementing the
>> BigInteger parts and have a property to shut them off for a pure
>> branchless implementation. That should allow the provider to be used
>> in the default provider list and the ‘opt-in’ would be the property
>> to turn off BigInteger or any other branching situation. I am
>> concerned the desire for a purest provider will result in it being
>> unused. Documentation can be clear about the import/export situation,
>> the preference toward PKCS8EncodedKeySpec, and the property to lock
>> it down.
>>
>> Tony
>>
>>> On Aug 23, 2018, at 10:50 AM, Adam Petcher <adam.petcher at oracle.com>
>>> wrote:
>>>
>>> I'm starting work on yet another ECC JEP[1], this time with the goal
>>> of developing improved implementations of existing algorithms,
>>> rather than implementing new ones. The JEP will re-implement ECDH
>>> and ECDSA for the 256-, 384-, and 521-bit NIST prime curves. The new
>>> implementation will be all Java, and will resist side-channel
>>> attacks by not branching on secrets. It will go in a new provider
>>> which is not in the provider list in the java.security file by
>>> default. So it will need to be manually enabled by changing the
>>> configuration or putting the new provider name in the code. It will
>>> only support a subset of the API that is supported by the
>>> implementation in SunEC. In particular, it will reject any private
>>> keys with scalar values specified using BigInteger (as in
>>> ECPrivateKeySpec), and its private keys will not return scalar
>>> values as BigInteger (as in ECPrivateKey.getS()).
>>>
>>> Please take a look and send me any feedback you have. I'm especially
>>> looking for suggestions on how this new implementation should fit
>>> into the API. I would prefer to have it enabled by default, but I
>>> can't think of a way to do that without either branching on secrets
>>> in some cases (converting a BigInteger private key to an array) or
>>> breaking compatibility (throwing an exception when it gets a
>>> BigInteger private key).
>>>
>>> [1] https://bugs.openjdk.java.net/browse/JDK-8204574
>>>
>
More information about the security-dev
mailing list