| rfc3851.txt | draft-ietf-smime-3851bis-08.txt | |||
|---|---|---|---|---|
| S/MIME WG Blake Ramsdell, Brute Squad Labs | ||||
| Internet Draft Sean Turner, IECA | ||||
| Intended Status: Standard Track October 2, 2008 | ||||
| Obsoletes: 3851 (when approved) | ||||
| Expires: April 2, 2009 | ||||
| Network Working Group B. Ramsdell, Editor | Secure/Multipurpose Internet Mail Extensions (S/MIME) Version 3.2 | |||
| Request for Comments: 3851 Sendmail, Inc. | ||||
| Category: Standards Track | ||||
| Secure/Multipurpose Internet Mail Extensions (S/MIME) Version 3.1 | ||||
| Message Specification | Message Specification | |||
| draft-ietf-smime-3851bis-08.txt | ||||
| Status of this Memo | Status of this Memo | |||
| This document specifies an Internet standards track protocol for the | By submitting this Internet-Draft, each author represents that any | |||
| Internet community, and requests discussion and suggestions for | applicable patent or other IPR claims of which he or she is aware | |||
| improvements. Please refer to the current edition of the "Internet | have been or will be disclosed, and any of which he or she becomes | |||
| Official Protocol Standards" (STD 1) for the standardization state | aware will be disclosed, in accordance with Section 6 of BCP 79. | |||
| and status of this protocol. Distribution of this memo is unlimited. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF), its areas, and its working groups. Note that | ||||
| other groups may also distribute working documents as Internet- | ||||
| Drafts. | ||||
| 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." | ||||
| The list of current Internet-Drafts can be accessed at | ||||
| http://www.ietf.org/ietf/1id-abstracts.txt | ||||
| The list of Internet-Draft Shadow Directories can be accessed at | ||||
| http://www.ietf.org/shadow.html | ||||
| This Internet-Draft will expire on April 2, 2008. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The Internet Society (2004). | Copyright (C) The IETF Trust (2008). | |||
| Abstract | Abstract | |||
| This document defines Secure/Multipurpose Internet Mail Extensions | This document defines Secure/Multipurpose Internet Mail Extensions | |||
| (S/MIME) version 3.1. S/MIME provides a consistent way to send and | (S/MIME) version 3.2. S/MIME provides a consistent way to send and | |||
| receive secure MIME data. Digital signatures provide authentication, | receive secure MIME data. Digital signatures provide authentication, | |||
| message integrity, and non-repudiation with proof of origin. | message integrity, and non-repudiation with proof of origin. | |||
| Encryption provides data confidentiality. Compression can be used to | Encryption provides data confidentiality. Compression can be used to | |||
| reduce data size. This document obsoletes RFC 2633. | reduce data size. This document obsoletes RFC 3851. | |||
| Discussion | ||||
| This draft is being discussed on the 'ietf-smime' mailing list. To | ||||
| subscribe, send a message to ietf-smime-request@imc.org with the | ||||
| single word subscribe in the body of the message. There is a Web site | ||||
| for the mailing list at <http://www.imc.org/ietf-smime/>. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction...................................................3 | |||
| 1.1. Specification Overview . . . . . . . . . . . . . . . . . 3 | 1.1. Specification Overview....................................3 | |||
| 1.2. Terminology. . . . . . . . . . . . . . . . . . . . . . . 3 | 1.2. Definitions...............................................4 | |||
| 1.3. Definitions. . . . . . . . . . . . . . . . . . . . . . . 4 | 1.3. Conventions used in this document.........................5 | |||
| 1.4. Compatibility with Prior Practice of S/MIME. . . . . . . 5 | 1.4. Compatibility with Prior Practice of S/MIME...............6 | |||
| 1.5. Changes Since S/MIME v3. . . . . . . . . . . . . . . . . 5 | 1.5. Changes From S/MIME v3 to S/MIME v3.1.....................6 | |||
| 2. CMS Options. . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 1.6. Changes Since S/MIME v3.1.................................6 | |||
| 2.1. DigestAlgorithmIdentifier. . . . . . . . . . . . . . . . 5 | 2. CMS Options....................................................8 | |||
| 2.2. SignatureAlgorithmIdentifier . . . . . . . . . . . . . . 6 | 2.1. DigestAlgorithmIdentifier.................................8 | |||
| 2.3. KeyEncryptionAlgorithmIdentifier . . . . . . . . . . . . 6 | 2.2. SignatureAlgorithmIdentifier..............................8 | |||
| 2.4. General Syntax . . . . . . . . . . . . . . . . . . . . . 6 | 2.3. KeyEncryptionAlgorithmIdentifier..........................9 | |||
| 2.5. Attributes and the SignerInfo Type . . . . . . . . . . . 7 | 2.4. General Syntax...........................................10 | |||
| 2.6. SignerIdentifier SignerInfo Type . . . . . . . . . . . . 11 | 2.5. Attributes and the SignerInfo Type.......................11 | |||
| 2.7. ContentEncryptionAlgorithmIdentifier . . . . . . . . . . 12 | 2.6. SignerIdentifier SignerInfo Type.........................15 | |||
| 3. Creating S/MIME Messages . . . . . . . . . . . . . . . . . . . 14 | 2.7. ContentEncryptionAlgorithmIdentifier.....................15 | |||
| 3.1. Preparing the MIME Entity for Signing, Enveloping | 3. Creating S/MIME Messages......................................17 | |||
| or Compressing . . . . . . . . . . . . . . . . . . . . . 14 | 3.1. Preparing the MIME Entity for Signing, Enveloping or | |||
| 3.2. The application/pkcs7-mime Type. . . . . . . . . . . . . 19 | Compressing..............................................18 | |||
| 3.3. Creating an Enveloped-only Message . . . . . . . . . . . 21 | 3.2. The application/pkcs7-mime Media Type....................22 | |||
| 3.4. Creating a Signed-only Message . . . . . . . . . . . . . 22 | 3.3. Creating an Enveloped-only Message.......................24 | |||
| 3.5. Creating an Compressed-only Message. . . . . . . . . . . 26 | 3.4. Creating a Signed-only Message...........................25 | |||
| 3.6. Multiple Operations. . . . . . . . . . . . . . . . . . . 27 | 3.5. Creating an Compressed-only Message......................29 | |||
| 3.7. Creating a Certificate Management Messagetoc . . . . . . 27 | 3.6. Multiple Operations......................................30 | |||
| 3.8. Registration Requests. . . . . . . . . . . . . . . . . . 28 | 3.7. Creating a Certificate Management Message................30 | |||
| 3.9. Identifying an S/MIME Message. . . . . . . . . . . . . . 28 | 3.8. Registration Requests....................................31 | |||
| 4. Certificate Processing . . . . . . . . . . . . . . . . . . . . 29 | 3.9. Identifying an S/MIME Message............................31 | |||
| 4.1. Key Pair Generation. . . . . . . . . . . . . . . . . . . 29 | 4. Certificate Processing........................................32 | |||
| 5. Security Considerations. . . . . . . . . . . . . . . . . . . . 29 | 4.1. Key Pair Generation......................................32 | |||
| A. ASN.1 Module . . . . . . . . . . . . . . . . . . . . . . . . . 31 | 4.2. Signature Generation.....................................33 | |||
| B. References . . . . . . . . . . . . . . . . . . . . . . . . . . 32 | 4.3. Signature Verification...................................33 | |||
| B.1. Normative References . . . . . . . . . . . . . . . . . . 32 | 4.4. Encryption...............................................33 | |||
| B.2. Informative References . . . . . . . . . . . . . . . . . 34 | 4.5. Decryption...............................................33 | |||
| C. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 35 | 5. IANA Considerations...........................................34 | |||
| D. Editor's Address . . . . . . . . . . . . . . . . . . . . . . . 35 | 5.1. Media Type for application/pkcs7-mime....................34 | |||
| Full Copyright Statement . . . . . . . . . . . . . . . . . . . 36 | 5.2. Media Type for application/pkcs7-signature...............35 | |||
| 6. Security Considerations.......................................36 | ||||
| 7. References....................................................38 | ||||
| 7.1. Normative References.....................................38 | ||||
| 7.2. Informative References...................................40 | ||||
| Appendix A. ASN.1 Module.........................................42 | ||||
| Appendix B. Moving S/MIME v2 Message Specification to | ||||
| Historic Status......................................44 | ||||
| 1. Introduction | 1. Introduction | |||
| S/MIME (Secure/Multipurpose Internet Mail Extensions) provides a | S/MIME (Secure/Multipurpose Internet Mail Extensions) provides a | |||
| consistent way to send and receive secure MIME data. Based on the | consistent way to send and receive secure MIME data. Based on the | |||
| popular Internet MIME standard, S/MIME provides the following | popular Internet MIME standard, S/MIME provides the following | |||
| cryptographic security services for electronic messaging | cryptographic security services for electronic messaging | |||
| applications: authentication, message integrity and non-repudiation | applications: authentication, message integrity and non-repudiation | |||
| of origin (using digital signatures), and data confidentiality (using | of origin (using digital signatures), and data confidentiality (using | |||
| encryption). | encryption). As a supplementary service, S/MIME provides for message | |||
| compression. | ||||
| S/MIME can be used by traditional mail user agents (MUAs) to add | S/MIME can be used by traditional mail user agents (MUAs) to add | |||
| cryptographic security services to mail that is sent, and to | cryptographic security services to mail that is sent, and to | |||
| interpret cryptographic security services in mail that is received. | interpret cryptographic security services in mail that is received. | |||
| However, S/MIME is not restricted to mail; it can be used with any | However, S/MIME is not restricted to mail; it can be used with any | |||
| transport mechanism that transports MIME data, such as HTTP. As | transport mechanism that transports MIME data, such as HTTP or SIP. | |||
| such, S/MIME takes advantage of the object-based features of MIME and | As such, S/MIME takes advantage of the object-based features of MIME | |||
| allows secure messages to be exchanged in mixed-transport systems. | and allows secure messages to be exchanged in mixed-transport | |||
| systems. | ||||
| Further, S/MIME can be used in automated message transfer agents that | Further, S/MIME can be used in automated message transfer agents that | |||
| use cryptographic security services that do not require any human | use cryptographic security services that do not require any human | |||
| intervention, such as the signing of software-generated documents and | intervention, such as the signing of software-generated documents and | |||
| the encryption of FAX messages sent over the Internet. | the encryption of FAX messages sent over the Internet. | |||
| 1.1. Specification Overview | 1.1. Specification Overview | |||
| This document describes a protocol for adding cryptographic signature | This document describes a protocol for adding cryptographic signature | |||
| and encryption services to MIME data. The MIME standard [MIME-SPEC] | and encryption services to MIME data. The MIME standard [MIME-SPEC] | |||
| provides a general structure for the content type of Internet | provides a general structure for the content of Internet messages and | |||
| messages and allows extensions for new content type applications. | allows extensions for new content type based applications. | |||
| This specification defines how to create a MIME body part that has | This specification defines how to create a MIME body part that has | |||
| been cryptographically enhanced according to CMS [CMS], which is | been cryptographically enhanced according to the Cryptographic | |||
| derived from PKCS #7 [PKCS-7]. This specification also defines the | Message Syntax (CMS) RFC 3852 and RFC 4853 [CMS], which is derived | |||
| application/pkcs7-mime MIME type that can be used to transport those | from PKCS #7 [PKCS-7]. This specification also defines the | |||
| application/pkcs7-mime media type that can be used to transport those | ||||
| body parts. | body parts. | |||
| This document also discusses how to use the multipart/signed MIME | This document also discusses how to use the multipart/signed media | |||
| type defined in [MIME-SECURE] to transport S/MIME signed messages. | type defined in [MIME-SECURE] to transport S/MIME signed messages. | |||
| multipart/signed is used in conjunction with the application/pkcs7- | multipart/signed is used in conjunction with the application/pkcs7- | |||
| signature MIME type, which is used to transport a detached S/MIME | signature media type, which is used to transport a detached S/MIME | |||
| signature. | signature. | |||
| In order to create S/MIME messages, an S/MIME agent MUST follow the | In order to create S/MIME messages, an S/MIME agent MUST follow the | |||
| specifications in this document, as well as the specifications listed | specifications in this document, as well as the specifications listed | |||
| in the Cryptographic Message Syntax document [CMS] [CMSALG]. | in the Cryptographic Message Syntax document [CMS], [CMSALG], | |||
| [RSAPSS], [RSAOAEP], and [CMS-SHA2]. | ||||
| Throughout this specification, there are requirements and | Throughout this specification, there are requirements and | |||
| recommendations made for how receiving agents handle incoming | recommendations made for how receiving agents handle incoming | |||
| messages. There are separate requirements and recommendations for | messages. There are separate requirements and recommendations for | |||
| how sending agents create outgoing messages. In general, the best | how sending agents create outgoing messages. In general, the best | |||
| strategy is to "be liberal in what you receive and conservative in | strategy is to "be liberal in what you receive and conservative in | |||
| what you send". Most of the requirements are placed on the handling | what you send". Most of the requirements are placed on the handling | |||
| of incoming messages while the recommendations are mostly on the | of incoming messages while the recommendations are mostly on the | |||
| creation of outgoing messages. | creation of outgoing messages. | |||
| The separation for requirements on receiving agents and sending | The separation for requirements on receiving agents and sending | |||
| agents also derives from the likelihood that there will be S/MIME | agents also derives from the likelihood that there will be S/MIME | |||
| systems that involve software other than traditional Internet mail | systems that involve software other than traditional Internet mail | |||
| clients. S/MIME can be used with any system that transports MIME | clients. S/MIME can be used with any system that transports MIME | |||
| data. An automated process that sends an encrypted message might not | data. An automated process that sends an encrypted message might not | |||
| be able to receive an encrypted message at all, for example. Thus, | be able to receive an encrypted message at all, for example. Thus, | |||
| the requirements and recommendations for the two types of agents are | the requirements and recommendations for the two types of agents are | |||
| listed separately when appropriate. | listed separately when appropriate. | |||
| 1.2. Terminology | 1.2. Definitions | |||
| 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 [MUSTSHOULD]. | ||||
| 1.3. Definitions | ||||
| For the purposes of this specification, the following definitions | For the purposes of this specification, the following definitions | |||
| apply. | apply. | |||
| ASN.1: Abstract Syntax Notation One, as defined in CCITT X.208 | ASN.1: Abstract Syntax Notation One, as defined in ITU-T | |||
| [X.208-88]. | Recommendation X.680 [X.680]. | |||
| BER: Basic Encoding Rules for ASN.1, as defined in CCITT X.209 | BER: Basic Encoding Rules for ASN.1, as defined in ITU-T | |||
| [X.209-88]. | Recommendation X.690 [X.690]. | |||
| Certificate: A type that binds an entity's name to a public key with | Certificate: A type that binds an entity's name to a public key with | |||
| a digital signature. | a digital signature. | |||
| DER: Distinguished Encoding Rules for ASN.1, as defined in CCITT | DER: Distinguished Encoding Rules for ASN.1, as defined in ITU-T | |||
| X.509 [X.509-88]. | Recommendation X.690 [X.690]. | |||
| 7-bit data: Text data with lines less than 998 characters long, where | 7-bit data: Text data with lines less than 998 characters long, where | |||
| none of the characters have the 8th bit set, and there are no NULL | none of the characters have the 8th bit set, and there are no NULL | |||
| characters. <CR> and <LF> occur only as part of a <CR><LF> end of | characters. <CR> and <LF> occur only as part of a <CR><LF> end of | |||
| line delimiter. | line delimiter. | |||
| 8-bit data: Text data with lines less than 998 characters, and where | 8-bit data: Text data with lines less than 998 characters, and where | |||
| none of the characters are NULL characters. <CR> and <LF> occur only | none of the characters are NULL characters. <CR> and <LF> occur only | |||
| as part of a <CR><LF> end of line delimiter. | as part of a <CR><LF> end of line delimiter. | |||
| skipping to change at page 5, line 5 | skipping to change at page 5, line 29 | |||
| Receiving agent: Software that interprets and processes S/MIME CMS | Receiving agent: Software that interprets and processes S/MIME CMS | |||
| objects, MIME body parts that contain CMS content types, or both. | objects, MIME body parts that contain CMS content types, or both. | |||
| Sending agent: Software that creates S/MIME CMS content types, MIME | Sending agent: Software that creates S/MIME CMS content types, MIME | |||
| body parts that contain CMS content types, or both. | body parts that contain CMS content types, or both. | |||
| S/MIME agent: User software that is a receiving agent, a sending | S/MIME agent: User software that is a receiving agent, a sending | |||
| agent, or both. | agent, or both. | |||
| 1.3. Conventions used in this document | ||||
| 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 [MUSTSHOULD]. | ||||
| We define some additional terms here: | ||||
| SHOULD+ This term means the same as SHOULD. However, the authors | ||||
| expect that a requirement marked as SHOULD+ will be promoted at | ||||
| some future time to be a MUST. | ||||
| SHOULD- This term means the same as SHOULD. However, the authors | ||||
| expect that a requirement marked as SHOULD- will be demoted to a | ||||
| MAY in a future version of this document. | ||||
| MUST- This term means the same as MUST. However, the authors | ||||
| expect that this requirement will no longer be a MUST in a future | ||||
| document. Although its status will be determined at a later | ||||
| time, it is reasonable to expect that if a future revision of a | ||||
| document alters the status of a MUST- requirement, it will remain | ||||
| at least a SHOULD or a SHOULD-. | ||||
| 1.4. Compatibility with Prior Practice of S/MIME | 1.4. Compatibility with Prior Practice of S/MIME | |||
| S/MIME version 3.1 agents SHOULD attempt to have the greatest | S/MIME version 3.2 agents SHOULD attempt to have the greatest | |||
| interoperability possible with agents for prior versions of S/MIME. | interoperability possible with agents for prior versions of S/MIME. | |||
| S/MIME version 2 is described in RFC 2311 through RFC 2315, inclusive | S/MIME version 2 is described in RFC 2311 through RFC 2315 inclusive | |||
| and S/MIME version 3 is described in RFC 2630 through RFC 2634 | [SMIMEv2], S/MIME version 3 is described in RFC 2630 through RFC 2634 | |||
| inclusive. RFC 2311 also has historical information about the | inclusive and RFC 5035[SMIMEv3], and S/MIME version 3.1 is described | |||
| in RFC 3850, RFC 3851, RFC 3852, RFC 2634, RFC 4853, and RFC 5035 | ||||
| [SMIMEv3.1]. RFC 2311 also has historical information about the | ||||
| development of S/MIME. | development of S/MIME. | |||
| 1.5. Changes Since S/MIME v3 | 1.5. Changes From S/MIME v3 to S/MIME v3.1 | |||
| The RSA public key algorithm was changed to a MUST implement key | The RSA public key algorithm was changed to a MUST implement key | |||
| wrapping algorithm, and the Diffie-Hellman algorithm changed to a | wrapping algorithm, and the Diffie-Hellman algorithm changed to a | |||
| SHOULD implement. | SHOULD implement. | |||
| The AES symmetric encryption algorithm has been included as a SHOULD | The AES symmetric encryption algorithm has been included as a SHOULD | |||
| implement. | implement. | |||
| The RSA public key algorithm was changed to a MUST implement | The RSA public key algorithm was changed to a MUST implement | |||
| signature algorithm. | signature algorithm. | |||
| Ambiguous language about the use of "empty" SignedData messages to | Ambiguous language about the use of "empty" SignedData messages to | |||
| transmit certificates was clarified to reflect that transmission of | transmit certificates was clarified to reflect that transmission of | |||
| certificate revocation lists is also allowed. | certificate revocation lists is also allowed. | |||
| The use of binary encoding for some MIME entities is now explicitly | The use of binary encoding for some MIME entities is now explicitly | |||
| discussed. | discussed. | |||
| Header protection through the use of the message/rfc822 MIME type has | Header protection through the use of the message/rfc822 media type | |||
| been added. | has been added. | |||
| Use of the CompressedData CMS type is allowed, along with required | Use of the CompressedData CMS type is allowed, along with required | |||
| MIME type and file extension additions. | media type and file extension additions. | |||
| 1.6. Changes Since S/MIME v3.1 | ||||
| Editorial changes, e.g., replaced "MIME type" with "media type", | ||||
| content-type with Content-Type. | ||||
| Moved "Conventions Used in This Document" to Section 1.3. Added | ||||
| definitions for SHOULD+, SHOULD-, and MUST-. | ||||
| Sec 1.1 and Appendix A: Added references to RFCs for RSA-PSS, RSA- | ||||
| OAEP, and SHA2 CMS Algorithms. Added CMS Multiple Signers | ||||
| Clarification to CMS reference. | ||||
| Sec 1.2: Updated references to ASN.1 to X.680 and BER and DER to | ||||
| X.690. | ||||
| Sec 1.4: Added references to S/MIME MSG 3.1 RFCs. | ||||
| Sec 2.1 (digest algorithm): SHA-256 added as MUST, SHA-1 and MD5 made | ||||
| SHOULD-. | ||||
| Sec 2.2 (signature algorithms): RSA with SHA-256 added as MUST, and | ||||
| DSA with SHA-256 added as SHOULD+, RSA with SHA-1, DSA with SHA-1, | ||||
| and RSA with MD5 changed to SHOULD-, and RSA-PSS with SHA-256 added | ||||
| as SHOULD+. Also added note about what S/MIME v3.1 clients support. | ||||
| Sec 2.3 (key encryption): DH changed to SHOULD- and RSA-OAEP added as | ||||
| SHOULD+. | ||||
| Sec 2.5.1: Added requirement that receiving agents MUST support both | ||||
| GeneralizedTime and UTCTime. | ||||
| Sec 2.5.2: Replaced reference "sha1WithRSAEncrption" with | ||||
| "sha256WithRSAEncryption", "DES-3EDE-CBC" with "AES-128 CBC", and | ||||
| deleted the RC5 example. | ||||
| Sec 2.5.2.1: Deleted entire section (discussed deprecated RC2). | ||||
| Sec 2.7, 2.7.1, Appendix A: references to RC2/40 removed. | ||||
| Sec 2.7 (content encryption): AES-128 CBC added as MUST, AES-192 and | ||||
| AES-256 CBC SHOULD+, tripleDES now SHOULD-. | ||||
| Sec 2.7.1: Updated pointers from 2.7.2.1 through 2.7.2.4 to 2.7.1.1 | ||||
| to 2.7.1.2. | ||||
| Sec 3.2.2: Replaced "encrypted" with "enveloped". Update OID example | ||||
| to use AES-128 CBC oid. | ||||
| Sec 4: Updated reference to CERT v3.2. | ||||
| Sec 4.1: Updated RSA and DSA key size discussion. Moved last four | ||||
| sentences to security considerations. Updated reference to randomness | ||||
| requirements for security. | ||||
| Sec 5: Added IANA registration templates to update media type | ||||
| registry to point to this document as opposed to RFC 2311. | ||||
| Sec 6: Updated Security Considerations. | ||||
| Sec 7: Moved references from Appendix B to this section. Updated | ||||
| references. Added informational references to SMIMEv2, SMIMEv3, and | ||||
| SMIMEv3.1. | ||||
| App B: Added Appendix B to move S/MIME v2 to historic status. | ||||
| 2. CMS Options | 2. CMS Options | |||
| CMS allows for a wide variety of options in content and algorithm | CMS allows for a wide variety of options in content, attributes, and | |||
| support. This section puts forth a number of support requirements | algorithm support. This section puts forth a number of support | |||
| and recommendations in order to achieve a base level of | requirements and recommendations in order to achieve a base level of | |||
| interoperability among all S/MIME implementations. [CMSALG] provides | interoperability among all S/MIME implementations. [CMSALG] and [CMS- | |||
| additional details regarding the use of the cryptographic algorithms. | SHA2] provides additional details regarding the use of the | |||
| cryptographic algorithms. [ESS] provides additional details | ||||
| regarding the use of additional attributes. | ||||
| 2.1. DigestAlgorithmIdentifier | 2.1. DigestAlgorithmIdentifier | |||
| Sending and receiving agents MUST support SHA-1 [CMSALG]. Receiving | Sending and receiving agents MUST support SHA-256 [CMS-SHA2] and | |||
| agents SHOULD support MD5 [CMSALG] for the purpose of providing | SHOULD- support SHA-1 [CMSALG]. Receiving agents SHOULD- support MD5 | |||
| backward compatibility with MD5-digested S/MIME v2 SignedData | [CMSALG] for the purpose of providing backward compatibility with | |||
| objects. | MD5-digested S/MIME v2 SignedData objects. | |||
| 2.2. SignatureAlgorithmIdentifier | 2.2. SignatureAlgorithmIdentifier | |||
| Receiving agents MUST support id-dsa-with-sha1 defined in [CMSALG]. | Receiving agents: | |||
| The algorithm parameters MUST be absent (not encoded as NULL). | ||||
| Receiving agents MUST support rsaEncryption, defined in [CMSALG]. | ||||
| Sending agents MUST support either id-dsa-with-sha1 or rsaEncryption. | - MUST support RSA with SHA-256 | |||
| If using rsaEncryption, sending and receiving agents MUST support the | - SHOULD+ support DSA with SHA-256 | |||
| digest algorithms in section 2.1 as specified. | ||||
| Note that S/MIME v3 clients might only implement signing or signature | - SHOULD+ support RSA-PSS with SHA-256 | |||
| - SHOULD- support RSA with SHA-1 | ||||
| - SHOULD- support DSA with SHA-1 | ||||
| - SHOULD- support RSA with MD5. | ||||
| Sending agents: | ||||
| - MUST support RSA with SHA-256 | ||||
| - SHOULD+ support DSA with SHA-256 | ||||
| - SHOULD+ support RSA-PSS with SHA-256 | ||||
| - SHOULD- support RSA with SHA-1 or DSA with SHA-1 | ||||
| - SHOULD- support RSA with MD5. | ||||
| See section 4.1 for information on key size and algorithm references. | ||||
| Note that S/MIME v3.1 clients support verifying id-dsa-with-sha1 and | ||||
| rsaEncryption and might not implement sha256withRSAEncryption. Note | ||||
| that S/MIME v3 clients might only implement signing or signature | ||||
| verification using id-dsa-with-sha1, and might also use id-dsa as an | verification using id-dsa-with-sha1, and might also use id-dsa as an | |||
| AlgorithmIdentifier in this field. Receiving clients SHOULD | AlgorithmIdentifier in this field. Receiving clients SHOULD | |||
| recognize id-dsa as equivalent to id-dsa-with-sha1, and sending | recognize id-dsa as equivalent to id-dsa-with-sha1, and sending | |||
| clients MUST use id-dsa-with-sha1 if using that algorithm. Also note | clients MUST use id-dsa-with-sha1 if using that algorithm. Also note | |||
| that S/MIME v2 clients are only required to verify digital signatures | that S/MIME v2 clients are only required to verify digital signatures | |||
| using the rsaEncryption algorithm with SHA-1 or MD5, and might not | using the rsaEncryption algorithm with SHA-1 or MD5, and might not | |||
| implement id-dsa-with-sha1 or id-dsa at all. | implement id-dsa-with-sha1 or id-dsa at all. | |||
| 2.3. KeyEncryptionAlgorithmIdentifier | 2.3. KeyEncryptionAlgorithmIdentifier | |||
| Sending and receiving agents MUST support rsaEncryption, defined in | Receiving and sending agents: | |||
| [CMSALG]. | ||||
| Sending and receiving agents SHOULD support Diffie-Hellman defined in | - MUST support RSA Encryption, as specified in [CMSALG] | |||
| [CMSALG], using the ephemeral-static mode. | ||||
| Note that S/MIME v3 clients might only implement key encryption and | - SHOULD+ support RSA-OAEP, as specified in [RSAOAEP] | |||
| decryption using the Diffie-Hellman algorithm. Also note that S/MIME | ||||
| v2 clients are only capable of decrypting content-encryption keys | - SHOULD- support DH ephemeral-static mode, as specified | |||
| using the rsaEncryption algorithm. | in [CMSALG]. | |||
| Note that S/MIME v3.1 clients might only implement key encryption and | ||||
| decryption using the rsaEncryption algorithm. Note that S/MIME v3 | ||||
| clients might only implement key encryption and decryption using the | ||||
| Diffie-Hellman algorithm. Also note that S/MIME v2 clients are only | ||||
| capable of decrypting content-encryption keys using the rsaEncryption | ||||
| algorithm. | ||||
| 2.4. General Syntax | 2.4. General Syntax | |||
| There are several CMS content types. Of these, only the Data, | There are several CMS content types. Of these, only the Data, | |||
| SignedData, EnvelopedData, and CompressedData content types are | SignedData, EnvelopedData, and CompressedData content types are | |||
| currently used for S/MIME. | currently used for S/MIME. | |||
| 2.4.1. Data Content Type | 2.4.1. Data Content Type | |||
| Sending agents MUST use the id-data content type identifier to | Sending agents MUST use the id-data content type identifier to | |||
| identify the "inner" MIME message content. For example, when | identify the "inner" MIME message content. For example, when | |||
| applying a digital signature to MIME data, the CMS SignedData | applying a digital signature to MIME data, the CMS SignedData | |||
| encapContentInfo eContentType MUST include the id-data object | encapContentInfo eContentType MUST include the id-data object | |||
| identifier and the MIME content MUST be stored in the SignedData | identifier and the media type MUST be stored in the SignedData | |||
| encapContentInfo eContent OCTET STRING (unless the sending agent is | encapContentInfo eContent OCTET STRING (unless the sending agent is | |||
| using multipart/signed, in which case the eContent is absent, per | using multipart/signed, in which case the eContent is absent, per | |||
| section 3.4.3 of this document). As another example, when applying | section 3.4.3 of this document). As another example, when applying | |||
| encryption to MIME data, the CMS EnvelopedData encryptedContentInfo | encryption to MIME data, the CMS EnvelopedData encryptedContentInfo | |||
| contentType MUST include the id-data object identifier and the | contentType MUST include the id-data object identifier and the | |||
| encrypted MIME content MUST be stored in the EnvelopedData | encrypted MIME content MUST be stored in the EnvelopedData | |||
| encryptedContentInfo encryptedContent OCTET STRING. | encryptedContentInfo encryptedContent OCTET STRING. | |||
| 2.4.2. SignedData Content Type | 2.4.2. SignedData Content Type | |||
| skipping to change at page 7, line 29 | skipping to change at page 10, line 45 | |||
| This content type is used to apply data confidentiality to a message. | This content type is used to apply data confidentiality to a message. | |||
| A sender needs to have access to a public key for each intended | A sender needs to have access to a public key for each intended | |||
| message recipient to use this service. | message recipient to use this service. | |||
| 2.4.4. CompressedData Content Type | 2.4.4. CompressedData Content Type | |||
| This content type is used to apply data compression to a message. | This content type is used to apply data compression to a message. | |||
| This content type does not provide authentication, message integrity, | This content type does not provide authentication, message integrity, | |||
| non-repudiation, or data confidentiality, and is only used to reduce | non-repudiation, or data confidentiality, and is only used to reduce | |||
| message size. | the message's size. | |||
| See section 3.6 for further guidance on the use of this type in | See section 3.6 for further guidance on the use of this type in | |||
| conjunction with other CMS types. | conjunction with other CMS types. | |||
| 2.5. Attributes and the SignerInfo Type | 2.5. Attributes and the SignerInfo Type | |||
| The SignerInfo type allows the inclusion of unsigned and signed | The SignerInfo type allows the inclusion of unsigned and signed | |||
| attributes to be included along with a signature. | attributes along with a signature. | |||
| Receiving agents MUST be able to handle zero or one instance of each | Receiving agents MUST be able to handle zero or one instance of each | |||
| of the signed attributes listed here. Sending agents SHOULD generate | of the signed attributes listed here. Sending agents SHOULD generate | |||
| one instance of each of the following signed attributes in each | one instance of each of the following signed attributes in each | |||
| S/MIME message: | S/MIME message: | |||
| - signingTime (section 2.5.1 in this document) | - signingTime (section 2.5.1 in this document) | |||
| - sMIMECapabilities (section 2.5.2 in this document) | - sMIMECapabilities (section 2.5.2 in this document) | |||
| - sMIMEEncryptionKeyPreference (section 2.5.3 in this document) | - sMIMEEncryptionKeyPreference (section 2.5.3 in this document) | |||
| - id-messageDigest (section 11.2 in [CMS]) | - id-messageDigest (section 11.2 in [CMS]) | |||
| - id-contentType (section 11.1 in [CMS]) | - id-contentType (section 11.1 in [CMS]) | |||
| Further, receiving agents SHOULD be able to handle zero or one | Further, receiving agents SHOULD be able to handle zero or one | |||
| instance in the signingCertificate signed attribute, as defined in | instance of the signingCertificate and signingCertificatev2 signed | |||
| section 5 of [ESS]. | attributes, as defined in section 5 of RFC 2634 [ESS] and RFC 5035 | |||
| [ESS]. | ||||
| Sending agents SHOULD generate one instance of the signingCertificate | Sending agents SHOULD generate one instance of the signingCertificate | |||
| signed attribute in each SignerInfo structure. | or signingCertificatev2 signed attribute in each SignerInfo | |||
| structure. | ||||
| Additional attributes and values for these attributes might be | Additional attributes and values for these attributes might be | |||
| defined in the future. Receiving agents SHOULD handle attributes or | defined in the future. Receiving agents SHOULD handle attributes or | |||
| values that it does not recognize in a graceful manner. | values that they do not recognize in a graceful manner. | |||
| Interactive sending agents that include signed attributes that are | Interactive sending agents that include signed attributes that are | |||
| not listed here SHOULD display those attributes to the user, so that | not listed here SHOULD display those attributes to the user, so that | |||
| the user is aware of all of the data being signed. | the user is aware of all of the data being signed. | |||
| 2.5.1. Signing-Time Attribute | 2.5.1. Signing-Time Attribute | |||
| The signing-time attribute is used to convey the time that a message | The signing-time attribute is used to convey the time that a message | |||
| was signed. The time of signing will most likely be created by a | was signed. The time of signing will most likely be created by a | |||
| message originator and therefore is only as trustworthy as the | message originator and therefore is only as trustworthy as the | |||
| originator. | originator. | |||
| Sending agents MUST encode signing time through the year 2049 as | Sending agents MUST encode signing time through the year 2049 as | |||
| UTCTime; signing times in 2050 or later MUST be encoded as | UTCTime; signing times in 2050 or later MUST be encoded as | |||
| GeneralizedTime. When the UTCTime CHOICE is used, S/MIME agents MUST | GeneralizedTime. When the UTCTime CHOICE is used, S/MIME agents MUST | |||
| interpret the year field (YY) as follows: | interpret the year field (YY) as follows: | |||
| if YY is greater than or equal to 50, the year is interpreted as | If YY is greater than or equal to 50, the year is interpreted as | |||
| 19YY; if YY is less than 50, the year is interpreted as 20YY. | 19YY; if YY is less than 50, the year is interpreted as 20YY. | |||
| Receiving agents MUST be able to process signing-time attributes that | ||||
| are encoded in either UTCTime or GeneralizedTime. | ||||
| 2.5.2. SMIMECapabilities Attribute | 2.5.2. SMIMECapabilities Attribute | |||
| The SMIMECapabilities attribute includes signature algorithms (such | The SMIMECapabilities attribute includes signature algorithms (such | |||
| as "sha1WithRSAEncryption"), symmetric algorithms (such as "DES- | as "sha256WithRSAEncryption"), symmetric algorithms (such as "AES-128 | |||
| EDE3-CBC"), and key encipherment algorithms (such as | CBC"), and key encipherment algorithms (such as "rsaEncryption"). | |||
| "rsaEncryption"). There are also several identifiers which indicate | There are also several identifiers which indicate support for other | |||
| support for other optional features such as binary encoding and | optional features such as binary encoding and compression. The | |||
| compression. The SMIMECapabilities were designed to be flexible and | SMIMECapabilities were designed to be flexible and extensible so | |||
| extensible so that, in the future, a means of identifying other | that, in the future, a means of identifying other capabilities and | |||
| capabilities and preferences such as certificates can be added in a | preferences such as certificates can be added in a way that will not | |||
| way that will not cause current clients to break. | cause current clients to break. | |||
| If present, the SMIMECapabilities attribute MUST be a | If present, the SMIMECapabilities attribute MUST be a | |||
| SignedAttribute; it MUST NOT be an UnsignedAttribute. CMS defines | SignedAttribute; it MUST NOT be an UnsignedAttribute. CMS defines | |||
| SignedAttributes as a SET OF Attribute. The SignedAttributes in a | SignedAttributes as a SET OF Attribute. The SignedAttributes in a | |||
| signerInfo MUST NOT include multiple instances of the | signerInfo MUST NOT include multiple instances of the | |||
| SMIMECapabilities attribute. CMS defines the ASN.1 syntax for | SMIMECapabilities attribute. CMS defines the ASN.1 syntax for | |||
| Attribute to include attrValues SET OF AttributeValue. A | Attribute to include attrValues SET OF AttributeValue. A | |||
| SMIMECapabilities attribute MUST only include a single instance of | SMIMECapabilities attribute MUST only include a single instance of | |||
| AttributeValue. There MUST NOT be zero or multiple instances of | AttributeValue. There MUST NOT be zero or multiple instances of | |||
| AttributeValue present in the attrValues SET OF AttributeValue. | AttributeValue present in the attrValues SET OF AttributeValue. | |||
| skipping to change at page 9, line 21 | skipping to change at page 12, line 48 | |||
| supports, and need not list all its capabilities so that the | supports, and need not list all its capabilities so that the | |||
| capabilities list doesn't get too long. In an SMIMECapabilities | capabilities list doesn't get too long. In an SMIMECapabilities | |||
| attribute, the object identifiers (OIDs) are listed in order of their | attribute, the object identifiers (OIDs) are listed in order of their | |||
| preference, but SHOULD be separated logically along the lines of | preference, but SHOULD be separated logically along the lines of | |||
| their categories (signature algorithms, symmetric algorithms, key | their categories (signature algorithms, symmetric algorithms, key | |||
| encipherment algorithms, etc.) | encipherment algorithms, etc.) | |||
| The structure of the SMIMECapabilities attribute is to facilitate | The structure of the SMIMECapabilities attribute is to facilitate | |||
| simple table lookups and binary comparisons in order to determine | simple table lookups and binary comparisons in order to determine | |||
| matches. For instance, the DER-encoding for the SMIMECapability for | matches. For instance, the DER-encoding for the SMIMECapability for | |||
| DES EDE3 CBC MUST be identically encoded regardless of the | AES-128 CBC MUST be identically encoded regardless of the | |||
| implementation. Because of the requirement for identical encoding, | implementation. Because of the requirement for identical encoding, | |||
| individuals documenting algorithms to be used in the | individuals documenting algorithms to be used in the | |||
| SMIMECapabilities attribute SHOULD explicitly document the correct | SMIMECapabilities attribute SHOULD explicitly document the correct | |||
| byte sequence for the common cases. | byte sequence for the common cases. | |||
| For any capability, the associated parameters for the OID MUST | For any capability, the associated parameters for the OID MUST | |||
| specify all of the parameters necessary to differentiate between two | specify all of the parameters necessary to differentiate between two | |||
| instances of the same algorithm. For instance, the number of rounds | instances of the same algorithm. | |||
| and the block size for RC5 needs to be specified in addition to the | ||||
| key length. | ||||
| The OIDs that correspond to algorithms SHOULD use the same OID as the | The OIDs that correspond to algorithms SHOULD use the same OID as the | |||
| actual algorithm, except in the case where the algorithm usage is | actual algorithm, except in the case where the algorithm usage is | |||
| ambiguous from the OID. For instance, in an earlier specification, | ambiguous from the OID. For instance, in an earlier specification, | |||
| rsaEncryption was ambiguous because it could refer to either a | rsaEncryption was ambiguous because it could refer to either a | |||
| signature algorithm or a key encipherment algorithm. In the event | signature algorithm or a key encipherment algorithm. In the event | |||
| that an OID is ambiguous, it needs to be arbitrated by the maintainer | that an OID is ambiguous, it needs to be arbitrated by the maintainer | |||
| of the registered SMIMECapabilities list as to which type of | of the registered SMIMECapabilities list as to which type of | |||
| algorithm will use the OID, and a new OID MUST be allocated under the | algorithm will use the OID, and a new OID MUST be allocated under the | |||
| smimeCapabilities OID to satisfy the other use of the OID. | smimeCapabilities OID to satisfy the other use of the OID. | |||
| The registered SMIMECapabilities list specifies the parameters for | The registered SMIMECapabilities list specifies the parameters for | |||
| OIDs that need them, most notably key lengths in the case of | OIDs that need them, most notably key lengths in the case of | |||
| variable-length symmetric ciphers. In the event that there are no | variable-length symmetric ciphers. In the event that there are no | |||
| differentiating parameters for a particular OID, the parameters MUST | differentiating parameters for a particular OID, the parameters MUST | |||
| be omitted, and MUST NOT be encoded as NULL. | be omitted, and MUST NOT be encoded as NULL. Additional values for | |||
| the SMIMECapabilities attribute might be defined in the future. | ||||
| Additional values for the SMIMECapabilities attribute might be | Receiving agents MUST handle a SMIMECapabilities object that has | |||
| defined in the future. Receiving agents MUST handle a | values that it does not recognize in a graceful manner. | |||
| SMIMECapabilities object that has values that it does not recognize | ||||
| in a graceful manner. | ||||
| Section 2.7.1 explains a strategy for caching capabilities. | Section 2.7.1 explains a strategy for caching capabilities. | |||
| 2.5.2.1. SMIMECapability For the RC2 Algorithm | ||||
| For the RC2 algorithm preference SMIMECapability, the capabilityID | ||||
| MUST be set to the value rc2-cbc as defined in [CMSALG]. The | ||||
| parameters field MUST contain SMIMECapabilitiesParametersForRC2CBC | ||||
| (see appendix A). | ||||
| Please note that the SMIMECapabilitiesParametersForRC2CBC is a single | ||||
| INTEGER which contains the effective key length (NOT the | ||||
| corresponding RC2 parameter version value). So, for example, for RC2 | ||||
| with a 128-bit effective key length, the parameter would be encoded | ||||
| as the INTEGER value 128, NOT the corresponding parameter version of | ||||
| 58. | ||||
| 2.5.3. Encryption Key Preference Attribute | 2.5.3. Encryption Key Preference Attribute | |||
| The encryption key preference attribute allows the signer to | The encryption key preference attribute allows the signer to | |||
| unambiguously describe which of the signer's certificates has the | unambiguously describe which of the signer's certificates has the | |||
| signer's preferred encryption key. This attribute is designed to | signer's preferred encryption key. This attribute is designed to | |||
| enhance behavior for interoperating with those clients that use | enhance behavior for interoperating with those clients that use | |||
| separate keys for encryption and signing. This attribute is used to | separate keys for encryption and signing. This attribute is used to | |||
| convey to anyone viewing the attribute which of the listed | convey to anyone viewing the attribute which of the listed | |||
| certificates is appropriate for encrypting a session key for future | certificates is appropriate for encrypting a session key for future | |||
| encrypted messages. | encrypted messages. | |||
| skipping to change at page 11, line 31 | skipping to change at page 14, line 39 | |||
| sending a future CMS EnvelopedData message for a particular | sending a future CMS EnvelopedData message for a particular | |||
| recipient, the following steps SHOULD be followed: | recipient, the following steps SHOULD be followed: | |||
| - If an SMIMEEncryptionKeyPreference attribute is found in a | - If an SMIMEEncryptionKeyPreference attribute is found in a | |||
| SignedData object received from the desired recipient, this | SignedData object received from the desired recipient, this | |||
| identifies the X.509 certificate that SHOULD be used as the X.509 | identifies the X.509 certificate that SHOULD be used as the X.509 | |||
| key management certificate for the recipient. | key management certificate for the recipient. | |||
| - If an SMIMEEncryptionKeyPreference attribute is not found in a | - If an SMIMEEncryptionKeyPreference attribute is not found in a | |||
| SignedData object received from the desired recipient, the set of | SignedData object received from the desired recipient, the set of | |||
| X.509 certificates SHOULD be searched for a X.509 certificate with | X.509 certificates SHOULD be searched for a X.509 certificate | |||
| the same subject name as the signing of a X.509 certificate which | with the same subject name as the signer of a X.509 certificate | |||
| can be used for key management. | which can be used for key management. | |||
| - Or use some other method of determining the user's key management | - Or use some other method of determining the user's key management | |||
| key. If a X.509 key management certificate is not found, then | key. If a X.509 key management certificate is not found, then | |||
| encryption cannot be done with the signer of the message. If | encryption cannot be done with the signer of the message. If | |||
| multiple X.509 key management certificates are found, the S/MIME | multiple X.509 key management certificates are found, the S/MIME | |||
| agent can make an arbitrary choice between them. | agent can make an arbitrary choice between them. | |||
| 2.6. SignerIdentifier SignerInfo Type | 2.6. SignerIdentifier SignerInfo Type | |||
| S/MIME v3.1 implementations MUST support both issuerAndSerialNumber | S/MIME v3.2 implementations MUST support both issuerAndSerialNumber | |||
| as well as subjectKeyIdentifier. Messages that use the | as well as subjectKeyIdentifier. Messages that use the | |||
| subjectKeyIdentifier choice cannot be read by S/MIME v2 clients. | subjectKeyIdentifier choice cannot be read by S/MIME v2 clients. | |||
| It is important to understand that some certificates use a value for | It is important to understand that some certificates use a value for | |||
| subjectKeyIdentifier that is not suitable for uniquely identifying a | subjectKeyIdentifier that is not suitable for uniquely identifying a | |||
| certificate. Implementations MUST be prepared for multiple | certificate. Implementations MUST be prepared for multiple | |||
| certificates for potentially different entities to have the same | certificates for potentially different entities to have the same | |||
| value for subjectKeyIdentifier, and MUST be prepared to try each | value for subjectKeyIdentifier, and MUST be prepared to try each | |||
| matching certificate during signature verification before indicating | matching certificate during signature verification before indicating | |||
| an error condition. | an error condition. | |||
| 2.7. ContentEncryptionAlgorithmIdentifier | 2.7. ContentEncryptionAlgorithmIdentifier | |||
| Sending and receiving agents MUST support encryption and decryption | Sending and receiving agents: | |||
| with DES EDE3 CBC, hereinafter called "tripleDES" [CMSALG]. | ||||
| Receiving agents SHOULD support encryption and decryption using the | - MUST support encryption and decryption with AES-128 CBC [CMSAES] | |||
| RC2 [CMSALG] or a compatible algorithm at a key size of 40 bits, | ||||
| hereinafter called "RC2/40". Sending and receiving agents SHOULD | - SHOULD+ support encryption and decryption with AES-192 CBC and | |||
| support encryption and decryption with AES [CMSAES] at a key size of | AES-256 CBC [CMSAES] | |||
| 128, 192, and 256 bits. | ||||
| - SHOULD- support encryption and decryption with DES EDE3 CBC, | ||||
| hereinafter called "tripleDES" [CMSALG]. | ||||
| 2.7.1. Deciding Which Encryption Method To Use | 2.7.1. Deciding Which Encryption Method To Use | |||
| When a sending agent creates an encrypted message, it has to decide | When a sending agent creates an encrypted message, it has to decide | |||
| which type of encryption to use. The decision process involves using | which type of encryption to use. The decision process involves using | |||
| information garnered from the capabilities lists included in messages | information garnered from the capabilities lists included in messages | |||
| received from the recipient, as well as out-of-band information such | received from the recipient, as well as out-of-band information such | |||
| as private agreements, user preferences, legal restrictions, and so | as private agreements, user preferences, legal restrictions, and so | |||
| on. | on. | |||
| skipping to change at page 12, line 41 | skipping to change at page 16, line 8 | |||
| - If the receiving agent has not yet created a list of capabilities | - If the receiving agent has not yet created a list of capabilities | |||
| for the sender's public key, then, after verifying the signature | for the sender's public key, then, after verifying the signature | |||
| on the incoming message and checking the timestamp, the receiving | on the incoming message and checking the timestamp, the receiving | |||
| agent SHOULD create a new list containing at least the signing | agent SHOULD create a new list containing at least the signing | |||
| time and the symmetric capabilities. | time and the symmetric capabilities. | |||
| - If such a list already exists, the receiving agent SHOULD verify | - If such a list already exists, the receiving agent SHOULD verify | |||
| that the signing time in the incoming message is greater than the | that the signing time in the incoming message is greater than the | |||
| signing time stored in the list and that the signature is valid. | signing time stored in the list and that the signature is valid. | |||
| If so, the receiving agent SHOULD update both the signing time and | If so, the receiving agent SHOULD update both the signing time | |||
| capabilities in the list. Values of the signing time that lie far | and capabilities in the list. Values of the signing time that | |||
| in the future (that is, a greater discrepancy than any reasonable | lie far in the future (that is, a greater discrepancy than any | |||
| clock skew), or a capabilities list in messages whose signature | reasonable clock skew), or a capabilities list in messages whose | |||
| could not be verified, MUST NOT be accepted. | signature could not be verified, MUST NOT be accepted. | |||
| The list of capabilities SHOULD be stored for future use in creating | The list of capabilities SHOULD be stored for future use in creating | |||
| messages. | messages. | |||
| Before sending a message, the sending agent MUST decide whether it is | Before sending a message, the sending agent MUST decide whether it is | |||
| willing to use weak encryption for the particular data in the | willing to use weak encryption for the particular data in the | |||
| message. If the sending agent decides that weak encryption is | message. If the sending agent decides that weak encryption is | |||
| unacceptable for this data, then the sending agent MUST NOT use a | unacceptable for this data, then the sending agent MUST NOT use a | |||
| weak algorithm such as RC2/40. The decision to use or not use weak | weak algorithm. The decision to use or not use weak encryption | |||
| encryption overrides any other decision in this section about which | overrides any other decision in this section about which encryption | |||
| encryption algorithm to use. | algorithm to use. | |||
| Sections 2.7.2.1 through 2.7.2.4 describe the decisions a sending | Sections 2.7.1.1 through 2.7.1.2 describe the decisions a sending | |||
| agent SHOULD use in deciding which type of encryption will be applied | agent SHOULD use in deciding which type of encryption will be applied | |||
| to a message. These rules are ordered, so the sending agent SHOULD | to a message. These rules are ordered, so the sending agent SHOULD | |||
| make its decision in the order given. | make its decision in the order given. | |||
| 2.7.1.1. Rule 1: Known Capabilities | 2.7.1.1. Rule 1: Known Capabilities | |||
| If the sending agent has received a set of capabilities from the | If the sending agent has received a set of capabilities from the | |||
| recipient for the message the agent is about to encrypt, then the | recipient for the message the agent is about to encrypt, then the | |||
| sending agent SHOULD use that information by selecting the first | sending agent SHOULD use that information by selecting the first | |||
| capability in the list (that is, the capability most preferred by the | capability in the list (that is, the capability most preferred by the | |||
| skipping to change at page 13, line 29 | skipping to change at page 16, line 44 | |||
| sending agent SHOULD use that information by selecting the first | sending agent SHOULD use that information by selecting the first | |||
| capability in the list (that is, the capability most preferred by the | capability in the list (that is, the capability most preferred by the | |||
| intended recipient) that the sending agent knows how to encrypt. The | intended recipient) that the sending agent knows how to encrypt. The | |||
| sending agent SHOULD use one of the capabilities in the list if the | sending agent SHOULD use one of the capabilities in the list if the | |||
| agent reasonably expects the recipient to be able to decrypt the | agent reasonably expects the recipient to be able to decrypt the | |||
| message. | message. | |||
| 2.7.1.2. Rule 2: Unknown Capabilities, Unknown Version of S/MIME | 2.7.1.2. Rule 2: Unknown Capabilities, Unknown Version of S/MIME | |||
| If the following two conditions are met: | If the following two conditions are met: | |||
| - the sending agent has no knowledge of the encryption capabilities | - the sending agent has no knowledge of the encryption capabilities | |||
| of the recipient, | of the recipient, and | |||
| - and the sending agent has no knowledge of the version of S/MIME of | ||||
| the recipient, | - the sending agent has no knowledge of the version of S/MIME of the | |||
| then the sending agent SHOULD use tripleDES because it is a stronger | recipient, | |||
| algorithm and is required by S/MIME v3. If the sending agent chooses | then the sending agent SHOULD use AES-128 because it is a stronger | |||
| not to use tripleDES in this step, it SHOULD use RC2/40. | algorithm and is required by S/MIME v3.2. If the sending agent | |||
| chooses not to use AES-128 in this step, it SHOULD use tripleDES. | ||||
| 2.7.2. Choosing Weak Encryption | 2.7.2. Choosing Weak Encryption | |||
| Like all algorithms that use 40 bit keys, RC2/40 is considered by | All algorithms that use 40 bit keys are considered by many to be weak | |||
| many to be weak encryption. A sending agent that is controlled by a | encryption. A sending agent that is controlled by a human SHOULD | |||
| human SHOULD allow a human sender to determine the risks of sending | allow a human sender to determine the risks of sending data using a | |||
| data using RC2/40 or a similarly weak encryption algorithm before | weak encryption algorithm before sending the data, and possibly allow | |||
| sending the data, and possibly allow the human to use a stronger | the human to use a stronger encryption method such as tripleDES or | |||
| encryption method such as tripleDES. | AES. | |||
| 2.7.3. Multiple Recipients | 2.7.3. Multiple Recipients | |||
| If a sending agent is composing an encrypted message to a group of | If a sending agent is composing an encrypted message to a group of | |||
| recipients where the encryption capabilities of some of the | recipients where the encryption capabilities of some of the | |||
| recipients do not overlap, the sending agent is forced to send more | recipients do not overlap, the sending agent is forced to send more | |||
| than one message. Please note that if the sending agent chooses to | than one message. Please note that if the sending agent chooses to | |||
| send a message encrypted with a strong algorithm, and then send the | send a message encrypted with a strong algorithm, and then send the | |||
| same message encrypted with a weak algorithm, someone watching the | same message encrypted with a weak algorithm, someone watching the | |||
| communications channel could learn the contents of the strongly- | communications channel could learn the contents of the strongly- | |||
| encrypted message simply by decrypting the weakly-encrypted message. | encrypted message simply by decrypting the weakly-encrypted message. | |||
| 3. Creating S/MIME Messages | 3. Creating S/MIME Messages | |||
| This section describes the S/MIME message formats and how they are | This section describes the S/MIME message formats and how they are | |||
| created. S/MIME messages are a combination of MIME bodies and CMS | created. S/MIME messages are a combination of MIME bodies and CMS | |||
| content types. Several MIME types as well as several CMS content | content types. Several media types as well as several CMS content | |||
| types are used. The data to be secured is always a canonical MIME | types are used. The data to be secured is always a canonical MIME | |||
| entity. The MIME entity and other data, such as certificates and | entity. The MIME entity and other data, such as certificates and | |||
| algorithm identifiers, are given to CMS processing facilities which | algorithm identifiers, are given to CMS processing facilities which | |||
| produce a CMS object. Finally, the CMS object is wrapped in MIME. | produce a CMS object. Finally, the CMS object is wrapped in MIME. | |||
| The Enhanced Security Services for S/MIME [ESS] document provides | The Enhanced Security Services for S/MIME [ESS] document provides | |||
| descriptions of how nested, secured S/MIME messages are formatted. | descriptions of how nested, secured S/MIME messages are formatted. | |||
| ESS provides a description of how a triple-wrapped S/MIME message is | ESS provides a description of how a triple-wrapped S/MIME message is | |||
| formatted using multipart/signed and application/pkcs7-mime for the | formatted using multipart/signed and application/pkcs7-mime for the | |||
| signatures. | signatures. | |||
| skipping to change at page 14, line 38 | skipping to change at page 18, line 10 | |||
| choosing among these formats are also described. | choosing among these formats are also described. | |||
| The reader of this section is expected to understand MIME as | The reader of this section is expected to understand MIME as | |||
| described in [MIME-SPEC] and [MIME-SECURE]. | described in [MIME-SPEC] and [MIME-SECURE]. | |||
| 3.1. Preparing the MIME Entity for Signing, Enveloping or Compressing | 3.1. Preparing the MIME Entity for Signing, Enveloping or Compressing | |||
| S/MIME is used to secure MIME entities. A MIME entity can be a sub- | S/MIME is used to secure MIME entities. A MIME entity can be a sub- | |||
| part, sub-parts of a message, or the whole message with all its sub- | part, sub-parts of a message, or the whole message with all its sub- | |||
| parts. A MIME entity that is the whole message includes only the | parts. A MIME entity that is the whole message includes only the | |||
| MIME headers and MIME body, and does not include the RFC-822 headers. | MIME message headers and MIME body, and does not include the RFC-822 | |||
| Note that S/MIME can also be used to secure MIME entities used in | header. Note that S/MIME can also be used to secure MIME entities | |||
| applications other than Internet mail. If protection of the RFC-822 | used in applications other than Internet mail. If protection of the | |||
| headers is required, the use of the message/rfc822 MIME type is | RFC-822 header is required, the use of the message/rfc822 media type | |||
| explained later in this section. | is explained later in this section. | |||
| The MIME entity that is secured and described in this section can be | The MIME entity that is secured and described in this section can be | |||
| thought of as the "inside" MIME entity. That is, it is the | thought of as the "inside" MIME entity. That is, it is the | |||
| "innermost" object in what is possibly a larger MIME message. | "innermost" object in what is possibly a larger MIME message. | |||
| Processing "outside" MIME entities into CMS content types is | Processing "outside" MIME entities into CMS content types is | |||
| described in Section 3.2, 3.4, and elsewhere. | described in Section 3.2, 3.4, and elsewhere. | |||
| The procedure for preparing a MIME entity is given in [MIME-SPEC]. | The procedure for preparing a MIME entity is given in [MIME-SPEC]. | |||
| The same procedure is used here with some additional restrictions | The same procedure is used here with some additional restrictions | |||
| when signing. Description of the procedures from [MIME-SPEC] are | when signing. Description of the procedures from [MIME-SPEC] are | |||
| skipping to change at page 15, line 25 | skipping to change at page 18, line 45 | |||
| on enveloped messages, or signed and enveloped messages, so that the | on enveloped messages, or signed and enveloped messages, so that the | |||
| message can be forwarded to any environment without modification. | message can be forwarded to any environment without modification. | |||
| These steps are descriptive rather than prescriptive. The | These steps are descriptive rather than prescriptive. The | |||
| implementer is free to use any procedure as long as the result is the | implementer is free to use any procedure as long as the result is the | |||
| same. | same. | |||
| Step 1. The MIME entity is prepared according to the local | Step 1. The MIME entity is prepared according to the local | |||
| conventions. | conventions. | |||
| Step 2. The leaf parts of the MIME entity are converted to canonical | Step 2. The leaf parts of the MIME entity are converted to | |||
| form. | canonical form. | |||
| Step 3. Appropriate transfer encoding is applied to the leaves of | Step 3. Appropriate transfer encoding is applied to the leaves | |||
| the MIME entity. | of the MIME entity. | |||
| When an S/MIME message is received, the security services on the | When an S/MIME message is received, the security services on the | |||
| message are processed, and the result is the MIME entity. That MIME | message are processed, and the result is the MIME entity. That MIME | |||
| entity is typically passed to a MIME-capable user agent where, it is | entity is typically passed to a MIME-capable user agent where it is | |||
| further decoded and presented to the user or receiving application. | further decoded and presented to the user or receiving application. | |||
| In order to protect outer, non-content related message headers (for | In order to protect outer, non-content related message header fields | |||
| instance, the "Subject", "To", "From" and "CC" fields), the sending | (for instance, the "Subject", "To", "From" and "Cc" fields), the | |||
| client MAY wrap a full MIME message in a message/rfc822 wrapper in | sending client MAY wrap a full MIME message in a message/rfc822 | |||
| order to apply S/MIME security services to these headers. It is up | wrapper in order to apply S/MIME security services to these header | |||
| to the receiving client to decide how to present these "inner" | fields. It is up to the receiving client to decide how to present | |||
| headers along with the unprotected "outer" headers. | this "inner" header along with the unprotected "outer" header. | |||
| When an S/MIME message is received, if the top-level protected MIME | When an S/MIME message is received, if the top-level protected MIME | |||
| entity has a Content-Type of message/rfc822, it can be assumed that | entity has a Content-Type of message/rfc822, it can be assumed that | |||
| the intent was to provide header protection. This entity SHOULD be | the intent was to provide header protection. This entity SHOULD be | |||
| presented as the top-level message, taking into account header | presented as the top-level message, taking into account header | |||
| merging issues as previously discussed. | merging issues as previously discussed. | |||
| 3.1.1. Canonicalization | 3.1.1. Canonicalization | |||
| Each MIME entity MUST be converted to a canonical form that is | Each MIME entity MUST be converted to a canonical form that is | |||
| uniquely and unambiguously representable in the environment where the | uniquely and unambiguously representable in the environment where the | |||
| signature is created and the environment where the signature will be | signature is created and the environment where the signature will be | |||
| verified. MIME entities MUST be canonicalized for enveloping and | verified. MIME entities MUST be canonicalized for enveloping and | |||
| compressing as well as signing. | compressing as well as signing. | |||
| The exact details of canonicalization depend on the actual MIME type | The exact details of canonicalization depend on the actual media type | |||
| and subtype of an entity, and are not described here. Instead, the | and subtype of an entity, and are not described here. Instead, the | |||
| standard for the particular MIME type SHOULD be consulted. For | standard for the particular media type SHOULD be consulted. For | |||
| example, canonicalization of type text/plain is different from | example, canonicalization of type text/plain is different from | |||
| canonicalization of audio/basic. Other than text types, most types | canonicalization of audio/basic. Other than text types, most types | |||
| have only one representation regardless of computing platform or | have only one representation regardless of computing platform or | |||
| environment which can be considered their canonical representation. | environment which can be considered their canonical representation. | |||
| In general, canonicalization will be performed by the non-security | In general, canonicalization will be performed by the non-security | |||
| part of the sending agent rather than the S/MIME implementation. | part of the sending agent rather than the S/MIME implementation. | |||
| The most common and important canonicalization is for text, which is | The most common and important canonicalization is for text, which is | |||
| often represented differently in different environments. MIME | often represented differently in different environments. MIME | |||
| entities of major type "text" MUST have both their line endings and | entities of major type "text" MUST have both their line endings and | |||
| skipping to change at page 16, line 43 | skipping to change at page 20, line 15 | |||
| Note that some charsets such as ISO-2022 have multiple | Note that some charsets such as ISO-2022 have multiple | |||
| representations for the same characters. When preparing such text | representations for the same characters. When preparing such text | |||
| for signing, the canonical representation specified for the charset | for signing, the canonical representation specified for the charset | |||
| MUST be used. | MUST be used. | |||
| 3.1.2. Transfer Encoding | 3.1.2. Transfer Encoding | |||
| When generating any of the secured MIME entities below, except the | When generating any of the secured MIME entities below, except the | |||
| signing using the multipart/signed format, no transfer encoding is | signing using the multipart/signed format, no transfer encoding is | |||
| required at all. S/MIME implementations MUST be able to deal with | required at all. S/MIME implementations MUST be able to deal with | |||
| binary MIME objects. If no Content-Transfer-Encoding header is | binary MIME objects. If no Content-Transfer-Encoding header field is | |||
| present, the transfer encoding is presumed to be 7BIT. | present, the transfer encoding is presumed to be 7BIT. | |||
| S/MIME implementations SHOULD however use transfer encoding described | S/MIME implementations SHOULD however use transfer encoding described | |||
| in section 3.1.3 for all MIME entities they secure. The reason for | in section 3.1.3 for all MIME entities they secure. The reason for | |||
| securing only 7-bit MIME entities, even for enveloped data that are | securing only 7-bit MIME entities, even for enveloped data that are | |||
| not exposed to the transport, is that it allows the MIME entity to be | not exposed to the transport, is that it allows the MIME entity to be | |||
| handled in any environment without changing it. For example, a | handled in any environment without changing it. For example, a | |||
| trusted gateway might remove the envelope, but not the signature, of | trusted gateway might remove the envelope, but not the signature, of | |||
| a message, and then forward the signed message on to the end | a message, and then forward the signed message on to the end | |||
| recipient so that they can verify the signatures directly. If the | recipient so that they can verify the signatures directly. If the | |||
| transport internal to the site is not 8-bit clean, such as on a | transport internal to the site is not 8-bit clean, such as on a wide- | |||
| wide-area network with a single mail gateway, verifying the signature | area network with a single mail gateway, verifying the signature will | |||
| will not be possible unless the original MIME entity was only 7-bit | not be possible unless the original MIME entity was only 7-bit data. | |||
| data. | ||||
| S/MIME implementations which "know" that all intended recipient(s) | S/MIME implementations which "know" that all intended recipient(s) | |||
| are capable of handling inner (all but the outermost) binary MIME | are capable of handling inner (all but the outermost) binary MIME | |||
| objects SHOULD use binary encoding as opposed to a 7-bit-safe | objects SHOULD use binary encoding as opposed to a 7-bit-safe | |||
| transfer encoding for the inner entities. The use of a 7-bit-safe | transfer encoding for the inner entities. The use of a 7-bit-safe | |||
| encoding (such as base64) would unnecessarily expand the message | encoding (such as base64) would unnecessarily expand the message | |||
| size. Implementations MAY "know" that recipient implementations are | size. Implementations MAY "know" that recipient implementations are | |||
| capable of handling inner binary MIME entities either by interpreting | capable of handling inner binary MIME entities either by interpreting | |||
| the id-cap-preferBinaryInside sMIMECapabilities attribute, by prior | the id-cap-preferBinaryInside sMIMECapabilities attribute, by prior | |||
| agreement, or by other means. | agreement, or by other means. | |||
| skipping to change at page 19, line 5 | skipping to change at page 22, line 26 | |||
| Content-Type: image/jpeg | Content-Type: image/jpeg | |||
| Content-Transfer-Encoding: base64 | Content-Transfer-Encoding: base64 | |||
| iQCVAwUBMJrRF2N9oWBghPDJAQE9UQQAtl7LuRVndBjrk4EqYBIb3h5QXIX/LC// | iQCVAwUBMJrRF2N9oWBghPDJAQE9UQQAtl7LuRVndBjrk4EqYBIb3h5QXIX/LC// | |||
| jJV5bNvkZIGPIcEmI5iFd9boEgvpirHtIREEqLQRkYNoBActFBZmh9GC3C041WGq | jJV5bNvkZIGPIcEmI5iFd9boEgvpirHtIREEqLQRkYNoBActFBZmh9GC3C041WGq | |||
| uMbrbxc+nIs1TIKlA08rVi9ig/2Yh7LFrK5Ein57U/W72vgSxLhe/zhdfolT9Brn | uMbrbxc+nIs1TIKlA08rVi9ig/2Yh7LFrK5Ein57U/W72vgSxLhe/zhdfolT9Brn | |||
| HOxEa44b+EI= | HOxEa44b+EI= | |||
| --bar-- | --bar-- | |||
| 3.2. The application/pkcs7-mime Type | 3.2. The application/pkcs7-mime Media Type | |||
| The application/pkcs7-mime type is used to carry CMS content types | The application/pkcs7-mime media type is used to carry CMS content | |||
| including EnvelopedData, SignedData, and CompressedData. The details | types including EnvelopedData, SignedData, and CompressedData. The | |||
| of constructing these entities is described in subsequent sections. | details of constructing these entities are described in subsequent | |||
| This section describes the general characteristics of the | sections. This section describes the general characteristics of the | |||
| application/pkcs7-mime type. | application/pkcs7-mime media type. | |||
| The carried CMS object always contains a MIME entity that is prepared | The carried CMS object always contains a MIME entity that is prepared | |||
| as described in section 3.1 if the eContentType is id-data. Other | as described in section 3.1 if the eContentType is id-data. Other | |||
| contents MAY be carried when the eContentType contains different | contents MAY be carried when the eContentType contains different | |||
| values. See [ESS] for an example of this with signed receipts. | values. See [ESS] for an example of this with signed receipts. | |||
| Since CMS content types are binary data, in most cases base-64 | Since CMS content types are binary data, in most cases base-64 | |||
| transfer encoding is appropriate, in particular, when used with SMTP | transfer encoding is appropriate, in particular, when used with SMTP | |||
| transport. The transfer encoding used depends on the transport | transport. The transfer encoding used depends on the transport | |||
| through which the object is to be sent, and is not a characteristic | through which the object is to be sent, and is not a characteristic | |||
| of the MIME type. | of the media type. | |||
| Note that this discussion refers to the transfer encoding of the CMS | Note that this discussion refers to the transfer encoding of the CMS | |||
| object or "outside" MIME entity. It is completely distinct from, and | object or "outside" MIME entity. It is completely distinct from, and | |||
| unrelated to, the transfer encoding of the MIME entity secured by the | unrelated to, the transfer encoding of the MIME entity secured by the | |||
| CMS object, the "inside" object, which is described in section 3.1. | CMS object, the "inside" object, which is described in section 3.1. | |||
| Because there are several types of application/pkcs7-mime objects, a | Because there are several types of application/pkcs7-mime objects, a | |||
| sending agent SHOULD do as much as possible to help a receiving agent | sending agent SHOULD do as much as possible to help a receiving agent | |||
| know about the contents of the object without forcing the receiving | know about the contents of the object without forcing the receiving | |||
| agent to decode the ASN.1 for the object. The MIME headers of all | agent to decode the ASN.1 for the object. The Content-Type header | |||
| application/pkcs7-mime objects SHOULD include the optional "smime- | field of all application/pkcs7-mime objects SHOULD include the | |||
| type" parameter, as described in the following sections. | optional "smime-type" parameter, as described in the following | |||
| sections. | ||||
| 3.2.1. The name and filename Parameters | 3.2.1. The name and filename Parameters | |||
| For the application/pkcs7-mime, sending agents SHOULD emit the | For the application/pkcs7-mime, sending agents SHOULD emit the | |||
| optional "name" parameter to the Content-Type field for compatibility | optional "name" parameter to the Content-Type field for compatibility | |||
| with older systems. Sending agents SHOULD also emit the optional | with older systems. Sending agents SHOULD also emit the optional | |||
| Content-Disposition field [CONTDISP] with the "filename" parameter. | Content-Disposition field [CONTDISP] with the "filename" parameter. | |||
| If a sending agent emits the above parameters, the value of the | If a sending agent emits the above parameters, the value of the | |||
| parameters SHOULD be a file name with the appropriate extension: | parameters SHOULD be a file name with the appropriate extension: | |||
| MIME Type File Extension | Media Type File Extension | |||
| application/pkcs7-mime (SignedData, EnvelopedData) .p7m | application/pkcs7-mime (SignedData, EnvelopedData) .p7m | |||
| application/pkcs7-mime (degenerate SignedData .p7c | application/pkcs7-mime (degenerate SignedData .p7c | |||
| certificate management message) | certificate management message) | |||
| application/pkcs7-mime (CompressedData) .p7z | application/pkcs7-mime (CompressedData) .p7z | |||
| application/pkcs7-signature (SignedData) .p7s | application/pkcs7-signature (SignedData) .p7s | |||
| In addition, the file name SHOULD be limited to eight characters | In addition, the file name SHOULD be limited to eight characters | |||
| followed by a three letter extension. The eight character filename | followed by a three letter extension. The eight character filename | |||
| base can be any distinct name; the use of the filename base "smime" | base can be any distinct name; the use of the filename base "smime" | |||
| SHOULD be used to indicate that the MIME entity is associated with | SHOULD be used to indicate that the MIME entity is associated with | |||
| S/MIME. | S/MIME. | |||
| Including a file name serves two purposes. It facilitates easier use | Including a file name serves two purposes. It facilitates easier use | |||
| of S/MIME objects as files on disk. It also can convey type | of S/MIME objects as files on disk. It also can convey type | |||
| skipping to change at page 20, line 26 | skipping to change at page 23, line 39 | |||
| In addition, the file name SHOULD be limited to eight characters | In addition, the file name SHOULD be limited to eight characters | |||
| followed by a three letter extension. The eight character filename | followed by a three letter extension. The eight character filename | |||
| base can be any distinct name; the use of the filename base "smime" | base can be any distinct name; the use of the filename base "smime" | |||
| SHOULD be used to indicate that the MIME entity is associated with | SHOULD be used to indicate that the MIME entity is associated with | |||
| S/MIME. | S/MIME. | |||
| Including a file name serves two purposes. It facilitates easier use | Including a file name serves two purposes. It facilitates easier use | |||
| of S/MIME objects as files on disk. It also can convey type | of S/MIME objects as files on disk. It also can convey type | |||
| information across gateways. When a MIME entity of type | information across gateways. When a MIME entity of type | |||
| application/pkcs7-mime (for example) arrives at a gateway that has no | application/pkcs7-mime (for example) arrives at a gateway that has no | |||
| special knowledge of S/MIME, it will default the entity's MIME type | special knowledge of S/MIME, it will default the entity's media type | |||
| to application/octet-stream and treat it as a generic attachment, | to application/octet-stream and treat it as a generic attachment, | |||
| thus losing the type information. However, the suggested filename | thus losing the type information. However, the suggested filename | |||
| for an attachment is often carried across a gateway. This often | for an attachment is often carried across a gateway. This often | |||
| allows the receiving systems to determine the appropriate application | allows the receiving systems to determine the appropriate application | |||
| to hand the attachment off to, in this case, a stand-alone S/MIME | to hand the attachment off to, in this case, a stand-alone S/MIME | |||
| processing application. Note that this mechanism is provided as a | processing application. Note that this mechanism is provided as a | |||
| convenience for implementations in certain environments. A proper | convenience for implementations in certain environments. A proper | |||
| S/MIME implementation MUST use the MIME types and MUST NOT rely on | S/MIME implementation MUST use the media types and MUST NOT rely on | |||
| the file extensions. | the file extensions. | |||
| 3.2.2. The smime-type parameter | 3.2.2. The smime-type parameter | |||
| The application/pkcs7-mime content type defines the optional "smime- | The application/pkcs7-mime content type defines the optional "smime- | |||
| type" parameter. The intent of this parameter is to convey details | type" parameter. The intent of this parameter is to convey details | |||
| about the security applied (signed or enveloped) along with | about the security applied (signed or enveloped) along with | |||
| information about the contained content. This specification defines | information about the contained content. This specification defines | |||
| the following smime-types. | the following smime-types. | |||
| skipping to change at page 21, line 6 | skipping to change at page 24, line 14 | |||
| 3.2.2. The smime-type parameter | 3.2.2. The smime-type parameter | |||
| The application/pkcs7-mime content type defines the optional "smime- | The application/pkcs7-mime content type defines the optional "smime- | |||
| type" parameter. The intent of this parameter is to convey details | type" parameter. The intent of this parameter is to convey details | |||
| about the security applied (signed or enveloped) along with | about the security applied (signed or enveloped) along with | |||
| information about the contained content. This specification defines | information about the contained content. This specification defines | |||
| the following smime-types. | the following smime-types. | |||
| Name CMS type Inner Content | Name CMS type Inner Content | |||
| enveloped-data EnvelopedData id-data | enveloped-data EnvelopedData id-data | |||
| signed-data SignedData id-data | signed-data SignedData id-data | |||
| certs-only SignedData none | certs-only SignedData none | |||
| compressed-data CompressedData id-data | compressed-data CompressedData id-data | |||
| In order for consistency to be obtained with future specifications, | In order for consistency to be obtained with future specifications, | |||
| the following guidelines SHOULD be followed when assigning a new | the following guidelines SHOULD be followed when assigning a new | |||
| smime-type parameter. | smime-type parameter. | |||
| 1. If both signing and encryption can be applied to the content, then | 1. If both signing and encryption can be applied to the content, | |||
| two values for smime-type SHOULD be assigned "signed-*" and | then two values for smime-type SHOULD be assigned "signed-*" and | |||
| "encrypted-*". If one operation can be assigned then this can be | "encrypted-*". If one operation can be assigned then this can be | |||
| omitted. Thus since "certs-only" can only be signed, "signed-" is | omitted. Thus since "certs-only" can only be signed, "signed-" | |||
| omitted. | is omitted. | |||
| 2. A common string for a content OID SHOULD be assigned. We use | 2. A common string for a content OID SHOULD be assigned. We use | |||
| "data" for the id-data content OID when MIME is the inner content. | "data" for the id-data content OID when MIME is the inner | |||
| content. | ||||
| 3. If no common string is assigned. Then the common string of | 3. If no common string is assigned, then the common string of | |||
| "OID.<oid>" is recommended (for example, "OID.1.3.6.1.5.5.7.6.1" | "OID.<oid>" is recommended (for example, | |||
| would be DES40). | "OID.2.16.840.1.101.3.4.1.2" would be AES-128 CBC). | |||
| It is explicitly intended that this field be a suitable hint for mail | It is explicitly intended that this field be a suitable hint for mail | |||
| client applications to indicate whether a message is "signed" or | client applications to indicate whether a message is "signed" or | |||
| "encrypted" without having to tunnel into the CMS payload. | "encrypted" without having to tunnel into the CMS payload. | |||
| 3.3. Creating an Enveloped-only Message | 3.3. Creating an Enveloped-only Message | |||
| This section describes the format for enveloping a MIME entity | This section describes the format for enveloping a MIME entity | |||
| without signing it. It is important to note that sending enveloped | without signing it. It is important to note that sending enveloped | |||
| but not signed messages does not provide for data integrity. It is | but not signed messages does not provide for data integrity. It is | |||
| possible to replace ciphertext in such a way that the processed | possible to replace ciphertext in such a way that the processed | |||
| message will still be valid, but the meaning can be altered. | message will still be valid, but the meaning can be altered. | |||
| Step 1. The MIME entity to be enveloped is prepared according to | Step 1. The MIME entity to be enveloped is prepared according to | |||
| section 3.1. | section 3.1. | |||
| Step 2. The MIME entity and other required data is processed into a | Step 2. The MIME entity and other required data is processed | |||
| CMS object of type EnvelopedData. In addition to encrypting a copy | into a CMS object of type EnvelopedData. In addition to | |||
| of the content-encryption key for each recipient, a copy of the | encrypting a copy of the content-encryption key for each | |||
| content-encryption key SHOULD be encrypted for the originator and | recipient, a copy of the content-encryption key SHOULD be | |||
| included in the EnvelopedData (see [CMS] Section 6). | encrypted for the originator and included in the EnvelopedData | |||
| (see [CMS] Section 6). | ||||
| Step 3. The EnvelopedData object is wrapped in a CMS ContentInfo | Step 3. The EnvelopedData object is wrapped in a CMS ContentInfo | |||
| object. | object. | |||
| Step 4. The ContentInfo object is inserted into an | Step 4. The ContentInfo object is inserted into an | |||
| application/pkcs7-mime MIME entity. | application/pkcs7-mime MIME entity. | |||
| The smime-type parameter for enveloped-only messages is "enveloped- | The smime-type parameter for enveloped-only messages is "enveloped- | |||
| data". The file extension for this type of message is ".p7m". | data". The file extension for this type of message is ".p7m". | |||
| skipping to change at page 22, line 29 | skipping to change at page 25, line 36 | |||
| Content-Disposition: attachment; filename=smime.p7m | Content-Disposition: attachment; filename=smime.p7m | |||
| rfvbnj756tbBghyHhHUujhJhjH77n8HHGT9HG4VQpfyF467GhIGfHfYT6 | rfvbnj756tbBghyHhHUujhJhjH77n8HHGT9HG4VQpfyF467GhIGfHfYT6 | |||
| 7n8HHGghyHhHUujhJh4VQpfyF467GhIGfHfYGTrfvbnjT6jH7756tbB9H | 7n8HHGghyHhHUujhJh4VQpfyF467GhIGfHfYGTrfvbnjT6jH7756tbB9H | |||
| f8HHGTrfvhJhjH776tbB9HG4VQbnj7567GhIGfHfYT6ghyHhHUujpfyF4 | f8HHGTrfvhJhjH776tbB9HG4VQbnj7567GhIGfHfYT6ghyHhHUujpfyF4 | |||
| 0GhIGfHfQbnj756YT64V | 0GhIGfHfQbnj756YT64V | |||
| 3.4. Creating a Signed-only Message | 3.4. Creating a Signed-only Message | |||
| There are two formats for signed messages defined for S/MIME: | There are two formats for signed messages defined for S/MIME: | |||
| application/pkcs7-mime with SignedData, and multipart/signed. In | ||||
| general, the multipart/signed form is preferred for sending, and | - application/pkcs7-mime with SignedData; and, | |||
| - multipart/signed. | ||||
| In general, the multipart/signed form is preferred for sending, and | ||||
| receiving agents MUST be able to handle both. | receiving agents MUST be able to handle both. | |||
| 3.4.1. Choosing a Format for Signed-only Messages | 3.4.1. Choosing a Format for Signed-only Messages | |||
| There are no hard-and-fast rules when a particular signed-only format | There are no hard-and-fast rules when a particular signed-only format | |||
| is chosen because it depends on the capabilities of all the receivers | is chosen because it depends on the capabilities of all the receivers | |||
| and the relative importance of receivers with S/MIME facilities being | and the relative importance of receivers with S/MIME facilities being | |||
| able to verify the signature versus the importance of receivers | able to verify the signature versus the importance of receivers | |||
| without S/MIME software being able to view the message. | without S/MIME software being able to view the message. | |||
| Messages signed using the multipart/signed format can always be | Messages signed using the multipart/signed format can always be | |||
| viewed by the receiver whether they have S/MIME software or not. | viewed by the receiver whether they have S/MIME software or not. They | |||
| They can also be viewed whether they are using a MIME-native user | can also be viewed whether they are using a MIME-native user agent or | |||
| agent or they have messages translated by a gateway. In this | they have messages translated by a gateway. In this context, "be | |||
| context, "be viewed" means the ability to process the message | viewed" means the ability to process the message essentially as if it | |||
| essentially as if it were not a signed message, including any other | were not a signed message, including any other MIME structure the | |||
| MIME structure the message might have. | message might have. | |||
| Messages signed using the SignedData format cannot be viewed by a | Messages signed using the SignedData format cannot be viewed by a | |||
| recipient unless they have S/MIME facilities. However, the | recipient unless they have S/MIME facilities. However, the | |||
| SignedData format protects the message content from being changed by | SignedData format protects the message content from being changed by | |||
| benign intermediate agents. Such agents might do line wrapping or | benign intermediate agents. Such agents might do line wrapping or | |||
| content-transfer encoding changes which would break the signature. | content-transfer encoding changes which would break the signature. | |||
| 3.4.2. Signing Using application/pkcs7-mime with SignedData | 3.4.2. Signing Using application/pkcs7-mime with SignedData | |||
| This signing format uses the application/pkcs7-mime MIME type. The | This signing format uses the application/pkcs7-mime media type. The | |||
| steps to create this format are: | steps to create this format are: | |||
| Step 1. The MIME entity is prepared according to section 3.1. | Step 1. The MIME entity is prepared according to section 3.1. | |||
| Step 2. The MIME entity and other required data is processed into a | Step 2. The MIME entity and other required data is processed | |||
| CMS object of type SignedData. | into a CMS object of type SignedData. | |||
| Step 3. The SignedData object is wrapped in a CMS ContentInfo | Step 3. The SignedData object is wrapped in a CMS ContentInfo | |||
| object. | object. | |||
| Step 4. The ContentInfo object is inserted into an | Step 4. The ContentInfo object is inserted into an | |||
| application/pkcs7-mime MIME entity. | application/pkcs7-mime MIME entity. | |||
| The smime-type parameter for messages using application/pkcs7-mime | The smime-type parameter for messages using application/pkcs7-mime | |||
| with SignedData is "signed-data". The file extension for this type | with SignedData is "signed-data". The file extension for this type | |||
| of message is ".p7m". | of message is ".p7m". | |||
| skipping to change at page 23, line 47 | skipping to change at page 27, line 9 | |||
| 567GhIGfHfYT6ghyHhHUujpfyF4f8HHGTrfvhJhjH776tbB9HG4VQbnj7 | 567GhIGfHfYT6ghyHhHUujpfyF4f8HHGTrfvhJhjH776tbB9HG4VQbnj7 | |||
| 77n8HHGT9HG4VQpfyF467GhIGfHfYT6rfvbnj756tbBghyHhHUujhJhjH | 77n8HHGT9HG4VQpfyF467GhIGfHfYT6rfvbnj756tbBghyHhHUujhJhjH | |||
| HUujhJh4VQpfyF467GhIGfHfYGTrfvbnjT6jH7756tbB9H7n8HHGghyHh | HUujhJh4VQpfyF467GhIGfHfYGTrfvbnjT6jH7756tbB9H7n8HHGghyHh | |||
| 6YT64V0GhIGfHfQbnj75 | 6YT64V0GhIGfHfQbnj75 | |||
| 3.4.3. Signing Using the multipart/signed Format | 3.4.3. Signing Using the multipart/signed Format | |||
| This format is a clear-signing format. Recipients without any S/MIME | This format is a clear-signing format. Recipients without any S/MIME | |||
| or CMS processing facilities are able to view the message. It makes | or CMS processing facilities are able to view the message. It makes | |||
| use of the multipart/signed MIME type described in [MIME-SECURE]. | use of the multipart/signed media type described in [MIME-SECURE]. | |||
| The multipart/signed MIME type has two parts. The first part | The multipart/signed media type has two parts. The first part | |||
| contains the MIME entity that is signed; the second part contains the | contains the MIME entity that is signed; the second part contains the | |||
| "detached signature" CMS SignedData object in which the | "detached signature" CMS SignedData object in which the | |||
| encapContentInfo eContent field is absent. | encapContentInfo eContent field is absent. | |||
| 3.4.3.1. The application/pkcs7-signature MIME Type | 3.4.3.1. The application/pkcs7-signature Media Type | |||
| This MIME type always contains a CMS ContentInfo containing a single | This media type always contains a CMS ContentInfo containing a single | |||
| CMS object of type SignedData. The SignedData encapContentInfo | CMS object of type SignedData. The SignedData encapContentInfo | |||
| eContent field MUST be absent. The signerInfos field contains the | eContent field MUST be absent. The signerInfos field contains the | |||
| signatures for the MIME entity. | signatures for the MIME entity. | |||
| The file extension for signed-only messages using application/pkcs7- | The file extension for signed-only messages using application/pkcs7- | |||
| signature is ".p7s". | signature is ".p7s". | |||
| 3.4.3.2. Creating a multipart/signed Message | 3.4.3.2. Creating a multipart/signed Message | |||
| Step 1. The MIME entity to be signed is prepared according to | Step 1. The MIME entity to be signed is prepared according to | |||
| section 3.1, taking special care for clear-signing. | section 3.1, taking special care for clear-signing. | |||
| Step 2. The MIME entity is presented to CMS processing in order to | Step 2. The MIME entity is presented to CMS processing in order | |||
| obtain an object of type SignedData in which the encapContentInfo | to obtain an object of type SignedData in which the | |||
| eContent field is absent. | encapContentInfo eContent field is absent. | |||
| Step 3. The MIME entity is inserted into the first part of a | Step 3. The MIME entity is inserted into the first part of a | |||
| multipart/signed message with no processing other than that described | multipart/signed message with no processing other than that | |||
| in section 3.1. | described in section 3.1. | |||
| Step 4. Transfer encoding is applied to the "detached signature" CMS | Step 4. Transfer encoding is applied to the "detached signature" | |||
| SignedData object and it is inserted into a MIME entity of type | CMS SignedData object and it is inserted into a MIME entity of | |||
| application/pkcs7-signature. | type application/pkcs7-signature. | |||
| Step 5. The MIME entity of the application/pkcs7-signature is | Step 5. The MIME entity of the application/pkcs7-signature is | |||
| inserted into the second part of the multipart/signed entity. | inserted into the second part of the multipart/signed entity. | |||
| The multipart/signed Content type has two required parameters: the | The multipart/signed Content-Type has two required parameters: the | |||
| protocol parameter and the micalg parameter. | protocol parameter and the micalg parameter. | |||
| The protocol parameter MUST be "application/pkcs7-signature". Note | The protocol parameter MUST be "application/pkcs7-signature". Note | |||
| that quotation marks are required around the protocol parameter | that quotation marks are required around the protocol parameter | |||
| because MIME requires that the "/" character in the parameter value | because MIME requires that the "/" character in the parameter value | |||
| MUST be quoted. | MUST be quoted. | |||
| The micalg parameter allows for one-pass processing when the | The micalg parameter allows for one-pass processing when the | |||
| signature is being verified. The value of the micalg parameter is | signature is being verified. The value of the micalg parameter is | |||
| dependent on the message digest algorithm(s) used in the calculation | dependent on the message digest algorithm(s) used in the calculation | |||
| of the Message Integrity Check. If multiple message digest | of the Message Integrity Check. If multiple message digest | |||
| algorithms are used they MUST be separated by commas per [MIME- | algorithms are used they MUST be separated by commas per [MIME- | |||
| SECURE]. The values to be placed in the micalg parameter SHOULD be | SECURE]. The values to be placed in the micalg parameter SHOULD be | |||
| from the following: | from the following: | |||
| Algorithm Value | Algorithm Value used | |||
| used | ||||
| MD5 md5 | MD5 md5 | |||
| SHA-1 sha1 | SHA-1 sha1 | |||
| SHA-224 sha224 | ||||
| SHA-256 sha256 | SHA-256 sha256 | |||
| SHA-384 sha384 | SHA-384 sha384 | |||
| SHA-512 sha512 | SHA-512 sha512 | |||
| Any other (defined separately in algorithm profile or "unknown" | Any other (defined separately in algorithm profile or "unknown" | |||
| if not defined) | if not defined) | |||
| (Historical note: some early implementations of S/MIME emitted and | (Historical note: some early implementations of S/MIME emitted and | |||
| expected "rsa-md5" and "rsa-sha1" for the micalg parameter.) | expected "rsa-md5" and "rsa-sha1" for the micalg parameter.) | |||
| Receiving agents SHOULD be able to recover gracefully from a micalg | Receiving agents SHOULD be able to recover gracefully from a micalg | |||
| parameter value that they do not recognize. | parameter value that they do not recognize. | |||
| The SHA-256, SHA-384, and SHA-512 algorithms [FIPS180-2] are not | The SHA-224, SHA-384, and SHA-512 algorithms [FIPS180-3] are not | |||
| currently recommended in S/MIME, and are included here for | currently recommended in S/MIME, and are included here for | |||
| completeness. | completeness. | |||
| 3.4.3.3. Sample multipart/signed Message | 3.4.3.3. Sample multipart/signed Message | |||
| Content-Type: multipart/signed; | Content-Type: multipart/signed; | |||
| protocol="application/pkcs7-signature"; | protocol="application/pkcs7-signature"; | |||
| micalg=sha1; boundary=boundary42 | micalg=sha1; boundary=boundary42 | |||
| --boundary42 | --boundary42 | |||
| skipping to change at page 26, line 4 | skipping to change at page 29, line 8 | |||
| Content-Type: application/pkcs7-signature; name=smime.p7s | Content-Type: application/pkcs7-signature; name=smime.p7s | |||
| Content-Transfer-Encoding: base64 | Content-Transfer-Encoding: base64 | |||
| Content-Disposition: attachment; filename=smime.p7s | Content-Disposition: attachment; filename=smime.p7s | |||
| ghyHhHUujhJhjH77n8HHGTrfvbnj756tbB9HG4VQpfyF467GhIGfHfYT6 | ghyHhHUujhJhjH77n8HHGTrfvbnj756tbB9HG4VQpfyF467GhIGfHfYT6 | |||
| 4VQpfyF467GhIGfHfYT6jH77n8HHGghyHhHUujhJh756tbB9HGTrfvbnj | 4VQpfyF467GhIGfHfYT6jH77n8HHGghyHhHUujhJh756tbB9HGTrfvbnj | |||
| n8HHGTrfvhJhjH776tbB9HG4VQbnj7567GhIGfHfYT6ghyHhHUujpfyF4 | n8HHGTrfvhJhjH776tbB9HG4VQbnj7567GhIGfHfYT6ghyHhHUujpfyF4 | |||
| 7GhIGfHfYT64VQbnj756 | 7GhIGfHfYT64VQbnj756 | |||
| --boundary42-- | --boundary42-- | |||
| The content that is digested (the first part of the multipart/signed) | The content that is digested (the first part of the multipart/signed) | |||
| are the bytes: | are the bytes: | |||
| 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74 65 78 74 2f 70 6c 61 69 | 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74 65 78 74 2f 70 6c 61 69 | |||
| 6e 0d 0a 0d 0a 54 68 69 73 20 69 73 20 61 20 63 6c 65 61 72 2d 73 69 | 6e 0d 0a 0d 0a 54 68 69 73 20 69 73 20 61 20 63 6c 65 61 72 2d 73 69 | |||
| 67 6e 65 64 20 6d 65 73 73 61 67 65 2e 0d 0a | 67 6e 65 64 20 6d 65 73 73 61 67 65 2e 0d 0a | |||
| 3.5. Creating an Compressed-only Message | 3.5. Creating a Compressed-only Message | |||
| This section describes the format for compressing a MIME entity. | This section describes the format for compressing a MIME entity. | |||
| Please note that versions of S/MIME prior to 3.1 did not specify any | Please note that versions of S/MIME prior to version 3.1 did not | |||
| use of CompressedData, and will not recognize it. The use of a | specify any use of CompressedData, and will not recognize it. The | |||
| capability to indicate the ability to receive CompressedData is | use of a capability to indicate the ability to receive CompressedData | |||
| described in [CMSCOMPR] and is the preferred method for | is described in [CMSCOMPR] and is the preferred method for | |||
| compatibility. | compatibility. | |||
| Step 1. The MIME entity to be compressed is prepared according to | Step 1. The MIME entity to be compressed is prepared according | |||
| section 3.1. | to section 3.1. | |||
| Step 2. The MIME entity and other required data is processed into a | Step 2. The MIME entity and other required data is processed | |||
| CMS object of type CompressedData. | into a CMS object of type CompressedData. | |||
| Step 3. The CompressedData object is wrapped in a CMS ContentInfo | Step 3. The CompressedData object is wrapped in a CMS | |||
| object. | ContentInfo object. | |||
| Step 4. The ContentInfo object is inserted into an | Step 4. The ContentInfo object is inserted into an | |||
| application/pkcs7-mime MIME entity. | application/pkcs7-mime MIME entity. | |||
| The smime-type parameter for compressed-only messages is | The smime-type parameter for compressed-only messages is "compressed- | |||
| "compressed-data". The file extension for this type of message is | data". The file extension for this type of message is ".p7z". | |||
| ".p7z". | ||||
| A sample message would be: | A sample message would be: | |||
| Content-Type: application/pkcs7-mime; smime-type=compressed-data; | Content-Type: application/pkcs7-mime; smime-type=compressed-data; | |||
| name=smime.p7z | name=smime.p7z | |||
| Content-Transfer-Encoding: base64 | Content-Transfer-Encoding: base64 | |||
| Content-Disposition: attachment; filename=smime.p7z | Content-Disposition: attachment; filename=smime.p7z | |||
| rfvbnj756tbBghyHhHUujhJhjH77n8HHGT9HG4VQpfyF467GhIGfHfYT6 | rfvbnj756tbBghyHhHUujhJhjH77n8HHGT9HG4VQpfyF467GhIGfHfYT6 | |||
| 7n8HHGghyHhHUujhJh4VQpfyF467GhIGfHfYGTrfvbnjT6jH7756tbB9H | 7n8HHGghyHhHUujhJh4VQpfyF467GhIGfHfYGTrfvbnjT6jH7756tbB9H | |||
| skipping to change at page 27, line 49 | skipping to change at page 30, line 50 | |||
| need to compress first, then sign. | need to compress first, then sign. | |||
| 3.7. Creating a Certificate Management Message | 3.7. Creating a Certificate Management Message | |||
| The certificate management message or MIME entity is used to | The certificate management message or MIME entity is used to | |||
| transport certificates and/or certificate revocation lists, such as | transport certificates and/or certificate revocation lists, such as | |||
| in response to a registration request. | in response to a registration request. | |||
| Step 1. The certificates and/or certificate revocation lists are | Step 1. The certificates and/or certificate revocation lists are | |||
| made available to the CMS generating process which creates a CMS | made available to the CMS generating process which creates a CMS | |||
| object of type SignedData. The SignedData encapContentInfo eContent | object of type SignedData. The SignedData encapContentInfo | |||
| field MUST be absent and signerInfos field MUST be empty. | eContent field MUST be absent and signerInfos field MUST be | |||
| empty. | ||||
| Step 2. The SignedData object is wrapped in a CMS ContentInfo | Step 2. The SignedData object is wrapped in a CMS ContentInfo | |||
| object. | object. | |||
| Step 3. The ContentInfo object is enclosed in an application/pkcs7- | Step 3. The ContentInfo object is enclosed in an | |||
| mime MIME entity. | application/pkcs7-mime MIME entity. | |||
| The smime-type parameter for a certificate management message is | The smime-type parameter for a certificate management message is | |||
| "certs-only". The file extension for this type of message is ".p7c". | "certs-only". The file extension for this type of message is ".p7c". | |||
| 3.8. Registration Requests | 3.8. Registration Requests | |||
| A sending agent that signs messages MUST have a certificate for the | A sending agent that signs messages MUST have a certificate for the | |||
| signature so that a receiving agent can verify the signature. There | signature so that a receiving agent can verify the signature. There | |||
| are many ways of getting certificates, such as through an exchange | are many ways of getting certificates, such as through an exchange | |||
| with a certificate authority, through a hardware token or diskette, | with a certificate authority, through a hardware token or diskette, | |||
| and so on. | and so on. | |||
| S/MIME v2 [SMIMEV2] specified a method for "registering" public keys | S/MIME v2 [SMIMEv2] specified a method for "registering" public keys | |||
| with certificate authorities using an application/pkcs10 body part. | with certificate authorities using an application/pkcs10 body part. | |||
| Since that time, the IETF PKIX Working Group has developed other | Since that time, the IETF PKIX Working Group has developed other | |||
| methods for requesting certificates. However, S/MIME v3.1 does not | methods for requesting certificates. However, S/MIME v3.2 does not | |||
| require a particular certificate request mechanism. | require a particular certificate request mechanism. | |||
| 3.9. Identifying an S/MIME Message | 3.9. Identifying an S/MIME Message | |||
| Because S/MIME takes into account interoperation in non-MIME | Because S/MIME takes into account interoperation in non-MIME | |||
| environments, several different mechanisms are employed to carry the | environments, several different mechanisms are employed to carry the | |||
| type information, and it becomes a bit difficult to identify S/MIME | type information, and it becomes a bit difficult to identify S/MIME | |||
| messages. The following table lists criteria for determining whether | messages. The following table lists criteria for determining whether | |||
| or not a message is an S/MIME message. A message is considered an | or not a message is an S/MIME message. A message is considered an | |||
| S/MIME message if it matches any of the criteria listed below. | S/MIME message if it matches any of the criteria listed below. | |||
| The file suffix in the table below comes from the "name" parameter in | The file suffix in the table below comes from the "name" parameter in | |||
| the content-type header, or the "filename" parameter on the content- | the Content-Type header field, or the "filename" parameter on the | |||
| disposition header. These parameters that give the file suffix are | Content-Disposition header field. These parameters that give the | |||
| not listed below as part of the parameter section. | file suffix are not listed below as part of the parameter section. | |||
| MIME type: application/pkcs7-mime | Media type: application/pkcs7-mime | |||
| parameters: any | parameters: any | |||
| file suffix: any | file suffix: any | |||
| MIME type: multipart/signed | Media type: multipart/signed | |||
| parameters: protocol="application/pkcs7-signature" | parameters: protocol="application/pkcs7-signature" | |||
| file suffix: any | file suffix: any | |||
| Media type: application/octet-stream | ||||
| MIME type: application/octet-stream | ||||
| parameters: any | parameters: any | |||
| file suffix: p7m, p7s, p7c, p7z | file suffix: p7m, p7s, p7c, p7z | |||
| 4. Certificate Processing | 4. Certificate Processing | |||
| A receiving agent MUST provide some certificate retrieval mechanism | A receiving agent MUST provide some certificate retrieval mechanism | |||
| in order to gain access to certificates for recipients of digital | in order to gain access to certificates for recipients of digital | |||
| envelopes. This specification does not cover how S/MIME agents | envelopes. This specification does not cover how S/MIME agents | |||
| handle certificates, only what they do after a certificate has been | handle certificates, only what they do after a certificate has been | |||
| validated or rejected. S/MIME certificate issues are covered in | validated or rejected. S/MIME certificate issues are covered in | |||
| [CERT31]. | [CERT32]. | |||
| At a minimum, for initial S/MIME deployment, a user agent could | At a minimum, for initial S/MIME deployment, a user agent could | |||
| automatically generate a message to an intended recipient requesting | automatically generate a message to an intended recipient requesting | |||
| that recipient's certificate in a signed return message. Receiving | that recipient's certificate in a signed return message. Receiving | |||
| and sending agents SHOULD also provide a mechanism to allow a user to | and sending agents SHOULD also provide a mechanism to allow a user to | |||
| "store and protect" certificates for correspondents in such a way so | "store and protect" certificates for correspondents in such a way so | |||
| as to guarantee their later retrieval. | as to guarantee their later retrieval. | |||
| 4.1. Key Pair Generation | 4.1. Key Pair Generation | |||
| All generated key pairs MUST be generated from a good source of non- | All generated key pairs MUST be generated from a good source of non- | |||
| deterministic random input [RANDOM] and the private key MUST be | deterministic random input [RANDOM] and the private key MUST be | |||
| protected in a secure fashion. | protected in a secure fashion. | |||
| If an S/MIME agent needs to generate an RSA key pair, then the S/MIME | An S/MIME user agent MUST NOT generate asymmetric keys less than 512 | |||
| agent or some related administrative utility or function SHOULD | bits for use with the RSA or DSA signature algorithms. | |||
| generate RSA key pairs using the following guidelines. A user agent | ||||
| SHOULD generate RSA key pairs at a minimum key size of 768 bits. A | ||||
| user agent MUST NOT generate RSA key pairs less than 512 bits long. | ||||
| Creating keys longer than 1024 bits can cause some older S/MIME | ||||
| receiving agents to not be able to verify signatures, but gives | ||||
| better security and is therefore valuable. A receiving agent SHOULD | ||||
| be able to verify signatures with keys of any size over 512 bits. | ||||
| Some agents created in the United States have chosen to create 512 | ||||
| bit keys in order to get more advantageous export licenses. However, | ||||
| 512 bit keys are considered by many to be cryptographically insecure. | ||||
| Implementers SHOULD be aware that multiple (active) key pairs can be | ||||
| associated with a single individual. For example, one key pair can | ||||
| be used to support confidentiality, while a different key pair can be | ||||
| used for authentication. | ||||
| 5. Security Considerations | For 512-bit RSA with SHA-1 see [CMSALG] and [FIPS186-2] without | |||
| Change Notice 1, for 512-bit RSA with SHA-256 see [CMS-SHA2] and | ||||
| [FIPS186-2] without Change Notice 1, for 1024-bit through 2048-bit | ||||
| RSA with SHA-256 see [CMS-SHA2] and [FIPS186-2] with Change Notice 1. | ||||
| The first reference provides the signature algorithm's object | ||||
| identifier and the second provides the signature algorithm's | ||||
| definition. | ||||
| 40-bit encryption is considered weak by most cryptographers. Using | For 512-bit DSA with SHA-1 see [CMSALG] and [FIPS186-2] without | |||
| weak cryptography in S/MIME offers little actual security over | Change Notice 1, for 512-bit DSA with SHA-256 see [CMS-SHA2] and | |||
| sending plaintext. However, other features of S/MIME, such as the | [FIPS186-2] without Change Notice 1, for 1024-bit DSA with SHA-1 see | |||
| specification of tripleDES and the ability to announce stronger | [CMSALG] and [FIPS186-2] with Change Notice 1, for 1024-bit DSA with | |||
| cryptographic capabilities to parties with whom you communicate, | SHA-256 see [CMS-SHA2] and [FIPS186-3]. The first reference provides | |||
| allow senders to create messages that use strong encryption. Using | the signature algorithm's object identifier and the second provides | |||
| weak cryptography is never recommended unless the only alternative is | the signature algorithm's definition. | |||
| no cryptography. When feasible, sending and receiving agents SHOULD | ||||
| inform senders and recipients of the relative cryptographic strength | ||||
| of messages. | ||||
| It is impossible for most software or people to estimate the value of | For 512-2048-bit RSA-PSS with SHA-256 see [RSAPSS]. | |||
| a message. Further, it is impossible for most software or people to | ||||
| estimate the actual cost of decrypting a message that is encrypted | ||||
| with a key of a particular size. Further, it is quite difficult to | ||||
| determine the cost of a failed decryption if a recipient cannot | ||||
| decode a message. Thus, choosing between different key sizes (or | ||||
| choosing whether to just use plaintext) is also impossible. However, | ||||
| decisions based on these criteria are made all the time, and | ||||
| therefore this specification gives a framework for using those | ||||
| estimates in choosing algorithms. | ||||
| If a sending agent is sending the same message using different | 4.2. Signature Generation | |||
| strengths of cryptography, an attacker watching the communications | ||||
| channel might be able to determine the contents of the strongly- | ||||
| encrypted message by decrypting the weakly-encrypted version. In | ||||
| other words, a sender SHOULD NOT send a copy of a message using | ||||
| weaker cryptography than they would use for the original of the | ||||
| message. | ||||
| Modification of the ciphertext can go undetected if authentication is | The following are the requirements for an S/MIME agent generated RSA | |||
| not also used, which is the case when sending EnvelopedData without | signatures: | |||
| wrapping it in SignedData or enclosing SignedData within it. | ||||
| See RFC 3218 [MMA] for more information about thwarting the adaptive | 512 <= key size < 1024 : MAY (see Security Considerations) | |||
| chosen ciphertext vulnerability in PKCS #1 Version 1.5 | 1024 <= key size <= 2048 : SHOULD (see Security Considerations) | |||
| implementations. | 2048 < key size : MAY (see Security Considerations) | |||
| In some circumstances the use of the Diffie-Hellman key agreement | The following are the requirements for an S/MIME agent generated DSA | |||
| scheme in a prime order subgroup of a large prime p is vulnerable to | signatures: | |||
| certain attacks known as "small-subgroup" attacks. Methods exist, | ||||
| however, to prevent these attacks. These methods are described in | ||||
| RFC 2785 [DHSUB]. | ||||
| A. ASN.1 Module | 512 <= key size <= 1023 : MAY (see Security Considerations) | |||
| 1024 = key size : SHOULD- (see Security Considerations) | ||||
| SecureMimeMessageV3dot1 | 4.3. Signature Verification | |||
| { iso(1) member-body(2) us(840) rsadsi(113549) | ||||
| pkcs(1) pkcs-9(9) smime(16) modules(0) msg-v3dot1(21) } | ||||
| DEFINITIONS IMPLICIT TAGS ::= | The following are the requirements for S/MIME receiving agents during | |||
| BEGIN | signature verification of RSA signatures: | |||
| IMPORTS | 512 <= key size <= 2048 : MUST (see Security Considerations) | |||
| SubjectKeyIdentifier, IssuerAndSerialNumber, | 2048 < key size : MAY (see Security Considerations) | |||
| RecipientKeyIdentifier | ||||
| FROM CryptographicMessageSyntax | ||||
| { iso(1) member-body(2) us(840) rsadsi(113549) | ||||
| pkcs(1) pkcs-9(9) smime(16) modules(0) cms-2001(14) }; | ||||
| The following are the requirements for S/MIME receiving agents during | ||||
| signature verification of DSA signatures: | ||||
| id-aa OBJECT IDENTIFIER ::= {iso(1) member-body(2) usa(840) | 512 <= key size <= 1023 : MAY (see Security Considerations) | |||
| rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) attributes(2)} | 1024 = key size : SHOULD- (see Security Considerations) | |||
| 4.4. Encryption | ||||
| smimeCapabilities OBJECT IDENTIFIER ::= | The following are the requirements for an S/MIME agent when | |||
| {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 15} | establishing keys for content encryption using the RSA algorithms: | |||
| SMIMECapability ::= SEQUENCE { | 512 <= key size < 1024 : MAY (see Security Considerations) | |||
| capabilityID OBJECT IDENTIFIER, | 1024 <= key size <= 2048 : SHOULD (see Security Considerations) | |||
| parameters ANY DEFINED BY capabilityID OPTIONAL } | 2048 < key size : MAY (see Security Considerations) | |||
| SMIMECapabilities ::= SEQUENCE OF SMIMECapability | The following are the requirements for an S/MIME agent when | |||
| establishing keys for content encryption using the DH algorithms: | ||||
| 512 <= key size <= 1023 : MAY (see Security Considerations) | ||||
| 1024 = key size : SHOULD- (see Security Considerations) | ||||
| id-aa-encrypKeyPref OBJECT IDENTIFIER ::= {id-aa 11} | 4.5. Decryption | |||
| SMIMEEncryptionKeyPreference ::= CHOICE { | The following are the requirements for an S/MIME agent when | |||
| issuerAndSerialNumber [0] IssuerAndSerialNumber, | establishing keys for content decryption using the RSA algorithms: | |||
| receipentKeyId [1] RecipientKeyIdentifier, | ||||
| subjectAltKeyIdentifier [2] SubjectKeyIdentifier | ||||
| } | ||||
| id-smime OBJECT IDENTIFIER ::= { iso(1) member-body(2) | 512 <= key size <= 2048 : MUST (see Security Considerations) | |||
| us(840) rsadsi(113549) pkcs(1) pkcs9(9) 16 } | 2048 < key size : MAY (see Security Considerations) | |||
| id-cap OBJECT IDENTIFIER ::= { id-smime 11 } | The following are the requirements for an S/MIME agent when | |||
| establishing keys for content decryption using the DH algorithms: | ||||
| 512 <= key size <= 1023 : MAY (see Security Considerations) | ||||
| 1024 = key size : SHOULD- (see Security Considerations) | ||||
| id-cap-preferBinaryInside OBJECT IDENTIFIER ::= { id-cap 1 } | 5. IANA Considerations | |||
| The following is intended to provide sufficient information to update | ||||
| the media type registration for application/pkcs7-mime and | ||||
| application/pkcs7-signature to refer to this document as opposed to | ||||
| RFC 2311. | ||||
| Note that other documents can define additional MIME media types for | ||||
| S/MIME. | ||||
| SMIMECapabilitiesParametersForRC2CBC ::= INTEGER | 5.1. Media Type for application/pkcs7-mime | |||
| END | Type name: application | |||
| B. References | Subtype Name: pkcs7-mime | |||
| B.1. Normative References | Required Parameters: NONE | |||
| [CERT31] Ramsdell, B., Ed., "S/MIME Version 3.1 Certificate | Optional Parameters: smime-type/signed-data | |||
| Handling", RFC 3850, July 2004. | smime-type/enveloped-data | |||
| smime-type/compressed-data | ||||
| smime-type/certs-only | ||||
| Encoding Considerations: See Section 3 of this document | ||||
| Security Considerations: See Section 6 of this document | ||||
| Interoperability Considerations: See Sections 1-6 of this document | ||||
| Published Specification: RFC 2311, RFC 2633, and this document | ||||
| Applications that use this media type: Security applications | ||||
| Additional information: NONE | ||||
| Person & email to contact for further information: S/MIME working | ||||
| group chairs smime-chairs@tools.ietf.org | ||||
| Intended usage: COMMON | ||||
| Restrictions on usage: NONE | ||||
| Author: Sean Turner | ||||
| Change Controller: S/MIME working group delegated from the IESG | ||||
| 5.2. Media Type for application/pkcs7-signature | ||||
| Type name: application | ||||
| Subtype Name: pkcs7-signature | ||||
| Required Parameters: NONE | ||||
| Optional Parameters: NONE | ||||
| Encoding Considerations: See Section 3 of this document | ||||
| Security Considerations: See Section 6 of this document | ||||
| Interoperability Considerations: See Sections 1-6 of this document | ||||
| Published Specification: RFC 2311, RFC 2633, and this document | ||||
| Applications that use this media type: Security applications | ||||
| Additional information: NONE | ||||
| Person & email to contact for further information: S/MIME working | ||||
| group chairs smime-chairs@tools.ietf.org | ||||
| Intended usage: COMMON | ||||
| Restrictions on usage: NONE | ||||
| Author: Sean Turner | ||||
| Change Controller: S/MIME working group delegated from the IESG | ||||
| 6. Security Considerations | ||||
| Cryptographic algorithms will be broken or weakened over time. | ||||
| Implementers and users need to check that the cryptographic | ||||
| algorithms listed in this document continue to provide the expected | ||||
| level of security. The IETF from time to time may issue documents | ||||
| dealing with the current state of the art. For example: | ||||
| - The Million Message Attack described in RFC 3218 [MMA]. | ||||
| - The Diffie-Hellman "small-subgroup" attacks described in | ||||
| RFC 2785 [DHSUB]. | ||||
| - The attacks against hash algorithms described in | ||||
| RFC 4270 [HASH-ATTACK]. | ||||
| This specification uses Public-Key Cryptography technologies. It is | ||||
| assumed that the private is protected to ensure that it is not | ||||
| accessed or altered by unauthorized parties. | ||||
| It is impossible for most people or software to estimate the value of | ||||
| a message's content. Further, it is impossible for most people or | ||||
| software to estimate the actual cost of recovering an encrypted | ||||
| message content that is encrypted with a key of a particular size. | ||||
| Further, it is quite difficult to determine the cost of a failed | ||||
| decryption if a recipient cannot process a message's content. Thus, | ||||
| choosing between different key sizes (or choosing whether to just use | ||||
| plaintext) is also impossible for most people or software. However, | ||||
| decisions based on these criteria are made all the time, and | ||||
| therefore this specification gives a framework for using those | ||||
| estimates in choosing algorithms. | ||||
| The choice of 2048 bits as the RSA asymmetric key size in this | ||||
| specification is based on the desire to provide 100 bits of security. | ||||
| The standards to offer the same level of security for DSA and DH are | ||||
| not yet available. In particular, [FIPS186-2] without Change Notice | ||||
| allowed DSA key sizes between 512 and 1024 bits and [FIPS186-2] with | ||||
| Change Notice 1 only allowed DSA key sizes of 1024 bits. A revision | ||||
| to support larger key sizes is being developed, and once it is | ||||
| available, implementors ought to support DSA key sizes comparable to | ||||
| the RSA key sizes recommended in this specification. The key sizes | ||||
| that must be supported to conform to this specification seem | ||||
| appropriate for the Internet based on [STRENGTH]. Of course, there | ||||
| are environments, such as financial and medical system, that may | ||||
| select different key sizes. For this reason, an implementation MAY | ||||
| support key sizes beyond those recommended in this specification. | ||||
| Receiving agents that validate signatures and sending agents that | ||||
| encrypt messages, need to be cautious of cryptographic processing | ||||
| usage when validating signatures and encrypting messages using keys | ||||
| larger than those mandated in this specification. An attacker could | ||||
| send certificates with keys which would result in excessive | ||||
| cryptographic processing, for example keys larger than those mandated | ||||
| in this specification, which could swamp the processing element. | ||||
| Agents which use such keys without first validating the certificate | ||||
| to a trust anchor are advised to have some sort of cryptographic | ||||
| resource management system to prevent such attacks. | ||||
| Today, 512-bit RSA, DSA, and DH keys are considered by many experts | ||||
| to be cryptographically insecure. | ||||
| Using weak cryptography in S/MIME offers little actual security over | ||||
| sending plaintext. However, other features of S/MIME, such as the | ||||
| specification of AES and the ability to announce stronger | ||||
| cryptographic capabilities to parties with whom you communicate, | ||||
| allow senders to create messages that use strong encryption. Using | ||||
| weak cryptography is never recommended unless the only alternative is | ||||
| no cryptography. When feasible, sending and receiving agents SHOULD | ||||
| inform senders and recipients of the relative cryptographic strength | ||||
| of messages. | ||||
| Implementers SHOULD be aware that multiple active key pairs can be | ||||
| associated with a single individual. For example, one key pair can | ||||
| be used to support confidentiality, while a different key pair can be | ||||
| used for digital signatures. | ||||
| If a sending agent is sending the same message using different | ||||
| strengths of cryptography, an attacker watching the communications | ||||
| channel might be able to determine the contents of the strongly- | ||||
| encrypted message by decrypting the weakly-encrypted version. In | ||||
| other words, a sender SHOULD NOT send a copy of a message using | ||||
| weaker cryptography than they would use for the original of the | ||||
| message. | ||||
| Modification of the ciphertext can go undetected if authentication is | ||||
| not also used, which is the case when sending EnvelopedData without | ||||
| wrapping it in SignedData or enclosing SignedData within it. | ||||
| If an implementation is concerned about compliance with NIST key size | ||||
| recommendations, then see [SP800-57]. | ||||
| 7. References | ||||
| 7.1. Normative References | ||||
| [CERT32] Ramsdell, B., and S. Turner, "S/MIME Version 3.2 | ||||
| Certificate Handling", | ||||
| draft-ietf-smime-3850-bis-08.txt, work-in-progress. | ||||
| [CHARSETS] Character sets assigned by IANA. See | [CHARSETS] Character sets assigned by IANA. See | |||
| http://www.iana.org/assignments/character-sets | http://www.iana.org/assignments/character-sets | |||
| [CMS] Housley, R., "Cryptographic Message Syntax (CMS)", RFC | [CMS] Housley, R., "Cryptographic Message Syntax (CMS)", RFC | |||
| 3852, July 2004. | 3852, July 2004. | |||
| Housley, R., "Cryptographic Message Syntax (CMS) | ||||
| Multiple Signer Clarification", RFC 4853, April 2007. | ||||
| [CMSAES] Schaad, J., "Use of the Advanced Encryption Standard | [CMSAES] Schaad, J., "Use of the Advanced Encryption Standard | |||
| (AES) Encryption Algorithm in Cryptographic Message | (AES) Encryption Algorithm in Cryptographic Message | |||
| Syntax (CMS)", RFC 3565, July 2003. | Syntax (CMS)", RFC 3565, July 2003. | |||
| [CMSALG] Housley, R., "Cryptographic Message Syntax (CMS) | [CMSALG] Housley, R., "Cryptographic Message Syntax (CMS) | |||
| Algorithms", RFC 3370, August 2002. | Algorithms", RFC 3370, August 2002. | |||
| [CMSCOMPR] Gutmann, P., "Compressed Data Content Type for | [CMSCOMPR] Gutmann, P., "Compressed Data Content Type for | |||
| Cryptographic Message Syntax (CMS)", RFC 3274, June | Cryptographic Message Syntax (CMS)", RFC 3274, June | |||
| 2002. | 2002. | |||
| [CMS-SHA2] Turner. S., "Using SHA2 Algorithms with Cryptographic | ||||
| Message Syntax", draft-ietf-smime-sha2-08.txt, work in | ||||
| progress. | ||||
| [CONTDISP] Troost, R., Dorner, S., and K. Moore, "Communicating | [CONTDISP] Troost, R., Dorner, S., and K. Moore, "Communicating | |||
| Presentation Information in Internet Messages: The | Presentation Information in Internet Messages: The | |||
| Content-Disposition Header Field", RFC 2183, August | Content-Disposition Header Field", RFC 2183, August | |||
| 1997. | 1997. | |||
| [ESS] Hoffman, P., "Enhanced Security Services for S/MIME", | [ESS] Hoffman, P., "Enhanced Security Services for S/MIME", | |||
| RFC 2634, June 1999. | RFC 2634, June 1999. | |||
| [FIPS180-2] "Secure Hash Signature Standard (SHS)", National | Schaad, J., "ESS Update: Adding CertID Algorithm | |||
| Institute of Standards and Technology (NIST). FIPS | Agility", RFC 5035, August 2007. | |||
| Publication 180-2. | ||||
| [FIPS180-3] National Institute of Standards and Technology (NIST), | ||||
| "Secure Hash Standard (SHS)", (draft) FIPS Publication | ||||
| 180-3, June 2007. | ||||
| [FIPS186-2] National Institute of Standards and Technology (NIST), | ||||
| "Digital Signature Standard (DSS)", FIPS Publication | ||||
| 186-2, January 2000. [With Change Notice 1] | ||||
| [FIPS186-3] National Institute of Standards and Technology (NIST), | ||||
| FIPS Publication 186-3: Digital Signature Standard, | ||||
| (draft) March 2006. | ||||
| [MIME-SPEC] Freed, N. and N. Borenstein, "Multipurpose Internet | [MIME-SPEC] Freed, N. and N. Borenstein, "Multipurpose Internet | |||
| Mail Extensions (MIME) Part One: Format of Internet | Mail Extensions (MIME) Part One: Format of Internet | |||
| Message Bodies", RFC 2045, November 1996. | Message Bodies", RFC 2045, November 1996. | |||
| Freed, N. and N. Borenstein, "Multipurpose Internet | Freed, N. and N. Borenstein, "Multipurpose Internet | |||
| Mail Extensions (MIME) Part Two: Media Types", RFC | Mail Extensions (MIME) Part Two: Media Types", RFC | |||
| 2046, November 1996. | 2046, November 1996. | |||
| Moore, K., "MIME (Multipurpose Internet Mail | Moore, K., "MIME (Multipurpose Internet Mail | |||
| Extensions) Part Three: Message Header Extensions for | Extensions) Part Three: Message Header Extensions for | |||
| Non-ASCII Text", RFC 2047, November 1996. | Non-ASCII Text", RFC 2047, November 1996. | |||
| Freed, N., Klensin, J., and J. Postel, "Multipurpose | Freed, N., and J. Klensin, "Multipurpose Internet Mail | |||
| Internet Mail Extensions (MIME) Part Four: Registration | Extensions (MIME) Part Four: Registration Procedures", | |||
| Procedures", BCP 13, RFC 2048, November 1996. | BCP 13, RFC 4289, December 2005. | |||
| Freed, N., and J. Klensin, "Media Type Specifications | ||||
| and Registration Procedures", BCP 13, RFC 4288, | ||||
| December 2005. | ||||
| Freed, N. and N. Borenstein, "Multipurpose Internet | Freed, N. and N. Borenstein, "Multipurpose Internet | |||
| Mail Extensions (MIME) Part Five: Conformance Criteria | Mail Extensions (MIME) Part Five: Conformance Criteria | |||
| and Examples", RFC 2049, November 1996. | and Examples", RFC 2049, November 1996. | |||
| [MIME-SECURE] Galvin, J., Murphy, S., Crocker, S., and N. Freed, | [MIME-SECURE] Galvin, J., Murphy, S., Crocker, S., and N. Freed, | |||
| "Security Multiparts for MIME: Multipart/Signed and | "Security Multiparts for MIME: Multipart/Signed and | |||
| Multipart/Encrypted", RFC 1847, October 1995. | Multipart/Encrypted", RFC 1847, October 1995. | |||
| [MUSTSHOULD] Bradner, S., "Key words for use in RFCs to Indicate | [MUSTSHOULD] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
| [X.208-88] CCITT. Recommendation X.208: Specification of Abstract | [RANDOM] Eastlake 3rd, D., Crocker, S., and J. Schiller, | |||
| Syntax Notation One (ASN.1). 1988. | "Randomness Requirements for Security", BCP 106, RFC | |||
| 4086, June 2005. | ||||
| [X.209-88] CCITT. Recommendation X.209: Specification of Basic | [RSAPSS] Schaad, J., "Use of RSASA-PSS Signature Algorithm in | |||
| Encoding Rules for Abstract Syntax Notation One | Cryptographic Message Syntax (CMS)", RFC 4056, June | |||
| (ASN.1). 1988. | 2005. | |||
| [X.509-88] CCITT. Recommendation X.509: The Directory - | [RSAOAEP] Housley, R. "Use of the RSAES-OAEP Key Transport | |||
| Authentication Framework. 1988. | Algorithm in the Cryptographic Message Syntax (CMS)", | |||
| [X.680] ITU-T Recommendation X.680 (2002) | ISO/IEC 8824- | ||||
| 1:2002. Information Technology - Abstract Syntax | ||||
| Notation One (ASN.1): Specification of basic | ||||
| notation. | ||||
| B.2. Informative References | [X.690] ITU-T Recommendation X.690 (2002) | ISO/IEC 8825- | |||
| 1:2002. Information Technology - ASN.1 encoding | ||||
| rules: Specification of Basic Encoding Rules (BER), | ||||
| Canonical Encoding Rules (CER) and Distinguished | ||||
| Encoding Rules (DER). | ||||
| 7.2. Informative References | ||||
| [DHSUB] Zuccherato, R., "Methods for Avoiding the "Small- | [DHSUB] Zuccherato, R., "Methods for Avoiding the "Small- | |||
| Subgroup" Attacks on the Diffie-Hellman Key Agreement | Subgroup" Attacks on the Diffie-Hellman Key Agreement | |||
| Method for S/MIME", RFC 2785, March 2000. | Method for S/MIME", RFC 2785, March 2000. | |||
| [MMA] Rescorla, E., "Preventing the Million Message Attack on | [HASH-ATTACK] Hoffman, P., Schneier, B., "Attacks on Cryptographic | |||
| Cryptographic Message Syntax", RFC 3218, January 2002. | Hashes in Internet Protocols", RFC 4270, November | |||
| 2005. | ||||
| [MMA] Rescorla, E., "Preventing the Million Message Attack | ||||
| on Cryptographic Message Syntax", RFC 3218, January | ||||
| 2002. | ||||
| [PKCS-7] Kaliski, B., "PKCS #7: Cryptographic Message Syntax | [PKCS-7] Kaliski, B., "PKCS #7: Cryptographic Message Syntax | |||
| Version 1.5", RFC 2315, March 1998. | Version 1.5", RFC 2315, March 1998. | |||
| [RANDOM] Eastlake 3rd, D., Crocker, S., and J. Schiller, | [SMIMEv2] Dusse, S., Hoffman, P., Ramsdell, B., Lundblade, L., | |||
| "Randomness Recommendations for Security", RFC 1750, | and L. Repka, "S/MIME Version 2 Message | |||
| December 1994. | Specification", RFC 2311, March 1998. | |||
| [SMIMEV2] Dusse, S., Hoffman, P., Ramsdell, B., Lundblade, L., | Dusse, S., Hoffman, P., Ramsdell, B., and J. | |||
| and L. Repka, "S/MIME Version 2 Message Specification", | Weinstein, "S/MIME Version 2 Certificate Handling", | |||
| RFC 2311, March 1998. | RFC 2312, March 1998. | |||
| C. Acknowledgements | Kaliski, B., "PKCS #1: RSA Encryption Version 1.5", | |||
| RFC 2313, March 1998. | ||||
| Kaliski, B., "PKCS #10: Certificate Request Syntax | ||||
| Version 1.5", RFC 2314, March 1998. | ||||
| Kaliski, B., "PKCS #7: Certificate Message Syntax | ||||
| Version 1.5", RFC 2315, March 1998. | ||||
| [SMIMEv3] Housley, R., "Cryptographic Message Syntax", RFC 2630, | ||||
| June 1999. | ||||
| Rescorla, E., "Diffie-Hellman Key Agreement Method", | ||||
| RFC 2631, June 1999. | ||||
| Ramsdell, B., "S/MIME Version 3 Certificate Handling", | ||||
| RFC 2632, June 1999. | ||||
| Ramsdell, B., "S/MIME Version 3 Message | ||||
| Specification", RFC 2633, June 1999. | ||||
| Hoffman, P., "Enhanced Security Services for S/MIME", | ||||
| RFC 2634, June 1999. | ||||
| Schaad, J., "ESS Update: Adding CertID Algorithm | ||||
| Agility", RFC 5035, August 2007. | ||||
| [SMIMEv3.1] Housley, R., "Cryptographic Message Syntax", RFC 3852, | ||||
| July 2004. | ||||
| Housley, R., "Cryptographic Message Syntax (CMS) | ||||
| Multiple Signer Clarification", RFC 4853, April 2007. | ||||
| Ramsdell, B., "S/MIME Version 3.1 Certificate | ||||
| Handling", RFC 3850, July 2004. | ||||
| Ramsdell, B., "S/MIME Version 3.1 Message | ||||
| Specification", RFC 3851, July 2004. | ||||
| Hoffman, P., "Enhanced Security Services for S/MIME", | ||||
| RFC 2634, June 1999. | ||||
| Schaad, J., "ESS Update: Adding CertID Algorithm | ||||
| Agility", RFC 5035, August 2007. | ||||
| [SP800-57] National Institute of Standards and Technology (NIST), | ||||
| Special Publication 800-57: Recommendation for Key | ||||
| Management, August 2005. | ||||
| [STRENGTH] Orman, H., and P. Hoffman, "Determining Strengths For | ||||
| Public Keys Used For Exchanging Symmetric Keys", BCP | ||||
| 86, RFC 3766, April 2004. | ||||
| Appendix A. ASN.1 Module | ||||
| NOTE: The ASN.1 module contained herein is unchanged from RFC 3851 | ||||
| [SMIMEv3.1] with the exception of a change to the prefersBinaryInside | ||||
| ASN.1 comment. This module uses the 1988 version of ASN.1. | ||||
| SecureMimeMessageV3dot1 | ||||
| { iso(1) member-body(2) us(840) rsadsi(113549) | ||||
| pkcs(1) pkcs-9(9) smime(16) modules(0) msg-v3dot1(21) } | ||||
| DEFINITIONS IMPLICIT TAGS ::= | ||||
| BEGIN | ||||
| IMPORTS | ||||
| -- Cryptographic Message Syntax [CMS] | ||||
| SubjectKeyIdentifier, IssuerAndSerialNumber, | ||||
| RecipientKeyIdentifier | ||||
| FROM CryptographicMessageSyntax | ||||
| { iso(1) member-body(2) us(840) rsadsi(113549) | ||||
| pkcs(1) pkcs-9(9) smime(16) modules(0) cms-2001(14) }; | ||||
| -- id-aa is the arc with all new authenticated and unauthenticated | ||||
| -- attributes produced the by S/MIME Working Group | ||||
| id-aa OBJECT IDENTIFIER ::= {iso(1) member-body(2) usa(840) | ||||
| rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) attributes(2)} | ||||
| -- S/MIME Capabilities provides a method of broadcasting the | ||||
| -- symmetric capabilities understood. Algorithms SHOULD be ordered | ||||
| -- by preference and grouped by type | ||||
| smimeCapabilities OBJECT IDENTIFIER ::= {iso(1) member-body(2) | ||||
| us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 15} | ||||
| SMIMECapability ::= SEQUENCE { | ||||
| capabilityID OBJECT IDENTIFIER, | ||||
| parameters ANY DEFINED BY capabilityID OPTIONAL } | ||||
| SMIMECapabilities ::= SEQUENCE OF SMIMECapability | ||||
| -- Encryption Key Preference provides a method of broadcasting the | ||||
| -- preferred encryption certificate. | ||||
| id-aa-encrypKeyPref OBJECT IDENTIFIER ::= {id-aa 11} | ||||
| SMIMEEncryptionKeyPreference ::= CHOICE { | ||||
| issuerAndSerialNumber [0] IssuerAndSerialNumber, | ||||
| receipentKeyId [1] RecipientKeyIdentifier, | ||||
| subjectAltKeyIdentifier [2] SubjectKeyIdentifier | ||||
| } | ||||
| id-smime OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) | ||||
| rsadsi(113549) pkcs(1) pkcs9(9) 16 } | ||||
| id-cap OBJECT IDENTIFIER ::= { id-smime 11 } | ||||
| -- The preferBinaryInside OID indicates an ability to receive | ||||
| -- messages with binary encoding inside the CMS wrapper. | ||||
| -- The preferBinaryInside attribute's value field is ABSENT. | ||||
| id-cap-preferBinaryInside OBJECT IDENTIFIER ::= { id-cap 1 } | ||||
| -- The following list the OIDs to be used with S/MIME V3 | ||||
| -- Signature Algorithms Not Found in [CMSALG], [CMS-SHA2], [RSAPSS], | ||||
| -- and [RSAOAEP] | ||||
| -- | ||||
| -- md2WithRSAEncryption OBJECT IDENTIFIER ::= | ||||
| -- {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) | ||||
| -- 2} | ||||
| -- | ||||
| -- Other Signed Attributes | ||||
| -- | ||||
| -- signingTime OBJECT IDENTIFIER ::= | ||||
| -- {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) | ||||
| -- 5} | ||||
| -- See [CMS] for a description of how to encode the attribute | ||||
| -- value. | ||||
| SMIMECapabilitiesParametersForRC2CBC ::= INTEGER | ||||
| -- (RC2 Key Length (number of bits)) | ||||
| END | ||||
| Appendix B. Moving S/MIME v2 Message Specification to Historic Status | ||||
| The S/MIME v3 [SMIMEv3], v3.1 [SMIMEv3.1], and v3.2 (this document) | ||||
| are backwards compatible with the S/MIME v2 Message Specification | ||||
| [SMIMEv2], with the exception of the algorithms (dropped RC2/40 | ||||
| requirement and added DSA and RSA-PSS requirements). Therefore, it is | ||||
| recommended that RFC 2311 [SMIMEv2] be moved to Historic status. | ||||
| Appendix C. Acknowledgements | ||||
| Many thanks go out to the other authors of the S/MIME Version 2 | Many thanks go out to the other authors of the S/MIME Version 2 | |||
| Message Specification RFC: Steve Dusse, Paul Hoffman, Laurence | Message Specification RFC: Steve Dusse, Paul Hoffman, Laurence | |||
| Lundblade and Lisa Repka. | Lundblade and Lisa Repka. Without v2, there wouldn't be a v3, v3.1 or | |||
| v3.2. | ||||
| A number of the members of the S/MIME Working Group have also worked | A number of the members of the S/MIME Working Group have also worked | |||
| very hard and contributed to this document. Any list of people is | very hard and contributed to this document. Any list of people is | |||
| doomed to omission, and for that I apologize. In alphabetical order, | doomed to omission, and for that I apologize. In alphabetical order, | |||
| the following people stand out in my mind due to the fact that they | the following people stand out in my mind due to the fact that they | |||
| made direct contributions to this document. | made direct contributions to this document. | |||
| Tony Capel | Tony Capel, Piers Chivers, Dave Crocker, Bill Flanigan, Peter | |||
| Piers Chivers | Gutmann, Alfred Hoenes, Paul Hoffman, Russ Housley, William Ottaway, | |||
| Dave Crocker | John Pawling, and Jim Schaad. | |||
| Bill Flanigan | ||||
| Peter Gutmann | ||||
| Paul Hoffman | ||||
| Russ Housley | ||||
| William Ottaway | ||||
| John Pawling | ||||
| Jim Schaad | ||||
| D. Editor's Address | Author's Addresses | |||
| Blake Ramsdell | Blake Ramsdell | |||
| Sendmail, Inc. | Brute Squad Labs, Inc. | |||
| 704 228th Ave NE #775 | ||||
| Sammamish, WA 98074 | ||||
| EMail: blake@sendmail.com | Email: blaker@gmail.com | |||
| Sean Turner | ||||
| IECA, Inc. | ||||
| 3057 Nutley Street, Suite 106 | ||||
| Fairfax, VA 22031 | ||||
| USA | ||||
| Email: turners@ieca.com | ||||
| Full Copyright Statement | Full Copyright Statement | |||
| Copyright (C) The Internet Society (2004). This document is subject | Copyright (C) The IETF Trust (2008). | |||
| to the rights, licenses and restrictions contained in BCP 78, and | ||||
| except as set forth therein, the authors retain all their rights. | 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 | This document and the information contained herein are provided on an | |||
| "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | |||
| OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET | OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND | |||
| ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, | THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS | |||
| INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE | OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF | |||
| INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED | THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED | |||
| WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | |||
| Intellectual Property | Intellectual Property | |||
| The IETF takes no position regarding the validity or scope of any | The IETF takes no position regarding the validity or scope of any | |||
| Intellectual Property Rights or other rights that might be claimed to | Intellectual Property Rights or other rights that might be claimed to | |||
| pertain to the implementation or use of the technology described in | pertain to the implementation or use of the technology described in | |||
| this document or the extent to which any license under such rights | 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 | might or might not be available; nor does it represent that it has | |||
| made any independent effort to identify any such rights. Information | made any independent effort to identify any such rights. Information | |||
| skipping to change at page 36, line 40 | skipping to change at page 45, line 42 | |||
| Copies of IPR disclosures made to the IETF Secretariat and any | Copies of IPR disclosures made to the IETF Secretariat and any | |||
| assurances of licenses to be made available, or the result of an | 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 | attempt made to obtain a general license or permission for the use of | |||
| such proprietary rights by implementers or users of this | such proprietary rights by implementers or users of this | |||
| specification can be obtained from the IETF on-line IPR repository at | specification can be obtained from the IETF on-line IPR repository at | |||
| http://www.ietf.org/ipr. | http://www.ietf.org/ipr. | |||
| The IETF invites any interested party to bring to its attention any | The IETF invites any interested party to bring to its attention any | |||
| copyrights, patents or patent applications, or other proprietary | copyrights, patents or patent applications, or other proprietary | |||
| rights that may cover technology that may be required to implement | rights that may cover technology that may be required to implement | |||
| this standard. Please address the information to the IETF at ietf- | this standard. Please address the information to the IETF at | |||
| ipr@ietf.org. | ietf-ipr@ietf.org. | |||
| Acknowledgement | Acknowledgment | |||
| Funding for the RFC Editor function is currently provided by the | Funding for the RFC Editor function is provided by the IETF | |||
| Internet Society. | Administrative Support Activity (IASA). | |||
| End of changes. 175 change blocks. | ||||
| 431 lines changed or deleted | 900 lines changed or added | |||
This html diff was produced by rfcdiff 1.32. The latest version is available from http://www.levkowetz.com/ietf/tools/rfcdiff/ | ||||