RFC 10004 PROPOSED STANDARD SECURITY · CERTIFICATES · PKI

Certificate Management over CMS (CMC): Compliance Requirements

The rules a Certificate Management over CMS implementation has to follow to be conformant.

On rfc-editor.org ↗
PUBLISHED
July 2026
AUTHORS
J. Mandel, S. Turner
STREAM
IETF
BUILDS ON
RFC 5274 — CMC Compliance, RFC 6402 — CMC updates
SIGNATURE ALGORITHM
RSA-SHA256
ENVELOPEDDATA CONTENT ENCRYPTION
AES
AUTHENVELOPEDDATA CONTENT ENCRYPTION
AES-GCM
AES-GCM NONCE SIZE
12 octets
AES-GCM INTEGRITY CHECK VALUE LENGTH
12 octets
KEY TRANSPORT ALGORITHM
RSA
DOI
10.17487/RFC10004
ERRATA
Reported errata

RFC text

Contents
Original text · RFC Editor View on rfc-editor.org ↗
Internet Engineering Task Force (IETF)                    J. Mandel, Ed.
Request for Comments: 10004                                 AKAYLA, Inc.
Obsoletes: 5274, 6402                                     S. Turner, Ed.
Category: Standards Track                                          sn3rd
ISSN: 2070-1721                                                July 2026


     Certificate Management over CMS (CMC): Compliance Requirements

Abstract

   This document provides a set of compliance statements about the
   Certificate Management over CMS (CMC) enrollment protocol.  The ASN.1
   structures and the transport mechanisms for the CMC enrollment
   protocol are covered in other documents (RFCs 10002 and 10003).  This
   document provides the information needed to make a compliant version
   of CMC.

   This document obsoletes RFCs 5274 and 6402.

Status of This Memo

   This is an Internet Standards Track document.

   This document is a product of the Internet Engineering Task Force
   (IETF).  It represents the consensus of the IETF community.  It has
   received public review and has been approved for publication by the
   Internet Engineering Steering Group (IESG).  Further information on
   Internet Standards is available in Section 2 of RFC 7841.

   Information about the current status of this document, any errata,
   and how to provide feedback on it may be obtained at
   https://www.rfc-editor.org/info/rfc10004.

Copyright Notice

   Copyright (c) 2026 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.

   This document may contain material from IETF Documents or IETF
   Contributions published or made publicly available before November
   10, 2008.  The person(s) controlling the copyright in some of this
   material may not have granted the IETF Trust the right to allow
   modifications of such material outside the IETF Standards Process.
   Without obtaining an adequate license from the person(s) controlling
   the copyright in such materials, this document may not be modified
   outside the IETF Standards Process, and derivative works of it may
   not be created outside the IETF Standards Process, except to format
   it for publication as an RFC or to translate it into languages other
   than English.

Table of Contents

   1.  Introduction
   2.  Terminology
   3.  Requirements Terminology
   4.  Changes Since RFCs 5274 and 6402
   5.  Requirements for All Entities
     5.1.  Cryptographic Algorithm Requirements
     5.2.  Controls
     5.3.  CRMF Feature Requirements
   6.  Requirements for Clients
   7.  Requirements for Servers
   8.  Requirements for EEs
   9.  Requirements for RAs
   10. Requirements for CAs
   11. Security Considerations
   12. IANA Considerations
   13. References
     13.1.  Normative References
     13.2.  Informative References
   Acknowledgements
   Contributors
   Authors' Addresses

1.  Introduction

   The Certificate Management over CMS (CMC) protocol is designed in
   terms of a client/server relationship.  In the simplest case, the
   client is the requestor of the certificate (i.e., the End-Entity
   (EE)) and the server is the issuer of the certificate (i.e., the
   Certification Authority (CA)).  The introduction of a Registration
   Authority (RA) into the set of agents complicates the picture only
   slightly.  The RA becomes the server with respect to the certificate
   requestor, and it becomes the client with respect to the certificate
   issuer.  Any number of RAs can be inserted into the picture in this
   manner.

   The RAs may serve specialized purposes that are not currently covered
   by this document.  One such purpose would be a Key Escrow agent.  As
   such, all certificate requests for encryption keys would be directed
   through this RA, and it would take appropriate action to do the key
   archival.  Key recovery requests could be defined in the CMC
   methodology allowing for the Key Escrow agent to perform that
   operation acting as the final server in the chain of agents.

   If there are multiple RAs in the system, it is considered normal that
   not all RAs will see all certificate requests.  The routing between
   the RAs may be dependent on the content of the certificate requests
   involved.

   This document is divided into six sections, each section specifying
   the requirements that are specific to a class of agents in the CMC
   model.  These are 1) all entities, 2) all servers, 3) all clients, 4)
   all EEs, 5) all RAs, and 6) all CAs.

   This document obsoletes RFCs 5274 [CMC-COMPv1] and 6402
   [CMC-Updates].

2.  Terminology

   There are several different terms, abbreviations, and acronyms used
   in this document that we define here for convenience and consistency
   of usage:

   End-Entity (EE):  Refers to the entity that owns a key pair and for
      whom a certificate is issued.

   Registration Authority (RA) or Local RA (LRA):  Refers to an entity
      that acts as an intermediary between the EE and the CA.  Multiple
      RAs can exist between the EE and the CA.  RAs may perform
      additional services such as key generation or key archival.  This
      document uses the term RA for both RA and LRA.

   Certification Authority (CA):  Refers to the entity that issues
      certificates.

   Client:  Refers to an entity that creates a Public Key Infrastructure
      (PKI) Request.  In this document, both RAs and EEs can be clients.

   Server:  Refers to the entities that process PKI Requests and create
      PKI Responses.  In this document, both CAs and RAs can be servers.

   PKCS #10:  Refers to the Public Key Cryptography Standard #10
      [PKCS10], which defines a certification request syntax.

   CRMF:  Refers to the Certificate Request Message Format [CRMF].  CMC
      uses this certification request syntax defined in this document as
      part of the protocol.

   CMS:  Refers to the Cryptographic Message Syntax [CMS].  This
      document provides for basic cryptographic services including
      encryption and signing with and without key management.

   PKI Request/Response:  Refers to the requests/responses described in
      this document.  PKI Requests include certification requests,
      revocation requests, etc.  PKI Responses include certs-only
      messages, failure messages, etc.

   Proof-of-Identity:  Refers to the client proving they are who they
      say that they are to the server.

   Proof-of-Possession (POP):  Refers to a value that can be used to
      prove that the private key corresponding to a public key is in the
      possession and can be used by an EE.  See Section 2.1 of
      [CMC-STRUCT].

   Transport wrapper:  Refers to the outermost CMS wrapping layer.

   Entity:  Refers to EE, RA (or LRA), or CA.

   HMAC:  Refers to the Hashed Message Authentication Code.  CMC uses
      the ASN.1 module defined in [HMAC-ALGS].

3.  Requirements Terminology

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in
   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
   capitals, as shown here.

4.  Changes Since RFCs 5274 and 6402

   Merged [CMC-Updates] text.

   Updated the Introduction, changed "all agents" to "all entities" in
   the overview to maintain consistency throughout the document, and
   renumbered the section headers.

   Added RA Identity Proof Witness and Response Body controls to
   Table 1.

   Updated the Cryptographic Algorithm Requirements:

   *  Replaced SHA-1 with SHA-256

   *  Replaced HMAC-SHA-1 with HMAC-SHA-256

   *  Added algorithms for AuthEnvelopedData

   Added a paragraph to maintain backward algorithm compatibility.

5.  Requirements for All Entities

   All [CMC-STRUCT] and [CMC-TRANS] compliance statements MUST be
   adhered to unless specifically stated otherwise in this document.

   All entities MUST support Full PKI Requests, Simple PKI Responses,
   and Full PKI Responses.  Servers SHOULD support Simple PKI Requests.

   All entities MUST support the use of the CRMF syntax for
   certification requests.  Support for the PKCS #10 syntax for
   certification requests SHOULD be implemented by servers.

   The extendedFailInfo field SHOULD NOT be populated in the
   CMCStatusInfoV2 object; the failInfo field SHOULD be used to relay
   this information.  If the extendedFailInfo field is used, it is
   suggested that an additional CMCStatusInfoV2 item exist for the same
   body part with a failInfo field.

   All entities MUST implement the HTTP transport mechanism as defined
   in [CMC-TRANS].  Other transport mechanisms MAY be implemented.

5.1.  Cryptographic Algorithm Requirements

   All entities MUST verify RSA-SHA256 signatures in SignedData; (see
   [CMS-ALG2]).  Entities MAY verify other signature algorithms.

   All entities MUST generate RSA-SHA256 signatures for SignedData; (see
   [CMS-ALG2]).  Other signature algorithms MAY be used for generation.

   All entities MUST support Advanced Encryption Standard (AES) as the
   content encryption algorithm for EnvelopedData; (see [CMS-AES]).
   Other content encryption algorithms MAY be implemented.

   All entities MUST support AES-GCM (Galois/Counter Mode) as the
   authenticated content encryption algorithm for AuthEnvelopedData;
   (see [CMS-AES-AE]).  They MUST also support a 12-octet nonce size and
   a 12-octet Integrity Check Value (ICV) length.  Other content
   encryption algorithms MAY be implemented.

   All entities MUST support RSA as a key transport algorithm for
   EnvelopedData and AuthEnvelopedData; see [CMS-ALG2].  Other key
   transport algorithms MAY be implemented.

   If an entity supports key agreement for EnvelopedData or
   AuthEnvelopedData, it MUST support Diffie-Hellman (DH); (see
   [CMS-DH]).

   If an entity supports PasswordRecipientInfo for EnvelopedData,
   AuthenticatedData, or AuthEnvelopedData, it MUST support Password-
   Based Key Derivation Function 2 (PBKDF2) [PBKDF2] for key derivation
   algorithms.  It MUST support AES key wrap (see [AES-WRAP]) as the key
   encryption algorithm.

   If AuthenticatedData is supported, PasswordRecipientInfo MUST be
   supported.

   Algorithm requirements for the Identity Proof Version 2 control
   (Section 6.2.1 of [CMC-STRUCT]) are as follows:

   *  SHA-256 MUST be implemented for hashAlgId.
   *  HMAC-SHA256 MUST be implemented for macAlgId.

   Algorithm requirements for the Pop Link Witness Version 2 control
   (Section 6.3.1.1 of [CMC-STRUCT]) are as follows:

   *  SHA-256 MUST be implemented for keyGenAlgorithm.
   *  PBKDF2 [PBKDF2] MAY be implemented for keyGenAlgorithm.
   *  HMAC-SHA256 MUST be implemented for macAlgorithm.

   Algorithm requirements for the Encrypted POP and Decrypted POP
   controls (Section 6.7 of [CMC-STRUCT]) are as follows:

   *  SHA-256 MUST be implemented for witnessAlgID.
   *  HMAC-SHA256 MUST be implemented for thePOPAlgID.

   Algorithm requirements for Publish Trust Anchors control
   (Section 6.15 of [CMC-STRUCT]) are as follows:

   *  SHA-256 MUST be implemented for hashAlgorithm.

   If an EE generates DH keys for certification, it MUST support
   Section 4 of [DH-POP].  EEs MAY support Section 3 of [DH-POP].  CAs
   and RAs that do POP verification MUST support Section 4 of [DH-POP]
   and SHOULD support Section 3 of [DH-POP].

   EEs that need to use a signature algorithm for keys that cannot
   produce a signature MUST support Appendix C of [CMC-STRUCT] and MUST
   support the Encrypted/Decrypted POP controls.  CAs and RAs that do
   POP verification MUST support this signature algorithm and MUST
   support the Encrypted/Decrypted POP controls.

   For backward compatibility with the previous version of CMC, servers
   MAY offer the algorithms specified therein, but SHOULD use the CMC
   requests to identify which certificates should be transitioned to
   more secure algorithms, if possible.

5.2.  Controls

   The following table lists the name and level of support required for
   each control.

      +============================+==========+==========+==========+
      | Control                    | EE       | RA       | CA       |
      +============================+==========+==========+==========+
      | Extended CMC Status Info   | MUST     | MUST     | MUST     |
      +----------------------------+----------+----------+----------+
      | CMC Status Info            | SHOULD   | SHOULD   | SHOULD   |
      +----------------------------+----------+----------+----------+
      | Identity Proof Version 2   | MUST     | MUST     | MUST     |
      +----------------------------+----------+----------+----------+
      | Identity Proof             | SHOULD   | SHOULD   | SHOULD   |
      +----------------------------+----------+----------+----------+
      | Identification             | MUST     | MUST     | MUST     |
      +----------------------------+----------+----------+----------+
      | POP Link Random            | MUST     | MUST     | MUST     |
      +----------------------------+----------+----------+----------+
      | POP Link Witness Version 2 | MUST     | MUST     | MUST     |
      +----------------------------+----------+----------+----------+
      | POP Link Witness           | SHOULD   | MUST     | MUST     |
      +----------------------------+----------+----------+----------+
      | Data Return                | MUST     | MUST     | MUST     |
      +----------------------------+----------+----------+----------+
      | Modify Cert Request        | N/A      | MUST     | (2)      |
      +----------------------------+----------+----------+----------+
      | Add Extensions             | N/A      | MAY      | (1)      |
      +----------------------------+----------+----------+----------+
      | Transaction ID             | MUST     | MUST     | MUST     |
      +----------------------------+----------+----------+----------+
      | Sender Nonce               | MUST     | MUST     | MUST     |
      +----------------------------+----------+----------+----------+
      | Recipient Nonce            | MUST     | MUST     | MUST     |
      +----------------------------+----------+----------+----------+
      | Encrypted POP              | (4)      | (5)      | SHOULD   |
      +----------------------------+----------+----------+----------+
      | Decrypted POP              | (4)      | (5)      | SHOULD   |
      +----------------------------+----------+----------+----------+
      | RA POP Witness             | N/A      | SHOULD   | (1)      |
      +----------------------------+----------+----------+----------+
      | Get Certificate            | OPTIONAL | OPTIONAL | OPTIONAL |
      +----------------------------+----------+----------+----------+
      | Get CRL                    | OPTIONAL | OPTIONAL | OPTIONAL |
      +----------------------------+----------+----------+----------+
      | Revocation Request         | SHOULD   | SHOULD   | MUST     |
      +----------------------------+----------+----------+----------+
      | Registration Info          | SHOULD   | SHOULD   | SHOULD   |
      +----------------------------+----------+----------+----------+
      | Response Information       | SHOULD   | SHOULD   | SHOULD   |
      +----------------------------+----------+----------+----------+
      | Query Pending              | MUST     | MUST     | MUST     |
      +----------------------------+----------+----------+----------+
      | Confirm Cert.  Acceptance  | MUST     | MUST     | MUST     |
      +----------------------------+----------+----------+----------+
      | Publish Trust Anchors      | (3)      | (3)      | (3)      |
      +----------------------------+----------+----------+----------+
      | Authenticated Data         | (3)      | (3)      | (3)      |
      +----------------------------+----------+----------+----------+
      | Batch Request              | N/A      | MUST     | (2)      |
      +----------------------------+----------+----------+----------+
      | Batch Responses            | N/A      | MUST     | (2)      |
      +----------------------------+----------+----------+----------+
      | Publication Information    | OPTIONAL | OPTIONAL | OPTIONAL |
      +----------------------------+----------+----------+----------+
      | Control Processed          | N/A      | MUST     | (2)      |
      +----------------------------+----------+----------+----------+
      | RA Identity Proof Witness  | N/A      | MUST     | (2)      |
      +----------------------------+----------+----------+----------+
      | Response Body              | (6)      | (6)      | N/A      |
      +----------------------------+----------+----------+----------+

                      Table 1: CMC Control Attributes

   Notes:

   1.  CAs SHOULD implement this control if designed to work with RAs.

   2.  CAs MUST implement this control if designed to work with RAs.

   3.  Implementation is OPTIONAL for these controls.  We strongly
       suggest that they be implemented in order to populate client
       trust anchors.

   4.  EEs only need to implement this if (a) they support key agreement
       algorithms or (b) they need to operate in environments where the
       hardware keys cannot provide POP.

   5.  RAs SHOULD implement this if they implement RA POP Witness.

   6.  EEs SHOULD implement this if designed to work with RAs and MUST
       implement if intended to be used in environments where RAs are
       used for identity validation or key generation.  RAs SHOULD
       implement and validate responses for consistency.

   Strong consideration should be given to implementing the
   Authenticated Data and Publish Trust Anchors controls as this gives a
   simple method for distributing trust anchors to clients without user
   intervention.

5.3.  CRMF Feature Requirements

   The following additional restrictions are placed on CRMF features:

   *  The registration control tokens id-regCtrl-regToken and id-
      regCtrl-authToken MUST NOT be used.  No specific CMC feature is
      used to replace these items, but generally the CMC control's
      identification and identityProof will perform the same service and
      are more specifically defined.

   *  The control token id-regCtrl-pkiArchiveOptions SHOULD NOT be
      supported.  See Section 3.2.1.3.3 of [CMC-STRUCT] and
      Section 3.2.1.3.3 of [CMC-STRUCT] for alternative methods.

   *  The behavior of id-regCtrl-oldCertID is not presently used.  It is
      replaced by issuing the new certificate and using the id-cmc-
      publishCert to remove the old certificate from publication.  This
      operation would not normally be accompanied by an immediate
      revocation of the old certificate; however, that can be
      accomplished by the id-cmc-revokeRequest control.

   *  The id-regCtrl-protocolEncrKey is not used.

6.  Requirements for Clients

   There are no additional requirements.

7.  Requirements for Servers

   There are no additional requirements.

8.  Requirements for EEs

   If an EE implements Diffie-Hellman, it MUST implement either the DH
   POP Proof-of-Possession as defined in Section 4 of [DH-POP] or the
   challenge-response POP controls id-cmc-encryptedPOP and id-cmc-
   decryptedPOP.

9.  Requirements for RAs

   RAs SHOULD be able to do delegated POP.  RAs implementing this
   feature MUST implement the id-cmc-lraPOPWitness control.

   All RAs MUST implement the promotion of the id-aa-cmc-unsignedData as
   covered in Section 3.2.3 of [CMC-STRUCT].

10.  Requirements for CAs

   Providing for CAs to work in an environment with RAs is strongly
   suggested.  Implementation of such support is strongly suggested as
   this permits the delegation of substantial administrative interaction
   onto an RA rather than at the CA.

   CAs MUST perform at least minimal checks on all public keys before
   issuing a certificate.  At a minimum, a check for syntax would occur
   with the POP operation.  Additionally, CAs SHOULD perform simple
   checks for known bad keys such as small subgroups for DSA-SHA1 and DH
   keys [SMALL-SUB-GROUP] or known bad exponents for RSA keys.

   CAs MUST enforce POP checking before issuing any certificate.  CAs
   MAY delegate the POP operation to an RA for those cases where:

   1.  a challenge/response message pair must be used,
   2.  an RA performs escrow of a key and checks for POP in that manner,
       or
   3.  an unusual algorithm is used and that validation is done at the
       RA.

   CAs SHOULD implement both the DH-POP Proof-of-Possession as defined
   in Section 4 of [DH-POP] and the challenge-response POP controls id-
   cmc-encryptedPOP and id-cmc-decryptedPOP.

11.  Security Considerations

   This document uses [CMC-STRUCT] and [CMC-TRANS] as building blocks.
   The security sections of those two documents are included by
   reference.

   Knowledge of how an entity is expected to operate is vital in
   determining which sections of requirements are applicable to that
   entity.  Care needs to be taken in determining which sections apply
   and fully implementing the necessary code.

   Cryptographic algorithms have and will be broken or weakened.
   Implementers and users need to check that the cryptographic
   algorithms listed in this document make sense from a security level.
   The IETF from time to time may issue documents dealing with the
   current state of the art.  Two examples of such documents are
   [SMALL-SUB-GROUP] and [HASH-ATTACKS].

12.  IANA Considerations

   This document has no IANA actions.

13.  References

13.1.  Normative References

   [AES-WRAP] Schaad, J. and R. Housley, "Advanced Encryption Standard
              (AES) Key Wrap Algorithm", RFC 3394, DOI 10.17487/RFC3394,
              October 2002, <https://www.rfc-editor.org/info/rfc3394>.

   [CMC-STRUCT]
              Mandel, J., Ed. and S. Turner, Ed., "Certificate
              Management over CMS (CMC)", RFC 10002,
              DOI 10.17487/RFC10002, July 2026,
              <https://www.rfc-editor.org/info/rfc10002>.

   [CMC-TRANS]
              Mandel, J., Ed. and S. Turner, Ed., "Certificate
              Management over CMS (CMC): Transport Protocols",
              RFC 10003, DOI 10.17487/RFC10003, July 2026,
              <https://www.rfc-editor.org/info/rfc10003>.

   [CMS]      Housley, R., "Cryptographic Message Syntax (CMS)", STD 70,
              RFC 5652, DOI 10.17487/RFC5652, September 2009,
              <https://www.rfc-editor.org/info/rfc5652>.

   [CMS-AES]  Schaad, J., "Use of the Advanced Encryption Standard (AES)
              Encryption Algorithm in Cryptographic Message Syntax
              (CMS)", RFC 3565, DOI 10.17487/RFC3565, July 2003,
              <https://www.rfc-editor.org/info/rfc3565>.

   [CMS-AES-AE]
              Housley, R., "Using AES-CCM and AES-GCM Authenticated
              Encryption in the Cryptographic Message Syntax (CMS)",
              RFC 5084, DOI 10.17487/RFC5084, November 2007,
              <https://www.rfc-editor.org/info/rfc5084>.

   [CMS-ALG2] Turner, S., "Using SHA2 Algorithms with Cryptographic
              Message Syntax", RFC 5754, DOI 10.17487/RFC5754, January
              2010, <https://www.rfc-editor.org/info/rfc5754>.

   [CMS-DH]   Rescorla, E., "Diffie-Hellman Key Agreement Method",
              RFC 2631, DOI 10.17487/RFC2631, June 1999,
              <https://www.rfc-editor.org/info/rfc2631>.

   [CRMF]     Schaad, J., "Internet X.509 Public Key Infrastructure
              Certificate Request Message Format (CRMF)", RFC 4211,
              DOI 10.17487/RFC4211, September 2005,
              <https://www.rfc-editor.org/info/rfc4211>.

   [DH-POP]   Schaad, J. and H. Prafullchandra, "Diffie-Hellman Proof-
              of-Possession Algorithms", RFC 6955, DOI 10.17487/RFC6955,
              May 2013, <https://www.rfc-editor.org/info/rfc6955>.

   [HMAC-ALGS]
              Schaad, J. and S. Turner, "Additional New ASN.1 Modules
              for the Cryptographic Message Syntax (CMS) and the Public
              Key Infrastructure Using X.509 (PKIX)", RFC 6268,
              DOI 10.17487/RFC6268, July 2011,
              <https://www.rfc-editor.org/info/rfc6268>.

   [PBKDF2]   Kario, A., "Use of Password-Based Message Authentication
              Code 1 (PBMAC1) in PKCS #12 Syntax", RFC 9879,
              DOI 10.17487/RFC9879, September 2025,
              <https://www.rfc-editor.org/info/rfc9879>.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/info/rfc8174>.

13.2.  Informative References

   [CMC-COMPv1]
              Schaad, J. and M. Myers, "Certificate Management Messages
              over CMS (CMC): Compliance Requirements", RFC 5274,
              DOI 10.17487/RFC5274, June 2008,
              <https://www.rfc-editor.org/info/rfc5274>.

   [CMC-Updates]
              Schaad, J., "Certificate Management over CMS (CMC)
              Updates", RFC 6402, DOI 10.17487/RFC6402, November 2011,
              <https://www.rfc-editor.org/info/rfc6402>.

   [HASH-ATTACKS]
              Hoffman, P. and B. Schneier, "Attacks on Cryptographic
              Hashes in Internet Protocols", RFC 4270,
              DOI 10.17487/RFC4270, December 2005,
              <https://www.rfc-editor.org/info/rfc4270>.

   [PKCS10]   Nystrom, M. and B. Kaliski, "PKCS #10: Certification
              Request Syntax Specification Version 1.7", RFC 2986,
              DOI 10.17487/RFC2986, November 2000,
              <https://www.rfc-editor.org/info/rfc2986>.

   [SMALL-SUB-GROUP]
              Zuccherato, R., "Methods for Avoiding the "Small-Subgroup"
              Attacks on the Diffie-Hellman Key Agreement Method for S/
              MIME", RFC 2785, DOI 10.17487/RFC2785, March 2000,
              <https://www.rfc-editor.org/info/rfc2785>.

Acknowledgements

   Obviously, the authors would like to thank Jim Schaad and Michael
   Myers for their work on [CMC-COMPv1].

   Thank you to Mike Bishop, Mohamed Boucadair, and Erik Kline for
   reviewing the document and providing comments.

   The Acknowledgments section from RFC 5274 follows:

   |  The authors and the PKIX Working Group are grateful for the
   |  participation of Xiaoyi Liu and Jeff Weinstein in helping to
   |  author the original versions of this document.
   |
   |  The authors would like to thank Brian LaMacchia for his work in
   |  developing and writing up many of the concepts presented in this
   |  document.  The authors would also like to thank Alex Deacon and
   |  Barb Fox for their contributions.

Contributors

   Jim Schaad
   August Cellars


   Michael Myers
   TraceRoute Security, Inc.


Authors' Addresses

   Joseph Mandel (editor)
   AKAYLA, Inc.
   Email: joe@akayla.com


   Sean Turner (editor)
   sn3rd
   Email: sean@sn3rd.com

ISO Plain Language

On this page
PROBLEMThe Certificate Management over CMS protocol has been written across several documents, so an implementer had no single place that said which algorithms and which features were actually required.
MECHANISMThis document lists the algorithms every party must support and a table giving, for each control of the protocol, the level of support required from end entities, registration authorities and certification authorities.
WHAT IT REPLACEDThis obsoletes RFC 5274 and RFC 6402. It moves the hash from SHA-1 to SHA-256, adds the authenticated encryption algorithms, and states the requirements once, in one table.

§1What This Document Is For

The Certificate Management over CMS protocol is designed in terms of a client/server relationship. In the simplest case, the client is the requestor of the certificate, the End-Entity, and the server is the issuer of the certificate, the Certification Authority. The introduction of a Registration Authority into the set of agents complicates the picture only slightly. The RA becomes the server with respect to the certificate requestor, and it becomes the client with respect to the certificate issuer. Any number of RAs can be inserted into the picture in this manner.

The RAs may serve specialized purposes that are not currently covered by this document. One such purpose would be a Key Escrow agent, in which case all certificate requests for encryption keys would be directed through this RA and it would take appropriate action to do the key archival. Key recovery requests could be defined in the CMC methodology, allowing for the Key Escrow agent to perform that operation as the final server in the chain of agents.

If there are multiple RAs in the system, it is considered normal that not all RAs will see all certificate requests. The routing between the RAs may be dependent on the content of the certificate requests involved.

The document is divided into sections specifying the requirements that are specific to a class of agents in the CMC model: all entities, all servers, all clients, all EEs, all RAs and all CAs. The ASN.1 structures and the transport mechanisms for the CMC enrollment protocol are covered in other documents, RFC 10002 and RFC 10003.

CMC is a client and server protocol. The party that wants a certificate asks for it, and the party that signs certificates answers. A registration authority can sit in between, so that the certificate authority does not have to talk to every applicant directly. This document says what each of those parties must do.

§2The Roles in the CMC Model

The End-Entity is the entity that owns a key pair and for whom a certificate is issued. A Registration Authority, also called a Local RA, is an entity that acts as an intermediary between the EE and the CA. Multiple RAs can exist between the EE and the CA, and RAs may perform additional services such as key generation or key archival. The document uses the term RA for both.

The Certification Authority is the entity that issues certificates. A Client is an entity that creates a Public Key Infrastructure Request; both RAs and EEs can be clients. A Server is an entity that processes PKI Requests and creates PKI Responses; both CAs and RAs can be servers.

PKCS #10 refers to the Public Key Cryptography Standard #10, which defines a certification request syntax. CRMF refers to the Certificate Request Message Format, which CMC uses as part of the protocol. CMS refers to the Cryptographic Message Syntax, and the document provides for basic cryptographic services including encryption and signing with and without key management.

PKI Requests include certification requests and revocation requests; PKI Responses include certs-only messages and failure messages. Proof-of-Identity refers to the client proving they are who they say they are to the server. Proof-of-Possession refers to a value that can be used to prove that the private key corresponding to a public key is in the possession and can be used by an EE. The transport wrapper is the outermost CMS wrapping layer, and an entity means an EE, RA or CA.

The document names four roles: the applicant that owns the key, the registration authority that checks the applicant, the certificate authority that signs, and the chain that connects them. Two ideas run through it: proving who you are, and proving that you really hold the private key that matches the public key in the certificate.

THE CLIENT AND SERVER CHAIN OF THE CMC MODEL
End-EntityRegistration AuthorityCertification Authority
  1. PKI REQUESTThe end-entity asks for a certificate. The RA is the server here.
  2. PKI REQUESTThe RA is a client towards the CA, which issues the certificate.
  3. PKI RESPONSE
  4. PKI RESPONSEThe certificate comes back down the chain.

§4What Changed Since RFCs 5274 and 6402

The document merges the text of the CMC Updates document, RFC 6402. It updated the Introduction, changed the phrase all agents to all entities in the overview to maintain consistency throughout the document, and renumbered the section headers.

It added the RA Identity Proof Witness and Response Body controls to the control table. It updated the Cryptographic Algorithm Requirements: SHA-1 was replaced with SHA-256, HMAC-SHA-1 was replaced with HMAC-SHA-256, and algorithms for AuthEnvelopedData were added. A paragraph was added to maintain backward algorithm compatibility.

The older hash algorithm has been retired in favour of SHA-256 and its message authentication code. Two controls were added to the table, and a rule was added so that older algorithms may still be offered on request while the stronger ones are used by default.

§5Requirements for All Entities

All compliance statements of the CMC structure and transport documents MUST be adhered to unless specifically stated otherwise in this document.

All entities MUST support Full PKI Requests, Simple PKI Responses and Full PKI Responses. Servers SHOULD support Simple PKI Requests. All entities MUST support the use of the CRMF syntax for certification requests, while support for the PKCS #10 syntax for certification requests SHOULD be implemented by servers.

The extendedFailInfo field SHOULD NOT be populated in the CMCStatusInfoV2 object; the failInfo field SHOULD be used to relay this information. If the extendedFailInfo field is used, it is suggested that an additional CMCStatusInfoV2 item exist for the same body part with a failInfo field.

All entities MUST implement the HTTP transport mechanism as defined in the CMC transport document. Other transport mechanisms MAY be implemented.

Every participant has to be able to send the fuller kind of request and both kinds of answer, and to read the certificate request format the protocol uses. On top of that, everyone has to offer the HTTP transport, and may offer others as well.

WHAT EVERY PARTICIPANT MUST DO
  • Full PKI RequestsAll entities MUST support them.
  • Simple PKI ResponsesAll entities MUST support them.
  • Full PKI ResponsesAll entities MUST support them.
  • Simple PKI RequestsServers SHOULD support them.
  • CRMF syntaxAll entities MUST support it for certification requests.
  • PKCS #10 syntaxServers SHOULD implement it for certification requests.
  • HTTP transportAll entities MUST implement it; other transports MAY be implemented.

§5.1Cryptographic Algorithm Requirements

All entities MUST verify RSA-SHA256 signatures in SignedData and MUST generate RSA-SHA256 signatures for SignedData. Entities MAY verify and generate other signature algorithms. All entities MUST support the Advanced Encryption Standard as the content encryption algorithm for EnvelopedData, and other content encryption algorithms MAY be implemented.

All entities MUST support AES-GCM, Galois/Counter Mode, as the authenticated content encryption algorithm for AuthEnvelopedData. They MUST also support a 12-octet nonce size and a 12-octet Integrity Check Value length. All entities MUST support RSA as a key transport algorithm for EnvelopedData and AuthEnvelopedData. If an entity supports key agreement for EnvelopedData or AuthEnvelopedData, it MUST support Diffie-Hellman.

If an entity supports PasswordRecipientInfo for EnvelopedData, AuthenticatedData or AuthEnvelopedData, it MUST support the Password-Based Key Derivation Function 2 for key derivation algorithms and MUST support AES key wrap as the key encryption algorithm. If AuthenticatedData is supported, PasswordRecipientInfo MUST be supported.

The algorithm requirements for the Identity Proof Version 2 control are that SHA-256 MUST be implemented for hashAlgId and HMAC-SHA256 MUST be implemented for macAlgId. For the Pop Link Witness Version 2 control, SHA-256 MUST be implemented for keyGenAlgorithm, PBKDF2 MAY be implemented for keyGenAlgorithm, and HMAC-SHA256 MUST be implemented for macAlgorithm. For the Encrypted POP and Decrypted POP controls, SHA-256 MUST be implemented for witnessAlgID and HMAC-SHA256 MUST be implemented for thePOPAlgID. For the Publish Trust Anchors control, SHA-256 MUST be implemented for hashAlgorithm.

The algorithm choices are fixed rather than open. Signing uses RSA with SHA-256. Ordinary encrypted messages use AES, and messages that also carry their own integrity check use AES-GCM with a 12-octet nonce and a 12-octet check value. Where a key is agreed with Diffie-Hellman, that is the required method.

THE ALGORITHMS EVERY ENTITY MUST HANDLE
  • RSA-SHA256SignedData signature — All entities MUST verify and MUST generate RSA-SHA256 signatures.
  • AESEnvelopedData content encryption — All entities MUST support AES as the content encryption algorithm for EnvelopedData.
  • AES-GCMAuthEnvelopedData content encryption — All entities MUST support AES-GCM, with a 12-octet nonce size and a 12-octet Integrity Check Value length.
  • RSAKey transport — All entities MUST support RSA as a key transport algorithm for EnvelopedData and AuthEnvelopedData.
  • DHKey agreement — If an entity supports key agreement, it MUST support Diffie-Hellman.
  • PBKDF2Password-based key derivation — Required when PasswordRecipientInfo is supported, together with AES key wrap.
  • SHA-256Hash algorithm — SHA-256 MUST be implemented for hashAlgId, keyGenAlgorithm, witnessAlgID and hashAlgorithm.
  • HMAC-SHA256MAC algorithm — HMAC-SHA256 MUST be implemented for macAlgId, macAlgorithm and thePOPAlgID.

§5.2Which Controls Each Role Must Support

The document gives a table listing the name and level of support required for each control, with a column for each of the End-Entity, the RA and the CA. The controls required of every role are Extended CMC Status Info, Identity Proof Version 2, Identification, POP Link Random, POP Link Witness Version 2, Data Return, Transaction ID, Sender Nonce, Recipient Nonce, Query Pending and Confirm Cert. Acceptance, all at level MUST. CMC Status Info, Identity Proof, POP Link Witness, Registration Info and Response Information are at level SHOULD for every role.

Some controls do not apply to every role. Modify Cert Request, Batch Request, Batch Responses, Control Processed and RA Identity Proof Witness are marked N/A for the End-Entity and MUST for the RA, while the CA entry for each of them is marked as a note: the CA MUST implement the control if designed to work with RAs. Revocation Request is SHOULD for the EE and the RA and MUST for the CA. Get Certificate, Get CRL and Publication Information are OPTIONAL for every role.

Encrypted POP and Decrypted POP have notes: EEs only need to implement them if they support key agreement algorithms, or if they need to operate in environments where the hardware keys cannot provide POP, and RAs SHOULD implement them if they implement RA POP Witness. Publish Trust Anchors and Authenticated Data are OPTIONAL for every role, but the document says strong consideration should be given to implementing them, because this gives a simple method for distributing trust anchors to clients without user intervention.

The table is the heart of the document. Each optional piece of the protocol is listed, with the level each kind of participant must reach. Some pieces only make sense for a registration authority, and the certificate authority only needs them if it works with registration authorities.

PARTS OF THE CONTROL TABLE, BY ROLE
ControlEERACA
Extended CMC Status Info THIS RFCMUSTMUSTMUST
Identity Proof Version 2MUSTMUSTMUST
IdentificationMUSTMUSTMUST
POP Link RandomMUSTMUSTMUST
POP Link Witness Version 2MUSTMUSTMUST
Data ReturnMUSTMUSTMUST
Transaction IDMUSTMUSTMUST
Sender NonceMUSTMUSTMUST
Recipient NonceMUSTMUSTMUST
Query PendingMUSTMUSTMUST
Confirm Cert. AcceptanceMUSTMUSTMUST
Modify Cert RequestN/AMUSTMUST with RAs
Batch RequestN/AMUSTMUST with RAs
Batch ResponsesN/AMUSTMUST with RAs
Control ProcessedN/AMUSTMUST with RAs
RA Identity Proof WitnessN/AMUSTMUST with RAs
Revocation RequestSHOULDSHOULDMUST
Encrypted POPIf neededSHOULD with RA POP WitnessSHOULD
Get CertificateOPTIONALOPTIONALOPTIONAL
Publication InformationOPTIONALOPTIONALOPTIONAL

§10Requirements for Certification Authorities

Providing for CAs to work in an environment with RAs is strongly suggested, because this permits the delegation of substantial administrative interaction onto an RA rather than at the CA.

CAs MUST perform at least minimal checks on all public keys before issuing a certificate. At a minimum, a check for syntax would occur with the POP operation. Additionally, CAs SHOULD perform simple checks for known bad keys such as small subgroups for DSA-SHA1 and DH keys, or known bad exponents for RSA keys.

CAs MUST enforce POP checking before issuing any certificate. CAs MAY delegate the POP operation to an RA for those cases where a challenge and response message pair must be used, where an RA performs escrow of a key and checks for POP in that manner, or where an unusual algorithm is used and that validation is done at the RA. CAs SHOULD implement both the DH-POP Proof-of-Possession and the challenge-response POP controls id-cmc-encryptedPOP and id-cmc-decryptedPOP.

There are no additional requirements for clients or for servers. If an EE implements Diffie-Hellman, it MUST implement either the DH POP Proof-of-Possession or the challenge-response POP controls. RAs SHOULD be able to do delegated POP, and an RA implementing that feature MUST implement the id-cmc-lraPOPWitness control. All RAs MUST implement the promotion of the id-aa-cmc-unsignedData.

The certificate authority is the one that must be careful. Before it signs anything it has to check that the applicant really holds the matching private key, and it should also screen the key itself for known weaknesses. It may hand that check to a registration authority in some cases, but it stays responsible for the outcome.

§11Security Considerations

The document uses the CMC structure and transport documents as building blocks, and the security sections of those two documents are included by reference.

Knowledge of how an entity is expected to operate is vital in determining which sections of requirements are applicable to that entity. Care needs to be taken in determining which sections apply and fully implementing the necessary code.

Cryptographic algorithms have and will be broken or weakened. Implementers and users need to check that the cryptographic algorithms listed in this document make sense from a security level. The IETF from time to time may issue documents dealing with the current state of the art, and two examples of such documents are the small-subgroup attacks paper and the attacks on cryptographic hashes paper.

The security reasoning is inherited from the two documents that define the protocol itself. This document adds one warning: the algorithms named here will one day be too weak, so an implementation has to be able to change them.

§9References

[CMC-STRUCT]RFC 10002Mandel, J., Ed. and S. Turner, Ed., "Certificate Management over CMS (CMC)", RFC 10002, July 2026.July 2026[CMC-TRANS]RFC 10003Mandel, J., Ed. and S. Turner, Ed., "Certificate Management over CMS (CMC): Transport Protocols", RFC 10003, July 2026.July 2026[CMC-COMPv1]RFC 5274Schaad, J. and M. Myers, "Certificate Management Messages over CMS (CMC): Compliance Requirements", RFC 5274, June 2008.June 2008[CMC-Updates]RFC 6402Schaad, J., "Certificate Management over CMS (CMC) Updates", RFC 6402, November 2011.November 2011[CMS]RFC 5652Housley, R., "Cryptographic Message Syntax (CMS)", STD 70, RFC 5652, September 2009.September 2009[CRMF]RFC 4211Schaad, J., "Internet X.509 Public Key Infrastructure Certificate Request Message Format (CRMF)", RFC 4211, September 2005.September 2005[CMS-ALG2]RFC 5754Turner, S., "Using SHA2 Algorithms with Cryptographic Message Syntax", RFC 5754, January 2010.January 2010[CMS-AES-AE]RFC 5084Housley, R., "Using AES-CCM and AES-GCM Authenticated Encryption in the Cryptographic Message Syntax (CMS)", RFC 5084, November 2007.November 2007[DH-POP]RFC 6955Schaad, J. and H. Prafullchandra, "Diffie-Hellman Proof-of-Possession Algorithms", RFC 6955, May 2013.May 2013[AES-WRAP]RFC 3394Schaad, J. and R. Housley, "Advanced Encryption Standard (AES) Key Wrap Algorithm", RFC 3394, October 2002.October 2002[PKCS10]RFC 2986Nystrom, M. and B. Kaliski, "PKCS #10: Certification Request Syntax Specification Version 1.7", RFC 2986, November 2000.November 2000[SMALL-SUB-GROUP]RFC 2785Zuccherato, R., "Methods for Avoiding the "Small-Subgroup" Attacks on the Diffie-Hellman Key Agreement Method for S/MIME", RFC 2785, March 2000.March 2000