RFC 5274

Certificate Management Messages over CMS (CMC): Compliance Requirements

πŸ“… published June 2008, from ietf

RFC 5274 πŸ“œβœ¨ Certificate Management Messages over CMS (CMC): Compliance Requirements

okay bestie, let's start with the title block πŸ’– It's giving official paperwork, but the important bits are here:

  • Network Working Group 🌸
  • RFC number: 5274
  • Title: Certificate Management Messages over CMS (CMC): Compliance Requirements
  • Authors: J. Schaad (Soaring Hawk Consulting) and M. Myers (TraceRoute Security, Inc.) πŸ‘‘
  • Category: Standards Track
  • Date: June 2008
  • Obsoletes / Updates: the header doesn't list anything this RFC obsoletes or updates 🧚

Status of This Memo πŸ¦‹

This document is an Internet standards track protocol for the Internet community, and it's asking for discussion and suggestions for improvements πŸ’¬ If you want the current standardization state and status of this protocol, check the current edition of the "Internet Official Protocol Standards" (STD 1). Distribution of this memo is unlimited 🌈

Abstract ✨

This doc gives a set of compliance statements about the CMC (Certificate Management over CMS) enrollment protocol πŸ’… The ASN.1 structures and the transport mechanisms for CMC enrollment are covered in other documents. This one is all about the info you need to build a compliant version of CMC πŸŽ€

Table of Contents 🌸

   1.  Overview . . . . . . . . . . . . . . . . . . . . . . . . . . .  2
   2.  Terminology  . . . . . . . . . . . . . . . . . . . . . . . . .  2
   3.  Requirements Terminology . . . . . . . . . . . . . . . . . . .  3
   4.  Requirements for All Entities  . . . . . . . . . . . . . . . .  3
     4.1.  Cryptographic Algorithm Requirements . . . . . . . . . . .  4
     4.2.  Controls . . . . . . . . . . . . . . . . . . . . . . . . .  6
     4.3.  CRMF Feature Requirements  . . . . . . . . . . . . . . . .  8
     4.4.  Requirements for Clients . . . . . . . . . . . . . . . . .  8
   5.  Requirements for Servers . . . . . . . . . . . . . . . . . . .  8
   6.  Requirements for EEs . . . . . . . . . . . . . . . . . . . . .  8
   7.  Requirements for RAs . . . . . . . . . . . . . . . . . . . . .  8
   8.  Requirements for CAs . . . . . . . . . . . . . . . . . . . . .  9
   9.  Security Considerations  . . . . . . . . . . . . . . . . . . .  9
   10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . .  9
   11. References . . . . . . . . . . . . . . . . . . . . . . . . . . 10
     11.1. Normative References . . . . . . . . . . . . . . . . . . . 10
     11.2. Informative References . . . . . . . . . . . . . . . . . . 11

1. Overview πŸ¦‹

okay so CMC (Certificate Management over CMS) is built around a client/server relationship πŸ’– In the simplest setup, the client is the one asking for the certificate (the End Entity, or EE), and the server is the issuer (the Certification Authority, or CA) πŸ‘‘ Now add a Registration Authority (RA) and the picture gets only a little more complicated. The RA acts as the server to the certificate requestor, and then it turns around and acts as the client to the certificate issuer. You can slot in any number of RAs this way 🧚

RAs can also have specialized jobs that this doc doesn't cover yet. One example is a Key Escrow agent πŸ” All certificate requests for encryption keys would go through this RA, and it would handle the key archival. Key recovery requests could be defined in the CMC methodology so the Key Escrow agent can do that operation as the final server in the chain πŸ’…

If there are multiple RAs, it's totally normal for not every RA to see every certificate request πŸ™ˆ Routing between the RAs may depend on what's inside the certificate requests. Main character routing energy ✨

This document is split into six sections, and each one lays out the requirements for one class of agent in the CMC model 🌈 They are: 1) all agents, 2) all servers, 3) all clients, 4) all End-Entities, 5) all Registration Entities, and 6) all Certificate Authorities πŸŽ€

2. Terminology πŸ“š

Here are the terms, abbreviations, and acronyms this doc uses. They're defined here so everyone is using them the same way 🫢

  • End-Entity (EE) is the entity that owns a key pair and is the one a certificate gets issued for 🌸
  • Registration Authority (RA) or Local RA (LRA) is an entity that acts as a middleman between the EE and the CA. You can have multiple RAs between an End-Entity and a Certification Authority. RAs may also offer extra services, like key generation or key archival. This document uses the term RA for both RA and LRA πŸ¦‹
  • Certification Authority (CA) is the entity that issues certificates πŸ‘‘
  • Client is an entity that creates a PKI Request. In this document, both RAs and EEs can be clients πŸ’–
  • Server is the entities that process PKI Requests and create PKI Responses. In this document, both CAs and RAs can be servers 🧚
  • PKCS #10 is the Public Key Cryptography Standard #10 [PKCS10], which defines a certification request syntax πŸ“
  • CRMF is the Certificate Request Message Format RFC [CRMF]. CMC uses the certification request syntax defined in this document as part of the protocol πŸ’…
  • CMS is the Cryptographic Message Syntax RFC [CMS]. This document provides basic cryptographic services, including encryption and signing with and without key management πŸ”₯
  • PKI Request/Response is the requests and 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 is the client proving they are who they say they are to the server πŸͺͺ
  • Proof-of-Possession (POP) is a value that can be used to prove that the private key corresponding to a public key is in the possession of, and can be used by, an end-entity πŸ”‘
  • Transport wrapper is the outermost CMS wrapping layer 🌈

3. Requirements Terminology πŸ’œ

Okay, here's the key-word bit that makes everything else official 😭 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 [MUST].

4. Requirements for All Entities 🌸

Everything in [CMC-STRUCT] and [CMC-TRANS] MUST be adhered to, unless this document specifically says otherwise. That's the rule, no cap πŸ’…

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 instead. If the extendedFailInfo field is used, it's 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 πŸš€

4.1. Cryptographic Algorithm Requirements πŸ”

All entities MUST verify DSA-SHA1 and RSA-SHA1 signatures in SignedData (see [CMS-ALG]). Entities MAY verify other signature algorithms. It is strongly suggested that RSA-PSS with SHA-1 be verified (see [CMS-RSA-PSS]). It is strongly suggested that SHA-256 using RSA and RSA-PSS be verified (see [RSA-256]) πŸ’–

All entities MUST generate either DSA-SHA1 or RSA-SHA1 signatures for SignedData (see [CMS-ALG]). 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 RSA as a key transport algorithm for EnvelopedData (see [CMS-ALG]). All entities SHOULD support RSA-OAEP (see [CMS-RSA-OAEP]) as a key transport algorithm. Other key transport algorithms MAY be implemented πŸ‘‘

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

If an entity supports PasswordRecipientInfo for EnvelopedData or AuthenticatedData, it MUST support 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: SHA-1 MUST be implemented for hashAlgId. SHA-256 SHOULD be implemented for hashAlgId. HMAC-SHA1 MUST be implemented for macAlgId. HMAC-SHA256 SHOULD be implemented for macAlgId πŸͺͺ

Algorithm requirements for the Pop Link Witness Version 2 control (Section 6.3.1 of [CMC-STRUCT]) are: SHA-1 MUST be implemented for keyGenAlgorithm. SHA-256 SHOULD be implemented for keyGenAlgorithm. PBKDF2 [PBKDF2] MAY be implemented for keyGenAlgorithm. HMAC-SHA1 MUST be implemented for macAlgorithm. HMAC-SHA256 SHOULD be implemented for macAlgorithm πŸ”‘

Algorithm requirements for the Encrypted POP and Decrypted POP controls (Section 6.7 of [CMC-STRUCT]) are: SHA-1 MUST be implemented for witnessAlgID. SHA-256 SHOULD be implemented for witnessAlgID. HMAC-SHA1 MUST be implemented for thePOPAlgID. HMAC-SHA256 SHOULD be implemented for thePOPAlgID 🌸

Algorithm requirements for Publish Trust Anchors control (Section 6.15 of [CMC-STRUCT]) are: SHA-1 MUST be implemented for hashAlgorithm. SHA-256 SHOULD 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 🌈

4.2. Controls πŸŽ€

okay so this table is the big one πŸ’… it lists every control and how much support each role needs. the three columns are EE, RA, and CA, and each cell tells you whether that role has to do it, should do it, or can skip it. ngl it's a lot but it's giving organization 🌸

      +----------------------------+----------+----------+----------+
      | 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)      |
      |                            |          |          |          |
      | Authenticate 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)      |
      +----------------------------+----------+----------+----------+

                      Table 1: CMC Control Attributes

here are the notes that go with the table 🫢

  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.

ok and one last vibe check: strong consideration should be given to implementing the Authenticate Data and Publish Trust Anchors controls, because this gives a simple method for distributing trust anchors into clients without user intervention πŸ”₯


4.3. CRMF Feature Requirements πŸ¦‹

so these are the extra rules for CRMF features, and they are a little bit spicy 🌢️

the registration control tokens id-regCtrl-regToken and id-regCtrl-authToken MUST NOT be used. no specific CMC feature replaces them, but generally the CMC controls identification and identityProof do the same job and are more specifically defined, so that's your move πŸ’œ

id-regCtrl-pkiArchiveOptions SHOULD NOT be supported. an alternative method is under development to provide this functionality, so stay tuned ✨

the behavior of id-regCtrl-oldCertID is not presently used. instead, you issue the new certificate and use id-cmc-publishCert to remove the old certificate from publication. this operation would not normally come with an immediate revocation of the old certificate, but you can make that happen with the id-cmc-revokeRequest control πŸ“

and finally, id-regCtrl-protocolEncrKey is not used. bye bye πŸ‘‹


4.4. Requirements for Clients 🌈

no extra requirements here, bestie. literally nothing πŸ™ˆ


5. Requirements for Servers 🧚

same energy as the clients. there are no additional requirements ✨


6. Requirements for EEs πŸ’–

if an entity implements Diffie-Hellman, it MUST implement either the DH-POP Proof-of-Possession as defined in [DH-POP], Section 4, or the challenge-response POP controls id-cmc-encryptedPOP and id-cmc-decryptedPOP. so you pick one of those two paths, no skipping both πŸ’…


7. Requirements for RAs πŸ‘‘

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

also, all RAs MUST implement the promotion of the id-aa-cmc-unsignedData as covered in Section 3.2.3 of [CMC-STRUCT]. no exceptions, periodt πŸ’…


8. Requirements for CAs 🌸

okay this part is the CA's main character moment πŸ‘‘ providing for CAs to work in an environment with RAs is strongly suggested, and implementing that support is strongly suggested too, because it lets a big chunk of the admin interaction get delegated onto an RA instead of landing on the CA πŸ’œ

CAs MUST perform at least minimal checks on all public keys before issuing a certificate. at a minimum, a check for syntax happens with the POP operation. CAs SHOULD also do simple checks for known bad keys, like 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. no vibes-based issuance, bestie 🚫

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 πŸ¦‹

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


9. Security Considerations πŸ”₯

okay this section is SERIOUS, so read it carefully πŸ™ˆ

this document uses [CMC-STRUCT] and [CMC-TRANS] as building blocks. the security sections of those two documents are included here by reference, so you need to read those too πŸ“–

knowing how an entity is expected to operate is vital for figuring out which sections of requirements apply to it. care needs to be taken when deciding which sections apply, and when fully implementing the necessary code πŸ’€

cryptographic algorithms have been broken or weakened, and they will be again. implementers and users need to check that the cryptographic algorithms listed in this document make sense from a security level. the IETF may issue documents from time to time about the current state of the art, and two examples are [SMALL-SUB-GROUP] and [HASH-ATTACKS] πŸ”


10. Acknowledgements πŸ’œ

the authors and the PKIX Working Group are so grateful for the participation of Xiaoyi Liu and Jeff Weinstein, who helped write the original versions of this document 🫢

the authors would also like to thank Brian LaMacchia for his work in developing and writing up many of the concepts in this document. they'd also like to thank Alex Deacon and Barb Fox for their contributions 🌈


11. References ✨

11. References ✨

11.1. Normative References πŸ’–

okay bestie, these are the docs this RFC leans on hard, so they're the must-reads πŸ“š

  • [CMC-STRUCT] Schaad, J. and M. Myers, "Certificate Management over CMS (CMC)", RFC 5272, June 2008.
  • [CMC-TRANS] Schaad, J. and M. Myers, "Certificate Management over CMS (CMC): Transport Protocols", RFC 5273, June 2008.
  • [CMS] Housley, R., "Cryptographic Message Syntax (CMS)", RFC 3852, July 2004.
  • [CMS-AES] Schaad, J., "Use of the Advanced Encryption Standard (AES) Encryption Algorithm in Cryptographic Message Syntax (CMS)", RFC 3565, July 2003.
  • [CMS-ALG] Housley, R., "Cryptographic Message Syntax (CMS) Algorithms", RFC 3370, August 2002.
  • [CMS-DH] Rescorla, E., "Diffie-Hellman Key Agreement Method", RFC 2631, June 1999.
  • [CRMF] Schaad, J., "Internet X.509 Public Key Infrastructure Certificate Request Message Format (CRMF)", RFC 4211, September 2005.
  • [CMS-RSA-OAEP] Housley, R., "Use of the RSAES-OAEP Key Transport Algorithm in the Cryptographic Message Syntax (CMS)", RFC 3560, July 2003.
  • [CMS-RSA-PSS] Schaad, J., "Use of the RSASSA-PSS Signature Algorithm in Cryptographic Message Syntax (CMS)", RFC 4056, June 2005.
  • [DH-POP] Prafullchandra, H. and J. Schaad, "Diffie-Hellman Proof-of-Possession Algorithms", RFC 2875, June 2000.
  • [MUST] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", RFC 2119, BCP 14, March 1997.
  • [RSA-256] Schaad, J., Kaliski, B., and R. Housley, "Additional Algorithms and Identifiers for RSA Cryptography for use in the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile", RFC 4055, June 2005.
  • [PBKDF2] Kaliski, B., "PKCS #5: Password-Based Cryptography Specification Version 2.0", RFC 2898, September 2000.
  • [AES-WRAP] Schaad, J. and R. Housley, "Advanced Encryption Standard (AES) Key Wrap Algorithm", RFC 3394, September 2002.

11.2. Informative References 🌸

these ones are the extra reading for when you're curious 🧚

  • [PKCS10] Nystrom, M. and B. Kaliski, "PKCS #10: Certification Request Syntax Specification v1.7", RFC 2986, November 2000.
  • [SMALL-SUB-GROUP] Zuccherato, R., "Methods for Avoiding the "Small-Subgroup" Attacks on the Diffie-Hellman Key Agreement Method for S/MIME", RFC 2785, March 2000.
  • [HASH-ATTACKS] Hoffman, P. and B. Schneier, "Attacks on Cryptographic Hashes in Internet Protocols", RFC 4270, November 2005.

Authors' Addresses πŸŽ€

meet the people who wrote it, they're literally so cool 🫢

Jim Schaad
Soaring Hawk Consulting
PO Box 675
Gold Bar, WA  98251

Phone: (425) 785-1031
EMail: jimsch@nwlink.com


Michael Myers
TraceRoute Security, Inc.

EMail: mmyers@fastq.com

Copyright (C) The IETF Trust (2008).

This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights.

This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.


Intellectual Property πŸ’œ

The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; nor does it represent that it has made any independent effort to identify any such rights. Information on the procedures with respect to rights in RFC documents can be found in BCP 78 and BCP 79.

Copies of IPR disclosures made to the IETF Secretariat and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr.

The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to implement this standard. Please address the information to the IETF at ietf-ipr@ietf.org.

πŸ“¦ where this page comes from