diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
commit | 4bfd864f10b68b71482b35c818559068ef8d5797 (patch) | |
tree | e3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc4870.txt | |
parent | ea76e11061bda059ae9f9ad130a9895cc85607db (diff) |
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc4870.txt')
-rw-r--r-- | doc/rfc/rfc4870.txt | 2299 |
1 files changed, 2299 insertions, 0 deletions
diff --git a/doc/rfc/rfc4870.txt b/doc/rfc/rfc4870.txt new file mode 100644 index 0000000..7182f12 --- /dev/null +++ b/doc/rfc/rfc4870.txt @@ -0,0 +1,2299 @@ + + + + + + +Network Working Group M. Delany +Request for Comments: 4870 Yahoo! Inc +Obsoleted By: 4871 May 2007 +Category: Historic + + + Domain-Based Email Authentication Using Public Keys + Advertised in the DNS (DomainKeys) + +Status of This Memo + + This memo defines a Historic Document for the Internet community. It + does not specify an Internet standard of any kind. Distribution of + this memo is unlimited. + +Copyright Notice + + Copyright (C) The IETF Trust (2007). + +Abstract + + "DomainKeys" creates a domain-level authentication framework for + email by using public key technology and the DNS to prove the + provenance and contents of an email. + + This document defines a framework for digitally signing email on a + per-domain basis. The ultimate goal of this framework is to + unequivocally prove and protect identity while retaining the + semantics of Internet email as it is known today. + + Proof and protection of email identity may assist in the global + control of "spam" and "phishing". + + + + + + + + + + + + + + + + + + + +Delany Historic [Page 1] + +RFC 4870 DomainKeys May 2007 + + +Table of Contents + + 1. Introduction ....................................................3 + 1.1. Lack of Authentication Is Damaging Internet Email ..........3 + 1.2. Digitally Signing Email Creates Credible Domain + Authentication .............................................4 + 1.3. Public Keys in the DNS .....................................4 + 1.4. Initial Deployment Is Likely at the Border MTA .............5 + 1.5. Conveying Verification Results to MUAs .....................5 + 1.6. Technical Minutiae Are Not Completely Covered ..............5 + 1.7. Motivation .................................................6 + 1.8. Benefits of DomainKeys .....................................6 + 1.9. Definitions ................................................7 + 1.10. Requirements Notation .....................................8 + 2. DomainKeys Overview .............................................8 + 3. DomainKeys Detailed View ........................................8 + 3.1. Determining the Sending Address of an Email ................9 + 3.2. Retrieving the Public Key Given the Sending Domain ........10 + 3.2.1. Introducing "selectors" ............................10 + 3.2.2. Public Key Signing and Verification Algorithm ......11 + 3.2.3. Public key Representation in the DNS ...............13 + 3.2.4. Key Sizes ..........................................14 + 3.3. Storing the Signature in the Email Header .................15 + 3.4. Preparation of Email for Transit and Signing ..............17 + 3.4.1. Preparation for Transit ............................18 + 3.4.2. Canonicalization for Signing .......................18 + 3.4.2.1. The "simple" Canonicalization Algorithm ...19 + 3.4.2.2. The "nofws" Canonicalization Algorithm ....19 + 3.5. The Signing Process .......................................20 + 3.5.1. Identifying the Sending Domain .....................20 + 3.5.2. Determining Whether an Email Should Be Signed ......21 + 3.5.3. Selecting a Private Key and Corresponding + Selector Information ...............................21 + 3.5.4. Calculating the Signature Value ....................21 + 3.5.5. Prepending the "DomainKey-Signature:" Header .......21 + 3.6. Policy Statement of Sending Domain ........................22 + 3.7. The Verification Process ..................................23 + 3.7.1. Presumption that Headers Are Not Reordered .........24 + 3.7.2. Verification Should Render a Binary Result .........24 + 3.7.3. Selecting the Most Appropriate + "DomainKey-Signature:" Header ......................24 + 3.7.4. Retrieve the Public Key Based on the + Signature Information ..............................26 + 3.7.5. Verify the Signature ...............................27 + 3.7.6. Retrieving Sending Domain Policy ...................27 + 3.7.7. Applying Local Policy ..............................27 + 3.8. Conveying Verification Results to MUAs ....................27 + + + + +Delany Historic [Page 2] + +RFC 4870 DomainKeys May 2007 + + + 4. Example of Use .................................................29 + 4.1. The User Composes an Email ................................29 + 4.2. The Email Is Signed .......................................29 + 4.3. The Email Signature Is Verified ...........................30 + 5. Association with a Certificate Authority .......................31 + 5.1. The "DomainKey-X509:" Header ..............................31 + 6. Topics for Discussion ..........................................32 + 6.1. The Benefits of Selectors .................................32 + 6.2. Canonicalization of Email .................................33 + 6.3. Mailing Lists .............................................33 + 6.4. Roving Users ..............................................33 + 7. Security Considerations ........................................34 + 7.1. DNS .......................................................34 + 7.1.1. The DNS Is Not Currently Secure ....................34 + 7.1.2. DomainKeys Creates Additional DNS Load .............35 + 7.2. Key Management ............................................35 + 7.3. Implementation Risks ......................................35 + 7.4. Privacy Assumptions with Forwarding Addresses .............35 + 7.5. Cryptographic Processing Is Computationally Intensive .....36 + 8. The Trial ......................................................36 + 8.1. Goals .....................................................36 + 8.2. Results of Trial ..........................................37 + 9. Note to Implementors Regarding TXT Records .....................37 + 10. References ....................................................37 + 10.1. Normative References .....................................37 + 10.2. Informative References ...................................38 + Appendix A - Syntax Rules for the Tag=Value Format .............39 + Acknowledgments ................................................40 + +1. Introduction + + This document proposes an authentication framework for email that + stores public keys in the DNS and digitally signs email on a domain + basis. Separate documents discuss how this framework can be extended + to validate the delivery path of email as well as facilitate per-user + authentication. + + The DomainKeys specification was a primary source from which the + DomainKeys Identified Mail [DKIM] specification has been derived. + The purpose in submitting this document is as an historical reference + for deployed implementations written prior to the DKIM specification. + +1.1. Lack of Authentication Is Damaging Internet Email + + Authentication of email is not currently widespread. Not only is it + difficult to prove your own identity, it is impossible to prevent + others from abusing your identity. + + + + +Delany Historic [Page 3] + +RFC 4870 DomainKeys May 2007 + + + While most email exchanges do not intrinsically need authentication + beyond context, it is the rampant abuse of identity by "spammers", + "phishers", and their criminal ilk that makes proof necessary. In + other words, authentication is as much about protection as proof. + + Importantly, the inability to authenticate email effectively + delegates much of the control of the disposition of inbound email to + the sender, since senders can trivially assume any email address. + Creating email authentication is the first step to returning + dispositional control of email to the recipient. + + For the purposes of this document, authentication is seen from a user + perspective, and is intended to answer the question "who sent this + email?" where "who" is the email address the recipient sees and "this + email" is the content that the recipient sees. + +1.2. Digitally Signing Email Creates Credible Domain Authentication + + DomainKeys combines public key cryptography and the DNS to provide + credible domain-level authentication for email. + + When an email claims to originate from a certain domain, DomainKeys + provides a mechanism by which the recipient system can credibly + determine that the email did in fact originate from a person or + system authorized to send email for that domain. + + The authentication provided by DomainKeys works in a number of + scenarios in which other authentication systems fail or create + complex operational requirements. These include the following: + + o forwarded email + + o distributed sending systems + + o authorized third-party sending + + This base definition of DomainKeys is intended to primarily enable + domain-level authenticity. Whether a given message is really sent by + the purported user within the domain is outside the scope of the base + definition. Having said that, this specification includes the + possibility that some domains may wish to delegate fine-grained + authentication to individual users. + +1.3. Public Keys in the DNS + + DomainKeys differs from traditional hierarchical public key systems + in that it leverages the DNS for public key management, placing + complete and direct control of key generation and management with the + + + +Delany Historic [Page 4] + +RFC 4870 DomainKeys May 2007 + + + owner of the domain. That is, if you have control over the DNS for a + given domain, you have control over your DomainKeys for that domain. + + The DNS is proposed as the initial mechanism for publishing public + keys. DomainKeys is specifically designed to be extensible to other + key-fetching services as they become available. + +1.4. Initial Deployment Is Likely at the Border MTA + + For practical reasons, it is expected that initial implementations of + DomainKeys will be deployed on Mail Transfer Agents (MTAs) that + accept or relay email across administrative or organizational + boundaries. There are numerous advantages to deployment at the + border MTA, including: + + o a reduction in the number of MTAs that have to be changed to + support an implementation of DomainKeys + + o a reduction in the number of MTAs involved in transmitting the + email between a signing system and a verifying system, thus + reducing the number of places that can make accidental changes + to the contents + + o removing the need to implement DomainKeys within an internal + email network. + + However, there is no necessity to deploy DomainKeys at the border as + signing and verifying can effectively occur anywhere from the border + MTA right back to the Mail User Agent (MUA). In particular, the best + place to sign an email for many domains is likely to be at the point + of SUBMISSION where the sender is often authenticated through SMTP + AUTH or other identifying mechanisms. + +1.5. Conveying Verification Results to MUAs + + It follows that testing the authenticity of an email results in some + action based on the results of the test. Oftentimes, the action is + to notify the MUA in some way -- typically via a header line. + + The "Domainkey-Status:" header is defined in this specification for + recording authentication results in the email. + +1.6. Technical Minutiae Are Not Completely Covered + + The intent of this specification is to communicate the fundamental + characteristics of DomainKeys for an implementor. However, some + aspects are derived from the functionality of the openssl command + [OPENSSL] and, rather than duplicate that documentation, implementors + + + +Delany Historic [Page 5] + +RFC 4870 DomainKeys May 2007 + + + are expected to understand the mechanics of the openssl command, + sufficient to complete the implementation. + +1.7. Motivation + + The motivation for DomainKeys is to define a simple, cheap, and + "sufficiently effective" mechanism by which domain owners can control + who has authority to send email using their domain. To this end, the + designers of DomainKeys set out to build a framework that: + + o is transparent and compatible with the existing email + infrastructure + + o requires no new infrastructure + + o can be implemented independently of clients in order to reduce + deployment time + + o does not require the use of a central certificate authority + that might impose fees for certificates or introduce delays to + deployment + + o can be deployed incrementally + + While we believe that DomainKeys meets these criteria, it is by no + means a perfect solution. The current Internet imposes considerable + compromises on any similar scheme, and readers should be careful not + to misinterpret the information provided in this document to imply + that DomainKeys makes stronger credibility statements than it is able + to do. + +1.8. Benefits of DomainKeys + + As the reader will discover, DomainKeys is solely an authentication + system. It is not a magic bullet for spam, nor is it an + authorization system, a reputation system, a certification system, or + a trust system. + + However, a strong authentication system such as DomainKeys creates an + unimpeachable framework within which comprehensive authorization + systems, reputations systems, and their ilk can be developed. + + + + + + + + + + +Delany Historic [Page 6] + +RFC 4870 DomainKeys May 2007 + + +1.9. Definitions + + With reference to the following sample email: + + Line Data + Number Bytes Content + ---- --- -------------------------------------------- + 01 46 From: "Joe SixPack" <joe@football.example.com> + 02 40 To: "Suzie Q" <suzie@shopping.example.net> + 03 25 Subject: Is dinner ready? + 04 43 Date: Fri, 11 Jul 2003 21:00:37 -0700 (PDT) + 05 40 Comment: This comment has a continuation + 06 51 because this line begins with folding white space + 07 60 Message-ID: <20030712040037.46341@football.example.com> + 08 00 + 09 03 Hi. + 10 00 + 11 37 We lost the game. Are you hungry yet? + 12 00 + 13 04 Joe. + 14 00 + 15 00 + + Line 01 is the first line of the email and the first line of the + headers. + + Lines 05 and 06 constitute the "Comment:" header. + + Line 06 is a continuation header line. + + Line 07 is the last line of the headers. + + Line 08 is the empty line that separates the header from the body. + + Line 09 is the first line of the body. + + Lines 10, 12, 14, and 15 are empty lines. + + Line 13 is the last non-empty line of the email. + + Line 15 is the last line of the body and the last line of the email. + + Lines 01 to 15 constitute the complete email. + + Line 01 is earlier than line 02, and line 02 is later than line 01. + + + + + + +Delany Historic [Page 7] + +RFC 4870 DomainKeys May 2007 + + +1.10. Requirements Notation + + This document occasionally uses terms that appear in capital letters. + When the terms "MUST", "SHOULD", "RECOMMENDED", "MUST NOT", "SHOULD + NOT", and "MAY" appear capitalized, they are being used to indicate + particular requirements of this specification. A discussion of the + meanings of these terms appears in [RFC2119]. + +2. DomainKeys Overview + + Under DomainKeys, a domain owner generates one or more private/public + key pairs that will be used to sign messages originating from that + domain. The domain owner places the public key in his domain + namespace (i.e., in a DNS record associated with that domain), and + makes the private key available to the outbound email system. When + an email is submitted by an authorized user of that domain, the email + system uses the private key to digitally sign the email associated + with the sending domain. The signature is added as a header to the + email, and the message is transferred to its recipients in the usual + way. + + When a message is received with a DomainKey signature header, the + receiving system can verify the signature as follows: + + 1. Extract the signature and claimed sending domain from the + email. + + 2. Fetch the public key from the claimed sending domain namespace. + + 3. Use public key to determine whether the signature of the email + has been generated with the corresponding private key, and thus + whether the email was sent with the authority of the claimed + sending domain. + + In the event that an email arrives without a signature or when the + signature verification fails, the receiving system retrieves the + policy of the claimed sending domain to ascertain the preferred + disposition of such email. + + Armed with this information, the recipient system can apply local + policy based on the results of the signature test. + +3. DomainKeys Detailed View + + This section discusses the specifics of DomainKeys that are needed to + create interoperable implementations. This section answers the + following questions: + + + + +Delany Historic [Page 8] + +RFC 4870 DomainKeys May 2007 + + + Given an email, how is the sending domain determined? + + How is the public key retrieved for a sending domain? + + As email transits the email system, it can potentially go through + a number of changes. Which parts of the email are included in the + signature and how are they protected from such transformations? + + How is the signature represented in the email? + + If a signature is not present, or a verification fails, how does + the recipient determine the policy intent of the sending domain? + + Finally, on verifying the authenticity of an email, how is that + result conveyed to participating MUAs? + + While there are many alternative design choices, most lead to + comparable functionality. The overriding selection criteria used to + choose among the alternatives are as follows: + + o use deployed technology whenever possible + + o prefer ease of implementation + + o avoid trading risk for excessive flexibility or + interoperability + + o include basic flexibility + + Adherence to these criteria implies that some existing email + implementations will require changes to participate in DomainKeys. + Ultimately, some hard choices need to be made regarding which + requirements are more important. + +3.1. Determining the Sending Address of an Email + + The goal of DomainKeys is to give the recipient confidence that the + email originated from the claimed sender. As with much of Internet + email, agreement over what constitutes the "sender" is no easy + matter. Forwarding systems and mailing lists add serious + complications to an overtly simple question. From the point of view + of the recipient, the authenticity claim should be directed at the + domain most visible to the recipient. + + In the first instance, the most visible address is clearly the RFC + 2822 "From:" address [RFC2822]. Therefore, a conforming email MUST + contain a single "From:" header from which an email address with a + domain name can be extracted. + + + +Delany Historic [Page 9] + +RFC 4870 DomainKeys May 2007 + + + A conforming email MAY contain a single RFC 2822 "Sender:" header + from which an email address with a domain name can be extracted. + + If the email has a valid "From:" and a valid "Sender:" header, then + the signer MUST use the sending address in the "Sender:" header. + + If the email has a valid "From:" and no "Sender:" header, then the + signer MUST use the first sending address in the "From:" header. + + In all other cases, a signer MUST NOT sign the email. Implementors + should note that an email with a "Sender:" header and no "From:" + header MUST NOT be signed. + + The domain name in the sending address constitutes the "sending + domain". + +3.2. Retrieving the Public Key Given the Sending Domain + + To avoid namespace conflicts, it is proposed that the DNS namespace + "_domainkey." be reserved within the sending domain for storing + public keys, e.g., if the sending domain is example.net, then the + public keys for that domain are stored in the _domainkey.example.net + namespace. + +3.2.1. Introducing "selectors" + + To support multiple concurrent public keys per sending domain, the + DNS namespace is further subdivided with "selectors". Selectors are + arbitrary names below the "_domainkey." namespace. A selector value + and length MUST be legal in the DNS namespace and in email headers + with the additional provision that they cannot contain a semicolon. + + Examples of namespaces using selectors are as follows: + + "coolumbeach._domainkey.example.net" + "sebastopol._domainkey.example.net" + "reykjavik._domainkey.example.net" + "default._domainkey.example.net" + + and + + "2005.pao._domainkey.example.net" + "2005.sql._domainkey.example.net" + "2005.rhv._domainkey.example.net" + + Periods are allowed in selectors and are to be treated as component + separators. In the case of DNS queries, that means the period + defines subdomain boundaries. + + + +Delany Historic [Page 10] + +RFC 4870 DomainKeys May 2007 + + + 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 may 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 + "2005" to a public key associated with selector "2006", it merely + makes sure that both public keys are advertised in the DNS + 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 + "2006" private key. At the end of the transition period, the "2005" + public key is removed from the DNS. + + 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 make the + decision as to whether to make this selector associated directly with + the user name or make it some unassociated random value, such as the + fingerprint of the public key. + +3.2.2. Public Key Signing and Verification Algorithm + + The default signature is an RSA signed SHA1 digest of the complete + email. + + For ease of explanation, the openssl command is used throughout this + document to describe the mechanism by which keys and signatures are + managed. + + One way to generate a 768-bit private key suitable for DomainKeys is + to use openssl like this: + + $ openssl genrsa -out rsa.private 768 + + + + + + + + + + + + + +Delany Historic [Page 11] + +RFC 4870 DomainKeys May 2007 + + + which results in the file rsa.private containing the key information + similar to this: + + -----BEGIN RSA PRIVATE KEY----- + MIIByQIBAAJhAKJ2lzDLZ8XlVambQfMXn3LRGKOD5o6lMIgulclWjZwP56LRqdg5 + ZX15bhc/GsvW8xW/R5Sh1NnkJNyL/cqY1a+GzzL47t7EXzVc+nRLWT1kwTvFNGIo + AUsFUq+J6+OprwIDAQABAmBOX0UaLdWWusYzNol++nNZ0RLAtr1/LKMX3tk1MkLH + +Ug13EzB2RZjjDOWlUOY98yxW9/hX05Uc9V5MPo+q2Lzg8wBtyRLqlORd7pfxYCn + Kapi2RPMcR1CxEJdXOkLCFECMQDTO0fzuShRvL8q0m5sitIHlLA/L+0+r9KaSRM/ + 3WQrmUpV+fAC3C31XGjhHv2EuAkCMQDE5U2nP2ZWVlSbxOKBqX724amoL7rrkUew + ti9TEjfaBndGKF2yYF7/+g53ZowRkfcCME/xOJr58VN17pejSl1T8Icj88wGNHCs + FDWGAH4EKNwDSMnfLMG4WMBqd9rzYpkvGQIwLhAHDq2CX4hq2tZAt1zT2yYH7tTb + weiHAQxeHe0RK+x/UuZ2pRhuoSv63mwbMLEZAjAP2vy6Yn+f9SKw2mKuj1zLjEhG + 6ppw+nKD50ncnPoP322UMxVNG4Eah0GYJ4DLP0U= + -----END RSA PRIVATE KEY----- + + Once a private key has been generated, the openssl command can be + used to sign an appropriately prepared email, like this: + + $ openssl dgst -sign rsa.private -sha1 <input.file + + which results in signature data similar to this when represented in + Base64 [BASE64] format: + + aoiDeX42BB/gP4ScqTdIQJcpAObYr+54yvctqc4rSEFYby9+omKD3pJ/TVxATeTz + msybuW3WZiamb+mvn7f3rhmnozHJ0yORQbnn4qJQhPbbPbWEQKW09AMJbyz/0lsl + + How this signature is added to the email is discussed later in this + document. + + 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 + + which results in the file rsa.public containing the key information + similar to this: + + -----BEGIN PUBLIC KEY----- + MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAKJ2lzDLZ8XlVambQfMXn3LRGKOD5o6l + MIgulclWjZwP56LRqdg5ZX15bhc/GsvW8xW/R5Sh1NnkJNyL/cqY1a+GzzL47t7E + XzVc+nRLWT1kwTvFNGIoAUsFUq+J6+OprwIDAQAB + -----END PUBLIC KEY----- + + This public key data is placed in the DNS. + + + + + + +Delany Historic [Page 12] + +RFC 4870 DomainKeys May 2007 + + + With the signature, canonical email contents and public key, a + verifying system can test the validity of the signature. The openssl + invocation to verify a signature looks like this: + + $ openssl dgst -verify rsa.public -sha1 -signature sig.file <input.file + +3.2.3. Public key Representation in the DNS + + There is currently no standard method defined for storing public keys + in the DNS. As an interim measure, the public key is stored as a TXT + record derived from a Privacy-Enhanced Mail (PEM) format [PEM], that + is, as a Base64 representation of a DER encoded key. Here is an + example of a 768-bit RSA key in PEM form: + + -----BEGIN PUBLIC KEY----- + MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAKJ2lzDLZ8XlVambQfMXn3LRGKOD5o6l + MIgulclWjZwP56LRqdg5ZX15bhc/GsvW8xW/R5Sh1NnkJNyL/cqY1a+GzzL47t7E + XzVc+nRLWT1kwTvFNGIoAUsFUq+J6+OprwIDAQAB + -----END PUBLIC KEY----- + + To save scarce DNS packet space and aid extensibility, the PEM + wrapping MUST be removed and the remaining public key data along with + other attributes relevant to DomainKeys functionality are stored as + tag=value pairs separated by semicolons, for example, as in the + following: + + brisbane._domainkey IN TXT "g=; k=rsa; p=MHww ... IDAQAB" + + Verifiers MUST support key sizes of 512, 768, 1024, 1536 and 2048 + bits. Signers MUST support at least one of the verifier supported + key sizes. + + The current valid tags are as follows: + + g = granularity of the key. If present with a non-zero length + value, this value MUST exactly match the local part of the + sending address. This tag is optional. + + The intent of this tag is to constrain which sending address + can legitimately use this selector. An email with a sending + address that does not match the value of this tag constitutes + a failed verification. + + k = key type (rsa is the default). Signers and verifiers MUST + support the 'rsa' key type. This tag is optional. + + + + + + +Delany Historic [Page 13] + +RFC 4870 DomainKeys May 2007 + + + n = Notes that may be of interest to a human. No interpretation + is made by any program. This tag is optional. + + p = public key data, encoded as a Base64 string. An empty value + means that this public key has been revoked. This tag MUST be + present. + + t = a set of flags that define boolean attributes. Valid + attributes are as follows: + + y = testing mode. This domain is testing DomainKeys and + unverified email MUST NOT be treated differently from + verified email. Recipient systems MAY wish to track + testing mode results to assist the sender. + + This tag is optional. + + (Syntax rules for the tag=value format are discussed in Appendix A.) + + Keeping the size of the TXT record to a minimum is important as some + implementations of content and caching DNS servers are reported to + have problems supporting large TXT records. In the example above, + the encoding generates a 182-byte TXT record. That this encoding is + less than 512 bytes is of particular significance as it fits within a + single UDP response packet. With careful selection of query values, + a TXT record can accommodate a 2048 bit key. + + For the same size restriction reason, the "n" tag SHOULD be used + sparingly. The most likely use of this tag is to convey a reason why + a public key might have been revoked. In this case, set the "n" tag + to the explanation and remove the public key value from the "p" tag. + +3.2.4. Key Sizes + + Selecting appropriate key sizes is a trade-off between cost, + performance, and risk. This specification does not define either + minimum or maximum key sizes -- that decision is a matter for each + domain owner. + + Factors that should influence this decision include the following: + + o the practical constraint that a 2048-bit key is the largest key + that fits within a 512-byte DNS UDP response packet + + 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 + + + +Delany Historic [Page 14] + +RFC 4870 DomainKeys May 2007 + + + o the security goals of this specification are modest compared to + typical goals of public key systems + + In general, it is expected that most domain owners will use keys that + are no larger than 1024 bits. + +3.3. Storing the Signature in the Email Header + + The signature of the email is stored in the "DomainKey-Signature:" + header. This header contains all of the signature and key-fetching + data. + + When generating the signed email, the "DomainKey-Signature:" header + MUST precede the original email headers presented to the signature + algorithm. + + The "DomainKey-Signature:" header is not included in the signature + calculation. + + For extensibility, the "DomainKey-Signature:" header contains + tag=value pairs separated by semicolons, for example, as in the + following: + + DomainKey-Signature: a=rsa-sha1; s=brisbane; d=example.net; + q=dns; c=simple + + The current valid tags are as follows: + + a = The algorithm used to generate the signature. The default is + "rsa-sha1", an RSA signed SHA1 digest. Signers and verifiers + MUST support "rsa-sha1". + + b = The signature data, encoded as a Base64 string. This tag MUST + be present. + + Whitespace is ignored in this value and MUST be removed when + reassembling the original signature. This is another way of + saying that the signing process can safely insert folding + whitespace in this value to conform to line-length limits. + + c = Canonicalization algorithm. The method by which the headers + and content are prepared for presentation to the signing + algorithm. This tag MUST be present. Verifiers MUST support + "simple" and "nofws". Signers MUST support at least one of + the verifier-supported algorithms. + + + + + + +Delany Historic [Page 15] + +RFC 4870 DomainKeys May 2007 + + + d = The domain name of the signing domain. This tag MUST be + present. In conjunction with the selector tag, this domain + forms the basis of the public key query. The value in this + tag MUST match the domain of the sending email address or MUST + be one of the parent domains of the sending email address. + Domain name comparison is case insensitive. + + The matching process for this tag is called subdomain + matching, as the sending email address must be the domain + or subdomain of the value. + + h = A colon-separated list of header field names that identify the + headers presented to the signing algorithm. If present, the + value MUST contain the complete list of headers in the order + presented to the signing algorithm. + + If present, this tag MUST include the header that was used to + identify the sending domain, i.e., the "From:" or "Sender:" + header; thus, this tag can never contain an empty value. + + If this tag is not present, all headers subsequent to the + signature header are included in the order found in the email. + + A verifier MUST support this tag. A signer MAY support this + tag. If a signer generates this tag, it MUST include all + email headers in the original email, as a verifier MAY remove + or render suspicious, lines that are not included in the + signature. + + In the presence of duplicate headers, a signer may include + duplicate entries in the list of headers in this tag. If a + header is included in this list, a verifier must include all + occurrences of that header, subsequent to the "DomainKey- + Signature:" header in the verification. + + If a header identified in this list is not found after the + "DomainKey-Signature:" header in the verification process, a + verifier may "look" for a matching header prior to the + "DomainKey-Signature:" header; however, signers should not + rely on this as early experience suggests that most verifiers + do not try to "look" back before the "DomainKey-Signature:" + header. + + Whitespace is ignored in this value and header comparisons are + case insensitive. + + + + + + +Delany Historic [Page 16] + +RFC 4870 DomainKeys May 2007 + + + q = The query method used to retrieve the public key. This tag + MUST be present. Currently, the only valid value is "dns", + which defines the DNS lookup algorithm described in this + document. Verifiers and signers MUST support "dns". + + s = The selector used to form the query for the public key. This + tag MUST be present. In the DNS query type, this value is + prepended to the "_domainkey." namespace of the sending + domain. + + (Syntax rules for the tag=value format are discussed in Appendix A.) + + Here is an example of a signature header spread across multiple + continuation lines: + + DomainKey-Signature: a=rsa-sha1; s=brisbane; d=example.net; + c=simple; q=dns; + b=dzdVyOfAKCdLXdJOc9G2q8LoXSlEniSbav+yuU4zGeeruD00lszZ + VoG4ZHRNiYzR; + + Extreme care must be taken to ensure that any new tags added to this + header are defined and used solely for the purpose of fetching and + verifying the signature. Any semantics beyond verification cannot be + trusted, as this header is not protected by the signature. + + If additional semantics not pertaining directly to signature + verification are required, they must only be added as subsequent + headers protected by the signature. Semantic additions might include + audit information describing the initial submission. + +3.4. Preparation of Email for Transit and Signing + + The fundamental purpose of a cryptographic signature is to ensure + that the signed content matches the contents presented for + verification. However, unlike just about every other Internet + protocol, the email content is routinely modified as it enters and + transits the email system. + + Fortunately most of the modifications typically made to email can be + predicted and consequently accounted for when signing and verifying. + + To maximize the chance of a successful verification, submitted email + should be prepared for transport prior to signing, and the data + presented to the signing algorithm is canonicalized to exclude the + most common and minor changes made to email. + + + + + + +Delany Historic [Page 17] + +RFC 4870 DomainKeys May 2007 + + +3.4.1. Preparation for Transit + + The SMTP protocol defines a number of potential limitations to email + transport, particularly pertaining to line lengths and 8-bit content. + + While the editor has observed that most modern SMTP implementations + accept 8-bit email and long lines, some implementations still do not. + Consequently, a DomainKeys implementation SHOULD prepare an email to + be suitable for the lowest common denominator of SMTP prior to + presenting the email for signing. + +3.4.2. Canonicalization for Signing + + DomainKeys is initially expected to be deployed at, or close to, the + email borders of an organization rather than in MUAs or SUBMISSION + servers. In other words, the signing and verifying algorithms + normally apply after an email has been packaged, transmogrified, and + generally prepared for transmission across the Internet via SMTP and, + thus the likelihood of the email being subsequently modified is + reduced. + + Nonetheless, empirical evidence suggests that some mail servers and + relay systems modify email in transit, potentially invalidating a + signature. + + There are two competing perspectives on such modifications. For most + senders, mild modification of email is immaterial to the + authentication status of the email. For such senders, a + canonicalization algorithm that survives modest in-transit + modification is preferred. + + For other senders however, any modification of the email - however + minor -- results in a desire for the authentication to fail. In + other words, such senders do not want a modified email to be seen as + being authorized by them. These senders prefer a canonicalization + algorithm that does not tolerate in-transit modification of the + signed email. + + To satisfy both requirements, two canonicalization algorithms are + defined. A "simple" algorithm that tolerates almost no modification + and a "nofws" algorithm that tolerates common modifications as + whitespace replacement and header line rewrapping. + + A sender may choose either algorithm when signing an email. A + verifier MUST be able to process email using either algorithm. + + Either algorithm can be used in conjunction with the "h" tag in the + "DomainKey-Signature:" header. + + + +Delany Historic [Page 18] + +RFC 4870 DomainKeys May 2007 + + + Canonicalization simply prepares the email for the signing or + verification algorithm. It does not change the transmitted data in + any way. + +3.4.2.1. The "simple" Canonicalization Algorithm + + o Each line of the email is presented to the signing algorithm in + the order it occurs in the complete email, from the first line of + the headers to the last line of the body. + + o If the "h" tag is used, only those header lines (and their + continuation lines if any) added to the "h" tag list are included. + + o The "h" tag only constrains header lines. It has no bearing on + body lines, which are always included. + + o Remove any local line terminator. + + o Append CRLF to the resulting line. + + o All trailing empty lines are ignored. An empty line is a line of + zero length after removal of the local line terminator. + + If the body consists entirely of empty lines, then the header/body + line is similarly ignored. + +3.4.2.2. The "nofws" Canonicalization Algorithm + + The "No Folding Whitespace" algorithm (nofws) is more complicated + than the "simple" algorithm for two reasons; folding whitespace is + removed from all lines and header continuation lines are unwrapped. + + o Each line of the email is presented to the signing algorithm in + the order it occurs in the complete email, from the first line + of the headers to the last line of the body. + + o Header continuation lines are unwrapped so that header lines + are processed as a single line. + + o If the "h" tag is used, only those header lines (and their + continuation lines if any) added to the "h" tag list are + included. + + o The "h" tag only constrains header lines. It has no bearing on + body lines, which are always included. + + + + + + +Delany Historic [Page 19] + +RFC 4870 DomainKeys May 2007 + + + o For each line in the email, remove all folding whitespace + characters. Folding whitespace is defined in RFC 2822 as being + the decimal ASCII values 9 (HTAB), 10 (NL), 13 (CR), and 32 + (SP). + + o Append CRLF to the resulting line. + + o Trailing empty lines are ignored. An empty line is a line of + zero length after removal of the local line terminator. Note + that the test for an empty line occurs after removing all + folding whitespace characters. + + If the body consists entirely of empty lines, then the + header/body line is similarly ignored. + +3.5. The Signing Process + + The previous sections defined the various components and mechanisms + needed to sign an email. This section brings those together to + define the complete process of signing an email. + + A signer MUST only sign email from submissions that are authorized to + use the sending address. + + Once authorization of the submission has been determined, the signing + process consists of the following steps: + + o identifying the sending domain + + o determining if an email should be signed + + o selecting a private key and corresponding selector information + + o calculating the signature value + + o prepending the "DomainKey-Signature:" header + + If an email cannot be signed for some reason, it is a local policy + decision as to what to do with that email. + +3.5.1. Identifying the Sending Domain + + The sending domain is determined by finding the email address in the + "Sender:" header, or, if the "Sender:" header is not present, the + first email address of the "From:" header is used to determine the + sending domain. + + + + + +Delany Historic [Page 20] + +RFC 4870 DomainKeys May 2007 + + + If the email has an invalid "From:" or an invalid "Sender:" header, + it MUST NOT be signed. + + If the signer adds the "h" tag to the "DomainKey-Signature:" header, + that tag MUST include the header that was used to determine the + sending domain. + +3.5.2. Determining Whether an Email Should Be Signed + + 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 why a signer may choose not to sign an email. + + A signer MUST NOT sign an email if the email submission is not + authorized to use the sending domain. + + A signer MUST NOT sign an email that already contains a "DomainKey- + Signature:" header unless a "Sender:" header has been added that was + not included in the original signature. The most obvious case where + this occurs is with mailing lists. + + A signer SHOULD NOT remove an existing "DomainKey-Signature:" header. + +3.5.3. Selecting 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. + +3.5.4. Calculating the Signature Value + + The signer MUST use one of the defined canonicalization algorithms to + present the email to the signing algorithm. Canonicalization is only + used to prepare the email for signing. It does not affect the + transmitted email in any way. + + To avoid possible ambiguity, a signing server may choose to remove + any pre-existing "DomainKey-Status:" headers from the email prior to + preparation for signing and transmission. + +3.5.5. Prepending the "DomainKey-Signature:" Header + + The final step in the signing process is that the signer MUST prepend + the "DomainKey-Signature:" header prior to continuing with the + process of transmitting the email. + + + +Delany Historic [Page 21] + +RFC 4870 DomainKeys May 2007 + + +3.6. Policy Statement of Sending Domain + + While the disposition of inbound email is ultimately a matter for the + receiving system, the introduction of authentication in email creates + a need for the sender domain to indicate their signing policy and + preferred disposition of unsigned email, in particular, whether a + domain is participating in DomainKeys, whether it is testing, and + whether it signs all outbound email. + + The sending domain policy is very simple and is expressed in the + _domainkey TXT record in the DNS of the sending domain. For example, + in the example.com domain, the record is called + _domainkey.example.com. + + The contents of this TXT record are stored as tag=value pairs + separated by semicolons, for example, as in the following: + + _domainkey IN TXT "t=y; o=-; n=notes; r=emailAddress" + + All tags are optional. The current valid tags are as follows: + + n = Notes that may be of interest to a human. No interpretation + is made by any program. + + o = Outbound Signing policy ("-" means that this domain signs all + email; "~" is the default and means that this domain may sign + some email with DomainKeys). + + r = A reporting email address. If present, this defines the email + address where invalid verification results are reported. This + tag is primarily intended for early implementers -- the + content and frequency of the reports will be defined in a + separate document. + + t = a set of flags that define boolean attributes. Valid + attributes are as follows: + + y = testing mode. This domain is testing DomainKeys, and + unverified email MUST NOT be treated differently from + verified email. Recipient systems MAY wish to track + testing mode results to assist the sender). + + Note that testing mode cannot be turned off by this tag; + thus, policy cannot revert the testing mode setting of a + Selector. + + This tag is optional. + + + + +Delany Historic [Page 22] + +RFC 4870 DomainKeys May 2007 + + + (Syntax rules for the tag=value format are discussed in Appendix A.) + + Recipient systems SHOULD only retrieve this policy TXT record to + determine policy when an email fails to verify or does not include a + signature. Recipient systems SHOULD not retrieve this policy TXT + record for email that successfully verifies. Note that "testing + mode" SHOULD also be in the Selector TXT record if the domain owner + is running a DomainKeys test. + + If the policy TXT record does not exist, recipient systems MUST + assume the default values. + + There is an important implication when a domain states that it signs + all email with the "o=-" setting, namely that the sending domain + prefers that the recipient system treat unsigned mail with a great + deal of suspicion. Such suspicion could reasonably extend to + rejecting such email. A verifying system MAY reject unverified email + if a domain policy indicates that it signs all email. + + Of course, nothing compels a recipient MTA to abide by the policy of + the sender. In fact, during the trial, a sending domain would want + to be very certain about setting this policy, as processing by + recipient MTAs may be unpredictable. Nonetheless, a domain that + states that it signs all email MUST expect that unverified email may + be rejected by some receiving MTAs. + +3.7. The Verification Process + + There is no defined or recommended limit on the lifetime of a + selector and corresponding public key; however, it is recommended + that verification occur in a timely manner with the most timely place + being during acceptance or local delivery by the MTA. + + Verifying a signature consists of the following three steps: + + o extract signature information from the headers + + o retrieve the public key based on the signature information + + o check that the signature verifies against the contents + + In the event that any of these steps fails, the sending domain policy + is ascertained to assist in applying local policy. + + + + + + + + +Delany Historic [Page 23] + +RFC 4870 DomainKeys May 2007 + + +3.7.1. Presumption that Headers Are Not Reordered + + Indications from deployment of previous versions of this + specification suggest that the canonicalization algorithms in + conjunction with the "h" tag in the "DomainKey-Signature:" header + allows most email to cryptographically survive intact between signing + and verifying. + + The one assumption that most of the early deployments make is that + the headers included in the signature are not reordered prior to + verification. + + While nothing in this specification precludes a verifier from + "looking" for a header that may have been reordered, including being + moved to a position prior to the "DomainKey-Signature:" header, such + reordered email is unlikely to be successfully verified by most + implementations. + + A second consequence of this assumption -- particularly in the + presence of multiple "DomainKey-Signature:" headers -- is that the + first "DomainKey-Signature:" header in the email was the last + signature added to the email and thus is the one to be verified. + +3.7.2. Verification Should Render a Binary Result + + 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 recorded; however, in terms of presentation to the end + user, the result SHOULD be presented as a simple binary result: + either the email is verified or it is not. If the email cannot be + verified, then it SHOULD be rendered the same as all unverified email + regardless of whether or not it looks like it was signed. + +3.7.3. Selecting the Most Appropriate "DomainKey-Signature:" Header + + In most cases, a signed email is expected to have just one signature + -- that is, one "DomainKey-Signature:" header. However, it is + entirely possible that an email can contain multiple signatures. In + such cases, a verifier MUST find the most appropriate signature to + use and SHOULD ignore all other signatures. + + + + + +Delany Historic [Page 24] + +RFC 4870 DomainKeys May 2007 + + + The process of finding the most appropriate signature consists of the + following "best match" rules. The rules are to be evaluated in + order. + + 1. Selecting the sending domain + + If the email contains a "Sender:" header, the sending domain is + extracted from the "Sender:" address. If this extraction + fails, the email SHALL fail verification. + + If no "Sender:" header is present, the sending domain is + extracted from the first address of the "From:" header. If + this extraction fails, the email SHALL fail verification. + + 2. Domain matching + + A signature can only match if the sending domain matches the + "d" tag domain -- according to the "d" tag subdomain matching + rules. + + 3. "h" tag matching + + If the signature contains the "h" tag list of headers, that + list must include the header used to extract the sending domain + in rule 1, above. + + 4. Most secure signing algorithm + + While it is not yet the case, in the event that additional + algorithms are added to this specification, a verifier MUST use + the signature that contains the most secure algorithm as + defined by the future specification. For current + implementations, that means verifiers MUST ignore signatures + that are coded with an unrecognized signing algorithm. + + 5. Earlier signatures are preferred + + If multiple signatures are equal as far as these rules apply, + the signature from the earlier header MUST be used in + preference to later signature headers. + + Implementors MUST meticulously validate the format and values in the + "DomainKey-Signature:" header; any inconsistency or unexpected values + MUST result in ignoring that header. Being "liberal in what you + accept" is definitely a bad strategy in this security context. + + + + + + +Delany Historic [Page 25] + +RFC 4870 DomainKeys May 2007 + + + In all cases, if a verification fails, the "DomainKey-Status:" header + SHOULD be generated and include a message to help explain the reason + for failure. + +3.7.4. Retrieve the Public Key Based on the Signature Information + + The public key 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 "DomainKey-Signature:" header line. + Obviously, a public key should only be retrieved if the process of + extracting the signature information is completely successful. + + Currently, the only valid query type is "dns". The public key + retrieval process for this type is as follows: + + 1. Using the selector name defined by the "s" tag, the + "_domainkey" namespace and the domain name defined by the "d" + tag, construct and issue the DNS TXT record query string. + + For example, if s=brisbane and d=example.net, the query string + is "brisbane._domainkey.example.net". + + 2. If the query for the public key fails to respond, the verifier + SHOULD defer acceptance of this email (normally this will be + achieved with a 4XX SMTP response code). + + 3. If the query for the public key fails because the corresponding + data does not exist, the verifier MUST treat the email as + unverified. + + 4. If the result returned from the query does not adhere to the + format defined in this specification, the verifier MUST treat + the email as unverified. + + 5. If the public key data is not suitable for use with the + algorithm type defined by the "a" tag in the "DomainKey- + Signature:" header, the verifier MUST treat the email as + unverified. + + Implementors MUST meticulously validate the format and values + returned by the public key query. Any inconsistency or unexpected + values MUST result in an unverified email. Being "liberal in what + you accept" is definitely a bad strategy in this security context. + + Latency critical implementations may wish to initiate the public key + query in parallel with calculating the SHA-1 hash, as the public key + is not needed until the final RSA is calculated. + + + + +Delany Historic [Page 26] + +RFC 4870 DomainKeys May 2007 + + +3.7.5. Verify the Signature + + Armed with the signature information from the "DomainKey-Signature:" + header and the public key information returned by the query, the + signature of the email can now be verified. + + The canonicalization algorithm defined by the "c" tag in the + "DomainKey-Signature:" header defines how the data is prepared for + the verification algorithm, and the "a" tag in the same header + defines which verification algorithm to use. + +3.7.6. Retrieving Sending Domain Policy + + In the event that an email fails to verify, the policy of the sending + domain MUST be consulted. For now, that means consulting the + _domainkey TXT record in the DNS of the domain in the sending domain + as defined in Section 3.5.1. For example, if example.net is the + sending domain the TXT query is: + + _domainkey.example.net + + A verifier SHOULD consider the sending domain policy statement and + act accordingly. The range of possibilities is up to the receiver, + but it MAY include rejecting the email. + +3.7.7. Applying Local Policy + + After all verification processes are complete, the recipient system + has authentication information that can help it decide what to do + with the email. + + It is beyond the scope of this specification to describe what actions + a recipient system should take, but an authenticated email presents + an opportunity to a receiving system that unauthenticated email + cannot. 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 not unreasonable + to treat unauthenticated email as lacking any trust and having no + positive reputation. + +3.8. Conveying Verification Results to MUAs + + Apart from the application of automated policy, the result of a + signature verification should be conveyed to the user reading the + email. + + + +Delany Historic [Page 27] + +RFC 4870 DomainKeys May 2007 + + + Most email clients can be configured to recognize specific headers + and apply simple rules, e.g., filing into a particular folder. Since + DomainKey signatures are expected to be initially verified at the + border MTA, the results of the verification need to be conveyed to + the email client. This is done with the "DomainKey-Status:" header + line prepended to the email. + + The "DomainKey-Status:" header starts with a string that indicate the + result of the verification. Valid values are as follows: + + "good" - the signature was verified at the time of testing + "bad" - the signature failed the verification + "no key" - the public key query failed as the key does not + exist + "revoked" - the public key query failed as the key has been + revoked + "no signature" - this email has no "DomainKey-Signature:" header + "bad format" - the signature or the public key contains unexpected + data + "non-participant" - this sending domain has indicated that it does + not participate in DomainKeys + + Verifiers may append additional data that expands on the reason for + the particular status value. + + A client SHOULD just look for "good" and assume that all other values + imply that the verification could not be performed for some reason. + Policy action as a consequence of this header is entirely a local + matter. + + Here are some examples: + + DomainKey-Status: good + DomainKey-Status: bad format + + Although it is expected that MTAs will be DomainKey aware before + MUAs, it is nonetheless possible that a DomainKey-aware MUA can be + fooled by a spoofed "DomainKey-Status:" header that passes through a + non-DomainKey-aware MTA. + + If this is perceived to be a serious problem, then it may make sense + to preclude the "good" value and only have values that effectively + demote the email as far as the UA is concerned. That way successful + spoofing attempts can only serve to demote themselves. + + + + + + + +Delany Historic [Page 28] + +RFC 4870 DomainKeys May 2007 + + +4. Example of Use + + This section shows the complete flow of an email from submission to + final delivery, demonstrating how the various components fit + together. + +4.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. + +4.2. The Email Is Signed + + This email is signed by the football.example.com outbound email + server and now looks like this: + + DomainKey-Signature: a=rsa-sha1; s=brisbane; d=football.example.com; + c=simple; q=dns; + b=dzdVyOfAKCdLXdJOc9G2q8LoXSlEniSbav+yuU4zGeeruD00lszZ + VoG4ZHRNiYzR; + Received: from dsl-10.2.3.4.football.example.com [10.2.3.4] + by submitserver.football.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. + + The signing email server requires access to the private key + associated with the "brisbane" selector to generate this signature. + Distribution and management of private keys are outside the scope of + this document. + + + +Delany Historic [Page 29] + +RFC 4870 DomainKeys May 2007 + + +4.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 "football.example.com" + extracted from the "From:" header and the selector "brisbane" from + the "DomainKey-Signature:" header to form the DNS TXT query for: + + brisbane._domainkey.football.example.com + + Since there is no "h" tag in the "DomainKey-Signature:" header, + signature verification starts with the line following the + "DomainKey-Signature:" line. 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 the "DomainKey-Status:" header line. After successful + verification, the email looks like this: + + DomainKey-Status: good + from=joe@football.example.com; domainkeys=pass + Received: from mout23.brisbane.football.example.com (192.168.1.1) + by shopping.example.net with SMTP; + Fri, 11 Jul 2003 21:01:59 -0700 (PDT) + DomainKey-Signature: a=rsa-sha1; s=brisbane; d=football.example.com; + c=simple; q=dns; + b=dzdVyOfAKCdLXdJOc9G2q8LoXSlEniSbav+yuU4zGeeruD00lszZ + VoG4ZHRNiYzR; + Received: from dsl-10.2.3.4.network.example.com [10.2.3.4] + 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. + + + + + + + +Delany Historic [Page 30] + +RFC 4870 DomainKeys May 2007 + + +5. Association with a Certificate Authority + + A fundamental aspect of DomainKeys is that public keys are generated + and advertised by each domain at no additional cost. This + accessibility markedly differs from traditional Public Key + Infrastructures where there is typically a Certificate Authority (CA) + who validates an applicant and issues a signed certificate -- + containing their public key -- often for a recurring fee. + + While CAs do impose costs, they also have the potential to provide + additional value as part of their certification process. Consider + financial institutions, public utilities, law enforcement agencies, + and the like. In many cases, such entities justifiably need to + discriminate themselves above and beyond the authentication that + DomainKeys offers. + + Creating a link between DomainKeys and CA-issued certificates has the + potential to access additional authentication mechanisms that are + more authoritative than domain-owner-issued authentication. It is + well beyond the scope of this specification to describe such + authorities apart from defining how the linkage could be achieved + with the "DomainKey-X509:" header. + +5.1. The "DomainKey-X509:" Header + + The "DomainKey-X509:" header provides a link between the public key + used to sign the email and the certificate issued by a CA. + + The exact content, syntax, and semantics of this header are yet to be + resolved. One possibility is that this header contains an encoding + of the certificate issued by a CA. Another possibility is that this + header contains a URL that points to a certificate issued by a CA. + + In either case, this header can only be consulted if the signature + verifies and MUST be part of the content signed by the corresponding + "DomainKey-Signature:" header. Furthermore, it is likely that MUAs + rather than MTAs will confirm that the link to the CA-issued + certificate is valid. In part, this is because many MUAs already + have built-in capabilities as a consequence of Secure/Multipurpose + Internet Mail Extensions (S/MIME) [SMIME] and Secure Socket Layer + (SSL) [SSL] support. + + The proof of linkage is made by testing that the public key in the + certificate matches the public key used to sign the email. + + + + + + + +Delany Historic [Page 31] + +RFC 4870 DomainKeys May 2007 + + + An example of an email containing the "DomainKey-X509:" header is: + + DomainKey-Signature: a=rsa-sha1; s=statements; + d=largebank.example.com; c=simple; q=dns; + b=dzdVyOfAKCdLXdJOc9G2q8LoXSlEniSbav+yuU4zGeeruD00lszZ + VoG4ZHRNiYzR; + DomainKey-X509: https://ca.example.net/largebank.example.com + From: "Large Bank" <statements@largebank.example.com> + To: "Suzie Q" <suzie@shopping.example.net> + Subject: Statement for Account: 1234-5678 + ... + + The format of the retrieved value from the URL is not yet defined, + nor is the determination of valid CAs. + + The whole matter of linkage to CA-issued certificates is one aspect + of DomainKeys that needs to be resolved with relevant CA's and + certificate-issuing entities. The primary point is that a link is + possible to a higher authority. + +6. Topics for Discussion + +6.1. The Benefits of Selectors + + Selectors are at the heart of the flexibility of DomainKeys. A + domain administrator is free to use a single DomainKey for all + outbound mail. Alternatively, the domain administrator may use many + DomainKeys differentiated by selector and assign each key to + different servers. + + For example, a large outbound email farm might have a unique + DomainKey for each server, and thus their DNS will advertise + potentially hundreds of keys via their unique selectors. + + Another example is a corporate email administrator who might generate + a separate DomainKey for each regional office email server. + + In essence, selectors allow a domain owner to distribute authority to + send on behalf of that domain. Combined with the ability to revoke + by removal or Time to Live (TTL) expiration, a domain owner has + coarse-grained control over the duration of the distributed + authority. + + Selectors are particularly useful for domain owners who want to + contract a third-party mailing system to send a particular set of + mail. The domain owner can generate a special key pair and selector + just for this mail-out. The domain owner has to provide the private + key and selector to the third party for the life of the mail-out. + + + +Delany Historic [Page 32] + +RFC 4870 DomainKeys May 2007 + + + However, as soon as the mail-out is completely delivered, the domain + owner can revoke the public key by the simple expedient of removing + the entry from the DNS. + +6.2. Canonicalization of Email + + It is an unfortunate fact that some email software routinely (and + often unnecessarily) transforms email as it transits through the + network. Such transformations conflict with the fundamental purpose + of cryptographic signatures - to detect modifications. + + While two canonicalization algorithms are defined in this + specification, the primary goal of "nofws" is to provide a transition + path to "simple". With a mixture of "simple" and "nofws" email, a + receiver can determine which systems are modifying email in ways that + cause the signature to fail and thus provide feedback to the + modifying system. + +6.3. Mailing Lists + + Integrating existing Mailing List Managers (MLMs) into the DomainKeys + authentication system is a complicated area, as the behavior of MLMs + is highly variable. Essentially, there are two types of MLMs under + consideration: those that modify email to such an extent that + verification of the original content is not possible, and those that + make minimal or no modifications to an email. + + MLMs that modify email in a way that causes verification to fail MUST + prepend a "Sender:" header and SHOULD prepend a "List-ID:" header + prior to signing for distribution to list recipients. + + A participating SUBMISSION server can deduce the need to re-sign such + an email by the presence of a "Sender:" or "List-ID:" header from an + authorized submission. + + MLMs that do not modify email in a way that causes verification to + fail MAY perform the same actions as a modifying MLM. + +6.4. Roving Users + + One scenario that presents a particular problem with any form of + email authentication, including DomainKeys, is the roving user: a + user who is obliged to use a third-party SUBMISSION service when + unable to connect to the user's own SUBMISSION service. The classic + example cited is a traveling salesperson being redirected to a hotel + email server to send email. + + + + + +Delany Historic [Page 33] + +RFC 4870 DomainKeys May 2007 + + + As far as DomainKeys is concerned, email of this nature clearly + originates from an email server that does not have authority to send + on behalf of the domain of the salesperson and is therefore + indistinguishable from a forgery. While DomainKeys does not + prescribe any specific action for such email, it is likely that over + time, such email will be treated as second-class email. + + The typical solution offered to roving users is to submit email via + an authorized server for their domain -- perhaps via a Virtual + Private Network (VPN) or a web interface or even SMTP AUTH back to a + SUBMISSION server. + + While these are perfectly acceptable solutions for many, they are not + necessarily solutions that are available or possible for all such + users. + + One possible way to address the needs of this contingent of + potentially disenfranchised users is for the domain to issue per-user + DomainKeys. Per-user DomainKeys are identified by a non-empty "g" + tag value in the corresponding DNS record. + +7. Security Considerations + +7.1. DNS + + DomainKeys is primarily a security mechanism. Its core purpose is to + make claims about email authentication in a credible way. However, + DomainKeys, like virtually all Internet applications, relies on the + DNS, which has well-known security flaws [RFC3833]. + +7.1.1. The DNS Is Not Currently Secure + + While the DNS is currently insecure, it is expected that the security + problems should and will be solved by DNS Security (DNSSEC) [DNSSEC], + and all users of the DNS will reap the benefit of that work. + + Secondly, the types of DNS attacks relevant to DomainKeys are very + costly and are far less rewarding than DNS attacks on other Internet + applications. + + To systematically thwart the intent of DomainKeys, an attacker must + conduct a very costly and very extensive attack on many parts of the + DNS over an extended period. No one knows for sure how attackers + will respond; however, the cost/benefit of conducting prolonged DNS + attacks of this nature is expected to be uneconomical. + + Finally, DomainKeys is only intended as a "sufficient" method of + proving authenticity. It is not intended to provide strong + + + +Delany Historic [Page 34] + +RFC 4870 DomainKeys May 2007 + + + cryptographic proof about authorship or contents. Other technologies + such as GnuPG and S/MIME address those requirements. + +7.1.2. DomainKeys Creates Additional DNS Load + + 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 sending domain policy. Widespread + deployment of DomainKeys will result in a significant increase in DNS + queries to the claimed sending domain. In the case of forgeries on a + large scale, DNS servers could see a substantial increase in queries. + +7.2. Key Management + + All public key systems require management of key pairs. Private keys + in particular need to be securely distributed to each signing mail + server and protected on those servers. For those familiar with SSL, + the key management issues are similar to those of managing SSL + certificates. Poor key management may result in unauthorized access + to private keys, which in essence gives unauthorized access to your + identity. + +7.3. Implementation Risks + + It is well recognized in cryptographic circles that many security + failures are caused by poor implementations rather than poor + algorithms. For example, early SSL implementations were vulnerable + because the implementors used predictable "random numbers". + + While some MTA software already supports various cryptographic + techniques, such as TLS, many do not. This proposal introduces + cryptographic requirements into MTA software that implies a much + higher duty of care to manage the increased risk. + + There are numerous articles, books, courses, and consultants that + help programming security applications. Potential implementors are + strongly encouraged to avail themselves of all possible resources to + ensure secure implementations. + +7.4. Privacy Assumptions with Forwarding Addresses + + Some people believe that they can achieve anonymity by using an email + forwarding service. While this has never been particularly true, as + bounces, over-quota messages, vacation messages, and web bugs all + conspire to expose IP addresses and domain names associated with the + delivery path, the DNS queries that are required to verify DomainKeys + signature can provide additional information to the sender. + + + + +Delany Historic [Page 35] + +RFC 4870 DomainKeys May 2007 + + + In particular, as mail is forwarded through the mail network, the DNS + queries for the selector will typically identify the DNS cache used + by the forwarding and delivery MTAs. + +7.5. Cryptographic Processing Is Computationally Intensive + + Verifying a signature is computationally significant. Early + indications are that a typical mail server can expect to increase CPU + demands by 8-15 percent. While this increased demand is modest + compared to other common mail processing costs -- such as Bayesian + filtering -- any increase in resource requirements can make a + denial-of-service attack more effective against a mail system. + + A constraining factor of such attacks is that the net computational + cost of verifying is bounded by the maximum key size allowed by this + specification and is essentially linear to the rate at which mail is + accepted by the verifying system. Consequently, the additional + computational cost may augment a denial-of-service attack, but it + does not add a non-linear component to such attacks. + +8. The Trial + + The DomainKeys protocol was deployed as a trial to better understand + the implications of deploying wide-scale cryptographic email + authentication. + + Open Source implementations were made available at various places, + particularly Source Forge [SOURCEFORGE], which includes links to + numerous implementations, both Open Source and commercial. + +8.1. Goals + + The primary goals of the trial were to: + + o understand the operational implications of running a DNS-based + public key system for email + + o measure the effectiveness of the canonicalization algorithms + + o experiment with possible per-user key deployment models + + o fully define the semantics of the "DomainKey-X509:" header + + + + + + + + + +Delany Historic [Page 36] + +RFC 4870 DomainKeys May 2007 + + +8.2. Results of Trial + + The DomainKeys trial ran for approximately 2 years, in which time + numerous large ISPs and many thousands of smaller domains + participated in signing or verifying with DomainKeys. The low order + numbers are that at least one billion DomainKey signed emails transit + the Internet each day between some 12,000 participating domains. + + The operational and development experience of that trial was applied + to DKIM. + +9. Note to Implementors Regarding TXT Records + + The DNS is very flexible in that it is possible to have multiple TXT + records for a single name and for those TXT records to contain + multiple strings. + + In all cases, implementors of DomainKeys should expect a single TXT + record for any particular name. If multiple TXT records are + returned, the implementation is free to pick any single TXT record as + the authoritative data. In other words, if a name server returns + different TXT records for the same name, it can expect unpredictable + results. + + Within a single TXT record, implementors should concatenate multiple + strings in the order presented and ignore string boundaries. Note + that a number of popular DNS command-line tools render multiple + strings as separately quoted strings, which can be misleading to a + novice implementor. + +10. References + +10.1. Normative References + + [BASE64] Josefsson, S., "The Base16, Base32, and Base64 Data + Encodings", RFC 4648, October 2006. + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, March 1997. + + [PEM] Linn, J., "Privacy Enhancement for Internet Electronic + Mail: Part I: Message Encryption and Authentication + Procedures", RFC 1421 February, 1993. + + + + + + + + +Delany Historic [Page 37] + +RFC 4870 DomainKeys May 2007 + + +10.2. Informative References + + [DKIM] Allman, E., Callas, J., Delany, M., Libbey, M., Fenton, + J., and M. Thomas, "DomainKeys Identified Mail (DKIM) + Signatures", RFC 4871, May 2007. + + [DNSSEC] http://www.ietf.org/html.charters/dnsext-charter.html + + [OPENSSL] http://www.openssl.org + + [RFC2822] Resnick, P., Editor, "Internet Message Format", RFC + 2822, April 2001. + + [RFC3833] Atkins, D. and R. Austein, "Threat Analysis of the + Domain Name System (DNS)", RFC 3833, August 2004. + + [SMIME] Ramsdell, B., Ed., "Secure/Multipurpose Internet Mail + Extensions (S/MIME) Version 3.1 Message Specification", + RFC 3851, July 2004. + + [SOURCEFORGE] http://domainkeys.sourceforge.net + + [SSL] http://wp.netscape.com/security/techbriefs/ssl.html + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Delany Historic [Page 38] + +RFC 4870 DomainKeys May 2007 + + +Appendix A - Syntax Rules for the Tag=Value Format + + A simple tag=value syntax is used to encode data in the response + values for DNS queries as well as headers embedded in emails. This + section summarized the syntactic rules for this encoding: + + o A tag=value pair consists of three tokens, a "tag", the "=" + character, and the "value" + + o A tag MUST be one character long and MUST be a lowercase + alphabetic character + + o Duplicate tags are not allowed + + o A value MUST only consist of characters that are valid in RFC + 2822 headers and DNS TXT records and are within the ASCII range + of characters from SPACE (0x20) to TILDE (0x7E) inclusive. + Values MUST NOT contain a semicolon but they may contain "=" + characters. + + o A tag=value pair MUST be terminated by a semicolon or the end + of the data + + o Values MUST be processed as case sensitive unless the specific + tag description of semantics imply case insensitivity. + + o Values MAY be zero bytes long + + o Whitespace MAY surround any of the tokens; however, whitespace + within a value MUST be retained unless explicitly excluded by + the specific tag description. Currently, the only tags that + specifically ignore embedded whitespace are the "b" and "h" + tags in the "DomainKey-Signature:" header. + + o Tag=value pairs that represent the default value MAY be + included to aid legibility. + + o Unrecognized tags MUST be ignored + + + + + + + + + + + + + +Delany Historic [Page 39] + +RFC 4870 DomainKeys May 2007 + + +Acknowledgments + + The editor wishes to thank Russ Allbery, Eric Allman, Edwin Aoki, + Claus Asmann, Steve Atkins, Jon Callas, Dave Crocker, Michael Cudahy, + Jutta Degener, Timothy Der, Jim Fenton, Duncan Findlay, Phillip + Hallam-Baker, Murray S. Kucherawy, John Levine, Miles Libbey, David + Margrave, Justin Mason, David Mayne, Russell Nelson, Juan Altmayer + Pizzorno, Blake Ramsdell, Scott Renfro, the Spamhaus.org team, Malte + S. Stretz, Robert Sanders, Bradley Taylor, and Rand Wacker for their + valuable suggestions and constructive criticism. + +Author's Address + + Mark Delany + Yahoo! Inc + 701 First Avenue + Sunnyvale, CA 95087 + USA + + EMail: markd+domainkeys@yahoo-inc.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Delany Historic [Page 40] + +RFC 4870 DomainKeys May 2007 + + +Full Copyright Statement + + Copyright (C) The IETF Trust (2007). + + This document is subject to the rights, licenses and restrictions + contained in BCP 78, and except as set forth therein, the authors + retain all their rights. + + This document and the information contained herein are provided on an + "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS + OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND + THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF + THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED + WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +Intellectual Property + + The IETF takes no position regarding the validity or scope of any + Intellectual Property Rights or other rights that might be claimed to + pertain to the implementation or use of the technology described in + this document or the extent to which any license under such rights + might or might not be available; nor does it represent that it has + made any independent effort to identify any such rights. Information + on the procedures with respect to rights in RFC documents can be + found in BCP 78 and BCP 79. + + Copies of IPR disclosures made to the IETF Secretariat and any + assurances of licenses to be made available, or the result of an + attempt made to obtain a general license or permission for the use of + such proprietary rights by implementers or users of this + specification can be obtained from the IETF on-line IPR repository at + http://www.ietf.org/ipr. + + The IETF invites any interested party to bring to its attention any + copyrights, patents or patent applications, or other proprietary + rights that may cover technology that may be required to implement + this standard. Please address the information to the IETF at + ietf-ipr@ietf.org. + +Acknowledgement + + Funding for the RFC Editor function is currently provided by the + Internet Society. + + + + + + + +Delany Historic [Page 41] + |