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.petc...@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
> 

Reply via email to