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/ |