Conceptual feedback on new ECC JEP

Adam Petcher adam.petcher at oracle.com
Tue Sep 11 15:07:27 UTC 2018


On 9/10/2018 7:49 PM, Xuelei Fan wrote:

> The motivation of the JEP is that some formulas may be more easier to 
> expose attacks.  It's true that the formulas impact the security level 
> of the implementation.  I was just wondering if the JEP proposed 
> formulas have been well analyze.  A standard or formal recommendation 
> may indicate the good quality of the formulas.

Thanks. I added this comment to the JEP under "Risks and Assumptions".

As far as I know, the exact EC formulas that are usually implemented 
have never been standardized. The standards give a specification for 
point addition in affine coordinates, but that is not what is 
implemented. I admit that the novelty of the proposed formulas presents 
some additional risk, but the formulas in SunEC were novel when they 
were implemented, too.

I'd like to hear more opinions about the perceived risk of using 
formulas from the academic literature, if anyone has them. It's worth 
noting that some of these academic formulas have already been 
implemented in other crypto/TLS libraries.

>
> It's a concern to me that interoperability is listed as "non-goals".  
> In general,  it may introduce a lot of problems in the current JCE 
> framework.  I don't know your detailed design yet, and not sure if you 
> are able to mitigate the impact.
>
> Looks like the debate was mainly about the BigInteger.   If the keys 
> are used in the same provider, I don't think the BigInteger is a 
> problem as you can extend a private BigInteger that you like.  If the 
> keys are use between two providers, add a thine clue to export/import 
> BigInteger may be worthy for provider interoperability.

I reworded that part of the JEP, because it was misleading. Now it more 
clearly indicates that interoperability with providers that only support 
BigInteger private keys is out of scope.

I still haven't been convinced that this lack of interoperability is a 
significant problem. In the proposed design, the new KeyFactory will not 
support ECPrivateKeySpec, and the implementation will produce private 
keys that inherit from PrivateKey, but not ECPrivateKey. Specifically, 
what problems in JCE are introduced by this design? How are these 
interoperability issues different from the ones you encounter with a 
PKCS11 provider that doesn't export private keys? If the developer wants 
more interoperability, why not use SunEC? If we decide that we want the 
new implementation to have better interoperability in the future, does 
something prevent us from enhancing it? These questions are for anyone 
who can help me understand the objections that have been raised related 
to interoperability.

>
> I'm a little bit nervous about the two providers design.  It simplify 
> the initial crypto implementation, but left the complexity to 
> developers and sustaining.   I don't have a good sense about how to 
> use them in JSSE.  What if the proposed formulas is vulnerable in the 
> future?

I don't see any reason for a two-provider design to be more complex than 
a one-provider design. The two providers could even share code, but I 
don't think that is necessarily a good idea. Also, I'm not opposed to 
putting everything in one provider, with some sort of property to choose 
the behavior. But the provider system already exists, and it seems to 
work fine for this purpose, so I would rather use it.

Here is a proposal for how we can make the two-provider design work in JSSE:

1) We add the new provider to the list, with lower priority than SunEC
2) We add a "Branchless" property to the provider
3) We modify SunJSSE so that it sends all EC private keys to the 
provider using an encoded key spec. PKCS8EncodedKeySpec would work, but 
perhaps we could add a new type for raw encoded private keys, if necessary.
4) We add some provider selection code to SunJSSE that is used for EC, 
ECDH, and ECDSA. This code will loop through the providers (in priority 
order), looking for the first "Branchless" provider that supports the 
desired curve. If it doesn't find one, it will use the first provider 
that supports the desired curve.

I'm not sure how your question about vulnerability fits in here. If the 
formulas are vulnerable, we will fix them, if possible. Maybe if you 
restate the question, I'll have a better idea of what you are asking.




More information about the security-dev mailing list