RFR: 8248268: Support KWP in addition to KW

Valerie Peng valeriep at openjdk.java.net
Fri Mar 26 22:04:26 UTC 2021


On Thu, 25 Mar 2021 02:18:06 GMT, Valerie Peng <valeriep at openjdk.org> wrote:

>> Ping, anyone has time to review this?
>
>> 
>> 
>> _Mailing list message from [Michael StJohns](mailto:mstjohns at comcast.net) on [security-dev](mailto:security-dev at openjdk.java.net):_
>> 
>> On 3/23/2021 4:15 PM, Greg Rubin wrote:
>> 
>> > > 177:         System.out.println("Testing " + ALGO);
>> > > 178:         c = Cipher.getInstance(ALGO, "SunJCE");
>> > > 179:         for (int i = 0; i < MAX_KWP_PAD_LEN; i++) {
>> > > I see that here (and earlier) we do test all padding lengths. I'd still like some KATs generated by a known good implementation to ensure that we are not just compatible with ourselves.
>> 
>> http://csrc.nist.gov/groups/STM/cavp/documents/mac/kwtestvectors.zip has
>> the NIST test vectors.? See
>> https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/mac/KWVS.pdf
>> for details.
>> 
>> Mike
>> 
>> -------------- next part --------------
>> An HTML attachment was scrubbed...
>> URL: <https://mail.openjdk.java.net/pipermail/security-dev/attachments/20210323/e1a400db/attachment.htm>
> 
> Sure, I will add some, thanks Mike for the pointers.

Hi Mike,

Please find comments in line below.

> KeyWrapCipher.java:
> 
> > 212      * Sets the padding mechanism of this cipher. Currently, only
> > 213      * "NoPadding" scheme is accepted for this cipher.
> > 214      *
> > 215      * @param padding the padding mechanism
> > 216      *
> > 217      * @exception NoSuchPaddingException if the requested padding mechanism
> > 218      * does not match the supported padding scheme
> > 219      */
> > 220     @Override
> > 221     protected void engineSetPadding(String padding)
> > 222             throws NoSuchPaddingException {
> > 223         if ((this.padding == null && !"NoPadding".equalsIgnoreCase(padding)) ||
> > 224                 this.padding instanceof PKCS5Padding &&
> > 225                 "PKCS5Padding".equalsIgnoreCase(padding)) {
> > 226             throw new NoSuchPaddingException();
> > 227         }
> > 228     }
> 
> Shouldn't this be rejecting PKCS5Padding?

Right, will fix this and update the javadoc above as well.
 
> Actually, I keep wondering why this isn't? AES/KW/NoPadding,
> AES/KW/KWPPadding and AES/KW/AutoPadding where the latter doesn't take a
> user provided IV, but figures out which of the two default IV values to
> use based on whether the input is a multiple of the blocksize or not?
> 
> Decrypting is similar - do the decryption, and check which IV you get to
> figure out padded or not padded.

The way I view it, both KW and KWP are modes. For interoperability, I referenced the corresponding mechanism definition from PKCS#11 v3.0 and base the java transformation on the corresponding PKCS#11 mechanisms. As for AES/KW/AutoPadding, it's an interesting idea, is there any other provider or library support it? To encrypt data of any size, we can just use AES/KWP/NoPadding. Is there additional benefit for this AutoPadding scheme?

Thanks,
Valerie
> 
> Mike
> 
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: <https://mail.openjdk.java.net/pipermail/security-dev/attachments/20210323/0372393b/attachment-0001.htm>

-------------

PR: https://git.openjdk.java.net/jdk/pull/2404



More information about the security-dev mailing list