> RFC 2631 has not be crystal clear on this I am afraid,

and

> NIST SP800-56A  (appendix C.1) make it clear

Thanks, Mike/Valerie

For the record, I wasn't disagreeing with the approach or the need to do this, just pointing out that RFC 2631 wasn't authoritative on the matter for the RAW operation's data representation. As mentioned, 800-56A:C1 is a better reference/justification.

Brad



On 3/1/2012 2:08 PM, Michael StJohns wrote:
Hi Brad -

The output of the DH calculation needs to preserve leading zeros.

The RFC unfortunately doesn't specify the Integer to Byte conversion primitive, 
but both X9.42 and the equivalent text in NIST SP800-56A  (appendix C.1) make it 
clear that the conversion from Integer to Byte string ends up with a Byte string 
of length N where N is the smallest integer where  8^N>=  the number of bits of 
the prime field.

Those "RAW" bytes are the input into the KDF functions and have to exactly match to get a key 
output value that matches.  (E.g. hash of "00 01 02 03" is different than the hash of "01 02 
03" even though both represent the exact same integer).

In any event, the RFC isn't controlling - the RFC is a profile of the actual 
standard X9.42.

Mike



At 02:00 AM 3/1/2012, Brad Wetmore wrote:


On 2/21/2012 5:33 PM, Valerie (Yu-Ching) Peng wrote:
Brad,

Can you please review the fixes for the following 2 bugs:

    * 7146728: Inconsistent length for the generated secret using DH key
      agreement impl from SunJCE and PKCS11
          o http://cr.openjdk.java.net/~valeriep/7146728/webrev.00/

        This impacts both SunJCE provider and SunPKCS11 provider. The
        implementations are inconsistent within SunJCE provider itself
        between the engineGenerateSecret() and
        engineGenerateSecret(byte[], int). Given that RFC 2631 specifies
        the leading 0s must be preserved so the generated secret has as
        many octets as the prime P,

Just to be clear here, you're referring to Section 2.1.2 of 2631, which is just one of the DH Key 
agreement variants (based on X9.42) for generating Keying Material from secret keys obtained from a 
"raw" DH calculations, and is then subject later SHA1 manipulations, right?  This method 
provides motivation/incentive to output our secret keys with the same lengths, but I don't think 
this RFC makes any claims that the general output of "raw" DH key agreement operation 
must be the same length.

I'll take another look over the code tomorrow.

Thanks,

Brad


I have changed both SunJCE and
        SunPKCS11 provider to do so. When testing against Solaris and
        NSS libraries, Solaris preserves the leading 0s while NSS trims
        it off, thus similar handling is also needed in SunPKCS11 provider.

    * 7130959: Tweak 7058133 fix for JDK 8 (javah makefile changes)
          o http://cr.openjdk.java.net/~valeriep/7130959/webrev.00/

        Instead of using the -Xbootclasspath, switching over to use
        -boothclasspath for consistency with the backported changes in
        the update releases for earlier JDK, e.g. 7u.

Thanks,
Valerie



Reply via email to