RFR 8171279: Support X25519 and X448 in TLS 1.3
Xuelei Fan
xuelei.fan at oracle.com
Thu Sep 6 16:10:16 UTC 2018
On 9/5/2018 12:49 PM, Adam Petcher wrote:
> New webrev: http://cr.openjdk.java.net/~apetcher/8171279/webrev.02/
>
> On 9/5/2018 1:35 PM, Xuelei Fan wrote:
>
>> On 9/5/2018 10:09 AM, Adam Petcher wrote:
>>
>>> Is there some place in the code where JSSE is doing something too
>>> complicated related to these parameters?
>>>
>> Yes, the algorithm name is sufficient, I'm not sure the necessary to
>> use XECParameters in sun.security.util.
>
> The algorithm name is not quite sufficient. See the new methods that
> were added to ECUtil that encode/decode public keys. We also need to
> know the key length (which is in XECParameters) in order to
> encode/decode public keys.
>
I did not get your point. The public key sizes for x25519 and x448 are
fixed, right?
>>
>>>
>>> I simply continued the pattern that was used in DH and ECDH. We can
>>> use a different string here, but I worry that people will be
>>> surprised if DH and ECDH support "TlsPreMasterSecret" but XDH doesn't.
>> It could support "TlsPreMasterSecret", right? My concern is about not
>> limited to this one only.
>
> Yes, it supports "TlsPreMasterSecret" in the webrev now. Perhaps I'm not
> sure what you are suggesting here.
>
OKay, let me say it in another way.
Thank you for making it works with the SunJSSE provider as you use a
SunJSSE provider private algorithm name "TlsPreMasterSecret", and
implement the algorithm in the cyrpto provider. That's good.
The "TlsPreMasterSecret" is not a public one, and it is not expected to
be used in other JSSE provider. If I want to implement a JSSE provider
by myself, and I use the name "x25519", the crypto provider will deny
it. So I have to use the "TlsPreMasterSecret" for my provider.
However, the name is not supported, and the name can be changed at
anytime in the future. How should I do to use the crypto provider for
my JSSE provider? Looks like no way to use the JDK cyrpto provider
unless I use the SunJSSE private name. Should I implement my own crypto
provider? I don't want to do that unless it is really necessary.
For the KeyAgreement.generateSecret(String algorithm) method, it seems
that the supported algorithms of each provider are missed in the
documentation. As may make the method hard to use.
This issue is not specific to XDH. I'm fine if you don't want to
address it in this update.
>>
>>>>
>>>> 3. NamedGroupFunctions
>>>> It might be more straightforward to define these functions in
>>>> NamedGroup. If comparing
>>>> nameGroup.getFunctions().getParameterSpec() and
>>>> namedGroup.getParameterSpec(), I'd prefer the latter.
>>>
>>> A simple way to accomplish this is to leave the structure alone and
>>> add methods in NamedGroup that pass through to the corresponding
>>> methods in NamedGroupFunctions. I made this change in the updated
>>> webrev. Let me know what you think.
>>>
>> It looks like a problem to me to use this before it constructed.
>> this.functions = new ECDHFunctions(this);
>>
>> and the use of new object for each named group is not effective. The
>> current NamedGroupFunctions abstract class does not sound good enough
>> to me, considering the numbers of the named groups.
>>
>> I have no idea so far, but I think you can improve it. Probably use
>> static methods?
>
> In the latest webrev, I changed it so there is a single static
> NamedGroupFunctions of each type, and the NamedGroup is passed in as the
> first argument to each method that requires it (rather than being a
> member of NamedGroupFunctions).
>
After the re-org, I guess you can put the inner classes in NamedGroup
enum and declare them as private? The getFunctions() method may be
unnecessary then.
Thanks,
Xuelei
More information about the security-dev
mailing list