Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8342630

Implement JEP 496: Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism

XMLWordPrintable

    • Icon: CSR CSR
    • Resolution: Approved
    • Icon: P3 P3
    • 24
    • security-libs
    • None
    • source
    • minimal
    • Java API, Other
    • SE

      Summary

      Implementing the Module-Lattice-Based Digital Key-Encapsulation Mechanism (ML-KEM) as defined in FIPS 203 in the Java Platform.

      Problem

      ML-KEM 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-KEM 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-KEM and its three standardized parameter sets (ML-KEM-512, ML-KEM-768, and ML-KEM-1024) as Java Security Standard Algorithm Names.
      2. Implement KeyPairGenerator, KeyFactory, and KEM implementations of ML-KEM with these standardized parameter sets in the SunJCE security provider.
      3. Create new NamedParameterSpec constants for ML-KEM-512, ML-KEM-768, and ML-KEM-1024.
      4. Add the algorithms to the KeyPairGenerator, KeyFactory and KEM rows of the SunJCE provider table of the JDK Security Providers Guide.

      Specification

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

      /**
       * The ML-KEM-512 parameters
       *
       * @since 24
       */
      public static final NamedParameterSpec ML_KEM_512
              = new NamedParameterSpec("ML-KEM-512");
      
      /**
       * The ML-KEM-768 parameters
       *
       * @since 24
       */
      public static final NamedParameterSpec ML_KEM_768
              = new NamedParameterSpec("ML-KEM-768");
      
      /**
       * The ML-KEM-1024 parameters
       *
       * @since 24
       */
      public static final NamedParameterSpec ML_KEM_1024
              = new NamedParameterSpec("ML-KEM-1024");

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

      ---------------  --------------------------------------------------------------
      Algorithm Name   Description
      ---------------  --------------------------------------------------------------
      ML-KEM           Generates keypairs for the Module-Lattice-Based Key-Encapsulation Mechanism
                       (ML-KEM) as defined in
                       [FIPS 203](https://csrc.nist.gov/pubs/fips/203/final).
                       This algorithm supports keys with ML-KEM-512, ML-KEM-768,
                       and ML-KEM-1024 parameter sets.
      
      ML-KEM-512       Generates keypairs for the Module-Lattice-Based Key-Encapsulation Mechanism
                       (ML-KEM) using the ML-KEM-512 parameter set as defined in
                       [FIPS 203](https://csrc.nist.gov/pubs/fips/203/final).
      
      ML-KEM-768       Generates keypairs for the Module-Lattice-Based Key-Encapsulation Mechanism
                       (ML-KEM) using the ML-KEM-768 parameter set as defined in
                       [FIPS 203](https://csrc.nist.gov/pubs/fips/203/final).
      
      ML-KEM-1024      Generates keypairs for the Module-Lattice-Based Key-Encapsulation Mechanism
                       (ML-KEM) using the ML-KEM-1024 parameter set as defined in
                       [FIPS 203](https://csrc.nist.gov/pubs/fips/203/final).

      Add the following lines to the KeyFactory section:

      ---------------  --------------------------------------------------------------
      Algorithm Name   Description
      ---------------  --------------------------------------------------------------
      ML-KEM           Keys for the Module-Lattice-Based Key-Encapsulation Mechanism
                       (ML-KEM) as defined in
                       [FIPS 203](https://csrc.nist.gov/pubs/fips/203/final).
                       This algorithm supports keys with ML-KEM-512, ML-KEM-768,
                       and ML-KEM-1024 parameter sets.
      
      ML-KEM-512       Keys for the Module-Lattice-Based Key-Encapsulation Mechanism
                       (ML-KEM) using the ML-KEM-512 parameter set as defined in
                       [FIPS 203](https://csrc.nist.gov/pubs/fips/203/final).
      
      ML-KEM-768       Keys for the Module-Lattice-Based Key-Encapsulation Mechanism
                       (ML-KEM) using the ML-KEM-768 parameter set as defined in
                       [FIPS 203](https://csrc.nist.gov/pubs/fips/203/final).
      
      ML-KEM-1024      Keys for the Module-Lattice-Based Key-Encapsulation Mechanism
                       (ML-KEM) using the ML-KEM-1024 parameter set as defined in
                       [FIPS 203](https://csrc.nist.gov/pubs/fips/203/final).

      Add the following lines to the KEM section:

      ------------------  --------------------------------------------------------------------------------------
      Algorithm Name      Description
      ------------------  --------------------------------------------------------------------------------------
      ML-KEM              The Module-Lattice-Based Key-Encapsulation Mechanism
                          (ML-KEM) as defined in
                          [FIPS 203](https://csrc.nist.gov/pubs/fips/203/final).
                          This algorithm supports keys with ML-KEM-512, ML-KEM-768,
                          and ML-KEM-1024 parameter sets.
      
      ML-KEM-512          The Module-Lattice-Based Key-Encapsulation Mechanism
                          (ML-KEM) using the ML-KEM-512 parameter set as defined in
                          [FIPS 203](https://csrc.nist.gov/pubs/fips/203/final).
      
      ML-KEM-768          The Module-Lattice-Based Key-Encapsulation Mechanism
                          (ML-KEM) using the ML-KEM-768 parameter set as defined in
                          [FIPS 203](https://csrc.nist.gov/pubs/fips/203/final).
      
      ML-KEM-1024         The Module-Lattice-Based Key-Encapsulation Mechanism
                          (ML-KEM) using the ML-KEM-1024 parameter set as defined in
                          [FIPS 203](https://csrc.nist.gov/pubs/fips/203/final).

      Add the following lines to the NamedParameterSpec section:

      ------          -----------------------------------
      Name            Description
      ------          -----------------------------------
      ML-KEM-512      The Module-Lattice-Based Key-Encapsulation Mechanism
                      (ML-KEM) using the ML-KEM-512 parameter set as defined in
                      [FIPS 203](https://csrc.nist.gov/pubs/fips/203/final).
      
      ML-KEM-768      The Module-Lattice-Based Key-Encapsulation Mechanism
                      (ML-KEM) using the ML-KEM-768 parameter set as defined in
                      [FIPS 203](https://csrc.nist.gov/pubs/fips/203/final).
      
      ML-KEM-1024     The Module-Lattice-Based Key-Encapsulation Mechanism
                      (ML-KEM) using the ML-KEM-1024 parameter set as defined in
                      [FIPS 203](https://csrc.nist.gov/pubs/fips/203/final).

            mullan Sean Mullan
            mullan Sean Mullan
            Alan Bateman, Sean Mullan
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: