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

HSS/LMS Signature Verification

XMLWordPrintable

    • Icon: CSR CSR
    • Resolution: Approved
    • Icon: P3 P3
    • 21
    • security-libs
    • None
    • behavioral
    • minimal
    • New signature algorithm.
    • Other
    • SE

      Summary

      Add a new standard signature algorithm named "HSS/LMS", and provide new KeyFactory and Signature implementations for the algorithm. The KeyFactory only operates on public keys and the Signature only covers the verification part.

      The HSS/LMS algorithm is defined in RFC 8554: Leighton-Micali Hash-Based Signatures and NIST Special Publication 800-208.

      Problem

      The Leighton-Micali Signature (LMS) system, along with its multi-tree variant, the Hierarchical Signature System (HSS), is a stateful hash-based signature (HBS) scheme.

      It is believed that this algorithm will not be broken by the development of large-scale quantum computers.

      HSS/LMS is one of the two approved stateful HBS schemes listed in NIST Special Publication 800-208 published in October 2020. The Commercial National Security Algorithm Suite 2.0, published by NSA in September 2022, approves and recommends LMS as a quantum-resistant algorithm for software and firmware signing for National Security Systems.

      It is important for the JDK to support this algorithm to comply with CNSA 2.0 and provide a quantum-resistant signature algorithm.

      Solution

      Define a new standard algorithm name "HSS/LMS" for KeyFactory and Signature. This name was chosen to be consistent with the algorithm name used by other standards such as RFC 8708 (Use of the HSS/LMS Hash-Based Signature Algorithm in the Cryptographic Message Syntax (CMS)) and RFC 8778 (Use of the HSS/LMS Hash-Based Signature Algorithm with CBOR Object Signing and Encryption (COSE)).

      Provide KeyFactory and Signature implementations of this algorithm in the SUN provider. The implementations will only cover public key management and signature verification. This is because in the Introduction section, NIST SP 800-208 explicitly pointed out that:

      This recommendation requires that key and signature generation be performed in hardware cryptographic modules that do not allow secret keying material to be exported, even in encrypted form.

      An HSS/LMS PublicKey object generated by the generatePublic or translateKey methods of the KeyFactory implementation is serializable and uses java.security.KeyRep as its serialized representation. Its getAlgorithm returns "HSS/LMS" and its getFormat returns "X.509".

      The Signature implementation will throw an InvalidKeyException if its initSign method is called. The KeyFactory implementation will throw an InvalidKeySpecException if its generatePrivate method is called or if its getKeySpec method is called with an unsupported key or an unsupported key specification, or an InvalidKeyException if its translateKey method is called on an unsupported key.

      Note: The public key and signatures must be in HSS format, that is to say, the L header of the public key and the Npsk header of the signature must be present, even if it's only for a single tree LMS, where L = 1 and Npsk = 0. Plain LMS format is not supported.

      The object identifier for HSS/LMS is defined in RFC 8708, Section 3 as:

      id-alg-hss-lms-hashsig OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) smime(16) alg(3) 17 }

      We will support this object identifier as an OID alias for the standard name, i.e. "OID.1.2.840.113549.1.9.16.3.17".

      Specification

      In the Java Standard Algorithm Names page, in "KeyFactory Algorithms", add

      HSS/LMS Keys for the Leighton-Micali Signature (LMS) system with the Hierarchical Signature System (HSS) as defined in RFC 8554

      In "Signature Algorithms", add

      HSS/LMS The Leighton-Micali Signature (LMS) system with the Hierarchical Signature System (HSS) as defined in RFC 8554

      In JDK Provider Documentation, in the SUN provider section, add a name "HSS/LMS" in the "Signature" row.

            weijun Weijun Wang
            mullan Sean Mullan
            Sean Mullan
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: