diff options
Diffstat (limited to 'doc/rfc/rfc6376.txt')
-rw-r--r-- | doc/rfc/rfc6376.txt | 4259 |
1 files changed, 4259 insertions, 0 deletions
diff --git a/doc/rfc/rfc6376.txt b/doc/rfc/rfc6376.txt new file mode 100644 index 0000000..8ecbafa --- /dev/null +++ b/doc/rfc/rfc6376.txt @@ -0,0 +1,4259 @@ + + + + + + +Internet Engineering Task Force (IETF) D. Crocker, Ed. +Request for Comments: 6376 Brandenburg InternetWorking +Obsoletes: 4871, 5672 T. Hansen, Ed. +Category: Standards Track AT&T Laboratories +ISSN: 2070-1721 M. Kucherawy, Ed. + Cloudmark + September 2011 + + + DomainKeys Identified Mail (DKIM) Signatures + +Abstract + + DomainKeys Identified Mail (DKIM) permits a person, role, or + organization that owns the signing domain to claim some + responsibility for a message by associating the domain with the + message. This can be an author's organization, an operational relay, + or one of their agents. DKIM separates the question of the identity + of the Signer of the message from the purported author of the + message. Assertion of responsibility is validated through a + cryptographic signature and by querying the Signer's domain directly + to retrieve the appropriate public key. Message transit from author + to recipient is through relays that typically make no substantive + change to the message content and thus preserve the DKIM signature. + + This memo obsoletes RFC 4871 and RFC 5672. + +Status of This Memo + + This is an Internet Standards Track document. + + This document is a product of the Internet Engineering Task Force + (IETF). It represents the consensus of the IETF community. It has + received public review and has been approved for publication by the + Internet Engineering Steering Group (IESG). Further information on + Internet Standards is available in Section 2 of RFC 5741. + + Information about the current status of this document, any errata, + and how to provide feedback on it may be obtained at + http://www.rfc-editor.org/info/rfc6376. + +Copyright Notice + + Copyright (c) 2011 IETF Trust and the persons identified as the + document authors. All rights reserved. + + + + + + +Crocker, et al. Standards Track [Page 1] + +RFC 6376 DKIM Signatures September 2011 + + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents + (http://trustee.ietf.org/license-info) in effect on the date of + publication of this document. Please review these documents + carefully, as they describe your rights and restrictions with respect + to this document. Code Components extracted from this document must + include Simplified BSD License text as described in Section 4.e of + the Trust Legal Provisions and are provided without warranty as + described in the Simplified BSD License. + + This document may contain material from IETF Documents or IETF + Contributions published or made publicly available before November + 10, 2008. The person(s) controlling the copyright in some of this + material may not have granted the IETF Trust the right to allow + modifications of such material outside the IETF Standards Process. + Without obtaining an adequate license from the person(s) controlling + the copyright in such materials, this document may not be modified + outside the IETF Standards Process, and derivative works of it may + not be created outside the IETF Standards Process, except to format + it for publication as an RFC or to translate it into languages other + than English. + +Table of Contents + + 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 + 1.1. DKIM Architecture Documents . . . . . . . . . . . . . . . 5 + 1.2. Signing Identity . . . . . . . . . . . . . . . . . . . . . 5 + 1.3. Scalability . . . . . . . . . . . . . . . . . . . . . . . 5 + 1.4. Simple Key Management . . . . . . . . . . . . . . . . . . 6 + 1.5. Data Integrity . . . . . . . . . . . . . . . . . . . . . . 6 + 2. Terminology and Definitions . . . . . . . . . . . . . . . . . 6 + 2.1. Signers . . . . . . . . . . . . . . . . . . . . . . . . . 6 + 2.2. Verifiers . . . . . . . . . . . . . . . . . . . . . . . . 7 + 2.3. Identity . . . . . . . . . . . . . . . . . . . . . . . . . 7 + 2.4. Identifier . . . . . . . . . . . . . . . . . . . . . . . . 7 + 2.5. Signing Domain Identifier (SDID) . . . . . . . . . . . . . 7 + 2.6. Agent or User Identifier (AUID) . . . . . . . . . . . . . 7 + 2.7. Identity Assessor . . . . . . . . . . . . . . . . . . . . 7 + 2.8. Whitespace . . . . . . . . . . . . . . . . . . . . . . . . 8 + 2.9. Imported ABNF Tokens . . . . . . . . . . . . . . . . . . . 8 + 2.10. Common ABNF Tokens . . . . . . . . . . . . . . . . . . . . 9 + 2.11. DKIM-Quoted-Printable . . . . . . . . . . . . . . . . . . 9 + 3. Protocol Elements . . . . . . . . . . . . . . . . . . . . . . 10 + 3.1. Selectors . . . . . . . . . . . . . . . . . . . . . . . . 10 + 3.2. Tag=Value Lists . . . . . . . . . . . . . . . . . . . . . 12 + 3.3. Signing and Verification Algorithms . . . . . . . . . . . 13 + 3.4. Canonicalization . . . . . . . . . . . . . . . . . . . . . 14 + 3.5. The DKIM-Signature Header Field . . . . . . . . . . . . . 18 + + + +Crocker, et al. Standards Track [Page 2] + +RFC 6376 DKIM Signatures September 2011 + + + 3.6. Key Management and Representation . . . . . . . . . . . . 26 + 3.7. Computing the Message Hashes . . . . . . . . . . . . . . . 29 + 3.8. Input Requirements . . . . . . . . . . . . . . . . . . . . 32 + 3.9. Output Requirements . . . . . . . . . . . . . . . . . . . 32 + 3.10. Signing by Parent Domains . . . . . . . . . . . . . . . . 33 + 3.11. Relationship between SDID and AUID . . . . . . . . . . . . 33 + 4. Semantics of Multiple Signatures . . . . . . . . . . . . . . . 34 + 4.1. Example Scenarios . . . . . . . . . . . . . . . . . . . . 34 + 4.2. Interpretation . . . . . . . . . . . . . . . . . . . . . . 35 + 5. Signer Actions . . . . . . . . . . . . . . . . . . . . . . . . 36 + 5.1. Determine Whether the Email Should Be Signed and by + Whom . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 + 5.2. Select a Private Key and Corresponding Selector + Information . . . . . . . . . . . . . . . . . . . . . . . 37 + 5.3. Normalize the Message to Prevent Transport Conversions . . 37 + 5.4. Determine the Header Fields to Sign . . . . . . . . . . . 38 + 5.5. Compute the Message Hash and Signature . . . . . . . . . . 43 + 5.6. Insert the DKIM-Signature Header Field . . . . . . . . . . 43 + 6. Verifier Actions . . . . . . . . . . . . . . . . . . . . . . . 43 + 6.1. Extract Signatures from the Message . . . . . . . . . . . 44 + 6.2. Communicate Verification Results . . . . . . . . . . . . . 49 + 6.3. Interpret Results/Apply Local Policy . . . . . . . . . . . 50 + 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 51 + 7.1. Email Authentication Methods Registry . . . . . . . . . . 51 + 7.2. DKIM-Signature Tag Specifications . . . . . . . . . . . . 51 + 7.3. DKIM-Signature Query Method Registry . . . . . . . . . . . 52 + 7.4. DKIM-Signature Canonicalization Registry . . . . . . . . . 52 + 7.5. _domainkey DNS TXT Resource Record Tag Specifications . . 53 + 7.6. DKIM Key Type Registry . . . . . . . . . . . . . . . . . . 53 + 7.7. DKIM Hash Algorithms Registry . . . . . . . . . . . . . . 54 + 7.8. DKIM Service Types Registry . . . . . . . . . . . . . . . 54 + 7.9. DKIM Selector Flags Registry . . . . . . . . . . . . . . . 55 + 7.10. DKIM-Signature Header Field . . . . . . . . . . . . . . . 55 + 8. Security Considerations . . . . . . . . . . . . . . . . . . . 55 + 8.1. ASCII Art Attacks . . . . . . . . . . . . . . . . . . . . 55 + 8.2. Misuse of Body Length Limits ("l=" Tag) . . . . . . . . . 55 + 8.3. Misappropriated Private Key . . . . . . . . . . . . . . . 56 + 8.4. Key Server Denial-of-Service Attacks . . . . . . . . . . . 56 + 8.5. Attacks against the DNS . . . . . . . . . . . . . . . . . 57 + 8.6. Replay/Spam Attacks . . . . . . . . . . . . . . . . . . . 57 + 8.7. Limits on Revoking Keys . . . . . . . . . . . . . . . . . 58 + 8.8. Intentionally Malformed Key Records . . . . . . . . . . . 58 + 8.9. Intentionally Malformed DKIM-Signature Header Fields . . . 58 + 8.10. Information Leakage . . . . . . . . . . . . . . . . . . . 58 + 8.11. Remote Timing Attacks . . . . . . . . . . . . . . . . . . 59 + 8.12. Reordered Header Fields . . . . . . . . . . . . . . . . . 59 + 8.13. RSA Attacks . . . . . . . . . . . . . . . . . . . . . . . 59 + 8.14. Inappropriate Signing by Parent Domains . . . . . . . . . 59 + + + +Crocker, et al. Standards Track [Page 3] + +RFC 6376 DKIM Signatures September 2011 + + + 8.15. Attacks Involving Extra Header Fields . . . . . . . . . . 60 + 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 61 + 9.1. Normative References . . . . . . . . . . . . . . . . . . . 61 + 9.2. Informative References . . . . . . . . . . . . . . . . . . 62 + Appendix A. Example of Use (INFORMATIVE) . . . . . . . . . . . . 64 + A.1. The User Composes an Email . . . . . . . . . . . . . . . . 64 + A.2. The Email is Signed . . . . . . . . . . . . . . . . . . . 65 + A.3. The Email Signature is Verified . . . . . . . . . . . . . 66 + Appendix B. Usage Examples (INFORMATIVE) . . . . . . . . . . . . 67 + B.1. Alternate Submission Scenarios . . . . . . . . . . . . . . 67 + B.2. Alternate Delivery Scenarios . . . . . . . . . . . . . . . 69 + Appendix C. Creating a Public Key (INFORMATIVE) . . . . . . . . . 71 + C.1. Compatibility with DomainKeys Key Records . . . . . . . . 72 + C.2. RFC 4871 Compatibility . . . . . . . . . . . . . . . . . . 73 + Appendix D. MUA Considerations (INFORMATIVE) . . . . . . . . . . 73 + Appendix E. Changes since RFC 4871 . . . . . . . . . . . . . . . 73 + Appendix F. Acknowledgments . . . . . . . . . . . . . . . . . . . 75 + +1. Introduction + + DomainKeys Identified Mail (DKIM) permits a person, role, or + organization to claim some responsibility for a message by + associating a domain name [RFC1034] with the message [RFC5322], which + they are authorized to use. This can be an author's organization, an + operational relay, or one of their agents. Assertion of + responsibility is validated through a cryptographic signature and by + querying the Signer's domain directly to retrieve the appropriate + public key. Message transit from author to recipient is through + relays that typically make no substantive change to the message + content and thus preserve the DKIM signature. A message can contain + multiple signatures, from the same or different organizations + involved with the message. + + The approach taken by DKIM differs from previous approaches to + message signing (e.g., Secure/Multipurpose Internet Mail Extensions + (S/MIME) [RFC5751], OpenPGP [RFC4880]) in that: + + o the message signature is written as a message header field so that + neither human recipients nor existing MUA (Mail User Agent) + software is confused by signature-related content appearing in the + message body; + + o there is no dependency on public- and private-key pairs being + issued by well-known, trusted certificate authorities; + + o there is no dependency on the deployment of any new Internet + protocols or services for public-key distribution or revocation; + + + + +Crocker, et al. Standards Track [Page 4] + +RFC 6376 DKIM Signatures September 2011 + + + o signature verification failure does not force rejection of the + message; + + o no attempt is made to include encryption as part of the mechanism; + and + + o message archiving is not a design goal. + + DKIM: + + o is compatible with the existing email infrastructure and + transparent to the fullest extent possible; + + o requires minimal new infrastructure; + + o can be implemented independently of clients in order to reduce + deployment time; + + o can be deployed incrementally; and + + o allows delegation of signing to third parties. + +1.1. DKIM Architecture Documents + + Readers are advised to be familiar with the material in [RFC4686], + [RFC5585], and [RFC5863], which provide the background for the + development of DKIM, an overview of the service, and deployment and + operations guidance and advice, respectively. + +1.2. Signing Identity + + DKIM separates the question of the identity of the Signer of the + message from the purported author of the message. In particular, a + signature includes the identity of the Signer. Verifiers can use the + signing information to decide how they want to process the message. + The signing identity is included as part of the signature header + field. + + INFORMATIVE RATIONALE: The signing identity specified by a DKIM + signature is not required to match an address in any particular + header field because of the broad methods of interpretation by + recipient mail systems, including MUAs. + +1.3. Scalability + + DKIM is designed to support the extreme scalability requirements that + characterize the email identification problem. There are many + millions of domains and a much larger number of individual addresses. + + + +Crocker, et al. Standards Track [Page 5] + +RFC 6376 DKIM Signatures September 2011 + + + DKIM seeks to preserve the positive aspects of the current email + infrastructure, such as the ability for anyone to communicate with + anyone else without introduction. + +1.4. Simple Key Management + + DKIM differs from traditional hierarchical public-key systems in that + no certificate authority infrastructure is required; the Verifier + requests the public key from a repository in the domain of the + claimed Signer directly rather than from a third party. + + The DNS is proposed as the initial mechanism for the public keys. + Thus, DKIM currently depends on DNS administration and the security + of the DNS system. DKIM is designed to be extensible to other key + fetching services as they become available. + +1.5. Data Integrity + + A DKIM signature associates the "d=" name with the computed hash of + some or all of the message (see Section 3.7) in order to prevent the + reuse of the signature with different messages. Verifying the + signature asserts that the hashed content has not changed since it + was signed and asserts nothing else about "protecting" the end-to-end + integrity of the message. + +2. Terminology and Definitions + + This section defines terms used in the rest of the document. + + DKIM is designed to operate within the Internet Mail service, as + defined in [RFC5598]. Basic email terminology is taken from that + specification. + + Syntax descriptions use Augmented BNF (ABNF) [RFC5234]. + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and + "OPTIONAL" in this document are to be interpreted as described in + [RFC2119]. These words take their normative meanings only when they + are presented in ALL UPPERCASE. + +2.1. Signers + + Elements in the mail system that sign messages on behalf of a domain + are referred to as Signers. These may be MUAs (Mail User Agents), + MSAs (Mail Submission Agents), MTAs (Mail Transfer Agents), or other + agents such as mailing list exploders. In general, any Signer will + + + + +Crocker, et al. Standards Track [Page 6] + +RFC 6376 DKIM Signatures September 2011 + + + be involved in the injection of a message into the message system in + some way. The key issue is that a message must be signed before it + leaves the administrative domain of the Signer. + +2.2. Verifiers + + Elements in the mail system that verify signatures are referred to as + Verifiers. These may be MTAs, Mail Delivery Agents (MDAs), or MUAs. + In most cases, it is expected that Verifiers will be close to an end + user (reader) of the message or some consuming agent such as a + mailing list exploder. + +2.3. Identity + + A person, role, or organization. In the context of DKIM, examples + include the author, the author's organization, an ISP along the + handling path, an independent trust assessment service, and a mailing + list operator. + +2.4. Identifier + + A label that refers to an identity. + +2.5. Signing Domain Identifier (SDID) + + A single domain name that is the mandatory payload output of DKIM and + that refers to the identity claiming some responsibility for the + message by signing it. It is specified in Section 3.5. + +2.6. Agent or User Identifier (AUID) + + A single identifier that refers to the agent or user on behalf of + whom the Signing Domain Identifier (SDID) has taken responsibility. + The AUID comprises a domain name and an optional <local-part>. The + domain name is the same as that used for the SDID or is a subdomain + of it. For DKIM processing, the domain name portion of the AUID has + only basic domain name semantics; any possible owner-specific + semantics are outside the scope of DKIM. It is specified in + Section 3.5. + + Note that acceptable values for the AUID may be constrained via a + flag in the public-key record. (See Section 3.6.1.) + +2.7. Identity Assessor + + An element in the mail system that consumes DKIM's payload, which is + the responsible Signing Domain Identifier (SDID). The Identity + Assessor is dedicated to the assessment of the delivered identifier. + + + +Crocker, et al. Standards Track [Page 7] + +RFC 6376 DKIM Signatures September 2011 + + + Other DKIM (and non-DKIM) values can also be used by the Identity + Assessor (if they are available) to provide a more general message + evaluation filtering engine. However, this additional activity is + outside the scope of this specification. + +2.8. Whitespace + + There are three forms of whitespace: + + o WSP represents simple whitespace, i.e., a space or a tab character + (formal definition in [RFC5234]). + + o LWSP is linear whitespace, defined as WSP plus CRLF (formal + definition in [RFC5234]). + + o FWS is folding whitespace. It allows multiple lines separated by + CRLF followed by at least one whitespace, to be joined. + + The formal ABNF for these are (WSP and LWSP are given for information + only): + + WSP = SP / HTAB + LWSP = *(WSP / CRLF WSP) + FWS = [*WSP CRLF] 1*WSP + + The definition of FWS is identical to that in [RFC5322] except for + the exclusion of obs-FWS. + +2.9. Imported ABNF Tokens + + The following tokens are imported from other RFCs as noted. Those + RFCs should be considered definitive. + + The following tokens are imported from [RFC5321]: + + o "local-part" (implementation warning: this permits quoted strings) + + o "sub-domain" + + The following tokens are imported from [RFC5322]: + + o "field-name" (name of a header field) + + o "dot-atom-text" (in the local-part of an email address) + + The following tokens are imported from [RFC2045]: + + o "qp-section" (a single line of quoted-printable-encoded text) + + + +Crocker, et al. Standards Track [Page 8] + +RFC 6376 DKIM Signatures September 2011 + + + o "hex-octet" (a quoted-printable encoded octet) + + INFORMATIVE NOTE: Be aware that the ABNF in [RFC2045] does not + obey the rules of [RFC5234] and must be interpreted accordingly, + particularly as regards case folding. + + Other tokens not defined herein are imported from [RFC5234]. These + are intuitive primitives such as SP, HTAB, WSP, ALPHA, DIGIT, CRLF, + etc. + +2.10. Common ABNF Tokens + + The following ABNF tokens are used elsewhere in this document: + + hyphenated-word = ALPHA [ *(ALPHA / DIGIT / "-") (ALPHA / DIGIT) ] + ALPHADIGITPS = (ALPHA / DIGIT / "+" / "/") + base64string = ALPHADIGITPS *([FWS] ALPHADIGITPS) + [ [FWS] "=" [ [FWS] "=" ] ] + hdr-name = field-name + qp-hdr-value = dkim-quoted-printable ; with "|" encoded + +2.11. DKIM-Quoted-Printable + + The DKIM-Quoted-Printable encoding syntax resembles that described in + Quoted-Printable [RFC2045], Section 6.7: any character MAY be encoded + as an "=" followed by two hexadecimal digits from the alphabet + "0123456789ABCDEF" (no lowercase characters permitted) representing + the hexadecimal-encoded integer value of that character. All control + characters (those with values < %x20), 8-bit characters (values > + %x7F), and the characters DEL (%x7F), SPACE (%x20), and semicolon + (";", %x3B) MUST be encoded. Note that all whitespace, including + SPACE, CR, and LF characters, MUST be encoded. After encoding, FWS + MAY be added at arbitrary locations in order to avoid excessively + long lines; such whitespace is NOT part of the value, and MUST be + removed before decoding. Use of characters not listed as "mail-safe" + in [RFC2049] is NOT RECOMMENDED. + + ABNF: + + dkim-quoted-printable = *(FWS / hex-octet / dkim-safe-char) + ; hex-octet is from RFC2045 + dkim-safe-char = %x21-3A / %x3C / %x3E-7E + ; '!' - ':', '<', '>' - '~' + + + + + + + + +Crocker, et al. Standards Track [Page 9] + +RFC 6376 DKIM Signatures September 2011 + + + INFORMATIVE NOTE: DKIM-Quoted-Printable differs from Quoted- + Printable as defined in [RFC2045] in several important ways: + + 1. Whitespace in the input text, including CR and LF, must be + encoded. [RFC2045] does not require such encoding, and does + not permit encoding of CR or LF characters that are part of a + CRLF line break. + + 2. Whitespace in the encoded text is ignored. This is to allow + tags encoded using DKIM-Quoted-Printable to be wrapped as + needed. In particular, [RFC2045] requires that line breaks in + the input be represented as physical line breaks; that is not + the case here. + + 3. The "soft line break" syntax ("=" as the last non-whitespace + character on the line) does not apply. + + 4. DKIM-Quoted-Printable does not require that encoded lines be + no more than 76 characters long (although there may be other + requirements depending on the context in which the encoded + text is being used). + +3. Protocol Elements + + Protocol Elements are conceptual parts of the protocol that are not + specific to either Signers or Verifiers. The protocol descriptions + for Signers and Verifiers are described in later sections ("Signer + Actions" (Section 5) and "Verifier Actions" (Section 6)). NOTE: This + section must be read in the context of those sections. + +3.1. Selectors + + To support multiple concurrent public keys per signing domain, the + key namespace is subdivided using "selectors". For example, + selectors might indicate the names of office locations (e.g., + "sanfrancisco", "coolumbeach", and "reykjavik"), the signing date + (e.g., "january2005", "february2005", etc.), or even an individual + user. + + Selectors are needed to support some important use cases. For + example: + + o Domains that want to delegate signing capability for a specific + address for a given duration to a partner, such as an advertising + provider or other outsourced function. + + o Domains that want to allow frequent travelers to send messages + locally without the need to connect with a particular MSA. + + + +Crocker, et al. Standards Track [Page 10] + +RFC 6376 DKIM Signatures September 2011 + + + o "Affinity" domains (e.g., college alumni associations) that + provide forwarding of incoming mail, but that do not operate a + mail submission agent for outgoing mail. + + Periods are allowed in selectors and are component separators. When + keys are retrieved from the DNS, periods in selectors define DNS + label boundaries in a manner similar to the conventional use in + domain names. Selector components might be used to combine dates + with locations, for example, "march2005.reykjavik". In a DNS + implementation, this can be used to allow delegation of a portion of + the selector namespace. + + ABNF: + + selector = sub-domain *( "." sub-domain ) + + The number of public keys and corresponding selectors for each domain + is determined by the domain owner. Many domain owners will be + satisfied with just one selector, whereas administratively + distributed organizations can choose to manage disparate selectors + and key pairs in different regions or on different email servers. + + Beyond administrative convenience, selectors make it possible to + seamlessly replace public keys on a routine basis. If a domain + wishes to change from using a public key associated with selector + "january2005" to a public key associated with selector + "february2005", it merely makes sure that both public keys are + advertised in the public-key repository concurrently for the + transition period during which email may be in transit prior to + verification. At the start of the transition period, the outbound + email servers are configured to sign with the "february2005" private + key. At the end of the transition period, the "january2005" public + key is removed from the public-key repository. + + INFORMATIVE NOTE: A key may also be revoked as described below. + The distinction between revoking and removing a key selector + record is subtle. When phasing out keys as described above, a + signing domain would probably simply remove the key record after + the transition period. However, a signing domain could elect to + revoke the key (but maintain the key record) for a further period. + There is no defined semantic difference between a revoked key and + a removed key. + + While some domains may wish to make selector values well-known, + others will want to take care not to allocate selector names in a way + that allows harvesting of data by outside parties. For example, if + per-user keys are issued, the domain owner will need to decide + + + + +Crocker, et al. Standards Track [Page 11] + +RFC 6376 DKIM Signatures September 2011 + + + whether to associate this selector directly with the name of a + registered end user or make it some unassociated random value, such + as a fingerprint of the public key. + + INFORMATIVE OPERATIONS NOTE: Reusing a selector with a new key + (for example, changing the key associated with a user's name) + makes it impossible to tell the difference between a message that + didn't verify because the key is no longer valid and a message + that is actually forged. For this reason, Signers are ill-advised + to reuse selectors for new keys. A better strategy is to assign + new keys to new selectors. + +3.2. Tag=Value Lists + + DKIM uses a simple "tag=value" syntax in several contexts, including + in messages and domain signature records. + + Values are a series of strings containing either plain text, "base64" + text (as defined in [RFC2045], Section 6.8), "qp-section" (ibid, + Section 6.7), or "dkim-quoted-printable" (as defined in + Section 2.11). The name of the tag will determine the encoding of + each value. Unencoded semicolon (";") characters MUST NOT occur in + the tag value, since that separates tag-specs. + + INFORMATIVE IMPLEMENTATION NOTE: Although the "plain text" defined + below (as "tag-value") only includes 7-bit characters, an + implementation that wished to anticipate future standards would be + advised not to preclude the use of UTF-8-encoded ([RFC3629]) text + in tag=value lists. + + Formally, the ABNF syntax rules are as follows: + + tag-list = tag-spec *( ";" tag-spec ) [ ";" ] + tag-spec = [FWS] tag-name [FWS] "=" [FWS] tag-value [FWS] + tag-name = ALPHA *ALNUMPUNC + tag-value = [ tval *( 1*(WSP / FWS) tval ) ] + ; Prohibits WSP and FWS at beginning and end + tval = 1*VALCHAR + VALCHAR = %x21-3A / %x3C-7E + ; EXCLAMATION to TILDE except SEMICOLON + ALNUMPUNC = ALPHA / DIGIT / "_" + + Note that WSP is allowed anywhere around tags. In particular, any + WSP after the "=" and any WSP before the terminating ";" is not part + of the value; however, WSP inside the value is significant. + + + + + + +Crocker, et al. Standards Track [Page 12] + +RFC 6376 DKIM Signatures September 2011 + + + Tags MUST be interpreted in a case-sensitive manner. Values MUST be + processed as case sensitive unless the specific tag description of + semantics specifies case insensitivity. + + Tags with duplicate names MUST NOT occur within a single tag-list; if + a tag name does occur more than once, the entire tag-list is invalid. + + Whitespace within a value MUST be retained unless explicitly excluded + by the specific tag description. + + Tag=value pairs that represent the default value MAY be included to + aid legibility. + + Unrecognized tags MUST be ignored. + + Tags that have an empty value are not the same as omitted tags. An + omitted tag is treated as having the default value; a tag with an + empty value explicitly designates the empty string as the value. + +3.3. Signing and Verification Algorithms + + DKIM supports multiple digital signature algorithms. Two algorithms + are defined by this specification at this time: rsa-sha1 and rsa- + sha256. Signers MUST implement and SHOULD sign using rsa-sha256. + Verifiers MUST implement both rsa-sha1 and rsa-sha256. + + INFORMATIVE NOTE: Although rsa-sha256 is strongly encouraged, some + senders might prefer to use rsa-sha1 when balancing security + strength against performance, complexity, or other needs. In + general, however, rsa-sha256 should always be used whenever + possible. + +3.3.1. The rsa-sha1 Signing Algorithm + + The rsa-sha1 Signing Algorithm computes a message hash as described + in Section 3.7 using SHA-1 [FIPS-180-3-2008] as the hash-alg. That + hash is then signed by the Signer using the RSA algorithm (defined in + Public-Key Cryptography Standards (PKCS) #1 version 1.5 [RFC3447]) as + the crypt-alg and the Signer's private key. The hash MUST NOT be + truncated or converted into any form other than the native binary + form before being signed. The signing algorithm SHOULD use a public + exponent of 65537. + +3.3.2. The rsa-sha256 Signing Algorithm + + The rsa-sha256 Signing Algorithm computes a message hash as described + in Section 3.7 using SHA-256 [FIPS-180-3-2008] as the hash-alg. That + hash is then signed by the Signer using the RSA algorithm (defined in + + + +Crocker, et al. Standards Track [Page 13] + +RFC 6376 DKIM Signatures September 2011 + + + PKCS#1 version 1.5 [RFC3447]) as the crypt-alg and the Signer's + private key. The hash MUST NOT be truncated or converted into any + form other than the native binary form before being signed. The + signing algorithm SHOULD use a public exponent of 65537. + +3.3.3. Key Sizes + + Selecting appropriate key sizes is a trade-off between cost, + performance, and risk. Since short RSA keys more easily succumb to + off-line attacks, Signers MUST use RSA keys of at least 1024 bits for + long-lived keys. Verifiers MUST be able to validate signatures with + keys ranging from 512 bits to 2048 bits, and they MAY be able to + validate signatures with larger keys. Verifier policies may use the + length of the signing key as one metric for determining whether a + signature is acceptable. + + Factors that should influence the key size choice include the + following: + + o The practical constraint that large (e.g., 4096-bit) keys might + not fit within a 512-byte DNS UDP response packet + + o The security constraint that keys smaller than 1024 bits are + subject to off-line attacks + + o Larger keys impose higher CPU costs to verify and sign email + + o Keys can be replaced on a regular basis; thus, their lifetime can + be relatively short + + o The security goals of this specification are modest compared to + typical goals of other systems that employ digital signatures + + See [RFC3766] for further discussion on selecting key sizes. + +3.3.4. Other Algorithms + + Other algorithms MAY be defined in the future. Verifiers MUST ignore + any signatures using algorithms that they do not implement. + +3.4. Canonicalization + + Some mail systems modify email in transit, potentially invalidating a + signature. For most Signers, mild modification of email is + immaterial to validation of the DKIM domain name's use. For such + Signers, a canonicalization algorithm that survives modest in-transit + modification is preferred. + + + + +Crocker, et al. Standards Track [Page 14] + +RFC 6376 DKIM Signatures September 2011 + + + Other Signers demand that any modification of the email, however + minor, result in a signature verification failure. These Signers + prefer a canonicalization algorithm that does not tolerate in-transit + modification of the signed email. + + Some Signers may be willing to accept modifications to header fields + that are within the bounds of email standards such as [RFC5322], but + are unwilling to accept any modification to the body of messages. + + To satisfy all requirements, two canonicalization algorithms are + defined for each of the header and the body: a "simple" algorithm + that tolerates almost no modification and a "relaxed" algorithm that + tolerates common modifications such as whitespace replacement and + header field line rewrapping. A Signer MAY specify either algorithm + for header or body when signing an email. If no canonicalization + algorithm is specified by the Signer, the "simple" algorithm defaults + for both header and body. Verifiers MUST implement both + canonicalization algorithms. Note that the header and body may use + different canonicalization algorithms. Further canonicalization + algorithms MAY be defined in the future; Verifiers MUST ignore any + signatures that use unrecognized canonicalization algorithms. + + Canonicalization simply prepares the email for presentation to the + signing or verification algorithm. It MUST NOT change the + transmitted data in any way. Canonicalization of header fields and + body are described below. + + NOTE: This section assumes that the message is already in "network + normal" format (text is ASCII encoded, lines are separated with CRLF + characters, etc.). See also Section 5.3 for information about + normalizing the message. + +3.4.1. The "simple" Header Canonicalization Algorithm + + The "simple" header canonicalization algorithm does not change header + fields in any way. Header fields MUST be presented to the signing or + verification algorithm exactly as they are in the message being + signed or verified. In particular, header field names MUST NOT be + case folded and whitespace MUST NOT be changed. + +3.4.2. The "relaxed" Header Canonicalization Algorithm + + The "relaxed" header canonicalization algorithm MUST apply the + following steps in order: + + o Convert all header field names (not the header field values) to + lowercase. For example, convert "SUBJect: AbC" to "subject: AbC". + + + + +Crocker, et al. Standards Track [Page 15] + +RFC 6376 DKIM Signatures September 2011 + + + o Unfold all header field continuation lines as described in + [RFC5322]; in particular, lines with terminators embedded in + continued header field values (that is, CRLF sequences followed by + WSP) MUST be interpreted without the CRLF. Implementations MUST + NOT remove the CRLF at the end of the header field value. + + o Convert all sequences of one or more WSP characters to a single SP + character. WSP characters here include those before and after a + line folding boundary. + + o Delete all WSP characters at the end of each unfolded header field + value. + + o Delete any WSP characters remaining before and after the colon + separating the header field name from the header field value. The + colon separator MUST be retained. + +3.4.3. The "simple" Body Canonicalization Algorithm + + The "simple" body canonicalization algorithm ignores all empty lines + at the end of the message body. An empty line is a line of zero + length after removal of the line terminator. If there is no body or + no trailing CRLF on the message body, a CRLF is added. It makes no + other changes to the message body. In more formal terms, the + "simple" body canonicalization algorithm converts "*CRLF" at the end + of the body to a single "CRLF". + + Note that a completely empty or missing body is canonicalized as a + single "CRLF"; that is, the canonicalized length will be 2 octets. + + The SHA-1 value (in base64) for an empty body (canonicalized to a + "CRLF") is: + + uoq1oCgLlTqpdDX/iUbLy7J1Wic= + + The SHA-256 value is: + + frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN/XKdLCPjaYaY= + +3.4.4. The "relaxed" Body Canonicalization Algorithm + + The "relaxed" body canonicalization algorithm MUST apply the + following steps (a) and (b) in order: + + a. Reduce whitespace: + + * Ignore all whitespace at the end of lines. Implementations + MUST NOT remove the CRLF at the end of the line. + + + +Crocker, et al. Standards Track [Page 16] + +RFC 6376 DKIM Signatures September 2011 + + + * Reduce all sequences of WSP within a line to a single SP + character. + + b. Ignore all empty lines at the end of the message body. "Empty + line" is defined in Section 3.4.3. If the body is non-empty but + does not end with a CRLF, a CRLF is added. (For email, this is + only possible when using extensions to SMTP or non-SMTP transport + mechanisms.) + + The SHA-1 value (in base64) for an empty body (canonicalized to a + null input) is: + + 2jmj7l5rSw0yVb/vlWAYkK/YBwk= + + The SHA-256 value is: + + 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU= + +3.4.5. Canonicalization Examples (INFORMATIVE) + + In the following examples, actual whitespace is used only for + clarity. The actual input and output text is designated using + bracketed descriptors: "<SP>" for a space character, "<HTAB>" for a + tab character, and "<CRLF>" for a carriage-return/line-feed sequence. + For example, "X <SP> Y" and "X<SP>Y" represent the same three + characters. + + Example 1: A message reading: + + A: <SP> X <CRLF> + B <SP> : <SP> Y <HTAB><CRLF> + <HTAB> Z <SP><SP><CRLF> + <CRLF> + <SP> C <SP><CRLF> + D <SP><HTAB><SP> E <CRLF> + <CRLF> + <CRLF> + + when canonicalized using relaxed canonicalization for both header and + body results in a header reading: + + a:X <CRLF> + b:Y <SP> Z <CRLF> + + and a body reading: + + <SP> C <CRLF> + D <SP> E <CRLF> + + + +Crocker, et al. Standards Track [Page 17] + +RFC 6376 DKIM Signatures September 2011 + + + Example 2: The same message canonicalized using simple + canonicalization for both header and body results in a header + reading: + + A: <SP> X <CRLF> + B <SP> : <SP> Y <HTAB><CRLF> + <HTAB> Z <SP><SP><CRLF> + + and a body reading: + + <SP> C <SP><CRLF> + D <SP><HTAB><SP> E <CRLF> + + Example 3: When processed using relaxed header canonicalization and + simple body canonicalization, the canonicalized version has a header + of: + + a:X <CRLF> + b:Y <SP> Z <CRLF> + + and a body reading: + + <SP> C <SP><CRLF> + D <SP><HTAB><SP> E <CRLF> + +3.5. The DKIM-Signature Header Field + + The signature of the email is stored in the DKIM-Signature header + field. This header field contains all of the signature and key- + fetching data. The DKIM-Signature value is a tag-list as described + in Section 3.2. + + The DKIM-Signature header field SHOULD be treated as though it were a + trace header field as defined in Section 3.6 of [RFC5322] and hence + SHOULD NOT be reordered and SHOULD be prepended to the message. + + The DKIM-Signature header field being created or verified is always + included in the signature calculation, after the rest of the header + fields being signed; however, when calculating or verifying the + signature, the value of the "b=" tag (signature value) of that DKIM- + Signature header field MUST be treated as though it were an empty + string. Unknown tags in the DKIM-Signature header field MUST be + included in the signature calculation but MUST be otherwise ignored + by Verifiers. Other DKIM-Signature header fields that are included + in the signature should be treated as normal header fields; in + particular, the "b=" tag is not treated specially. + + + + + +Crocker, et al. Standards Track [Page 18] + +RFC 6376 DKIM Signatures September 2011 + + + The encodings for each field type are listed below. Tags described + as qp-section are encoded as described in Section 6.7 of MIME Part + One [RFC2045], with the additional conversion of semicolon characters + to "=3B"; intuitively, this is one line of quoted-printable encoded + text. The dkim-quoted-printable syntax is defined in Section 2.11. + + Tags on the DKIM-Signature header field along with their type and + requirement status are shown below. Unrecognized tags MUST be + ignored. + + v= Version (plain-text; REQUIRED). This tag defines the version of + this specification that applies to the signature record. It MUST + have the value "1" for implementations compliant with this version + of DKIM. + + ABNF: + + sig-v-tag = %x76 [FWS] "=" [FWS] 1*DIGIT + + INFORMATIVE NOTE: DKIM-Signature version numbers may increase + arithmetically as new versions of this specification are + released. + + a= The algorithm used to generate the signature (plain-text; + REQUIRED). Verifiers MUST support "rsa-sha1" and "rsa-sha256"; + Signers SHOULD sign using "rsa-sha256". See Section 3.3 for a + description of the algorithms. + + ABNF: + + sig-a-tag = %x61 [FWS] "=" [FWS] sig-a-tag-alg + sig-a-tag-alg = sig-a-tag-k "-" sig-a-tag-h + sig-a-tag-k = "rsa" / x-sig-a-tag-k + sig-a-tag-h = "sha1" / "sha256" / x-sig-a-tag-h + x-sig-a-tag-k = ALPHA *(ALPHA / DIGIT) + ; for later extension + x-sig-a-tag-h = ALPHA *(ALPHA / DIGIT) + ; for later extension + + b= The signature data (base64; REQUIRED). Whitespace is ignored in + this value and MUST be ignored when reassembling the original + signature. In particular, the signing process can safely insert + FWS in this value in arbitrary places to conform to line-length + limits. See "Signer Actions" (Section 5) for how the signature is + computed. + + + + + + +Crocker, et al. Standards Track [Page 19] + +RFC 6376 DKIM Signatures September 2011 + + + ABNF: + + sig-b-tag = %x62 [FWS] "=" [FWS] sig-b-tag-data + sig-b-tag-data = base64string + + bh= The hash of the canonicalized body part of the message as + limited by the "l=" tag (base64; REQUIRED). Whitespace is ignored + in this value and MUST be ignored when reassembling the original + signature. In particular, the signing process can safely insert + FWS in this value in arbitrary places to conform to line-length + limits. See Section 3.7 for how the body hash is computed. + + ABNF: + + sig-bh-tag = %x62 %x68 [FWS] "=" [FWS] sig-bh-tag-data + sig-bh-tag-data = base64string + + c= Message canonicalization (plain-text; OPTIONAL, default is + "simple/simple"). This tag informs the Verifier of the type of + canonicalization used to prepare the message for signing. It + consists of two names separated by a "slash" (%d47) character, + corresponding to the header and body canonicalization algorithms, + respectively. These algorithms are described in Section 3.4. If + only one algorithm is named, that algorithm is used for the header + and "simple" is used for the body. For example, "c=relaxed" is + treated the same as "c=relaxed/simple". + + ABNF: + + sig-c-tag = %x63 [FWS] "=" [FWS] sig-c-tag-alg + ["/" sig-c-tag-alg] + sig-c-tag-alg = "simple" / "relaxed" / x-sig-c-tag-alg + x-sig-c-tag-alg = hyphenated-word ; for later extension + + d= The SDID claiming responsibility for an introduction of a message + into the mail stream (plain-text; REQUIRED). Hence, the SDID + value is used to form the query for the public key. The SDID MUST + correspond to a valid DNS name under which the DKIM key record is + published. The conventions and semantics used by a Signer to + create and use a specific SDID are outside the scope of this + specification, as is any use of those conventions and semantics. + When presented with a signature that does not meet these + requirements, Verifiers MUST consider the signature invalid. + + Internationalized domain names MUST be encoded as A-labels, as + described in Section 2.3 of [RFC5890]. + + + + + +Crocker, et al. Standards Track [Page 20] + +RFC 6376 DKIM Signatures September 2011 + + + ABNF: + + sig-d-tag = %x64 [FWS] "=" [FWS] domain-name + domain-name = sub-domain 1*("." sub-domain) + ; from [RFC5321] Domain, + ; excluding address-literal + + h= Signed header fields (plain-text, but see description; REQUIRED). + A colon-separated list of header field names that identify the + header fields presented to the signing algorithm. The field MUST + contain the complete list of header fields in the order presented + to the signing algorithm. The field MAY contain names of header + fields that do not exist when signed; nonexistent header fields do + not contribute to the signature computation (that is, they are + treated as the null input, including the header field name, the + separating colon, the header field value, and any CRLF + terminator). The field MAY contain multiple instances of a header + field name, meaning multiple occurrences of the corresponding + header field are included in the header hash. The field MUST NOT + include the DKIM-Signature header field that is being created or + verified but may include others. Folding whitespace (FWS) MAY be + included on either side of the colon separator. Header field + names MUST be compared against actual header field names in a + case-insensitive manner. This list MUST NOT be empty. See + Section 5.4 for a discussion of choosing header fields to sign and + Section 5.4.2 for requirements when signing multiple instances of + a single field. + + ABNF: + + sig-h-tag = %x68 [FWS] "=" [FWS] hdr-name + *( [FWS] ":" [FWS] hdr-name ) + + INFORMATIVE EXPLANATION: By "signing" header fields that do not + actually exist, a Signer can allow a Verifier to detect + insertion of those header fields after signing. However, since + a Signer cannot possibly know what header fields might be + defined in the future, this mechanism cannot be used to prevent + the addition of any possible unknown header fields. + + INFORMATIVE NOTE: "Signing" fields that are not present at the + time of signing not only prevents fields and values from being + added but also prevents adding fields with no values. + + i= The Agent or User Identifier (AUID) on behalf of which the SDID is + taking responsibility (dkim-quoted-printable; OPTIONAL, default is + an empty local-part followed by an "@" followed by the domain from + the "d=" tag). + + + +Crocker, et al. Standards Track [Page 21] + +RFC 6376 DKIM Signatures September 2011 + + + The syntax is a standard email address where the local-part MAY be + omitted. The domain part of the address MUST be the same as, or a + subdomain of, the value of the "d=" tag. + + Internationalized domain names MUST be encoded as A-labels, as + described in Section 2.3 of [RFC5890]. + + ABNF: + + sig-i-tag = %x69 [FWS] "=" [FWS] [ Local-part ] + "@" domain-name + + The AUID is specified as having the same syntax as an email + address but it need not have the same semantics. Notably, the + domain name need not be registered in the DNS -- so it might not + resolve in a query -- and the local-part MAY be drawn from a + namespace unrelated to any mailbox. The details of the structure + and semantics for the namespace are determined by the Signer. Any + knowledge or use of those details by Verifiers or Assessors is + outside the scope of this specification. The Signer MAY choose to + use the same namespace for its AUIDs as its users' email addresses + or MAY choose other means of representing its users. However, the + Signer SHOULD use the same AUID for each message intended to be + evaluated as being within the same sphere of responsibility, if it + wishes to offer receivers the option of using the AUID as a stable + identifier that is finer grained than the SDID. + + INFORMATIVE NOTE: The local-part of the "i=" tag is optional + because in some cases a Signer may not be able to establish a + verified individual identity. In such cases, the Signer might + wish to assert that although it is willing to go as far as + signing for the domain, it is unable or unwilling to commit to + an individual user name within the domain. It can do so by + including the domain part but not the local-part of the + identity. + + INFORMATIVE DISCUSSION: This specification does not require the + value of the "i=" tag to match the identity in any message + header fields. This is considered to be a Verifier policy + issue. Constraints between the value of the "i=" tag and other + identities in other header fields seek to apply basic + authentication into the semantics of trust associated with a + role such as content author. Trust is a broad and complex + topic, and trust mechanisms are subject to highly creative + attacks. The real-world efficacy of any but the most basic + bindings between the "i=" value and other identities is not + well established, nor is its vulnerability to subversion by an + attacker. Hence, reliance on the use of these options should + + + +Crocker, et al. Standards Track [Page 22] + +RFC 6376 DKIM Signatures September 2011 + + + be strictly limited. In particular, it is not at all clear to + what extent a typical end-user recipient can rely on any + assurances that might be made by successful use of the "i=" + options. + + l= Body length count (plain-text unsigned decimal integer; OPTIONAL, + default is entire body). This tag informs the Verifier of the + number of octets in the body of the email after canonicalization + included in the cryptographic hash, starting from 0 immediately + following the CRLF preceding the body. This value MUST NOT be + larger than the actual number of octets in the canonicalized + message body. See further discussion in Section 8.2. + + INFORMATIVE NOTE: The value of the "l=" tag is constrained to + 76 decimal digits. This constraint is not intended to predict + the size of future messages or to require implementations to + use an integer representation large enough to represent the + maximum possible value but is intended to remind the + implementer to check the length of this and all other tags + during verification and to test for integer overflow when + decoding the value. Implementers may need to limit the actual + value expressed to a value smaller than 10^76, e.g., to allow a + message to fit within the available storage space. + + ABNF: + + sig-l-tag = %x6c [FWS] "=" [FWS] + 1*76DIGIT + + q= A colon-separated list of query methods used to retrieve the + public key (plain-text; OPTIONAL, default is "dns/txt"). Each + query method is of the form "type[/options]", where the syntax and + semantics of the options depend on the type and specified options. + If there are multiple query mechanisms listed, the choice of query + mechanism MUST NOT change the interpretation of the signature. + Implementations MUST use the recognized query mechanisms in the + order presented. Unrecognized query mechanisms MUST be ignored. + + Currently, the only valid value is "dns/txt", which defines the + DNS TXT resource record (RR) lookup algorithm described elsewhere + in this document. The only option defined for the "dns" query + type is "txt", which MUST be included. Verifiers and Signers MUST + support "dns/txt". + + ABNF: + + sig-q-tag = %x71 [FWS] "=" [FWS] sig-q-tag-method + *([FWS] ":" [FWS] sig-q-tag-method) + + + +Crocker, et al. Standards Track [Page 23] + +RFC 6376 DKIM Signatures September 2011 + + + sig-q-tag-method = "dns/txt" / x-sig-q-tag-type + ["/" x-sig-q-tag-args] + x-sig-q-tag-type = hyphenated-word ; for future extension + x-sig-q-tag-args = qp-hdr-value + + s= The selector subdividing the namespace for the "d=" (domain) tag + (plain-text; REQUIRED). + + Internationalized selector names MUST be encoded as A-labels, as + described in Section 2.3 of [RFC5890]. + + ABNF: + + sig-s-tag = %x73 [FWS] "=" [FWS] selector + + t= Signature Timestamp (plain-text unsigned decimal integer; + RECOMMENDED, default is an unknown creation time). The time that + this signature was created. The format is the number of seconds + since 00:00:00 on January 1, 1970 in the UTC time zone. The value + is expressed as an unsigned integer in decimal ASCII. This value + is not constrained to fit into a 31- or 32-bit integer. + Implementations SHOULD be prepared to handle values up to at least + 10^12 (until approximately AD 200,000; this fits into 40 bits). + To avoid denial-of-service attacks, implementations MAY consider + any value longer than 12 digits to be infinite. Leap seconds are + not counted. Implementations MAY ignore signatures that have a + timestamp in the future. + + ABNF: + + sig-t-tag = %x74 [FWS] "=" [FWS] 1*12DIGIT + + x= Signature Expiration (plain-text unsigned decimal integer; + RECOMMENDED, default is no expiration). The format is the same as + in the "t=" tag, represented as an absolute date, not as a time + delta from the signing timestamp. The value is expressed as an + unsigned integer in decimal ASCII, with the same constraints on + the value in the "t=" tag. Signatures MAY be considered invalid + if the verification time at the Verifier is past the expiration + date. The verification time should be the time that the message + was first received at the administrative domain of the Verifier if + that time is reliably available; otherwise, the current time + should be used. The value of the "x=" tag MUST be greater than + the value of the "t=" tag if both are present. + + INFORMATIVE NOTE: The "x=" tag is not intended as an anti- + replay defense. + + + + +Crocker, et al. Standards Track [Page 24] + +RFC 6376 DKIM Signatures September 2011 + + + INFORMATIVE NOTE: Due to clock drift, the receiver's notion of + when to consider the signature expired may not exactly match + what the sender is expecting. Receivers MAY add a 'fudge + factor' to allow for such possible drift. + + ABNF: + + sig-x-tag = %x78 [FWS] "=" [FWS] + 1*12DIGIT + + z= Copied header fields (dkim-quoted-printable, but see description; + OPTIONAL, default is null). A vertical-bar-separated list of + selected header fields present when the message was signed, + including both the field name and value. It is not required to + include all header fields present at the time of signing. This + field need not contain the same header fields listed in the "h=" + tag. The header field text itself must encode the vertical bar + ("|", %x7C) character (i.e., vertical bars in the "z=" text are + meta-characters, and any actual vertical bar characters in a + copied header field must be encoded). Note that all whitespace + must be encoded, including whitespace between the colon and the + header field value. After encoding, FWS MAY be added at arbitrary + locations in order to avoid excessively long lines; such + whitespace is NOT part of the value of the header field and MUST + be removed before decoding. + + The header fields referenced by the "h=" tag refer to the fields + in the [RFC5322] header of the message, not to any copied fields + in the "z=" tag. Copied header field values are for diagnostic + use. + + ABNF: + + sig-z-tag = %x7A [FWS] "=" [FWS] sig-z-tag-copy + *( "|" [FWS] sig-z-tag-copy ) + sig-z-tag-copy = hdr-name [FWS] ":" qp-hdr-value + + INFORMATIVE EXAMPLE of a signature header field spread across + multiple continuation lines: + + DKIM-Signature: v=1; a=rsa-sha256; d=example.net; s=brisbane; + c=simple; q=dns/txt; i=@eng.example.net; + t=1117574938; x=1118006938; + h=from:to:subject:date; + z=From:foo@eng.example.net|To:joe@example.com| + Subject:demo=20run|Date:July=205,=202005=203:44:08=20PM=20-0700; + bh=MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=; + b=dzdVyOfAKCdLXdJOc9G2q8LoXSlEniSbav+yuU4zGeeruD00lszZVoG4ZHRNiYzR + + + +Crocker, et al. Standards Track [Page 25] + +RFC 6376 DKIM Signatures September 2011 + + +3.6. Key Management and Representation + + Signature applications require some level of assurance that the + verification public key is associated with the claimed Signer. Many + applications achieve this by using public-key certificates issued by + a trusted third party. However, DKIM can achieve a sufficient level + of security, with significantly enhanced scalability, by simply + having the Verifier query the purported Signer's DNS entry (or some + security-equivalent) in order to retrieve the public key. + + DKIM keys can potentially be stored in multiple types of key servers + and in multiple formats. The storage and format of keys are + irrelevant to the remainder of the DKIM algorithm. + + Parameters to the key lookup algorithm are the type of the lookup + (the "q=" tag), the domain of the Signer (the "d=" tag of the DKIM- + Signature header field), and the selector (the "s=" tag). + + public_key = dkim_find_key(q_val, d_val, s_val) + + This document defines a single binding, using DNS TXT RRs to + distribute the keys. Other bindings may be defined in the future. + +3.6.1. Textual Representation + + It is expected that many key servers will choose to present the keys + in an otherwise unstructured text format (for example, an XML form + would not be considered to be unstructured text for this purpose). + The following definition MUST be used for any DKIM key represented in + an otherwise unstructured textual form. + + The overall syntax is a tag-list as described in Section 3.2. The + current valid tags are described below. Other tags MAY be present + and MUST be ignored by any implementation that does not understand + them. + + v= Version of the DKIM key record (plain-text; RECOMMENDED, default + is "DKIM1"). If specified, this tag MUST be set to "DKIM1" + (without the quotes). This tag MUST be the first tag in the + record. Records beginning with a "v=" tag with any other value + MUST be discarded. Note that Verifiers must do a string + comparison on this value; for example, "DKIM1" is not the same as + "DKIM1.0". + + ABNF: + + key-v-tag = %x76 [FWS] "=" [FWS] %x44.4B.49.4D.31 + + + + +Crocker, et al. Standards Track [Page 26] + +RFC 6376 DKIM Signatures September 2011 + + + h= Acceptable hash algorithms (plain-text; OPTIONAL, defaults to + allowing all algorithms). A colon-separated list of hash + algorithms that might be used. Unrecognized algorithms MUST be + ignored. Refer to Section 3.3 for a discussion of the hash + algorithms implemented by Signers and Verifiers. The set of + algorithms listed in this tag in each record is an operational + choice made by the Signer. + + ABNF: + + key-h-tag = %x68 [FWS] "=" [FWS] key-h-tag-alg + *( [FWS] ":" [FWS] key-h-tag-alg ) + key-h-tag-alg = "sha1" / "sha256" / x-key-h-tag-alg + x-key-h-tag-alg = hyphenated-word ; for future extension + + k= Key type (plain-text; OPTIONAL, default is "rsa"). Signers and + Verifiers MUST support the "rsa" key type. The "rsa" key type + indicates that an ASN.1 DER-encoded [ITU-X660-1997] RSAPublicKey + (see [RFC3447], Sections 3.1 and A.1.1) is being used in the "p=" + tag. (Note: the "p=" tag further encodes the value using the + base64 algorithm.) Unrecognized key types MUST be ignored. + + ABNF: + + key-k-tag = %x76 [FWS] "=" [FWS] key-k-tag-type + key-k-tag-type = "rsa" / x-key-k-tag-type + x-key-k-tag-type = hyphenated-word ; for future extension + + n= Notes that might be of interest to a human (qp-section; OPTIONAL, + default is empty). No interpretation is made by any program. + This tag should be used sparingly in any key server mechanism that + has space limitations (notably DNS). This is intended for use by + administrators, not end users. + + ABNF: + + key-n-tag = %x6e [FWS] "=" [FWS] qp-section + + p= Public-key data (base64; REQUIRED). An empty value means that + this public key has been revoked. The syntax and semantics of + this tag value before being encoded in base64 are defined by the + "k=" tag. + + INFORMATIVE RATIONALE: If a private key has been compromised or + otherwise disabled (e.g., an outsourcing contract has been + terminated), a Signer might want to explicitly state that it + knows about the selector, but all messages using that selector + + + + +Crocker, et al. Standards Track [Page 27] + +RFC 6376 DKIM Signatures September 2011 + + + should fail verification. Verifiers SHOULD return an error + code for any DKIM-Signature header field with a selector + referencing a revoked key. (See Section 6.1.2 for details.) + + ABNF: + + key-p-tag = %x70 [FWS] "=" [ [FWS] base64string] + + INFORMATIVE NOTE: A base64string is permitted to include + whitespace (FWS) at arbitrary places; however, any CRLFs must + be followed by at least one WSP character. Implementers and + administrators are cautioned to ensure that selector TXT RRs + conform to this specification. + + s= Service Type (plain-text; OPTIONAL; default is "*"). A colon- + separated list of service types to which this record applies. + Verifiers for a given service type MUST ignore this record if the + appropriate type is not listed. Unrecognized service types MUST + be ignored. Currently defined service types are as follows: + + * matches all service types + + email electronic mail (not necessarily limited to SMTP) + + This tag is intended to constrain the use of keys for other + purposes, should use of DKIM be defined by other services in the + future. + + ABNF: + + key-s-tag = %x73 [FWS] "=" [FWS] key-s-tag-type + *( [FWS] ":" [FWS] key-s-tag-type ) + key-s-tag-type = "email" / "*" / x-key-s-tag-type + x-key-s-tag-type = hyphenated-word ; for future extension + + t= Flags, represented as a colon-separated list of names (plain- + text; OPTIONAL, default is no flags set). Unrecognized flags MUST + be ignored. The defined flags are as follows: + + y This domain is testing DKIM. Verifiers MUST NOT treat messages + from Signers in testing mode differently from unsigned email, + even should the signature fail to verify. Verifiers MAY wish + to track testing mode results to assist the Signer. + + + + + + + + +Crocker, et al. Standards Track [Page 28] + +RFC 6376 DKIM Signatures September 2011 + + + s Any DKIM-Signature header fields using the "i=" tag MUST have + the same domain value on the right-hand side of the "@" in the + "i=" tag and the value of the "d=" tag. That is, the "i=" + domain MUST NOT be a subdomain of "d=". Use of this flag is + RECOMMENDED unless subdomaining is required. + + ABNF: + + key-t-tag = %x74 [FWS] "=" [FWS] key-t-tag-flag + *( [FWS] ":" [FWS] key-t-tag-flag ) + key-t-tag-flag = "y" / "s" / x-key-t-tag-flag + x-key-t-tag-flag = hyphenated-word ; for future extension + +3.6.2. DNS Binding + + A binding using DNS TXT RRs as a key service is hereby defined. All + implementations MUST support this binding. + +3.6.2.1. Namespace + + All DKIM keys are stored in a subdomain named "_domainkey". Given a + DKIM-Signature field with a "d=" tag of "example.com" and an "s=" tag + of "foo.bar", the DNS query will be for + "foo.bar._domainkey.example.com". + +3.6.2.2. Resource Record Types for Key Storage + + The DNS Resource Record type used is specified by an option to the + query-type ("q=") tag. The only option defined in this base + specification is "txt", indicating the use of a TXT RR. A later + extension of this standard may define another RR type. + + Strings in a TXT RR MUST be concatenated together before use with no + intervening whitespace. TXT RRs MUST be unique for a particular + selector name; that is, if there are multiple records in an RRset, + the results are undefined. + + TXT RRs are encoded as described in Section 3.6.1. + +3.7. Computing the Message Hashes + + Both signing and verifying message signatures start with a step of + computing two cryptographic hashes over the message. Signers will + choose the parameters of the signature as described in "Signer + Actions" (Section 5); Verifiers will use the parameters specified in + the DKIM-Signature header field being verified. In the following + discussion, the names of the tags in the DKIM-Signature header field + that either exists (when verifying) or will be created (when signing) + + + +Crocker, et al. Standards Track [Page 29] + +RFC 6376 DKIM Signatures September 2011 + + + are used. Note that canonicalization (Section 3.4) is only used to + prepare the email for signing or verifying; it does not affect the + transmitted email in any way. + + The Signer/Verifier MUST compute two hashes: one over the body of the + message and one over the selected header fields of the message. + + Signers MUST compute them in the order shown. Verifiers MAY compute + them in any order convenient to the Verifier, provided that the + result is semantically identical to the semantics that would be the + case had they been computed in this order. + + In hash step 1, the Signer/Verifier MUST hash the message body, + canonicalized using the body canonicalization algorithm specified in + the "c=" tag and then truncated to the length specified in the "l=" + tag. That hash value is then converted to base64 form and inserted + into (Signers) or compared to (Verifiers) the "bh=" tag of the DKIM- + Signature header field. + + In hash step 2, the Signer/Verifier MUST pass the following to the + hash algorithm in the indicated order. + + 1. The header fields specified by the "h=" tag, in the order + specified in that tag, and canonicalized using the header + canonicalization algorithm specified in the "c=" tag. Each + header field MUST be terminated with a single CRLF. + + 2. The DKIM-Signature header field that exists (verifying) or will + be inserted (signing) in the message, with the value of the "b=" + tag (including all surrounding whitespace) deleted (i.e., treated + as the empty string), canonicalized using the header + canonicalization algorithm specified in the "c=" tag, and without + a trailing CRLF. + + All tags and their values in the DKIM-Signature header field are + included in the cryptographic hash with the sole exception of the + value portion of the "b=" (signature) tag, which MUST be treated as + the null string. All tags MUST be included even if they might not be + understood by the Verifier. The header field MUST be presented to + the hash algorithm after the body of the message rather than with the + rest of the header fields and MUST be canonicalized as specified in + the "c=" (canonicalization) tag. The DKIM-Signature header field + MUST NOT be included in its own "h=" tag, although other DKIM- + Signature header fields MAY be signed (see Section 4). + + When calculating the hash on messages that will be transmitted using + base64 or quoted-printable encoding, Signers MUST compute the hash + after the encoding. Likewise, the Verifier MUST incorporate the + + + +Crocker, et al. Standards Track [Page 30] + +RFC 6376 DKIM Signatures September 2011 + + + values into the hash before decoding the base64 or quoted-printable + text. However, the hash MUST be computed before transport-level + encodings such as SMTP "dot-stuffing" (the modification of lines + beginning with a "." to avoid confusion with the SMTP end-of-message + marker, as specified in [RFC5321]). + + With the exception of the canonicalization procedure described in + Section 3.4, the DKIM signing process treats the body of messages as + simply a string of octets. DKIM messages MAY be either in plain-text + or in MIME format; no special treatment is afforded to MIME content. + Message attachments in MIME format MUST be included in the content + that is signed. + + More formally, pseudo-code for the signature algorithm is: + + body-hash = hash-alg (canon-body, l-param) + data-hash = hash-alg (h-headers, D-SIG, body-hash) + signature = sig-alg (d-domain, selector, data-hash) + + where: + + body-hash: is the output from hashing the body, using hash-alg. + + hash-alg: is the hashing algorithm specified in the "a" parameter. + + canon-body: is a canonicalized representation of the body, produced + using the body algorithm specified in the "c" parameter, + as defined in Section 3.4 and excluding the + DKIM-Signature field. + + l-param: is the length-of-body value of the "l" parameter. + + data-hash: is the output from using the hash-alg algorithm, to hash + the header including the DKIM-Signature header, and the + body hash. + + h-headers: is the list of headers to be signed, as specified in the + "h" parameter. + + D-SIG: is the canonicalized DKIM-Signature field itself without + the signature value portion of the parameter, that is, an + empty parameter value. + + signature: is the signature value produced by the signing algorithm. + + sig-alg: is the signature algorithm specified by the "a" + parameter. + + + + +Crocker, et al. Standards Track [Page 31] + +RFC 6376 DKIM Signatures September 2011 + + + d-domain: is the domain name specified in the "d" parameter. + + selector: is the selector value specified in the "s" parameter. + + NOTE: Many digital signature APIs provide both hashing and + application of the RSA private key using a single "sign()" + primitive. When using such an API, the last two steps in the + algorithm would probably be combined into a single call that would + perform both the "a-hash-alg" and the "sig-alg". + +3.8. Input Requirements + + A message that is not compliant with [RFC5322], [RFC2045], and + [RFC2047] can be subject to attempts by intermediaries to correct or + interpret such content. See Section 8 of [RFC4409] for examples of + changes that are commonly made. Such "corrections" may invalidate + DKIM signatures or have other undesirable effects, including some + that involve changes to the way a message is presented to an end + user. + + Accordingly, DKIM's design is predicated on valid input. Therefore, + Signers and Verifiers SHOULD take reasonable steps to ensure that the + messages they are processing are valid according to [RFC5322], + [RFC2045], and any other relevant message format standards. + + See Section 8.15 for additional discussion. + +3.9. Output Requirements + + The evaluation of each signature ends in one of three states, which + this document refers to as follows: + + SUCCESS: a successful verification + + PERMFAIL: a permanent, non-recoverable error such as a signature + verification failure + + TEMPFAIL: a temporary, recoverable error such as a DNS query timeout + + For each signature that verifies successfully or produces a TEMPFAIL + result, output of the DKIM algorithm MUST include the set of: + + o The domain name, taken from the "d=" signature tag; and + + o The result of the verification attempt for that signature. + + + + + + +Crocker, et al. Standards Track [Page 32] + +RFC 6376 DKIM Signatures September 2011 + + + The output MAY include other signature properties or result meta- + data, including PERMFAILed or otherwise ignored signatures, for use + by modules that consume those results. + + See Section 6.1 for discussion of signature validation result codes. + +3.10. Signing by Parent Domains + + In some circumstances, it is desirable for a domain to apply a + signature on behalf of any of its subdomains without the need to + maintain separate selectors (key records) in each subdomain. By + default, private keys corresponding to key records can be used to + sign messages for any subdomain of the domain in which they reside; + for example, a key record for the domain example.com can be used to + verify messages where the AUID ("i=" tag of the signature) is + sub.example.com, or even sub1.sub2.example.com. In order to limit + the capability of such keys when this is not intended, the "s" flag + MAY be set in the "t=" tag of the key record, to constrain the + validity of the domain of the AUID. If the referenced key record + contains the "s" flag as part of the "t=" tag, the domain of the AUID + ("i=" flag) MUST be the same as that of the SDID (d=) domain. If + this flag is absent, the domain of the AUID MUST be the same as, or a + subdomain of, the SDID. + +3.11. Relationship between SDID and AUID + + DKIM's primary task is to communicate from the Signer to a recipient- + side Identity Assessor a single Signing Domain Identifier (SDID) that + refers to a responsible identity. DKIM MAY optionally provide a + single responsible Agent or User Identifier (AUID). + + Hence, DKIM's mandatory output to a receive-side Identity Assessor is + a single domain name. Within the scope of its use as DKIM output, + the name has only basic domain name semantics; any possible owner- + specific semantics are outside the scope of DKIM. That is, within + its role as a DKIM identifier, additional semantics cannot be assumed + by an Identity Assessor. + + Upon successfully verifying the signature, a receive-side DKIM + Verifier MUST communicate the Signing Domain Identifier (d=) to a + consuming Identity Assessor module and MAY communicate the Agent or + User Identifier (i=) if present. + + To the extent that a receiver attempts to intuit any structured + semantics for either of the identifiers, this is a heuristic function + that is outside the scope of DKIM's specification and semantics. + + + + + +Crocker, et al. Standards Track [Page 33] + +RFC 6376 DKIM Signatures September 2011 + + + Hence, it is relegated to a higher-level service, such as a delivery- + handling filter that integrates a variety of inputs and performs + heuristic analysis of them. + + INFORMATIVE DISCUSSION: This document does not require the value + of the SDID or AUID to match an identifier in any other message + header field. This requirement is, instead, an Assessor policy + issue. The purpose of such a linkage would be to authenticate the + value in that other header field. This, in turn, is the basis for + applying a trust assessment based on the identifier value. Trust + is a broad and complex topic, and trust mechanisms are subject to + highly creative attacks. The real-world efficacy of any but the + most basic bindings between the SDID or AUID and other identities + is not well established, nor is its vulnerability to subversion by + an attacker. Hence, reliance on the use of such bindings should + be strictly limited. In particular, it is not at all clear to + what extent a typical end-user recipient can rely on any + assurances that might be made by successful use of the SDID or + AUID. + +4. Semantics of Multiple Signatures + +4.1. Example Scenarios + + There are many reasons why a message might have multiple signatures. + For example, suppose SHA-256 is in the future found to be + insufficiently strong, and DKIM usage transitions to SHA-1024. A + Signer might immediately sign using the newer algorithm but also + continue to sign using the older algorithm for interoperability with + Verifiers that had not yet upgraded. The Signer would do this by + adding two DKIM-Signature header fields, one using each algorithm. + Older Verifiers that did not recognize SHA-1024 as an acceptable + algorithm would skip that signature and use the older algorithm; + newer Verifiers could use either signature at their option and, all + other things being equal, might not even attempt to verify the other + signature. + + Similarly, a Signer might sign a message including all header fields + and no "l=" tag (to satisfy strict Verifiers) and a second time with + a limited set of header fields and an "l=" tag (in anticipation of + possible message modifications en route to other Verifiers). + Verifiers could then choose which signature they prefer. + + Of course, a message might also have multiple signatures because it + passed through multiple Signers. A common case is expected to be + that of a signed message that passes through a mailing list that also + + + + + +Crocker, et al. Standards Track [Page 34] + +RFC 6376 DKIM Signatures September 2011 + + + signs all messages. Assuming both of those signatures verify, a + recipient might choose to accept the message if either of those + signatures were known to come from trusted sources. + + In particular, recipients might choose to whitelist mailing lists to + which they have subscribed and that have acceptable anti-abuse + policies so as to accept messages sent to that list even from unknown + authors. They might also subscribe to less trusted mailing lists + (e.g., those without anti-abuse protection) and be willing to accept + all messages from specific authors but insist on doing additional + abuse scanning for other messages. + + Another related example of multiple Signers might be forwarding + services, such as those commonly associated with academic alumni + sites. For example, a recipient might have an address at + members.example.org, a site that has anti-abuse protection that is + somewhat less effective than the recipient would prefer. Such a + recipient might have specific authors whose messages would be trusted + absolutely, but messages from unknown authors that had passed the + forwarder's scrutiny would have only medium trust. + +4.2. Interpretation + + A Signer that is adding a signature to a message merely creates a new + DKIM-Signature header, using the usual semantics of the "h=" option. + A Signer MAY sign previously existing DKIM-Signature header fields + using the method described in Section 5.4 to sign trace header + fields. + + Note that Signers should be cognizant that signing DKIM-Signature + header fields may result in signature failures with intermediaries + that do not recognize that DKIM-Signature header fields are trace + header fields and unwittingly reorder them, thus breaking such + signatures. For this reason, signing existing DKIM-Signature header + fields is unadvised, albeit legal. + + INFORMATIVE NOTE: If a header field with multiple instances is + signed, those header fields are always signed from the bottom up. + Thus, it is not possible to sign only specific DKIM-Signature + header fields. For example, if the message being signed already + contains three DKIM-Signature header fields A, B, and C, it is + possible to sign all of them, B and C only, or C only, but not A + only, B only, A and B only, or A and C only. + + A Signer MAY add more than one DKIM-Signature header field using + different parameters. For example, during a transition period, a + Signer might want to produce signatures using two different hash + algorithms. + + + +Crocker, et al. Standards Track [Page 35] + +RFC 6376 DKIM Signatures September 2011 + + + Signers SHOULD NOT remove any DKIM-Signature header fields from + messages they are signing, even if they know that the signatures + cannot be verified. + + When evaluating a message with multiple signatures, a Verifier SHOULD + evaluate signatures independently and on their own merits. For + example, a Verifier that by policy chooses not to accept signatures + with deprecated cryptographic algorithms would consider such + signatures invalid. Verifiers MAY process signatures in any order of + their choice; for example, some Verifiers might choose to process + signatures corresponding to the From field in the message header + before other signatures. See Section 6.1 for more information about + signature choices. + + INFORMATIVE IMPLEMENTATION NOTE: Verifier attempts to correlate + valid signatures with invalid signatures in an attempt to guess + why a signature failed are ill-advised. In particular, there is + no general way that a Verifier can determine that an invalid + signature was ever valid. + + Verifiers SHOULD continue to check signatures until a signature + successfully verifies to the satisfaction of the Verifier. To limit + potential denial-of-service attacks, Verifiers MAY limit the total + number of signatures they will attempt to verify. + + If a Verifier module reports signatures whose evaluations produced + PERMFAIL results, Identity Assessors SHOULD ignore those signatures + (see Section 6.1), acting as though they were not present in the + message. + +5. Signer Actions + + The following steps are performed in order by Signers. + +5.1. Determine Whether the Email Should Be Signed and by Whom + + A Signer can obviously only sign email for domains for which it has a + private key and the necessary knowledge of the corresponding public + key and selector information. However, there are a number of other + reasons beyond the lack of a private key why a Signer could choose + not to sign an email. + + INFORMATIVE NOTE: A Signer can be implemented as part of any + portion of the mail system as deemed appropriate, including an + MUA, a SUBMISSION server, or an MTA. Wherever implemented, + Signers should beware of signing (and thereby asserting + responsibility for) messages that may be problematic. In + particular, within a trusted enclave, the signing domain might be + + + +Crocker, et al. Standards Track [Page 36] + +RFC 6376 DKIM Signatures September 2011 + + + derived from the header according to local policy; SUBMISSION + servers might only sign messages from users that are properly + authenticated and authorized. + + INFORMATIVE IMPLEMENTER ADVICE: SUBMISSION servers should not sign + Received header fields if the outgoing gateway MTA obfuscates + Received header fields, for example, to hide the details of + internal topology. + + If an email cannot be signed for some reason, it is a local policy + decision as to what to do with that email. + +5.2. Select a Private Key and Corresponding Selector Information + + This specification does not define the basis by which a Signer should + choose which private key and selector information to use. Currently, + all selectors are equal as far as this specification is concerned, so + the decision should largely be a matter of administrative + convenience. Distribution and management of private keys is also + outside the scope of this document. + + INFORMATIVE OPERATIONS ADVICE: A Signer should not sign with a + private key when the selector containing the corresponding public + key is expected to be revoked or removed before the Verifier has + an opportunity to validate the signature. The Signer should + anticipate that Verifiers can choose to defer validation, perhaps + until the message is actually read by the final recipient. In + particular, when rotating to a new key pair, signing should + immediately commence with the new private key, and the old public + key should be retained for a reasonable validation interval before + being removed from the key server. + +5.3. Normalize the Message to Prevent Transport Conversions + + Some messages, particularly those using 8-bit characters, are subject + to modification during transit, notably conversion to 7-bit form. + Such conversions will break DKIM signatures. In order to minimize + the chances of such breakage, Signers SHOULD convert the message to a + suitable MIME content-transfer encoding such as quoted-printable or + base64 as described in [RFC2045] before signing. Such conversion is + outside the scope of DKIM; the actual message SHOULD be converted to + 7-bit MIME by an MUA or MSA prior to presentation to the DKIM + algorithm. + + If the message is submitted to the Signer with any local encoding + that will be modified before transmission, that modification to + canonical [RFC5322] form MUST be done before signing. In particular, + bare CR or LF characters (used by some systems as a local line + + + +Crocker, et al. Standards Track [Page 37] + +RFC 6376 DKIM Signatures September 2011 + + + separator convention) MUST be converted to the SMTP-standard CRLF + sequence before the message is signed. Any conversion of this sort + SHOULD be applied to the message actually sent to the recipient(s), + not just to the version presented to the signing algorithm. + + More generally, the Signer MUST sign the message as it is expected to + be received by the Verifier rather than in some local or internal + form. + +5.3.1. Body Length Limits + + A body length count MAY be specified to limit the signature + calculation to an initial prefix of the body text, measured in + octets. If the body length count is not specified, the entire + message body is signed. + + INFORMATIVE RATIONALE: This capability is provided because it is + very common for mailing lists to add trailers to messages (e.g., + instructions on how to get off the list). Until those messages + are also signed, the body length count is a useful tool for the + Verifier since it can, as a matter of policy, accept messages + having valid signatures with extraneous data. + + The length actually hashed should be inserted in the "l=" tag of the + DKIM-Signature header field. (See Section 3.5.) + + The body length count allows the Signer of a message to permit data + to be appended to the end of the body of a signed message. The body + length count MUST be calculated following the canonicalization + algorithm; for example, any whitespace ignored by a canonicalization + algorithm is not included as part of the body length count. + + A body length count of zero means that the body is completely + unsigned. + + Signers wishing to ensure that no modification of any sort can occur + should specify the "simple" canonicalization algorithm for both + header and body and omit the body length count. + + See Section 8.2 for further discussion. + +5.4. Determine the Header Fields to Sign + + The From header field MUST be signed (that is, included in the "h=" + tag of the resulting DKIM-Signature header field). Signers SHOULD + NOT sign an existing header field likely to be legitimately modified + or removed in transit. In particular, [RFC5321] explicitly permits + + + + +Crocker, et al. Standards Track [Page 38] + +RFC 6376 DKIM Signatures September 2011 + + + modification or removal of the Return-Path header field in transit. + Signers MAY include any other header fields present at the time of + signing at the discretion of the Signer. + + INFORMATIVE OPERATIONS NOTE: The choice of which header fields to + sign is non-obvious. One strategy is to sign all existing, non- + repeatable header fields. An alternative strategy is to sign only + header fields that are likely to be displayed to or otherwise be + likely to affect the processing of the message at the receiver. A + third strategy is to sign only "well-known" headers. Note that + Verifiers may treat unsigned header fields with extreme + skepticism, including refusing to display them to the end user or + even ignoring the signature if it does not cover certain header + fields. For this reason, signing fields present in the message + such as Date, Subject, Reply-To, Sender, and all MIME header + fields are highly advised. + + The DKIM-Signature header field is always implicitly signed and MUST + NOT be included in the "h=" tag except to indicate that other + preexisting signatures are also signed. + + Signers MAY claim to have signed header fields that do not exist + (that is, Signers MAY include the header field name in the "h=" tag + even if that header field does not exist in the message). When + computing the signature, the nonexisting header field MUST be treated + as the null string (including the header field name, header field + value, all punctuation, and the trailing CRLF). + + INFORMATIVE RATIONALE: This allows Signers to explicitly assert + the absence of a header field; if that header field is added + later, the signature will fail. + + INFORMATIVE NOTE: A header field name need only be listed once + more than the actual number of that header field in a message at + the time of signing in order to prevent any further additions. + For example, if there is a single Comments header field at the + time of signing, listing Comments twice in the "h=" tag is + sufficient to prevent any number of Comments header fields from + being appended; it is not necessary (but is legal) to list + Comments three or more times in the "h=" tag. + + Refer to Section 5.4.2 for a discussion of the procedure to be + followed when canonicalizing a header with more than one instance of + a particular header field name. + + Signers need to be careful of signing header fields that might have + additional instances added later in the delivery process, since such + header fields might be inserted after the signed instance or + + + +Crocker, et al. Standards Track [Page 39] + +RFC 6376 DKIM Signatures September 2011 + + + otherwise reordered. Trace header fields (such as Received) and + Resent-* blocks are the only fields prohibited by [RFC5322] from + being reordered. In particular, since DKIM-Signature header fields + may be reordered by some intermediate MTAs, signing existing DKIM- + Signature header fields is error-prone. + + INFORMATIVE ADMONITION: Despite the fact that [RFC5322] does not + prohibit the reordering of header fields, reordering of signed + header fields with multiple instances by intermediate MTAs will + cause DKIM signatures to be broken; such antisocial behavior + should be avoided. + + INFORMATIVE IMPLEMENTER'S NOTE: Although not required by this + specification, all end-user visible header fields should be signed + to avoid possible "indirect spamming". For example, if the + Subject header field is not signed, a spammer can resend a + previously signed mail, replacing the legitimate subject with a + one-line spam. + +5.4.1. Recommended Signature Content + + The purpose of the DKIM cryptographic algorithm is to affix an + identifier to the message in a way that is both robust against normal + transit-related changes and resistant to kinds of replay attacks. An + essential aspect of satisfying these requirements is choosing what + header fields to include in the hash and what fields to exclude. + + The basic rule for choosing fields to include is to select those + fields that constitute the "core" of the message content. Hence, any + replay attack will have to include these in order to have the + signature succeed; however, with these included, the core of the + message is valid, even if sent on to new recipients. + + Common examples of fields with addresses and fields with textual + content related to the body are: + + o From (REQUIRED; see Section 5.4) + + o Reply-To + + o Subject + + o Date + + o To, Cc + + o Resent-Date, Resent-From, Resent-To, Resent-Cc + + + + +Crocker, et al. Standards Track [Page 40] + +RFC 6376 DKIM Signatures September 2011 + + + o In-Reply-To, References + + o List-Id, List-Help, List-Unsubscribe, List-Subscribe, List-Post, + List-Owner, List-Archive + + If the "l=" signature tag is in use (see Section 3.5), the Content- + Type field is also a candidate for being included as it could be + replaced in a way that causes completely different content to be + rendered to the receiving user. + + There are trade-offs in the decision of what constitutes the "core" + of the message, which for some fields is a subjective concept. + Including fields such as "Message-ID", for example, is useful if one + considers a mechanism for being able to distinguish separate + instances of the same message to be core content. Similarly, "In- + Reply-To" and "References" might be desirable to include if one + considers message threading to be a core part of the message. + + Another class of fields that may be of interest are those that convey + security-related information about the message, such as + Authentication-Results [RFC5451]. + + The basic rule for choosing fields to exclude is to select those + fields for which there are multiple fields with the same name and + fields that are modified in transit. Examples of these are: + + o Return-Path + + o Received + + o Comments, Keywords + + Note that the DKIM-Signature field is also excluded from the header + hash because its handling is specified separately. + + Typically, it is better to exclude other optional fields because of + the potential that additional fields of the same name will be + legitimately added or reordered prior to verification. There are + likely to be legitimate exceptions to this rule because of the wide + variety of application-specific header fields that might be applied + to a message, some of which are unlikely to be duplicated, modified, + or reordered. + + Signers SHOULD choose canonicalization algorithms based on the types + of messages they process and their aversion to risk. For example, + e-commerce sites sending primarily purchase receipts, which are not + expected to be processed by mailing lists or other software likely to + modify messages, will generally prefer "simple" canonicalization. + + + +Crocker, et al. Standards Track [Page 41] + +RFC 6376 DKIM Signatures September 2011 + + + Sites sending primarily person-to-person email will likely prefer to + be more resilient to modification during transport by using "relaxed" + canonicalization. + + Unless mail is processed through intermediaries, such as mailing + lists that might add "unsubscribe" instructions to the bottom of the + message body, the "l=" tag is likely to convey no additional benefit + while providing an avenue for unauthorized addition of text to a + message. The use of "l=0" takes this to the extreme, allowing + complete alteration of the text of the message without invalidating + the signature. Moreover, a Verifier would be within its rights to + consider a partly signed message body as unacceptable. Judicious use + is advised. + +5.4.2. Signatures Involving Multiple Instances of a Field + + Signers choosing to sign an existing header field that occurs more + than once in the message (such as Received) MUST sign the physically + last instance of that header field in the header block. Signers + wishing to sign multiple instances of such a header field MUST + include the header field name multiple times in the "h=" tag of the + DKIM-Signature header field and MUST sign such header fields in order + from the bottom of the header field block to the top. The Signer MAY + include more instances of a header field name in "h=" than there are + actual corresponding header fields so that the signature will not + verify if additional header fields of that name are added. + + INFORMATIVE EXAMPLE: + + If the Signer wishes to sign two existing Received header fields, + and the existing header contains: + + Received: <A> + Received: <B> + Received: <C> + + then the resulting DKIM-Signature header field should read: + + DKIM-Signature: ... h=Received : Received :... + + and Received header fields <C> and <B> will be signed in that + order. + + + + + + + + + +Crocker, et al. Standards Track [Page 42] + +RFC 6376 DKIM Signatures September 2011 + + +5.5. Compute the Message Hash and Signature + + The Signer MUST compute the message hash as described in Section 3.7 + and then sign it using the selected public-key algorithm. This will + result in a DKIM-Signature header field that will include the body + hash and a signature of the header hash, where that header includes + the DKIM-Signature header field itself. + + Entities such as mailing list managers that implement DKIM and that + modify the message or a header field (for example, inserting + unsubscribe information) before retransmitting the message SHOULD + check any existing signature on input and MUST make such + modifications before re-signing the message. + +5.6. Insert the DKIM-Signature Header Field + + Finally, the Signer MUST insert the DKIM-Signature header field + created in the previous step prior to transmitting the email. The + DKIM-Signature header field MUST be the same as used to compute the + hash as described above, except that the value of the "b=" tag MUST + be the appropriately signed hash computed in the previous step, + signed using the algorithm specified in the "a=" tag of the DKIM- + Signature header field and using the private key corresponding to the + selector given in the "s=" tag of the DKIM-Signature header field, as + chosen above in Section 5.2. + + The DKIM-Signature header field MUST be inserted before any other + DKIM-Signature fields in the header block. + + INFORMATIVE IMPLEMENTATION NOTE: The easiest way to achieve this + is to insert the DKIM-Signature header field at the beginning of + the header block. In particular, it may be placed before any + existing Received header fields. This is consistent with treating + DKIM-Signature as a trace header field. + +6. Verifier Actions + + Since a Signer MAY remove or revoke a public key at any time, it is + advised that verification occur in a timely manner. In many + configurations, the most timely place is during acceptance by the + border MTA or shortly thereafter. In particular, deferring + verification until the message is accessed by the end user is + discouraged. + + A border or intermediate MTA MAY verify the message signature(s). An + MTA who has performed verification MAY communicate the result of that + verification by adding a verification header field to incoming + messages. This simplifies things considerably for the user, who can + + + +Crocker, et al. Standards Track [Page 43] + +RFC 6376 DKIM Signatures September 2011 + + + now use an existing mail user agent. Most MUAs have the ability to + filter messages based on message header fields or content; these + filters would be used to implement whatever policy the user wishes + with respect to unsigned mail. + + A verifying MTA MAY implement a policy with respect to unverifiable + mail, regardless of whether or not it applies the verification header + field to signed messages. + + Verifiers MUST produce a result that is semantically equivalent to + applying the steps listed in Sections 6.1, 6.1.1, and 6.1.2 in order. + In practice, several of these steps can be performed in parallel in + order to improve performance. + +6.1. Extract Signatures from the Message + + The order in which Verifiers try DKIM-Signature header fields is not + defined; Verifiers MAY try signatures in any order they like. For + example, one implementation might try the signatures in textual + order, whereas another might try signatures by identities that match + the contents of the From header field before trying other signatures. + Verifiers MUST NOT attribute ultimate meaning to the order of + multiple DKIM-Signature header fields. In particular, there is + reason to believe that some relays will reorder the header fields in + potentially arbitrary ways. + + INFORMATIVE IMPLEMENTATION NOTE: Verifiers might use the order as + a clue to signing order in the absence of any other information. + However, other clues as to the semantics of multiple signatures + (such as correlating the signing host with Received header fields) + might also be considered. + + Survivability of signatures after transit is not guaranteed, and + signatures can fail to verify through no fault of the Signer. + Therefore, a Verifier SHOULD NOT treat a message that has one or more + bad signatures and no good signatures differently from a message with + no signature at all. + + When a signature successfully verifies, a Verifier will either stop + processing or attempt to verify any other signatures, at the + discretion of the implementation. A Verifier MAY limit the number of + signatures it tries, in order to avoid denial-of-service attacks (see + Section 8.4 for further discussion). + + In the following description, text reading "return status + (explanation)" (where "status" is one of "PERMFAIL" or "TEMPFAIL") + means that the Verifier MUST immediately cease processing that + signature. The Verifier SHOULD proceed to the next signature, if one + + + +Crocker, et al. Standards Track [Page 44] + +RFC 6376 DKIM Signatures September 2011 + + + is present, and completely ignore the bad signature. If the status + is "PERMFAIL", the signature failed and should not be reconsidered. + If the status is "TEMPFAIL", the signature could not be verified at + this time but may be tried again later. A Verifier MAY either + arrange to defer the message for later processing or try another + signature; if no good signature is found and any of the signatures + resulted in a TEMPFAIL status, the Verifier MAY arrange to defer the + message for later processing. The "(explanation)" is not normative + text; it is provided solely for clarification. + + Verifiers that are prepared to validate multiple signature header + fields SHOULD proceed to the next signature header field, if one + exists. However, Verifiers MAY make note of the fact that an invalid + signature was present for consideration at a later step. + + INFORMATIVE NOTE: The rationale of this requirement is to permit + messages that have invalid signatures but also a valid signature + to work. For example, a mailing list exploder might opt to leave + the original submitter signature in place even though the exploder + knows that it is modifying the message in some way that will break + that signature, and the exploder inserts its own signature. In + this case, the message should succeed even in the presence of the + known-broken signature. + + For each signature to be validated, the following steps should be + performed in such a manner as to produce a result that is + semantically equivalent to performing them in the indicated order. + +6.1.1. Validate the Signature Header Field + + Implementers MUST meticulously validate the format and values in the + DKIM-Signature header field; any inconsistency or unexpected values + MUST cause the header field to be completely ignored and the Verifier + to return PERMFAIL (signature syntax error). Being "liberal in what + you accept" is definitely a bad strategy in this security context. + Note, however, that this does not include the existence of unknown + tags in a DKIM-Signature header field, which are explicitly + permitted. Verifiers MUST return PERMFAIL (incompatible version) + when presented a DKIM-Signature header field with a "v=" tag that is + inconsistent with this specification. + + INFORMATIVE IMPLEMENTATION NOTE: An implementation may, of course, + choose to also verify signatures generated by older versions of + this specification. + + + + + + + +Crocker, et al. Standards Track [Page 45] + +RFC 6376 DKIM Signatures September 2011 + + + If any tag listed as "required" in Section 3.5 is omitted from the + DKIM-Signature header field, the Verifier MUST ignore the DKIM- + Signature header field and return PERMFAIL (signature missing + required tag). + + INFORMATIVE NOTE: The tags listed as required in Section 3.5 are + "v=", "a=", "b=", "bh=", "d=", "h=", and "s=". Should there be a + conflict between this note and Section 3.5, Section 3.5 is + normative. + + If the DKIM-Signature header field does not contain the "i=" tag, the + Verifier MUST behave as though the value of that tag were "@d", where + "d" is the value from the "d=" tag. + + Verifiers MUST confirm that the domain specified in the "d=" tag is + the same as or a parent domain of the domain part of the "i=" tag. + If not, the DKIM-Signature header field MUST be ignored, and the + Verifier should return PERMFAIL (domain mismatch). + + If the "h=" tag does not include the From header field, the Verifier + MUST ignore the DKIM-Signature header field and return PERMFAIL (From + field not signed). + + Verifiers MAY ignore the DKIM-Signature header field and return + PERMFAIL (signature expired) if it contains an "x=" tag and the + signature has expired. + + Verifiers MAY ignore the DKIM-Signature header field if the domain + used by the Signer in the "d=" tag is not associated with a valid + signing entity. For example, signatures with "d=" values such as + "com" and "co.uk" could be ignored. The list of unacceptable domains + SHOULD be configurable. + + Verifiers MAY ignore the DKIM-Signature header field and return + PERMFAIL (unacceptable signature header) for any other reason, for + example, if the signature does not sign header fields that the + Verifier views to be essential. As a case in point, if MIME header + fields are not signed, certain attacks may be possible that the + Verifier would prefer to avoid. + +6.1.2. Get the Public Key + + The public key for a signature is needed to complete the verification + process. The process of retrieving the public key depends on the + query type as defined by the "q=" tag in the DKIM-Signature header + field. Obviously, a public key need only be retrieved if the process + of extracting the signature information is completely successful. + + + + +Crocker, et al. Standards Track [Page 46] + +RFC 6376 DKIM Signatures September 2011 + + + Details of key management and representation are described in + Section 3.6. The Verifier MUST validate the key record and MUST + ignore any public-key records that are malformed. + + NOTE: The use of a wildcard TXT RR that covers a queried DKIM + domain name will produce a response to a DKIM query that is + unlikely to be a valid DKIM key record. This problem is not + specific to DKIM and applies to many other types of queries. + Client software that processes DNS responses needs to take this + problem into account. + + When validating a message, a Verifier MUST perform the following + steps in a manner that is semantically the same as performing them in + the order indicated; in some cases, the implementation may + parallelize or reorder these steps, as long as the semantics remain + unchanged: + + 1. The Verifier retrieves the public key as described in Section 3.6 + using the algorithm in the "q=" tag, the domain from the "d=" + tag, and the selector from the "s=" tag. + + 2. If the query for the public key fails to respond, the Verifier + MAY seek a later verification attempt by returning TEMPFAIL (key + unavailable). + + 3. If the query for the public key fails because the corresponding + key record does not exist, the Verifier MUST immediately return + PERMFAIL (no key for signature). + + 4. If the query for the public key returns multiple key records, the + Verifier can choose one of the key records or may cycle through + the key records, performing the remainder of these steps on each + record at the discretion of the implementer. The order of the + key records is unspecified. If the Verifier chooses to cycle + through the key records, then the "return ..." wording in the + remainder of this section means "try the next key record, if any; + if none, return to try another signature in the usual way". + + 5. If the result returned from the query does not adhere to the + format defined in this specification, the Verifier MUST ignore + the key record and return PERMFAIL (key syntax error). Verifiers + are urged to validate the syntax of key records carefully to + avoid attempted attacks. In particular, the Verifier MUST ignore + keys with a version code ("v=" tag) that they do not implement. + + + + + + + +Crocker, et al. Standards Track [Page 47] + +RFC 6376 DKIM Signatures September 2011 + + + 6. If the "h=" tag exists in the public-key record and the hash + algorithm implied by the "a=" tag in the DKIM-Signature header + field is not included in the contents of the "h=" tag, the + Verifier MUST ignore the key record and return PERMFAIL + (inappropriate hash algorithm). + + 7. If the public-key data (the "p=" tag) is empty, then this key has + been revoked and the Verifier MUST treat this as a failed + signature check and return PERMFAIL (key revoked). There is no + defined semantic difference between a key that has been revoked + and a key record that has been removed. + + 8. If the public-key data is not suitable for use with the algorithm + and key types defined by the "a=" and "k=" tags in the DKIM- + Signature header field, the Verifier MUST immediately return + PERMFAIL (inappropriate key algorithm). + +6.1.3. Compute the Verification + + Given a Signer and a public key, verifying a signature consists of + actions semantically equivalent to the following steps. + + 1. Based on the algorithm defined in the "c=" tag, the body length + specified in the "l=" tag, and the header field names in the "h=" + tag, prepare a canonicalized version of the message as is + described in Section 3.7 (note that this canonicalized version + does not actually replace the original content). When matching + header field names in the "h=" tag against the actual message + header field, comparisons MUST be case-insensitive. + + 2. Based on the algorithm indicated in the "a=" tag, compute the + message hashes from the canonical copy as described in + Section 3.7. + + 3. Verify that the hash of the canonicalized message body computed + in the previous step matches the hash value conveyed in the "bh=" + tag. If the hash does not match, the Verifier SHOULD ignore the + signature and return PERMFAIL (body hash did not verify). + + 4. Using the signature conveyed in the "b=" tag, verify the + signature against the header hash using the mechanism appropriate + for the public-key algorithm described in the "a=" tag. If the + signature does not validate, the Verifier SHOULD ignore the + signature and return PERMFAIL (signature did not verify). + + + + + + + +Crocker, et al. Standards Track [Page 48] + +RFC 6376 DKIM Signatures September 2011 + + + 5. Otherwise, the signature has correctly verified. + + INFORMATIVE IMPLEMENTER'S NOTE: Implementations might wish to + initiate the public-key query in parallel with calculating the + hash as the public key is not needed until the final decryption is + calculated. Implementations may also verify the signature on the + message header before validating that the message hash listed in + the "bh=" tag in the DKIM-Signature header field matches that of + the actual message body; however, if the body hash does not match, + the entire signature must be considered to have failed. + + A body length specified in the "l=" tag of the signature limits the + number of bytes of the body passed to the verification algorithm. + All data beyond that limit is not validated by DKIM. Hence, + Verifiers might treat a message that contains bytes beyond the + indicated body length with suspicion and can choose to treat the + signature as if it were invalid (e.g., by returning PERMFAIL + (unsigned content)). + + Should the algorithm reach this point, the verification has + succeeded, and DKIM reports SUCCESS for this signature. + +6.2. Communicate Verification Results + + Verifiers wishing to communicate the results of verification to other + parts of the mail system may do so in whatever manner they see fit. + For example, implementations might choose to add an email header + field to the message before passing it on. Any such header field + SHOULD be inserted before any existing DKIM-Signature or preexisting + authentication status header fields in the header field block. The + Authentication-Results: header field ([RFC5451]) MAY be used for this + purpose. + + INFORMATIVE ADVICE to MUA filter writers: Patterns intended to + search for results header fields to visibly mark authenticated + mail for end users should verify that such a header field was + added by the appropriate verifying domain and that the verified + identity matches the author identity that will be displayed by the + MUA. In particular, MUA filters should not be influenced by bogus + results header fields added by attackers. To circumvent this + attack, Verifiers MAY wish to request deletion of existing results + header fields after verification and before arranging to add a new + header field. + + + + + + + + +Crocker, et al. Standards Track [Page 49] + +RFC 6376 DKIM Signatures September 2011 + + +6.3. Interpret Results/Apply Local Policy + + It is beyond the scope of this specification to describe what actions + an Identity Assessor can make, but mail carrying a validated SDID + presents an opportunity to an Identity Assessor that unauthenticated + email does not. Specifically, an authenticated email creates a + predictable identifier by which other decisions can reliably be + managed, such as trust and reputation. Conversely, unauthenticated + email lacks a reliable identifier that can be used to assign trust + and reputation. It is reasonable to treat unauthenticated email as + lacking any trust and having no positive reputation. + + In general, modules that consume DKIM verification output SHOULD NOT + determine message acceptability based solely on a lack of any + signature or on an unverifiable signature; such rejection would cause + severe interoperability problems. If an MTA does wish to reject such + messages during an SMTP session (for example, when communicating with + a peer who, by prior agreement, agrees to only send signed messages), + and a signature is missing or does not verify, the handling MTA + SHOULD use a 550/5.7.x reply code. + + Where the Verifier is integrated within the MTA and it is not + possible to fetch the public key, perhaps because the key server is + not available, a temporary failure message MAY be generated using a + 451/4.7.5 reply code, such as: + + 451 4.7.5 Unable to verify signature - key server unavailable + + Temporary failures such as inability to access the key server or + other external service are the only conditions that SHOULD use a 4xx + SMTP reply code. In particular, cryptographic signature verification + failures MUST NOT provoke 4xx SMTP replies. + + Once the signature has been verified, that information MUST be + conveyed to the Identity Assessor (such as an explicit allow/ + whitelist and reputation system) and/or to the end user. If the SDID + is not the same as the address in the From: header field, the mail + system SHOULD take pains to ensure that the actual SDID is clear to + the reader. + + While the symptoms of a failed verification are obvious -- the + signature doesn't verify -- establishing the exact cause can be more + difficult. If a selector cannot be found, is that because the + selector has been removed, or was the value changed somehow in + transit? If the signature line is missing, is that because it was + never there, or was it removed by an overzealous filter? For + diagnostic purposes, the exact reason why the verification fails + SHOULD be made available and possibly recorded in the system logs. + + + +Crocker, et al. Standards Track [Page 50] + +RFC 6376 DKIM Signatures September 2011 + + + If the email cannot be verified, then it SHOULD be treated the same + as all unverified email, regardless of whether or not it looks like + it was signed. + + See Section 8.15 for additional discussion. + +7. IANA Considerations + + DKIM has registered namespaces with IANA. In all cases, new values + are assigned only for values that have been documented in a published + RFC that has IETF Consensus [RFC5226]. + + This memo updates these registries as described below. Of note is + the addition of a new "status" column. All registrations into these + namespaces MUST include the name being registered, the document in + which it was registered or updated, and an indication of its current + status, which MUST be one of "active" (in current use) or "historic" + (no longer in current use). + + No new tags are defined in this specification compared to [RFC4871], + but one has been designated as "historic". + + Also, the "Email Authentication Methods" registry is revised to refer + to this update. + +7.1. Email Authentication Methods Registry + + The "Email Authentication Methods" registry is updated to indicate + that "dkim" is defined in this memo. + +7.2. DKIM-Signature Tag Specifications + + A DKIM-Signature provides for a list of tag specifications. IANA has + established the "DKIM-Signature Tag Specifications" registry for tag + specifications that can be used in DKIM-Signature fields. + + + + + + + + + + + + + + + + +Crocker, et al. Standards Track [Page 51] + +RFC 6376 DKIM Signatures September 2011 + + + +------+-----------------+--------+ + | TYPE | REFERENCE | STATUS | + +------+-----------------+--------+ + | v | (this document) | active | + | a | (this document) | active | + | b | (this document) | active | + | bh | (this document) | active | + | c | (this document) | active | + | d | (this document) | active | + | h | (this document) | active | + | i | (this document) | active | + | l | (this document) | active | + | q | (this document) | active | + | s | (this document) | active | + | t | (this document) | active | + | x | (this document) | active | + | z | (this document) | active | + +------+-----------------+--------+ + + Table 1: DKIM-Signature Tag Specifications Registry Updated Values + +7.3. DKIM-Signature Query Method Registry + + The "q=" tag-spec (specified in Section 3.5) provides for a list of + query methods. + + IANA has established the "DKIM-Signature Query Method" registry for + mechanisms that can be used to retrieve the key that will permit + validation processing of a message signed using DKIM. + + +------+--------+-----------------+--------+ + | TYPE | OPTION | REFERENCE | STATUS | + +------+--------+-----------------+--------+ + | dns | txt | (this document) | active | + +------+--------+-----------------+--------+ + + Table 2: DKIM-Signature Query Method Registry Updated Values + +7.4. DKIM-Signature Canonicalization Registry + + The "c=" tag-spec (specified in Section 3.5) provides for a specifier + for canonicalization algorithms for the header and body of the + message. + + IANA has established the "DKIM-Signature Canonicalization Header" + Registry for algorithms for converting a message into a canonical + form before signing or verifying using DKIM. + + + + +Crocker, et al. Standards Track [Page 52] + +RFC 6376 DKIM Signatures September 2011 + + + +---------+-----------------+--------+ + | TYPE | REFERENCE | STATUS | + +---------+-----------------+--------+ + | simple | (this document) | active | + | relaxed | (this document) | active | + +---------+-----------------+--------+ + + Table 3: DKIM-Signature Canonicalization Header Registry Updated + Values + + +---------+-----------------+--------+ + | TYPE | REFERENCE | STATUS | + +---------+-----------------+--------+ + | simple | (this document) | active | + | relaxed | (this document) | active | + +---------+-----------------+--------+ + + Table 4: DKIM-Signature Canonicalization Body Registry Updated Values + +7.5. _domainkey DNS TXT Resource Record Tag Specifications + + A _domainkey DNS TXT RR provides for a list of tag specifications. + IANA has established the DKIM "_domainkey DNS TXT Record Tag + Specifications" registry for tag specifications that can be used in + DNS TXT resource records. + + +------+-----------------+----------+ + | TYPE | REFERENCE | STATUS | + +------+-----------------+----------+ + | v | (this document) | active | + | g | [RFC4871] | historic | + | h | (this document) | active | + | k | (this document) | active | + | n | (this document) | active | + | p | (this document) | active | + | s | (this document) | active | + | t | (this document) | active | + +------+-----------------+----------+ + + Table 5: _domainkey DNS TXT Record Tag Specifications Registry + Updated Values + +7.6. DKIM Key Type Registry + + The "k=" <key-k-tag> (specified in Section 3.6.1) and the "a=" <sig- + a-tag-k> (specified in Section 3.5) tags provide for a list of + mechanisms that can be used to decode a DKIM signature. + + + + +Crocker, et al. Standards Track [Page 53] + +RFC 6376 DKIM Signatures September 2011 + + + IANA has established the "DKIM Key Type" registry for such + mechanisms. + + +------+-----------+--------+ + | TYPE | REFERENCE | STATUS | + +------+-----------+--------+ + | rsa | [RFC3447] | active | + +------+-----------+--------+ + + Table 6: DKIM Key Type Registry Updated Values + +7.7. DKIM Hash Algorithms Registry + + The "h=" <key-h-tag> (specified in Section 3.6.1) and the "a=" <sig- + a-tag-h> (specified in Section 3.5) tags provide for a list of + mechanisms that can be used to produce a digest of message data. + + IANA has established the "DKIM Hash Algorithms" registry for such + mechanisms. + + +--------+-------------------+--------+ + | TYPE | REFERENCE | STATUS | + +--------+-------------------+--------+ + | sha1 | [FIPS-180-3-2008] | active | + | sha256 | [FIPS-180-3-2008] | active | + +--------+-------------------+--------+ + + Table 7: DKIM Hash Algorithms Registry Updated Values + +7.8. DKIM Service Types Registry + + The "s=" <key-s-tag> tag (specified in Section 3.6.1) provides for a + list of service types to which this selector may apply. + + IANA has established the "DKIM Service Types" registry for service + types. + + +-------+-----------------+--------+ + | TYPE | REFERENCE | STATUS | + +-------+-----------------+--------+ + | email | (this document) | active | + | * | (this document) | active | + +-------+-----------------+--------+ + + Table 8: DKIM Service Types Registry Updated Values + + + + + + +Crocker, et al. Standards Track [Page 54] + +RFC 6376 DKIM Signatures September 2011 + + +7.9. DKIM Selector Flags Registry + + The "t=" <key-t-tag> tag (specified in Section 3.6.1) provides for a + list of flags to modify interpretation of the selector. + + IANA has established the "DKIM Selector Flags" registry for + additional flags. + + +------+-----------------+--------+ + | TYPE | REFERENCE | STATUS | + +------+-----------------+--------+ + | y | (this document) | active | + | s | (this document) | active | + +------+-----------------+--------+ + + Table 9: DKIM Selector Flags Registry Updated Values + +7.10. DKIM-Signature Header Field + + IANA has added DKIM-Signature to the "Permanent Message Header Field + Names" registry (see [RFC3864]) for the "mail" protocol, using this + document as the reference. + +8. Security Considerations + + It has been observed that any introduced mechanism that attempts to + stem the flow of spam is subject to intensive attack. DKIM needs to + be carefully scrutinized to identify potential attack vectors and the + vulnerability to each. See also [RFC4686]. + +8.1. ASCII Art Attacks + + The relaxed body canonicalization algorithm may enable certain types + of extremely crude "ASCII Art" attacks where a message may be + conveyed by adjusting the spacing between words. If this is a + concern, the "simple" body canonicalization algorithm should be used + instead. + +8.2. Misuse of Body Length Limits ("l=" Tag) + + Use of the "l=" tag might allow display of fraudulent content without + appropriate warning to end users. The "l=" tag is intended for + increasing signature robustness when sending to mailing lists that + both modify their content and do not sign their modified messages. + However, using the "l=" tag enables attacks in which an intermediary + with malicious intent can modify a message to include content that + solely benefits the attacker. It is possible for the appended + + + + +Crocker, et al. Standards Track [Page 55] + +RFC 6376 DKIM Signatures September 2011 + + + content to completely replace the original content in the end + recipient's eyes and to defeat duplicate message detection + algorithms. + + An example of such an attack includes altering the MIME structure, + exploiting lax HTML parsing in the MUA, and defeating duplicate + message detection algorithms. + + To avoid this attack, Signers should be extremely wary of using this + tag, and Assessors might wish to ignore signatures that use the tag. + +8.3. Misappropriated Private Key + + As with any other security application that uses private- or public- + key pairs, DKIM requires caution around the handling and protection + of keys. A compromised private key or access to one means an + intruder or malware can send mail signed by the domain that + advertises the matching public key. + + Thus, private keys issued to users, rather than one used by an + ADministrative Management Domain (ADMD) itself, create the usual + problem of securing data stored on personal resources that can affect + the ADMD. + + A more secure architecture involves sending messages through an + outgoing MTA that can authenticate the submitter using existing + techniques (e.g., SMTP Authentication), possibly validate the message + itself (e.g., verify that the header is legitimate and that the + content passes a spam content check), and sign the message using a + key appropriate for the submitter address. Such an MTA can also + apply controls on the volume of outgoing mail each user is permitted + to originate in order to further limit the ability of malware to + generate bulk email. + +8.4. Key Server Denial-of-Service Attacks + + Since the key servers are distributed (potentially separate for each + domain), the number of servers that would need to be attacked to + defeat this mechanism on an Internet-wide basis is very large. + Nevertheless, key servers for individual domains could be attacked, + impeding the verification of messages from that domain. This is not + significantly different from the ability of an attacker to deny + service to the mail exchangers for a given domain, although it + affects outgoing, not incoming, mail. + + A variation on this attack involves a very large amount of mail being + sent using spoofed signatures from a given domain: the key servers + for that domain could be overwhelmed with requests in a denial-of- + + + +Crocker, et al. Standards Track [Page 56] + +RFC 6376 DKIM Signatures September 2011 + + + service attack (see [RFC4732]). However, given the low overhead of + verification compared with handling of the email message itself, such + an attack would be difficult to mount. + +8.5. Attacks against the DNS + + Since the DNS is a required binding for key services, specific + attacks against the DNS must be considered. + + While the DNS is currently insecure [RFC3833], these security + problems are the motivation behind DNS Security (DNSSEC) [RFC4033], + and all users of the DNS will reap the benefit of that work. + + DKIM is only intended as a "sufficient" method of proving + authenticity. It is not intended to provide strong cryptographic + proof about authorship or contents. Other technologies such as + OpenPGP [RFC4880] and S/MIME [RFC5751] address those requirements. + + A second security issue related to the DNS revolves around the + increased DNS traffic as a consequence of fetching selector-based + data as well as fetching signing domain policy. Widespread + deployment of DKIM will result in a significant increase in DNS + queries to the claimed signing domain. In the case of forgeries on a + large scale, DNS servers could see a substantial increase in queries. + + A specific DNS security issue that should be considered by DKIM + Verifiers is the name chaining attack described in Section 2.3 of + [RFC3833]. A DKIM Verifier, while verifying a DKIM-Signature header + field, could be prompted to retrieve a key record of an attacker's + choosing. This threat can be minimized by ensuring that name + servers, including recursive name servers, used by the Verifier + enforce strict checking of "glue" and other additional information in + DNS responses and are therefore not vulnerable to this attack. + +8.6. Replay/Spam Attacks + + In this attack, a spammer sends a piece of spam through an MTA that + signs it, banking on the reputation of the signing domain (e.g., a + large popular mailbox provider) rather than its own, and then re- + sends that message to a large number of intended recipients. The + recipients observe the valid signature from the well-known domain, + elevating their trust in the message and increasing the likelihood of + delivery and presentation to the user. + + Partial solutions to this problem involve the use of reputation + services to convey the fact that the specific email address is being + used for spam and that messages from that Signer are likely to be + spam. This requires a real-time detection mechanism in order to + + + +Crocker, et al. Standards Track [Page 57] + +RFC 6376 DKIM Signatures September 2011 + + + react quickly enough. However, such measures might be prone to + abuse, if, for example, an attacker re-sent a large number of + messages received from a victim in order to make the victim appear to + be a spammer. + + Large Verifiers might be able to detect unusually large volumes of + mails with the same signature in a short time period. Smaller + Verifiers can get substantially the same volume of information via + existing collaborative systems. + +8.7. Limits on Revoking Keys + + When a large domain detects undesirable behavior on the part of one + of its users, it might wish to revoke the key used to sign that + user's messages in order to disavow responsibility for messages that + have not yet been verified or that are the subject of a replay + attack. However, the ability of the domain to do so can be limited + if the same key, for scalability reasons, is used to sign messages + for many other users. Mechanisms for explicitly revoking keys on a + per-address basis have been proposed but require further study as to + their utility and the DNS load they represent. + +8.8. Intentionally Malformed Key Records + + It is possible for an attacker to publish key records in DNS that are + intentionally malformed, with the intent of causing a denial-of- + service attack on a non-robust Verifier implementation. The attacker + could then cause a Verifier to read the malformed key record by + sending a message to one of its users referencing the malformed + record in a (not necessarily valid) signature. Verifiers MUST + thoroughly verify all key records retrieved from the DNS and be + robust against intentionally as well as unintentionally malformed key + records. + +8.9. Intentionally Malformed DKIM-Signature Header Fields + + Verifiers MUST be prepared to receive messages with malformed DKIM- + Signature header fields and thoroughly verify the header field before + depending on any of its contents. + +8.10. Information Leakage + + An attacker could determine when a particular signature was verified + by using a per-message selector and then monitoring their DNS traffic + for the key lookup. This would act as the equivalent of a "web bug" + for verification time rather than the time the message was read. + + + + + +Crocker, et al. Standards Track [Page 58] + +RFC 6376 DKIM Signatures September 2011 + + +8.11. Remote Timing Attacks + + In some cases, it may be possible to extract private keys using a + remote timing attack [BONEH03]. Implementations should consider + obfuscating the timing to prevent such attacks. + +8.12. Reordered Header Fields + + Existing standards allow intermediate MTAs to reorder header fields. + If a Signer signs two or more header fields of the same name, this + can cause spurious verification errors on otherwise legitimate + messages. In particular, Signers that sign any existing DKIM- + Signature fields run the risk of having messages incorrectly fail to + verify. + +8.13. RSA Attacks + + An attacker could create a large RSA signing key with a small + exponent, thus requiring that the verification key have a large + exponent. This will force Verifiers to use considerable computing + resources to verify the signature. Verifiers might avoid this attack + by refusing to verify signatures that reference selectors with public + keys having unreasonable exponents. + + In general, an attacker might try to overwhelm a Verifier by flooding + it with messages requiring verification. This is similar to other + MTA denial-of-service attacks and should be dealt with in a similar + fashion. + +8.14. Inappropriate Signing by Parent Domains + + The trust relationship described in Section 3.10 could conceivably be + used by a parent domain to sign messages with identities in a + subdomain not administratively related to the parent. For example, + the ".com" registry could create messages with signatures using an + "i=" value in the example.com domain. There is no general solution + to this problem, since the administrative cut could occur anywhere in + the domain name. For example, in the domain "example.podunk.ca.us", + there are three administrative cuts (podunk.ca.us, ca.us, and us), + any of which could create messages with an identity in the full + domain. + + INFORMATIVE NOTE: This is considered an acceptable risk for the + same reason that it is acceptable for domain delegation. For + example, in the case above, any of the domains could potentially + simply delegate "example.podunk.ca.us" to a server of their choice + + + + + +Crocker, et al. Standards Track [Page 59] + +RFC 6376 DKIM Signatures September 2011 + + + and completely replace all DNS-served information. Note that a + Verifier MAY ignore signatures that come from an unlikely domain + such as ".com", as discussed in Section 6.1.1. + +8.15. Attacks Involving Extra Header Fields + + Many email components, including MTAs, MSAs, MUAs, and filtering + modules, implement message format checks only loosely. This is done + out of years of industry pressure to be liberal in what is accepted + into the mail stream for the sake of reducing support costs; + improperly formed messages are often silently fixed in transit, + delivered unrepaired, or displayed inappropriately (e.g., by showing + only the first of multiple From: fields). + + Agents that evaluate or apply DKIM output need to be aware that a + DKIM Signer can sign messages that are malformed (e.g., violate + [RFC5322], such as by having multiple instances of a field that is + only permitted once), that become malformed in transit, or that + contain header or body content that is not true or valid. Use of + DKIM on such messages might constitute an attack against a receiver, + especially where additional credence is given to a signed message + without adequate evaluation of the Signer. + + These can represent serious attacks, but they have nothing to do with + DKIM; they are attacks on the recipient or on the wrongly identified + author. + + Moreover, an agent would be incorrect to infer that all instances of + a header field are signed just because one is. + + A genuine signature from the domain under attack can be obtained by + legitimate means, but extra header fields can then be added, either + by interception or by replay. In this scenario, DKIM can aid in + detecting addition of specific fields in transit. This is done by + having the Signer list the field name(s) in the "h=" tag an extra + time (e.g., "h=from:from:..." for a message with one From field), so + that addition of an instance of that field downstream will render the + signature unable to be verified. (See Section 3.5 for details.) + This, in essence, is an explicit indication that the Signer + repudiates responsibility for such a malformed message. + + DKIM signs and validates the data it is told to and works correctly. + So in this case, DKIM has done its job of delivering a validated + domain (the "d=" value) and, given the semantics of a DKIM signature, + essentially the Signer has taken some responsibility for a + problematic message. It is up to the Identity Assessor or some other + + + + + +Crocker, et al. Standards Track [Page 60] + +RFC 6376 DKIM Signatures September 2011 + + + subsequent agent to act on such messages as needed, such as degrading + the trust of the message (or, indeed, of the Signer), warning the + recipient, or even refusing delivery. + + All components of the mail system that perform loose enforcement of + other mail standards will need to revisit that posture when + incorporating DKIM, especially when considering matters of potential + attacks such as those described. + +9. References + +9.1. Normative References + + [FIPS-180-3-2008] + U.S. Department of Commerce, "Secure Hash Standard", FIPS + PUB 180-3, October 2008. + + [ITU-X660-1997] + "Information Technology - ASN.1 encoding rules: + Specification of Basic Encoding Rules (BER), Canonical + Encoding Rules (CER) and Distinguished Encoding Rules + (DER)", 1997. + + [RFC1034] Mockapetris, P., "Domain names - concepts and facilities", + STD 13, RFC 1034, November 1987. + + [RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet Mail + Extensions (MIME) Part One: Format of Internet Message + Bodies", RFC 2045, November 1996. + + [RFC2049] Freed, N. and N. Borenstein, "Multipurpose Internet Mail + Extensions (MIME) Part Five: Conformance Criteria and + Examples", RFC 2049, November 1996. + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, March 1997. + + [RFC3447] Jonsson, J. and B. Kaliski, "Public-Key Cryptography + Standards (PKCS) #1: RSA Cryptography Specifications + Version 2.1", RFC 3447, February 2003. + + [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax + Specifications: ABNF", STD 68, RFC 5234, January 2008. + + [RFC5321] Klensin, J., "Simple Mail Transfer Protocol", RFC 5321, + October 2008. + + + + + +Crocker, et al. Standards Track [Page 61] + +RFC 6376 DKIM Signatures September 2011 + + + [RFC5322] Resnick, P., Ed., "Internet Message Format", RFC 5322, + October 2008. + + [RFC5598] Crocker, D., "Internet Mail Architecture", RFC 5598, + July 2009. + + [RFC5890] Klensin, J., "Internationalized Domain Names for + Applications (IDNA): Definitions and Document Framework", + RFC 5890, August 2010. + +9.2. Informative References + + [BONEH03] "Remote Timing Attacks are Practical", Proceedings 12th + USENIX Security Symposium, 2003. + + [RFC2047] Moore, K., "MIME (Multipurpose Internet Mail Extensions) + Part Three: Message Header Extensions for Non-ASCII Text", + RFC 2047, November 1996. + + [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO + 10646", STD 63, RFC 3629, November 2003. + + [RFC3766] Orman, H. and P. Hoffman, "Determining Strengths For + Public Keys Used For Exchanging Symmetric Keys", BCP 86, + RFC 3766, April 2004. + + [RFC3833] Atkins, D. and R. Austein, "Threat Analysis of the Domain + Name System (DNS)", RFC 3833, August 2004. + + [RFC3864] Klyne, G., Nottingham, M., and J. Mogul, "Registration + Procedures for Message Header Fields", BCP 90, RFC 3864, + September 2004. + + [RFC4033] Arends, R., Austein, R., Larson, M., Massey, D., and S. + Rose, "DNS Security Introduction and Requirements", + RFC 4033, March 2005. + + [RFC4409] Gellens, R. and J. Klensin, "Message Submission for Mail", + RFC 4409, April 2006. + + [RFC4686] Fenton, J., "Analysis of Threats Motivating DomainKeys + Identified Mail (DKIM)", RFC 4686, September 2006. + + [RFC4732] Handley, M., Rescorla, E., and IAB, "Internet Denial-of- + Service Considerations", RFC 4732, December 2006. + + + + + + +Crocker, et al. Standards Track [Page 62] + +RFC 6376 DKIM Signatures September 2011 + + + [RFC4870] Delany, M., "Domain-Based Email Authentication Using + Public Keys Advertised in the DNS (DomainKeys)", RFC 4870, + May 2007. + + [RFC4871] Allman, E., Callas, J., Delany, M., Libbey, M., Fenton, + J., and M. Thomas, "DomainKeys Identified Mail (DKIM) + Signatures", RFC 4871, May 2007. + + [RFC4880] Callas, J., Donnerhacke, L., Finney, H., Shaw, D., and R. + Thayer, "OpenPGP Message Format", RFC 4880, November 2007. + + [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an + IANA Considerations Section in RFCs", BCP 26, RFC 5226, + May 2008. + + [RFC5451] Kucherawy, M., "Message Header Field for Indicating + Message Authentication Status", RFC 5451, April 2009. + + [RFC5585] Hansen, T., Crocker, D., and P. Hallam-Baker, "DomainKeys + Identified Mail (DKIM) Service Overview", RFC 5585, + July 2009. + + [RFC5672] Crocker, D., "RFC 4871 DomainKeys Identified Mail (DKIM) + Signatures -- Update", RFC 5672, August 2009. + + [RFC5751] Ramsdell, B. and S. Turner, "Secure/Multipurpose Internet + Mail Extensions (S/MIME) Version 3.2 Message + Specification", RFC 5751, January 2010. + + [RFC5863] Hansen, T., Siegel, E., Hallam-Baker, P., and D. Crocker, + "DomainKeys Identified Mail (DKIM) Development, + Deployment, and Operations", RFC 5863, May 2010. + + [RFC6377] Kucherawy, M., "DomainKeys Identified Mail (DKIM) and + Mailing Lists", RFC 6377, September 2011. + + + + + + + + + + + + + + + + +Crocker, et al. Standards Track [Page 63] + +RFC 6376 DKIM Signatures September 2011 + + +Appendix A. Example of Use (INFORMATIVE) + + This section shows the complete flow of an email from submission to + final delivery, demonstrating how the various components fit + together. The key used in this example is shown in Appendix C. + +A.1. The User Composes an Email + + From: Joe SixPack <joe@football.example.com> + To: Suzie Q <suzie@shopping.example.net> + Subject: Is dinner ready? + Date: Fri, 11 Jul 2003 21:00:37 -0700 (PDT) + Message-ID: <20030712040037.46341.5F8J@football.example.com> + + Hi. + + We lost the game. Are you hungry yet? + + Joe. + + Figure 1: The User Composes an Email + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Crocker, et al. Standards Track [Page 64] + +RFC 6376 DKIM Signatures September 2011 + + +A.2. The Email is Signed + + This email is signed by the example.com outbound email server and now + looks like this: + + DKIM-Signature: v=1; a=rsa-sha256; s=brisbane; d=example.com; + c=simple/simple; q=dns/txt; i=joe@football.example.com; + h=Received : From : To : Subject : Date : Message-ID; + bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=; + b=AuUoFEfDxTDkHlLXSZEpZj79LICEps6eda7W3deTVFOk4yAUoqOB + 4nujc7YopdG5dWLSdNg6xNAZpOPr+kHxt1IrE+NahM6L/LbvaHut + KVdkLLkpVaVVQPzeRDI009SO2Il5Lu7rDNH6mZckBdrIx0orEtZV + 4bmp/YzhwvcubU4=; + Received: from client1.football.example.com [192.0.2.1] + by submitserver.example.com with SUBMISSION; + Fri, 11 Jul 2003 21:01:54 -0700 (PDT) + From: Joe SixPack <joe@football.example.com> + To: Suzie Q <suzie@shopping.example.net> + Subject: Is dinner ready? + Date: Fri, 11 Jul 2003 21:00:37 -0700 (PDT) + Message-ID: <20030712040037.46341.5F8J@football.example.com> + + Hi. + + We lost the game. Are you hungry yet? + + Joe. + + Figure 2: The Email is Signed + + The signing email server requires access to the private key + associated with the "brisbane" selector to generate this signature. + + + + + + + + + + + + + + + + + + + +Crocker, et al. Standards Track [Page 65] + +RFC 6376 DKIM Signatures September 2011 + + +A.3. The Email Signature is Verified + + The signature is normally verified by an inbound SMTP server or + possibly the final delivery agent. However, intervening MTAs can + also perform this verification if they choose to do so. The + verification process uses the domain "example.com" extracted from the + "d=" tag and the selector "brisbane" from the "s=" tag in the DKIM- + Signature header field to form the DNS DKIM query for: + brisbane._domainkey.example.com + + Signature verification starts with the physically last Received + header field, the From header field, and so forth, in the order + listed in the "h=" tag. Verification follows with a single CRLF + followed by the body (starting with "Hi."). The email is canonically + prepared for verifying with the "simple" method. The result of the + query and subsequent verification of the signature is stored (in this + example) in the X-Authentication-Results header field line. After + successful verification, the email looks like this: + + X-Authentication-Results: shopping.example.net + header.from=joe@football.example.com; dkim=pass + Received: from mout23.football.example.com (192.168.1.1) + by shopping.example.net with SMTP; + Fri, 11 Jul 2003 21:01:59 -0700 (PDT) + DKIM-Signature: v=1; a=rsa-sha256; s=brisbane; d=example.com; + c=simple/simple; q=dns/txt; i=joe@football.example.com; + h=Received : From : To : Subject : Date : Message-ID; + bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=; + b=AuUoFEfDxTDkHlLXSZEpZj79LICEps6eda7W3deTVFOk4yAUoqOB + 4nujc7YopdG5dWLSdNg6xNAZpOPr+kHxt1IrE+NahM6L/LbvaHut + KVdkLLkpVaVVQPzeRDI009SO2Il5Lu7rDNH6mZckBdrIx0orEtZV + 4bmp/YzhwvcubU4=; + Received: from client1.football.example.com [192.0.2.1] + by submitserver.example.com with SUBMISSION; + Fri, 11 Jul 2003 21:01:54 -0700 (PDT) + From: Joe SixPack <joe@football.example.com> + To: Suzie Q <suzie@shopping.example.net> + Subject: Is dinner ready? + Date: Fri, 11 Jul 2003 21:00:37 -0700 (PDT) + Message-ID: <20030712040037.46341.5F8J@football.example.com> + + Hi. + + We lost the game. Are you hungry yet? + + Joe. + + Figure 3: Successful Verification + + + +Crocker, et al. Standards Track [Page 66] + +RFC 6376 DKIM Signatures September 2011 + + +Appendix B. Usage Examples (INFORMATIVE) + + DKIM signing and validating can be used in different ways, for + different operational scenarios. This Appendix discusses some common + examples. + + NOTE: Descriptions in this Appendix are for informational purposes + only. They describe various ways that DKIM can be used, given + particular constraints and needs. In no case are these examples + intended to be taken as providing explanation or guidance + concerning DKIM specification details when creating an + implementation. + +B.1. Alternate Submission Scenarios + + In the most simple scenario, a user's MUA, MSA, and Internet + (boundary) MTA are all within the same administrative environment, + using the same domain name. Therefore, all of the components + involved in submission and initial transfer are related. However, it + is common for two or more of the components to be under independent + administrative control. This creates challenges for choosing and + administering the domain name to use for signing and for its + relationship to common email identity header fields. + +B.1.1. Delegated Business Functions + + Some organizations assign specific business functions to discrete + groups, inside or outside the organization. The goal, then, is to + authorize that group to sign some mail but to constrain what + signatures they can generate. DKIM selectors (the "s=" signature + tag) facilitate this kind of restricted authorization. Examples of + these outsourced business functions are legitimate email marketing + providers and corporate benefits providers. + + Here, the delegated group needs to be able to send messages that are + signed, using the email domain of the client company. At the same + time, the client often is reluctant to register a key for the + provider that grants the ability to send messages for arbitrary + addresses in the domain. + + There are multiple ways to administer these usage scenarios. In one + case, the client organization provides all of the public query + service (for example, DNS) administration, and in another, it uses + DNS delegation to enable all ongoing administration of the DKIM key + record by the delegated group. + + + + + + +Crocker, et al. Standards Track [Page 67] + +RFC 6376 DKIM Signatures September 2011 + + + If the client organization retains responsibility for all of the DNS + administration, the outsourcing company can generate a key pair, + supplying the public key to the client company, which then registers + it in the query service using a unique selector. The client company + retains control over the use of the delegated key because it retains + the ability to revoke the key at any time. + + If the client wants the delegated group to do the DNS administration, + it can have the domain name that is specified with the selector point + to the provider's DNS server. The provider then creates and + maintains all of the DKIM signature information for that selector. + Hence, the client cannot provide constraints on the local-part of + addresses that get signed, but it can revoke the provider's signing + rights by removing the DNS delegation record. + +B.1.2. PDAs and Similar Devices + + PDAs demonstrate the need for using multiple keys per domain. + Suppose that John Doe wants to be able to send messages using his + corporate email address, jdoe@example.com, and his email device does + not have the ability to make a Virtual Private Network (VPN) + connection to the corporate network, either because the device is + limited or because there are restrictions enforced by his Internet + access provider. If the device is equipped with a private key + registered for jdoe@example.com by the administrator of the + example.com domain and appropriate software to sign messages, John + could sign the message on the device itself before transmission + through the outgoing network of the access service provider. + +B.1.3. Roaming Users + + Roaming users often find themselves in circumstances where it is + convenient or necessary to use an SMTP server other than their home + server; examples are conferences and many hotels. In such + circumstances, a signature that is added by the submission service + will use an identity that is different from the user's home system. + + Ideally, roaming users would connect back to their home server using + either a VPN or a SUBMISSION server running with SMTP AUTHentication + on port 587. If the signing can be performed on the roaming user's + laptop, then they can sign before submission, although the risk of + further modification is high. If neither of these are possible, + these roaming users will not be able to send mail signed using their + own domain key. + + + + + + + +Crocker, et al. Standards Track [Page 68] + +RFC 6376 DKIM Signatures September 2011 + + +B.1.4. Independent (Kiosk) Message Submission + + Stand-alone services, such as walk-up kiosks and web-based + information services, have no enduring email service relationship + with the user, but users occasionally request that mail be sent on + their behalf. For example, a website providing news often allows the + reader to forward a copy of the article to a friend. This is + typically done using the reader's own email address, to indicate who + the author is. This is sometimes referred to as the "Evite" problem, + named after the website of the same name that allows a user to send + invitations to friends. + + A common way this is handled is to continue to put the reader's email + address in the From header field of the message but put an address + owned by the email posting site into the Sender header field. The + posting site can then sign the message, using the domain that is in + the Sender field. This provides useful information to the receiving + email site, which is able to correlate the signing domain with the + initial submission email role. + + Receiving sites often wish to provide their end users with + information about mail that is mediated in this fashion. Although + the real efficacy of different approaches is a subject for human + factors usability research, one technique that is used is for the + verifying system to rewrite the From header field to indicate the + address that was verified, for example: From: John Doe via + news@news-site.example <jdoe@example.com>. (Note that such rewriting + will break a signature, unless it is done after the verification pass + is complete.) + +B.2. Alternate Delivery Scenarios + + Email is often received at a mailbox that has an address different + from the one used during initial submission. In these cases, an + intermediary mechanism operates at the address originally used, and + it then passes the message on to the final destination. This + mediation process presents some challenges for DKIM signatures. + +B.2.1. Affinity Addresses + + "Affinity addresses" allow a user to have an email address that + remains stable, even as the user moves among different email + providers. They are typically associated with college alumni + associations, professional organizations, and recreational + organizations with which they expect to have a long-term + relationship. These domains usually provide forwarding of incoming + email, and they often have an associated Web application that + authenticates the user and allows the forwarding address to be + + + +Crocker, et al. Standards Track [Page 69] + +RFC 6376 DKIM Signatures September 2011 + + + changed. However, these services usually depend on users sending + outgoing messages through their own service provider's MTAs. Hence, + mail that is signed with the domain of the affinity address is not + signed by an entity that is administered by the organization owning + that domain. + + With DKIM, affinity domains could use the Web application to allow + users to register per-user keys to be used to sign messages on behalf + of their affinity address. The user would take away the secret half + of the key pair for signing, and the affinity domain would publish + the public half in DNS for access by Verifiers. + + This is another application that takes advantage of user-level + keying, and domains used for affinity addresses would typically have + a very large number of user-level keys. Alternatively, the affinity + domain could handle outgoing mail, operating a mail submission agent + that authenticates users before accepting and signing messages for + them. This is, of course, dependent on the user's service provider + not blocking the relevant TCP ports used for mail submission. + +B.2.2. Simple Address Aliasing (.forward) + + In some cases, a recipient is allowed to configure an email address + to cause automatic redirection of email messages from the original + address to another, such as through the use of a Unix .forward file. + In this case, messages are typically redirected by the mail handling + service of the recipient's domain, without modification, except for + the addition of a Received header field to the message and a change + in the envelope recipient address. In this case, the recipient at + the final address' mailbox is likely to be able to verify the + original signature since the signed content has not changed, and DKIM + is able to validate the message signature. + +B.2.3. Mailing Lists and Re-Posters + + There is a wide range of behaviors in services that take delivery of + a message and then resubmit it. A primary example is with mailing + lists (collectively called "forwarders" below), ranging from those + that make no modification to the message itself, other than to add a + Received header field and change the envelope information, to those + that add header fields, change the Subject header field, add content + to the body (typically at the end), or reformat the body in some + manner. The simple ones produce messages that are quite similar to + the automated alias services. More elaborate systems essentially + create a new message. + + + + + + +Crocker, et al. Standards Track [Page 70] + +RFC 6376 DKIM Signatures September 2011 + + + A Forwarder that does not modify the body or signed header fields of + a message is likely to maintain the validity of the existing + signature. It also could choose to add its own signature to the + message. + + Forwarders that modify a message in a way that could make an existing + signature invalid are particularly good candidates for adding their + own signatures (e.g., mailing-list-name@example.net). Since + (re-)signing is taking responsibility for the content of the message, + these signing forwarders are likely to be selective and forward or + re-sign a message only if it is received with a valid signature or if + they have some other basis for knowing that the message is not + spoofed. + + A common practice among systems that are primarily redistributors of + mail is to add a Sender header field to the message to identify the + address being used to sign the message. This practice will remove + any preexisting Sender header field as required by [RFC5322]. The + forwarder applies a new DKIM-Signature header field with the + signature, public key, and related information of the forwarder. + + See [RFC6377] for additional related topics and discussion. + +Appendix C. Creating a Public Key (INFORMATIVE) + + The default signature is an RSA-signed SHA-256 digest of the complete + email. For ease of explanation, the openssl command is used to + describe the mechanism by which keys and signatures are managed. One + way to generate a 1024-bit, unencrypted private key suitable for DKIM + is to use openssl like this: + + $ openssl genrsa -out rsa.private 1024 + + For increased security, the "-passin" parameter can also be added to + encrypt the private key. Use of this parameter will require entering + a password for several of the following steps. Servers may prefer to + use hardware cryptographic support. + + The "genrsa" step results in the file rsa.private containing the key + information similar to this: + + + + + + + + + + + +Crocker, et al. Standards Track [Page 71] + +RFC 6376 DKIM Signatures September 2011 + + + -----BEGIN RSA PRIVATE KEY----- + MIICXwIBAAKBgQDwIRP/UC3SBsEmGqZ9ZJW3/DkMoGeLnQg1fWn7/zYtIxN2SnFC + jxOCKG9v3b4jYfcTNh5ijSsq631uBItLa7od+v/RtdC2UzJ1lWT947qR+Rcac2gb + to/NMqJ0fzfVjH4OuKhitdY9tf6mcwGjaNBcWToIMmPSPDdQPNUYckcQ2QIDAQAB + AoGBALmn+XwWk7akvkUlqb+dOxyLB9i5VBVfje89Teolwc9YJT36BGN/l4e0l6QX + /1//6DWUTB3KI6wFcm7TWJcxbS0tcKZX7FsJvUz1SbQnkS54DJck1EZO/BLa5ckJ + gAYIaqlA9C0ZwM6i58lLlPadX/rtHb7pWzeNcZHjKrjM461ZAkEA+itss2nRlmyO + n1/5yDyCluST4dQfO8kAB3toSEVc7DeFeDhnC1mZdjASZNvdHS4gbLIA1hUGEF9m + 3hKsGUMMPwJBAPW5v/U+AWTADFCS22t72NUurgzeAbzb1HWMqO4y4+9Hpjk5wvL/ + eVYizyuce3/fGke7aRYw/ADKygMJdW8H/OcCQQDz5OQb4j2QDpPZc0Nc4QlbvMsj + 7p7otWRO5xRa6SzXqqV3+F0VpqvDmshEBkoCydaYwc2o6WQ5EBmExeV8124XAkEA + qZzGsIxVP+sEVRWZmW6KNFSdVUpk3qzK0Tz/WjQMe5z0UunY9Ax9/4PVhp/j61bf + eAYXunajbBSOLlx4D+TunwJBANkPI5S9iylsbLs6NkaMHV6k5ioHBBmgCak95JGX + GMot/L2x0IYyMLAz6oLWh2hm7zwtb0CgOrPo1ke44hFYnfc= + -----END RSA PRIVATE KEY----- + + To extract the public-key component from the private key, use openssl + like this: + + $ openssl rsa -in rsa.private -out rsa.public -pubout -outform PEM + + This results in the file rsa.public containing the key information + similar to this: + + -----BEGIN PUBLIC KEY----- + MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDwIRP/UC3SBsEmGqZ9ZJW3/DkM + oGeLnQg1fWn7/zYtIxN2SnFCjxOCKG9v3b4jYfcTNh5ijSsq631uBItLa7od+v/R + tdC2UzJ1lWT947qR+Rcac2gbto/NMqJ0fzfVjH4OuKhitdY9tf6mcwGjaNBcWToI + MmPSPDdQPNUYckcQ2QIDAQAB + -----END PUBLIC KEY----- + + This public-key data (without the BEGIN and END tags) is placed in + the DNS: + + $ORIGIN _domainkey.example.org. + brisbane IN TXT ("v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQ" + "KBgQDwIRP/UC3SBsEmGqZ9ZJW3/DkMoGeLnQg1fWn7/zYt" + "IxN2SnFCjxOCKG9v3b4jYfcTNh5ijSsq631uBItLa7od+v" + "/RtdC2UzJ1lWT947qR+Rcac2gbto/NMqJ0fzfVjH4OuKhi" + "tdY9tf6mcwGjaNBcWToIMmPSPDdQPNUYckcQ2QIDAQAB") + +C.1. Compatibility with DomainKeys Key Records + + DKIM key records were designed to be backward compatible in many + cases with key records used by DomainKeys [RFC4870] (sometimes + referred to as "selector records" in the DomainKeys context). One + area of incompatibility warrants particular attention. The "g=" tag + value may be used in DomainKeys and [RFC4871] key records to provide + + + +Crocker, et al. Standards Track [Page 72] + +RFC 6376 DKIM Signatures September 2011 + + + finer granularity of the validity of the key record to a specific + local-part. A null "g=" value in DomainKeys is valid for all + addresses in the domain. This differs from the usage in the original + DKIM specification ([RFC4871]), where a null "g=" value is not valid + for any address. In particular, see the example public-key record in + Section 3.2.3 of [RFC4870]. + +C.2. RFC 4871 Compatibility + + Although the "g=" tag has been deprecated in this version of the DKIM + specification (and thus MUST now be ignored), Signers are advised not + to include the "g=" tag in key records because some [RFC4871]- + compliant Verifiers will be in use for a considerable period to come. + +Appendix D. MUA Considerations (INFORMATIVE) + + When a DKIM signature is verified, the processing system sometimes + makes the result available to the recipient user's MUA. How to + present this information to users in a way that helps them is a + matter of continuing human factors usability research. The tendency + is to have the MUA highlight the SDID, in an attempt to show the user + the identity that is claiming responsibility for the message. An MUA + might do this with visual cues such as graphics, might include the + address in an alternate view, or might even rewrite the original From + address using the verified information. Some MUAs might indicate + which header fields were protected by the validated DKIM signature. + This could be done with a positive indication on the signed header + fields, with a negative indication on the unsigned header fields, by + visually hiding the unsigned header fields, or some combination of + these. If an MUA uses visual indications for signed header fields, + the MUA probably needs to be careful not to display unsigned header + fields in a way that might be construed by the end user as having + been signed. If the message has an "l=" tag whose value does not + extend to the end of the message, the MUA might also hide or mark the + portion of the message body that was not signed. + + The aforementioned information is not intended to be exhaustive. The + MUA can choose to highlight, accentuate, hide, or otherwise display + any other information that may, in the opinion of the MUA author, be + deemed important to the end user. + +Appendix E. Changes since RFC 4871 + + o Abstract and introduction refined based on accumulated experience. + + o Various references updated. + + + + + +Crocker, et al. Standards Track [Page 73] + +RFC 6376 DKIM Signatures September 2011 + + + o Several errata resolved (see http://www.rfc-editor.org/): + + * 1376 applied + + * 1377 applied + + * 1378 applied + + * 1379 applied + + * 1380 applied + + * 1381 applied + + * 1382 applied + + * 1383 discarded (no longer applies) + + * 1384 applied + + * 1386 applied + + * 1461 applied + + * 1487 applied + + * 1532 applied + + * 1596 applied + + o Introductory section enumerating relevant architectural documents + added. + + o Introductory section briefly discussing the matter of data + integrity added. + + o Allowed tolerance of some clock drift. + + o Dropped "g=" tag from key records. The implementation report + indicates that it is not in use. + + o Removed errant note about wildcards in the DNS. + + o Removed SMTP-specific advice in most places. + + o Reduced (non-normative) recommended signature content list, and + reworked the text in that section. + + + + +Crocker, et al. Standards Track [Page 74] + +RFC 6376 DKIM Signatures September 2011 + + + o Clarified signature generation algorithm by rewriting its pseudo- + code. + + o Numerous terminology subsections added, imported from [RFC5672]. + Also, began using these terms throughout the document (e.g., SDID, + AUID). + + o Sections added that specify input and output requirements. Input + requirements address a security concern raised by the working + group (see also new sections in Security Considerations). Output + requirements are imported from [RFC5672]. + + o Appendix subsection added discussing compatibility with DomainKeys + ([RFC4870]) records. + + o Referred to [RFC5451] as an example method of communicating the + results of DKIM verification. + + o Removed advice about possible uses of the "l=" signature tag. + + o IANA registry updated. + + o Added two new Security Considerations sections talking about + malformed message attacks. + + o Various copy editing. + +Appendix F. Acknowledgments + + The previous IETF version of DKIM [RFC4871] was edited by Eric + Allman, Jon Callas, Mark Delany, Miles Libbey, Jim Fenton, and + Michael Thomas. + + That specification was the result of an extended collaborative + effort, including participation by Russ Allbery, Edwin Aoki, Claus + Assmann, Steve Atkins, Rob Austein, Fred Baker, Mark Baugher, Steve + Bellovin, Nathaniel Borenstein, Dave Crocker, Michael Cudahy, Dennis + Dayman, Jutta Degener, Frank Ellermann, Patrik Faeltstroem, Mark + Fanto, Stephen Farrell, Duncan Findlay, Elliot Gillum, Olafur + Gudmundsson, Phillip Hallam-Baker, Tony Hansen, Sam Hartman, Arvel + Hathcock, Amir Herzberg, Paul Hoffman, Russ Housley, Craig Hughes, + Cullen Jennings, Don Johnsen, Harry Katz, Murray S. Kucherawy, Barry + Leiba, John Levine, Charles Lindsey, Simon Longsdale, David Margrave, + Justin Mason, David Mayne, Thierry Moreau, Steve Murphy, Russell + Nelson, Dave Oran, Doug Otis, Shamim Pirzada, Juan Altmayer Pizzorno, + Sanjay Pol, Blake Ramsdell, Christian Renaud, Scott Renfro, Neil + + + + + +Crocker, et al. Standards Track [Page 75] + +RFC 6376 DKIM Signatures September 2011 + + + Rerup, Eric Rescorla, Dave Rossetti, Hector Santos, Jim Schaad, the + Spamhaus.org team, Malte S. Stretz, Robert Sanders, Rand Wacker, Sam + Weiler, and Dan Wing. + + The earlier DomainKeys was a primary source from which DKIM was + derived. Further information about DomainKeys is at [RFC4870]. + + This revision received contributions from Steve Atkins, Mark Delany, + J.D. Falk, Jim Fenton, Michael Hammer, Barry Leiba, John Levine, + Charles Lindsey, Jeff Macdonald, Franck Martin, Brett McDowell, Doug + Otis, Bill Oxley, Hector Santos, Rolf Sonneveld, Michael Thomas, and + Alessandro Vesely. + +Authors' Addresses + + Dave Crocker (editor) + Brandenburg InternetWorking + 675 Spruce Dr. + Sunnyvale, CA 94086 + USA + + Phone: +1.408.246.8253 + EMail: dcrocker@bbiw.net + URI: http://bbiw.net + + + Tony Hansen (editor) + AT&T Laboratories + 200 Laurel Ave. South + Middletown, NJ 07748 + USA + + EMail: tony+dkimsig@maillennium.att.com + + + Murray S. Kucherawy (editor) + Cloudmark + 128 King St., 2nd Floor + San Francisco, CA 94107 + USA + + EMail: msk@cloudmark.com + + + + + + + + + +Crocker, et al. Standards Track [Page 76] + |