RFR: 8331008: Implement JEP 478: Key Derivation Function API (Preview) [v16]
Weijun Wang
weijun at openjdk.org
Thu Aug 29 00:56:30 UTC 2024
On Wed, 28 Aug 2024 20:44:10 GMT, Kevin Driver <kdriver at openjdk.org> wrote:
>> Introduce an API for Key Derivation Functions (KDFs), which are cryptographic algorithms for deriving additional keys from a secret key and other data. See [JEP 478](https://openjdk.org/jeps/478).
>>
>> Work was begun in [another PR](https://github.com/openjdk/jdk/pull/18924).
>
> Kevin Driver has updated the pull request incrementally with two additional commits since the last revision:
>
> - consistency with wording for addIKM and addSalt
> - another round of code review comments
Some comments on the latest commits.
src/java.base/share/classes/javax/crypto/spec/HKDFParameterSpec.java line 163:
> 161: *
> 162: * @implNote An implementation should concatenate the input keying
> 163: * materials into a single value once all components are available.
I'm not sure what "once all components are available" means. Technically, it's "...into a single value and pass it to the HKDF-Extract step".
Also, this method is for end users. The `@implNote` should be added to `ikms` which is called by an implementation. There you can tell the implementation to do the concatenation.
src/java.base/share/classes/javax/crypto/spec/HKDFParameterSpec.java line 287:
> 285: *
> 286: * @implNote HKDF implementations will enforce that the length is less than
> 287: * 255 * HMAC length.
It will also check the size of `prk`.
src/java.base/share/classes/javax/crypto/spec/HKDFParameterSpec.java line 322:
> 320: * Returns an unmodifiable {@code List} of input keying material values
> 321: * in the order they were added. Returns an empty list if there are no
> 322: * input keying material values.
Sean asked about where do the byte array IKMs go. Here you should mention that an IKM added by `{@link #addIKM(byte[])}` is converted to a `SecretKeySpec` object. Same for `salts`. Same as in `ExtractThenExpand`.
src/java.base/share/classes/javax/crypto/spec/HKDFParameterSpec.java line 365:
> 363: * modification
> 364: * @param length
> 365: * the length of the output keying material (must be > 0 and < 255 *
Make the same change on the upper limit of `length` as line 286.
src/java.base/share/classes/javax/crypto/spec/HKDFParameterSpec.java line 431:
> 429: * modification
> 430: * @param length
> 431: * the length of the output keying material (must be > 0 and < 255 *
Maybe you don't need to talk about the length restriction here. The rule is at input.
-------------
PR Review: https://git.openjdk.org/jdk/pull/20301#pullrequestreview-2267476500
PR Review Comment: https://git.openjdk.org/jdk/pull/20301#discussion_r1735433495
PR Review Comment: https://git.openjdk.org/jdk/pull/20301#discussion_r1735427784
PR Review Comment: https://git.openjdk.org/jdk/pull/20301#discussion_r1735428673
PR Review Comment: https://git.openjdk.org/jdk/pull/20301#discussion_r1735429361
PR Review Comment: https://git.openjdk.org/jdk/pull/20301#discussion_r1735429901
More information about the security-dev
mailing list