RFR: 8343232: PKCS#12 KeyStore support for RFC 9579: Use of Password-Based Message Authentication Code 1 (PBMAC1)

Weijun Wang weijun at openjdk.org
Fri Sep 5 13:45:12 UTC 2025


On Thu, 3 Apr 2025 22:58:39 GMT, Mark Powers <mpowers at openjdk.org> wrote:

> [JDK-8343232](https://bugs.openjdk.org/browse/JDK-8343232)

I cannot find a place how a new keystore can be generated using the new algorithm. I added `-J-Dkeystore.pkcs12.macAlgorithm=PBEWithHmacSHA256` to a keytool command and it fails:

$ keytool -keystore ks -keyalg ec -storepass changeit -genkeypair -alias a -dname CN=a -J-Dkeystore.pkcs12.macAlgorithm=PBEWithHmacSHA256 -debug
Command line args: [-keystore, ks, -keyalg, ec, -storepass, changeit, -genkeypair, -alias, a, -dname, CN=a, -debug]
Generating 384-bit EC (secp384r1) key pair and self-signed certificate (SHA384withECDSA) with a validity of 90 days
	for: CN=a
keytool error: java.io.IOException: Integrity check failed: java.security.NoSuchAlgorithmException: Algorithm HmacPBEHMACSHA256 not available
Exception in thread "main" java.io.IOException: Integrity check failed: java.security.NoSuchAlgorithmException: Algorithm HmacPBEHMACSHA256 not available
	at java.base/sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:2204)
	at java.base/sun.security.util.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:226)
	at java.base/java.security.KeyStore.load(KeyStore.java:1502)
	at java.base/java.security.KeyStore.getInstance(KeyStore.java:1824)
	at java.base/java.security.KeyStore.getInstance(KeyStore.java:1708)
	at java.base/sun.security.tools.keytool.Main.doCommands(Main.java:1396)
	at java.base/sun.security.tools.keytool.Main.run(Main.java:422)
	at java.base/sun.security.tools.keytool.Main.main(Main.java:403)
Caused by: java.security.NoSuchAlgorithmException: Algorithm HmacPBEHMACSHA256 not available
	at java.base/javax.crypto.Mac.getInstance(Mac.java:192)
	at java.base/sun.security.pkcs12.PKCS12KeyStore.processMacData(PKCS12KeyStore.java:1939)
	at java.base/sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:2198)
	... 7 more

The exception above is thrown after keytool generated the keystore and try to read some info from inside. The pkcs12 file seems invalid, its MacData is still the old format (not PBMAC1) with a problematic algorithm:

...
03CB:004C  [2]     SEQUENCE
03CD:0030  [20]         SEQUENCE
03CF:000C  [200]             SEQUENCE
03D1:000A  [2000]                 OID 1.2.840.113549.2.9 (HmacSHA256)
03DB:0022  [201]             OCTET STRING  (1410868021, 32 bytes)
                              0000: 5F 0D EA C5 9F 2B 66 B3   5D 7D A4 2A 13 CF EF E6  _....+f.]..*....
                              0010: 09 D3 E1 57 6D D2 DB 14   AB B3 18 B0 F5 E3 4C B9  ...Wm.........L.
03FD:0016  [21]         OCTET STRING  (-1902982241, 20 bytes)
                          0000: 23 7C B7 7C AC BB 38 E7   23 15 69 15 43 F9 FB CC  #.....8.#.i.C...
                          0010: C7 C7 92 0F                                        ....
0413:0004  [22]         INTEGER 10000

The OID at position [2000] used to be SHA-256.

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

PR Comment: https://git.openjdk.org/jdk/pull/24429#issuecomment-3258401867


More information about the security-dev mailing list