JDK-8342282 : Implement JEP 497: Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm
  • Type: CSR
  • Component: security-libs
  • Sub-Component: java.security
  • Priority: P3
  • Status: Closed
  • Resolution: Approved
  • Fix Versions: 24
  • Submitted: 2024-10-15
  • Updated: 2024-11-15
  • Resolved: 2024-11-15
Related Reports
Blocks :  
CSR :  
Description
Summary
-------

Implementing the Module-Lattice-Based Digital Signature Algorithm (ML-DSA) as defined in [FIPS 204](https://csrc.nist.gov/pubs/fips/204/final) in the Java Platform.

Problem
-------

ML-DSA is a quantum-resistant digital signature algorithm selected by the National Institute of Standards and Technology (NIST) to ensure the security of cryptographic systems in the post-quantum era. Supporting ML-DSA is critical to future-proof applications running on the Java Platform against the emerging threat of quantum computing, which can potentially break current cryptographic algorithms.

Solution
--------

1. Define `ML-DSA` and its three standardized parameter sets (`ML-DSA-44`, `ML-DSA-65`, and `ML-DSA-87`) as [Java Security Standard Algorithm Names](https://docs.oracle.com/en/java/javase/21/docs/specs/security/standard-names.html).
2. Implement `KeyPairGenerator`, `KeyFactory`, and `Signature` implementations of ML-DSA with these standardized parameter sets in the `SUN` security provider.
3. Create new `NamedParameterSpec` constants for `ML-DSA-44`, `ML-DSA-65`, and `ML-DSA-87`.
4. Add the algorithms to the `KeyPairGenerator`, `KeyFactory`, and `Signature` rows of [the SUN provider table of the JDK Security Providers Guide](https://docs.oracle.com/en/java/javase/23/security/oracle-providers.html#GUID-3A80CC46-91E1-4E47-AC51-CB7B782CEA7D).

Specification
-------------

First, in `src/java.base/share/classes/java/security/spec/NamedParameterSpec.java`, add the following lines:

    +    /**
    +     * The ML-DSA-44 parameters
    +     *
    +     * @since 24
    +     */
    +    public static final NamedParameterSpec ML_DSA_44
    +        = new NamedParameterSpec("ML-DSA-44");
    +
    +    /**
    +     * The ML-DSA-65 parameters
    +     *
    +     * @since 24
    +     */
    +    public static final NamedParameterSpec ML_DSA_65
    +        = new NamedParameterSpec("ML-DSA-65");
    +
    +    /**
    +     * The ML-DSA-87 parameters
    +     *
    +     * @since 24
    +     */
    +    public static final NamedParameterSpec ML_DSA_87
    +        = new NamedParameterSpec("ML-DSA-87");

Second, in the Java Security Standard Algorithm Names document, add the following lines to the `KeyPairGenerator` section:

    ---------------  --------------------------------------------------------------
    Algorithm Name   Description
    ---------------  --------------------------------------------------------------
    ML-DSA           Generates keypairs for the Module-Lattice-Based Digital Signature Algorithm
                     (ML-DSA) as defined in
                     [FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).
                     This algorithm supports keys with ML-DSA-44, ML-DSA-65,
                     and ML-DSA-87 parameter sets.

    ML-DSA-44        Generates keypairs for the Module-Lattice-Based Digital Signature Algorithm
                     (ML-DSA) using the ML-DSA-44 parameter set as defined in
                     [FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).

    ML-DSA-65        Generates keypairs for the Module-Lattice-Based Digital Signature Algorithm
                     (ML-DSA) using the ML-DSA-65 parameter set as defined in
                     [FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).

    ML-DSA-87        Generates keypairs for the Module-Lattice-Based Digital Signature Algorithm
                     (ML-DSA) using the ML-DSA-87 parameter set as defined in
                     [FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).

Add the following lines to the `KeyFactory` section:

    ---------------  --------------------------------------------------------------
    Algorithm Name   Description
    ---------------  --------------------------------------------------------------
    ML-DSA           Keys for the Module-Lattice-Based Digital Signature Algorithm
                     (ML-DSA) as defined in
                     [FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).
                     This algorithm supports keys with ML-DSA-44, ML-DSA-65,
                     and ML-DSA-87 parameter sets.

    ML-DSA-44        Keys for the Module-Lattice-Based Digital Signature Algorithm
                     (ML-DSA) using the ML-DSA-44 parameter set as defined in
                     [FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).

    ML-DSA-65        Keys for the Module-Lattice-Based Digital Signature Algorithm
                     (ML-DSA) using the ML-DSA-65 parameter set as defined in
                     [FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).

    ML-DSA-87        Keys for the Module-Lattice-Based Digital Signature Algorithm
                     (ML-DSA) using the ML-DSA-87 parameter set as defined in
                     [FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).

Add the following lines to the `Signature` section:

    ------------------------------  --------------------------------------------------------------------------------------
    Algorithm Name                  Description
    ------------------------------  --------------------------------------------------------------------------------------
    ML-DSA                          The Module-Lattice-Based Digital Signature Algorithm
                                    (ML-DSA) as defined in
                                    [FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).
                                    This algorithm supports keys with ML-DSA-44, ML-DSA-65,
                                    and ML-DSA-87 parameter sets.

    ML-DSA-44                       The Module-Lattice-Based Digital Signature Algorithm
                                    (ML-DSA) using the ML-DSA-44 parameter set as defined in
                                    [FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).

    ML-DSA-65                       The Module-Lattice-Based Digital Signature Algorithm
                                    (ML-DSA) using the ML-DSA-65 parameter set as defined in
                                    [FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).

    ML-DSA-87                       The Module-Lattice-Based Digital Signature Algorithm
                                    (ML-DSA) using the ML-DSA-87 parameter set as defined in
                                    [FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).

Add the following lines to the `NamedParameterSpec` section:

    ------          -----------------------------------
    Name            Description
    ------          -----------------------------------
    ML-DSA-44       The Module-Lattice-Based Digital Signature Algorithm
                    (ML-DSA) using the ML-DSA-44 parameter set as defined in
                    [FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).

    ML-DSA-65       The Module-Lattice-Based Digital Signature Algorithm
                    (ML-DSA) using the ML-DSA-65 parameter set as defined in
                    [FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).

    ML-DSA-87       The Module-Lattice-Based Digital Signature Algorithm
                    (ML-DSA) using the ML-DSA-87 parameter set as defined in
                    [FIPS 204](https://csrc.nist.gov/pubs/fips/204/final).


Comments
Moving to Approved.
15-11-2024

I think we should also mention that we will add these algorithms to the KeyPairGenerator, KeyFactory, and Signature rows of the SUN provider table of the JDK Providers Guide.
08-11-2024

Moving to Provisional.
06-11-2024