RFR 8237218: Support NIST Curves verification in java implementation
Michael StJohns
mstjohns at comcast.net
Fri Feb 28 20:05:23 UTC 2020
Sorry - running behind on this thread.
In ECUtil.decodePoint(),
Since this code is open, I'm wondering if it might be useful to add the
checks specified in NIST SP800-186 Appendix D.1. or SP800-56Ar1 5.6.2.3
E.g.
> D.1.2 Montgomery Curves
> D.1.2.1 Partial Public Key Validation
> Inputs:
> 1. Montgomery curve MA,B defined over the prime field GF(p)
>
> 2. Point Q=(u, v) 1712
> Output: ACCEPT or REJECT Q as an affine point on MA,B.
> Process:
> 1. If Q is the point at infinity ∅, output REJECT.
> 2. Verify that both u and v are integers in the interval [0, p−1].
> Output REJECT if verification fails.
> 3. Verify that (u, v) is a point on the MA,B by checking that (u, v)
> satisfies the defining equation v2 = u (u2 + A u + 1) where
> computations are carried out in GF(p). Output REJECT if verification
> fails.
> 4. Otherwise output ACCEPT.
> D.1.2.2 Full Public Key Validation
> Inputs:
> 1. Montgomery curve MA,B defined over the prime field GF(p)
> 2. Point Q
> Output: ACCEPT or REJECT Q as a point on MA,B of order n.
> Process:
> 1. Perform partial public key validation on Q using the procedure of
> Appendix D.1.2.1. Output REJECT if this procedure outputs REJECT.
> 2. Verify that n Q = ∅. Output REJECT if verification fails.
> 3. Otherwise output ACCEPT.
This mainly ensures that the X/Y provided is actually a point on the
curve. The threat to receiving a bad public key is more on the ECDH
side, but this appears to be the code that would need to be modified so...
Later, Mike
On 2/20/2020 11:03 PM, Anthony Scarpino wrote:
> I'm ok with this update
>
> Tony
>
> On 2/19/20 5:35 AM, Weijun Wang wrote:
>> New webrev at
>>
>> http://cr.openjdk.java.net/~weijun/8237218/webrev.04/
>>
>> Only test change. For each signature, modify it a little and check if
>> verify fails.
>>
>> Thanks,
>> Max
>>
>>> On Feb 18, 2020, at 2:09 AM, Anthony Scarpino
>>> <anthony.scarpino at oracle.com> wrote:
>>>
>>> The change looks fine. I'm trusting that the existing Known Answer
>>> Tests are proving your verifySignedDigest() is correct.
>>>
>>> You may want to comment in the code that your test depends on these
>>> method names. I was going to suggest simplifying the all the
>>> verifySigned*() methods until I saw the test was dependent on it.
>>>
>>> Tony
>>>
>>>
>>> On 2/13/20 3:06 AM, Weijun Wang wrote:
>>>> Webrev updated at
>>>> http://cr.openjdk.java.net/~weijun/8237218/webrev.03/
>>>> The test is modified. Instead of adding a hacked ECDSASignature I'm
>>>> using JDI to detect if the Java impl or the native impl is used.
>>>> Two method names in ECDSASignature are modified to ease method
>>>> lookup in the test.
>>>> Thanks,
>>>> Max
>>>>> On Feb 11, 2020, at 7:52 PM, Weijun Wang <weijun.wang at oracle.com>
>>>>> wrote:
>>>>>
>>>>> Please take a review at
>>>>>
>>>>> http://cr.openjdk.java.net/~weijun/8237218/webrev.02/
>>>>>
>>>>> A test is added that uses a patched ECDSASignature.java that
>>>>> exposes how the signature is verified.
>>>>>
>>>>> BTW, I also updated ECDSASignature.java a little to accept non
>>>>> SunEC keys, so that I can do some interop testing. If you believe
>>>>> this is unnecessary I can revert the change.
>>>>>
>>>>> Thanks,
>>>>> Max
>>>>>
>>>
>>
>
More information about the security-dev
mailing list