Internet-Draft | QSC Keys for FALCON | October 2022 |
Vredendaal, et al. | Expires 26 April 2023 | [Page] |
This proposal defines key management approaches for the Quantum Safe Cryptographic (QSC) algorithm FALCON which has been selected for standardization by the NIST Post Quantum Cryptography (PQC) process. This includes key identification and key serialization. The purpose is to provide guidance such that the adoption of quantum safe algorithms is not hampered with the fragmented evolution of necessary key management standards. Early definition of key material standards will help expedite the adoption of new quantum safe algorithms and at the same time as improving interoperability between implementations and minimizing divergence across standards.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 26 April 2023.¶
Copyright (c) 2022 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
QSC algorithms being standardized in the NIST PQC Process have evolved through several rounds and iterations. Keys are neither easily identifiable nor compatible across rounds. It is also expected that algorithms will evolve after final candidates have been selected. The lack of binary compatibility between algorithm versions and variants means that it is important to clearly identify key material. Parallel to the NIST process, industry is evaluating the impact of adopting new PQC algorithms, in particular key management. Here it is important to define and standardize key serialization and encoding formats. Finally, we have seen that many platforms and protocols are very constrained when it comes to the amount of memory or space available for key objects. This makes it important to define and standardize key compression formats. This proposal addresses aspects of key identification and key serialization for the future NIST Digital Signature standard, FALCON. For the other schemes, see draft-uni-qsckeys-kyber, draft-uni-qsckeys-falcon, draft-uni-qsckeys-dilithium and the previous Internet-Draft [draft-uni-qsckeys-01]. This proposal will be updated when the final NIST standard for CRYSTALS-Kyber becomes available.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [RFC2119] .¶
Algorithm identification is important for several reasons:¶
The current standardization of quantum safe algorithms does not address the definition of serialization structures for keys. As a result, it has become commonplace for the cryptographic community working on and with these algorithms to define their own approaches. This leads to proprietary and internal representations for key material. This has certain advantages in terms of ease of experimentation while focusing on finding the best-performing QSC algorithms. In terms of longer-term support where algorithm versions change this is a problem. This proposal defines in section 2 a long-term structured key representation format useful to address the goals outlined above.¶
Algorithm and algorithm parameter information shall have ASN.1 type AlgorithmIdentifier as given in [RFC5280] and shall be extended by an pqcAlgorithmParameterName type in the optional parameters field:¶
AlgorithmIdentifier ::= SEQUENCE { algorithm OBJECT IDENTIFIER, - OID: algorithm and algo parameter parameters pqcAlgorithmParameterName OPTIONAL } pqcAlgorithmParameterName ::= PrintableString¶
FALCON consists of two different parameter sets. This memo attributes a name and a placeholder for an OID to the different parameter sets of FALCON. The following table gives an overview of the possible OIDs in the algorithm field and possible parameters set names in the parameters field of the AlgorithmIdentifier type. Each name or OID represents a single parameter set of given security. Details can be found in the next section.¶
|=========+=====+===============================================| | FALCON (PQC Digital Signature) | |=========+=====+===============================================| | falcon512-r3 | |---------+-----+-----------------------------------------------| | |ASN.1| {..*.. pqc-ds-falcon falcon512-r3} | | |dot. | | |---------+-----+-----------------------------------------------| | falcon1024-r3 | |---------+-----+-----------------------------------------------| | |ASN.1| {..*.. pqc-ds-falcon falcon1024-r3} | | |Dot | | |=========+=====+===============================================|
The private key format defined is from PKCS#8 [RFC5208] . PKCS#8 PrivateKeyInfo is defined as:¶
PrivateKeyInfo ::= SEQUENCE { version INTEGER -- PKCS#8 syntax ver privateKeyAlgorithm AlgorithmIdentifier -- see chapter above privateKey OCTET STRING, -- see chapter below attributes [0] IMPLICIT Attributes OPTIONAL }¶
Distributing a PQC private key requires a PKCS#8 PrivateKeyInfo with a joined PQC algorithm and algorithm parameter OID in the algorithm field of AlgorithmIdentifier and a PQC algorithm specific private key object in the privateKey field of PrivateKeyInfo. Both objects are defined in the specific algorithm sections of this document. For an overview see tables above and below.¶
RFC5280 subjectPublicKeyInfo is defined in as:¶
SubjectPublicKeyInfo := SEQUENCE { algorithm AlgorithmIdentifier -- see chapter above subjectPublicKey BIT STRING -- see chapter below }¶
Distributing a PQC public key requires a [RFC5480] subjectPublicKeyInfo with a joined PQC algorithm and algorithm parameter OID in the algorithm field of AlgorithmIdentifier and a PQC algorithm specific public key object in the subjectPublicKey field of subjectPublicKeyInfo. Both objects are defined in the specific algorithm sections of this document. For an overview see tables above and below.¶
The privateKey field in the PrivateKeyInfo type [RFC5480] is an OCTET STRING whose contents are the value of the private key. The interpretation of the content differs from PQC algorithm to algorithm. The subjectPublicKey field in the subjectPublicKeyInfo type [RFC5480] is a BIT STRING whose contents are the value of the public key. Here also the interpretation of the content differs from PQC algorithm to algorithm.¶
FALCON is a lattice-based signature scheme that uses the short integer solution problem (SIS) over NTRU lattices as its underlying hard problem.¶
FALCON uses OIDs to identify parameters sets.¶
|=========================+=====================================| | falcon512-r3 | |=========================+=====================================| | Parameter OID | {..*.. falcon512-r3} | | | <.> | | NIST Level Security | Level 1 | |-------------------------|-------------------------------------| | Parameters | Dimension/Degree n = 512 | | | Polynomial Phi = 1+x^n | | | Modulus q = 12289 | | | Max. signature square norm | | | floor (beta^2) = 34034726 | | | Standard deviation = 165.736617183 | | | sigma_{max} = 1.8205 | | | sigma_{min} = 1.27783369 | |=========================+=====================================| | falcon1024-r3 | |=========================+=====================================| | Parameter OID | {..*.. falcon1024-r3} | | | <.> | | NIST Level Security | Level 5 | |-------------------------|-------------------------------------| | Parameters | Dimension/Degree n = 1024 | | | Polynomial Phi = 1+x^n | | | Modulus q = 12289 | | | Max. signature square norm | | | floor (beta^2) = 34034726 | | | Standard deviation = 168.388571447 | | | sigma_{max} = 1.8205 | | | sigma_{min} = 1.298280334 | |=========================+=====================================|
The FALCON private key contains the key components f, g and F. Each coefficient of f and g is encoded over a fixed number of bits, which depends on the degree of f and g: 6 bits each for degree 512 (parameter name = falcon512-r3) and 5 bits each for degree 1024 (parameter name = falcon1024-r3). Coefficients of F use 8 bits each, regardless of its degree. Each coefficient uses signed encoding, with two's complement for negative values. Moreover, the minimal value is forbidden, e.g. when using degree 512, the valid range for a coefficient of f or g is -31 to +31; -32 is not allowed.¶
|==========================+=========+===========| | Algorithm OID | Params | Private | | | | Key | | | | Length | |==========================+=========+===========+ | falcon512-r3 | f=384 | 1280 | | | g=384 | | | | F=512 | | |--------------------------+---------+-----------| | falcon1024-r3 | f=640 | 2304 | | | g=640 | | | | F=1024 | | |==========================+=========+===========+
Encoding a FALCON private key with PKCS#8 must include the following two fields:¶
When a FALCON public key is included in the distributed PrivateKeyInfo, the PublicKey field in FALCONPrivateKey is used (see description of FALCONPublicKey below). ASN.1 Encoding for a FALCON private key:¶
FALCONPrivateKey ::= SEQUENCE { version INTEGER {v2(1)} -- syntax version 2 (round 3) f OCTET STRING, -- short integer polynomial f g OCTET STRING, -- short integer polynomial g f OCTET STRING, -- short integer polynomial F publicKey [0] IMPLICIT FALCONPublicKey OPTIONAL -- see next section }¶
The FALCON public key contains a series of coefficients encoded into parameter h. Each coefficient of h is encoded as a 14 bit sequence (since q = 12289, 14 bits per coefficient are used). Coefficients are then concatenated. The final bit string is zero padded to fit into a byte sequence.¶
|==========================+=========+==========| | Algorithm | Public Key Length | |==========================+====================+ | falcon512-r3 | 896 | |--------------------------+--------------------| | falcon1024-r3 | 1792 | |==========================+====================|
FALCONPublicKey := SEQUENCE { h OCTET STRING -- integer polynomial h }¶
This template was derived from an initial version written by Pekka Savola and contributed by him to the xml2rfc project.¶
This document is part of a plan to make xml2rfc indispensable.¶
This memo includes no request to IANA.¶
Any processing of the ASN.1 private key structures, such as base64 en/decoding shall be performed in "constant-time", meaning without secret-dependent control flow and table lookups. The ASN.1 structures in this document are defined with fixed tag-lengths. The purpose is to prevent side-channel leakage of variable lengths during DER parsing. Any DER parsing of the private key ASN.1 key structures shall be performed with these fixed lengths.¶
This becomes an Appendix.¶