| < draft-ietf-dane-openpgpkey-02.txt | draft-ietf-dane-openpgpkey-03.txt > | |||
|---|---|---|---|---|
| Network Working Group P. Wouters | Network Working Group P. Wouters | |||
| Internet-Draft Red Hat | Internet-Draft Red Hat | |||
| Intended status: Standards Track March 09, 2015 | Intended status: Standards Track April 01, 2015 | |||
| Expires: September 10, 2015 | Expires: October 03, 2015 | |||
| Using DANE to Associate OpenPGP public keys with email addresses | Using DANE to Associate OpenPGP public keys with email addresses | |||
| draft-ietf-dane-openpgpkey-02 | draft-ietf-dane-openpgpkey-03 | |||
| Abstract | Abstract | |||
| OpenPGP is a message format for email (and file) encryption, that | OpenPGP is a message format for email (and file) encryption that | |||
| lacks a standardized lookup mechanism to obtain OpenPGP public keys. | lacks a standardized lookup mechanism to securely obtain OpenPGP | |||
| This document specifies a method for securely publishing and locating | public keys. This document specifies a method for publishing, | |||
| OpenPGP public keys in DNS using a new OPENPGPKEY DNS Resource | locating and verifying OpenPGP public keys in DNS for a specific | |||
| Record. | email address using a new OPENPGPKEY DNS Resource Record. Security | |||
| is provided via DNSSEC. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on September 10, 2015. | This Internet-Draft will expire on October 03, 2015. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2015 IETF Trust and the persons identified as the | Copyright (c) 2015 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. The OPENPGPKEY Resource Record . . . . . . . . . . . . . . . 3 | 2. The OPENPGPKEY Resource Record . . . . . . . . . . . . . . . 4 | |||
| 2.1. The OPENPGPKEY RDATA component . . . . . . . . . . . . . 3 | 2.1. The OPENPGPKEY RDATA component . . . . . . . . . . . . . 4 | |||
| 2.2. The OPENPGPKEY RDATA wire format . . . . . . . . . . . . 3 | 2.2. The OPENPGPKEY RDATA wire format . . . . . . . . . . . . 4 | |||
| 2.3. The OPENPGPKEY RDATA presentation format . . . . . . . . 4 | 2.3. The OPENPGPKEY RDATA presentation format . . . . . . . . 4 | |||
| 3. Location of the OPENPGPKEY record . . . . . . . . . . . . . . 4 | 3. Location of the OPENPGPKEY record . . . . . . . . . . . . . . 4 | |||
| 3.1. Email address variants . . . . . . . . . . . . . . . . . 4 | 3.1. Email address variants . . . . . . . . . . . . . . . . . 5 | |||
| 4. OpenPGP Key size and DNS . . . . . . . . . . . . . . . . . . 5 | 4. Application use of OPENPGPKEY . . . . . . . . . . . . . . . . 6 | |||
| 5. Security Considerations . . . . . . . . . . . . . . . . . . . 5 | 4.1. Obtaining an OpenPGP key for a specific email address . . 6 | |||
| 5.1. Response size . . . . . . . . . . . . . . . . . . . . . . 5 | 4.2. Confirming the validity of an OpenPGP key . . . . . . . . 6 | |||
| 5.2. Email address information leak . . . . . . . . . . . . . 5 | 4.3. Verifying an unknown OpenPGP signature . . . . . . . . . 6 | |||
| 5.3. Forward security of OpenPGP versus DNSSEC . . . . . . . . 6 | 5. OpenPGP Key size and DNS . . . . . . . . . . . . . . . . . . 6 | |||
| 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 7 | |||
| 6.1. OPENPGPKEY RRtype . . . . . . . . . . . . . . . . . . . . 7 | 6.1. Response size . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 7 | 6.2. Email address information leak . . . . . . . . . . . . . 7 | |||
| 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 6.3. Storage of OPENPGPKEY data . . . . . . . . . . . . . . . 8 | |||
| 8.1. Normative References . . . . . . . . . . . . . . . . . . 7 | 6.4. Forward security of OpenPGP versus DNSSEC . . . . . . . . 8 | |||
| 8.2. Informative References . . . . . . . . . . . . . . . . . 7 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8 | |||
| Appendix A. Generating OPENPGPKEY records . . . . . . . . . . . 8 | 7.1. OPENPGPKEY RRtype . . . . . . . . . . . . . . . . . . . . 8 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 9 | 8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 9 | ||||
| 9.1. Normative References . . . . . . . . . . . . . . . . . . 9 | ||||
| 9.2. Informative References . . . . . . . . . . . . . . . . . 9 | ||||
| Appendix A. Generating OPENPGPKEY records . . . . . . . . . . . 10 | ||||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 11 | ||||
| 1. Introduction | 1. Introduction | |||
| To encrypt a message to a target recipient using OpenPGP [RFC4880], | OpenPGP [RFC4880] public keys are used to encrypt or sign email | |||
| possession of the recipient's OpenPGP public key is required. To | messages and files. To encrypt an email message, the sender's email | |||
| obtain that public key, the sender's email client or MTA needs to | client or MTA needs to know where to find the recipient's OpenPGP | |||
| know where to find the recipient's public key. Once obtained, it | public key. Once obtained, it needs to find some proof that the | |||
| needs to find some proof that the public key found actually belongs | OpenPGP public key found actually belongs to the intended recipient. | |||
| to the intended recipient. | ||||
| Obtaining a public key is not a straightforward process as there are | Similarly, when files on a storage media are signed with an OpenPGP | |||
| no trusted standardized locations for publishing OpenPGP public keys | public key that is included on the storage media, this key needs to | |||
| indexed by email address. Instead, OpenPGP clients rely on "well- | be independently verified. | |||
| known key servers" that are accessed using the HTTP Keyserver | ||||
| Protocol ("HKP") or manually by users using a variety of differently | Obtaining and verifying an OpenPGP public key is not a | |||
| formatted front-end web pages. | straightforward process as there are no trusted standardized | |||
| locations for publishing OpenPGP public keys indexed by email | ||||
| address. Instead, OpenPGP clients rely on "well-known key servers" | ||||
| that are accessed using the HTTP Keyserver Protocol ("HKP") or | ||||
| manually by users using a variety of differently formatted front-end | ||||
| web pages. Worse, some OpenPGP users announce their OpenPGP public | ||||
| key fingerprint on social media with no method of validation | ||||
| whatsoever. | ||||
| Currently deployed key servers have no method of validating any | Currently deployed key servers have no method of validating any | |||
| uploaded OpenPGP public key. The key servers simply store and | uploaded OpenPGP public key. The key servers simply store and | |||
| publish. Anyone can add public keys with any identities and anyone | publish. Anyone can add public keys with any identities and anyone | |||
| can add signatures to any other public key using forged malicious | can add signatures to any other public key using forged malicious | |||
| identities. Furthermore, once uploaded, public keys cannot be | identities. Furthermore, once uploaded, public keys cannot be | |||
| deleted. People who did not pre-sign a key revocation can never | deleted. People who did not pre-sign a key revocation can never | |||
| remove their public key from these key servers once they lose their | remove their public key from these key servers once they lose their | |||
| private key. | private key. | |||
| The lack of a secure means to look up a public key for an email | The lack of a secure means to look up a public key for an email | |||
| address also prevents email clients and MUAs from encrypting a | address prevents email clients and MUAs from encrypting an outgoing | |||
| received email to the target recipient, forcing the software to send | email to the target recipient, forcing the software to send the | |||
| the message unencrypted. Currently deployed MTAs only support | message unencrypted. Currently deployed MTAs only support encrypting | |||
| encrypting the transport of the email, not the email contents itself. | the transport of the email, not the email contents itself, leaving | |||
| the content of the email exposed to anyone with access to any of the | ||||
| mail or storage servers used to transport the email from the sender | ||||
| to the receiver. | ||||
| This document describes a mechanism to associate a user's OpenPGP | This document describes a mechanism to associate a user's OpenPGP | |||
| public key with their email address, using a new DNS RRtype. | public key with their email address, using a new DNS RRtype. | |||
| The proposed new DNS Resource Record type is secured using DNSSEC. | The proposed new DNS Resource Record type is secured using DNSSEC. | |||
| This trust model is not meant to replace the Trust Signature model. | This trust model is not meant to replace the Trust Signature model. | |||
| However, it can be used to encrypt a message that would otherwise | However, it can be used to encrypt a message that would otherwise | |||
| have to be sent out unencrypted, where it could be monitored by a | have to be sent out unencrypted, where it could be monitored by a | |||
| third party in transit or located in plaintext on a storage or email | third party in transit or located in plaintext on a storage or email | |||
| server. | server. This method can also be used to obtain the OpenPGP public | |||
| key which can then be used for manual verification. | ||||
| 1.1. Terminology | 1.1. Terminology | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in RFC 2119 [RFC2119]. | document are to be interpreted as described in RFC 2119 [RFC2119]. | |||
| This document also makes use of standard DNSSEC and DANE terminology. | This document also makes use of standard DNSSEC and DANE terminology. | |||
| See DNSSEC [RFC4033], [RFC4034], [RFC4035], and DANE [RFC6698] for | See DNSSEC [RFC4033], [RFC4034], [RFC4035], and DANE [RFC6698] for | |||
| these terms. | these terms. | |||
| skipping to change at page 3, line 43 ¶ | skipping to change at page 4, line 27 ¶ | |||
| The OPENPGPKEY DNS resource record (RR) is used to associate an end | The OPENPGPKEY DNS resource record (RR) is used to associate an end | |||
| entity OpenPGP public key with an email address, thus forming a | entity OpenPGP public key with an email address, thus forming a | |||
| "OpenPGP public key association". | "OpenPGP public key association". | |||
| The type value allocated for the OPENPGPKEY RR type is 61. The | The type value allocated for the OPENPGPKEY RR type is 61. The | |||
| OPENPGPKEY RR is class independent. The OPENPGPKEY RR has no special | OPENPGPKEY RR is class independent. The OPENPGPKEY RR has no special | |||
| TTL requirements. | TTL requirements. | |||
| 2.1. The OPENPGPKEY RDATA component | 2.1. The OPENPGPKEY RDATA component | |||
| The RDATA (or RHS) of an OPENPGPKEY Resource Record contains a single | The RDATA portion of an OPENPGPKEY Resource Record contains a single | |||
| value consisting of a [RFC4880] formatted OpenPGP public keyring. | value consisting of a [RFC4880] formatted OpenPGP public keyring. | |||
| 2.2. The OPENPGPKEY RDATA wire format | 2.2. The OPENPGPKEY RDATA wire format | |||
| The RDATA Wire Format consists of a single OpenPGP public key as | The RDATA Wire Format consists of a single OpenPGP public key as | |||
| defined in Section 5.5.1.1 of [RFC4880]. Note that this format is | defined in Section 5.5.1.1 of [RFC4880]. Note that this format is | |||
| without ASCII armor or base64 encoding. | without ASCII armor or base64 encoding. | |||
| 2.3. The OPENPGPKEY RDATA presentation format | 2.3. The OPENPGPKEY RDATA presentation format | |||
| The RDATA Presentation Format, as visible in textual zone files, | The RDATA Presentation Format, as visible in textual zone files, | |||
| consists of a single OpenPGP public key as defined in | consists of a single OpenPGP public key as defined in | |||
| Section 5.5.1.1. of [RFC4880] encoded in Base64 [RFC4648] | Section 5.5.1.1. of [RFC4880] encoded in base64 as defined in | |||
| Section 4 of [RFC4648]. | ||||
| 3. Location of the OPENPGPKEY record | 3. Location of the OPENPGPKEY record | |||
| The DNS does not allow the use of all characters that are supported | The DNS does not allow the use of all characters that are supported | |||
| in the "local-part" of email addresses as defined in [RFC2822] and | in the "local-part" of email addresses as defined in [RFC2822] and | |||
| [RFC6530]. Therefore, email addresses are mapped into DNS using the | [RFC6530]. Therefore, email addresses are mapped into DNS using the | |||
| following method: | following method: | |||
| o The user name (the "left-hand side" of the email address, called | o The user name (the "left-hand side" of the email address, called | |||
| the "local-part" in the mail message format definition [RFC2822] | the "local-part" in the mail message format definition [RFC2822] | |||
| and the "local part" in the specification for internationalized | and the "local part" in the specification for internationalized | |||
| email [RFC6530]), is hashed using the SHA2-224 [RFC5754] | email [RFC6530]) should already be encoded in UTF-8 (or its subset | |||
| algorithm, with the hash being represented in its hexadecimal | ASCII). If it is written in another encoding it should be | |||
| representation, to become the left-most label in the prepared | converted to UTF-8. Next, it is turned into lowercase and hashed | |||
| domain name. This does not include the at symbol ("@") that | using the SHA2-256 [RFC5754] algorithm, with the hash truncated to | |||
| separates the left and right sides of the email address. | 28 octets and represented in its hexadecimal representation, to | |||
| become the left-most label in the prepared domain name. | ||||
| Truncation comes from the right-most octets. This does not | ||||
| include the at symbol ("@") that separates the left and right | ||||
| sides of the email address. | ||||
| o The string "_openpgpkey" becomes the second left-most label in the | o The string "_openpgpkey" becomes the second left-most label in the | |||
| prepared domain name. | prepared domain name. | |||
| o The domain name (the "right-hand side" of the email address, | o The domain name (the "right-hand side" of the email address, | |||
| called the "domain" in RFC 2822) is appended to the result of step | called the "domain" in RFC 2822) is appended to the result of step | |||
| 2 to complete the prepared domain name. | 2 to complete the prepared domain name. | |||
| For example, to request an OPENPGPKEY resource record for a user | For example, to request an OPENPGPKEY resource record for a user | |||
| whose email address is "hugh@example.com", an OPENPGPKEY query would | whose email address is "hugh@example.com", an OPENPGPKEY query would | |||
| be placed for the following QNAME: "8d5730bd8d76d417bf974c03f59eedb7a | be placed for the following QNAME: "c93f1e400f26708f98cb19d936620da35 | |||
| f98cb5c3dc73ea8ebbd54b7._openpgpkey.example.com". The corresponding | eec8f72e57f9eec01c1afd6._openpgpkey.example.com". The corresponding | |||
| RR in the example.com zone might look like (key shortened for | RR in the example.com zone might look like (key shortened for | |||
| formatting): | formatting): | |||
| 8d[..]b7._openpgpkey.example.com. IN OPENPGPKEY <base64 public key> | c9[..]d6._openpgpkey.example.com. IN OPENPGPKEY <base64 public key> | |||
| 3.1. Email address variants | 3.1. Email address variants | |||
| Some email service providers and email software perform automatic | Mail systems usually handle variant forms of local-parts. The most | |||
| mappings of email addresses based on special characters. This can | common variants are upper and lower case, which are now invariably | |||
| complicate finding the OPENPGPKEY record associated with the | treated as equivalent. But many other variants are possible. Some | |||
| dynamically created email address. Some well known examples are | systems allow and ignore "noise" characters such as dots, so local | |||
| listed below | parts johnsmith and John.Smith would be equivalent. Many systems | |||
| o The LHS is case insensitive, Hugh@example.com and HUGH@example.com | allow "extensions" such as john-ext or mary+ext where john or mary is | |||
| map to hugh@example.com. Some email clients also automatically | treated as the effective local-part, and the ext is passed to the | |||
| uppercase the first letter of an email address when typing it in. | recipient for further handling. This can complicate finding the | |||
| OPENPGPKEY record associated with the dynamically created email | ||||
| address. | ||||
| o Everything after a "+" symbol is dynamc. hugh+string@example.com | [RFC5321] and its predecessors have always made it clear that only | |||
| maps to hugh@example.com. | the recipient MTA is allowed to interpret the local-part of an | |||
| address. A client supporting OPENPGPKEY therefor MUST NOT perform | ||||
| any kind of mapping rules based on the email address. As the local- | ||||
| part is converted to lowercase before hashing, case sensitivity will | ||||
| not cause problems for the OPENPGPKEY lookup. | ||||
| o Dots are optional. hugh.daniel@example.com maps to | 4. Application use of OPENPGPKEY | |||
| hughdaniel@example.com. | ||||
| Software implementing DNS lookup for the OPENPGPKEY RRtype MAY | The OPENPGPKEY record allows an application or service to obtain or | |||
| perform similar translations rules while trying to find the | verify an OpenPGP public key. The lookup result MUST pass DNSSEC | |||
| OPENPGPKEY record. | validation; if validation reaches any state other than "Secure", the | |||
| verification MUST be treated as a failure. | ||||
| 4. OpenPGP Key size and DNS | 4.1. Obtaining an OpenPGP key for a specific email address | |||
| If no OpenPGP public keys are known for an email address, an | ||||
| OPENPGPKEY lookup can be performed to discover the OpenPGP public key | ||||
| that belongs to a specific email address. This public key can then | ||||
| be used to verify a received signed message or can be used to send | ||||
| out an encrypted email message. | ||||
| 4.2. Confirming the validity of an OpenPGP key | ||||
| Locally stored OpenPGP public keys are not automatically refreshed. | ||||
| If the owner of that key creates a new OpenPGP public key, that owner | ||||
| is unable to securely notify all users and applications that have its | ||||
| old OpenPGP public key. Applications and users can perform an | ||||
| OPENPGPKEY lookup to confirm the locally stored OpenPGP public key is | ||||
| still the correct key to use. If verifying a locally stored OpenPGP | ||||
| public key and the OpenPGP public key found through DNS is different | ||||
| from the locally stored OpenPGP public key, the verification MUST be | ||||
| treated as a failure. An application that can interact with the user | ||||
| MAY ask the user for guidance. | ||||
| 4.3. Verifying an unknown OpenPGP signature | ||||
| Storage media can be signed using an OpenPGP public key. Even if the | ||||
| OpenPGP public key is included on the storage media, it needs to be | ||||
| independently validated. OpenPGP public keys contain one or more IDs | ||||
| than can have the syntax of an email address. An application can | ||||
| perform a lookup for an OPENPGPKEY at the expected location for the | ||||
| specific email address to confirm the validity of the OpenPGP public | ||||
| key. Once the key has been validated, all files on the storage media | ||||
| that have been signed by this key can now be verified. | ||||
| 5. OpenPGP Key size and DNS | ||||
| Due to the expected size of the OPENPGPKEY record, it is recommended | Due to the expected size of the OPENPGPKEY record, it is recommended | |||
| to perform DNS queries for the OPENPGPKEY record using TCP, not UDP. | to perform DNS queries for the OPENPGPKEY record using TCP, not UDP. | |||
| Although the reliability of the transport of large DNS Resource | Although the reliability of the transport of large DNS Resource | |||
| Records has improved in the last years, it is still recommended to | Records has improved in the last years, it is still recommended to | |||
| keep the DNS records as small as possible without sacrificing the | keep the DNS records as small as possible without sacrificing the | |||
| security properties of the public key. The algorithm type and key | security properties of the public key. The algorithm type and key | |||
| size of OpenPGP keys should not be modified to accommodate this | size of OpenPGP keys should not be modified to accommodate this | |||
| section. | section. | |||
| OpenPGP supports various attributes that do not contribute to the | OpenPGP supports various attributes that do not contribute to the | |||
| security of a key, such as an embedded image file. It is recommended | security of a key, such as an embedded image file. It is recommended | |||
| that these properties are not exported to OpenPGP public keyrings | that these properties are not exported to OpenPGP public keyrings | |||
| that are used to create OPENPGPKEY Resource Records. Some OpenPGP | that are used to create OPENPGPKEY Resource Records. Some OpenPGP | |||
| software, for example GnuPG, have support for a "minimal key export" | software, for example GnuPG, have support for a "minimal key export" | |||
| that is well suited to use as OPENPGPKEY RDATA. See Appendix A. | that is well suited to use as OPENPGPKEY RDATA. See Appendix A. | |||
| 5. Security Considerations | 6. Security Considerations | |||
| OPENPGPKEY usage considerations are published in [OPENPGPKEY-USAGE]. | OPENPGPKEY usage considerations are published in [OPENPGPKEY-USAGE]. | |||
| 5.1. Response size | 6.1. Response size | |||
| To prevent amplification attacks, an Authoritative DNS server MAY | To prevent amplification attacks, an Authoritative DNS server MAY | |||
| wish to prevent returning OPENPGPKEY records over UDP unless the | wish to prevent returning OPENPGPKEY records over UDP unless the | |||
| source IP address has been verified with [DNS-COOKIES]. Such servers | source IP address has been verified with [DNS-COOKIES]. Such servers | |||
| MUST NOT return REFUSED, but answer the query with an empty Answer | MUST NOT return REFUSED, but answer the query with an empty Answer | |||
| Section and the truncation flag set ("TC=1). | Section and the truncation flag set ("TC=1"). | |||
| 6.2. Email address information leak | ||||
| 5.2. Email address information leak | ||||
| Email addresses are not secret. Using them causes their publication. | Email addresses are not secret. Using them causes their publication. | |||
| The hashing of the user name in this document is not a security | The hashing of the user name in this document is not a security | |||
| feature. Publishing OPENPGPKEY records however, will create a list | feature. Publishing OPENPGPKEY records however, will create a list | |||
| of hashes of valid email addresses, which could simplify obtaining a | of hashes of valid email addresses, which could simplify obtaining a | |||
| list of valid email addresses for a particular domain. It is | list of valid email addresses for a particular domain. It is | |||
| desirable to not ease the harvesting of email addresses where | desirable to not ease the harvesting of email addresses where | |||
| possible. | possible. | |||
| The domain name part of the email address is not used as part of the | The domain name part of the email address is not used as part of the | |||
| hash so that hashes can be used in multiple zones deployed using | hash so that hashes can be used in multiple zones deployed using | |||
| skipping to change at page 6, line 27 ¶ | skipping to change at page 8, line 5 ¶ | |||
| somewhat countered by using NSEC3. | somewhat countered by using NSEC3. | |||
| DNS zones that are signed with DNSSEC using NSEC for denial of | DNS zones that are signed with DNSSEC using NSEC for denial of | |||
| existence are susceptible to zone-walking, a mechanism that allows | existence are susceptible to zone-walking, a mechanism that allows | |||
| someone to enumerate all the OPENPGPKEY hashes in a zone. This can | someone to enumerate all the OPENPGPKEY hashes in a zone. This can | |||
| be used in combination with previously hashed common or short user | be used in combination with previously hashed common or short user | |||
| names (in rainbow tables) to deduce valid email addresses. DNSSEC- | names (in rainbow tables) to deduce valid email addresses. DNSSEC- | |||
| signed zones using NSEC3 for denial of existence instead of NSEC are | signed zones using NSEC3 for denial of existence instead of NSEC are | |||
| significantly harder to brute-force after performing a zone-walk. | significantly harder to brute-force after performing a zone-walk. | |||
| 5.3. Forward security of OpenPGP versus DNSSEC | 6.3. Storage of OPENPGPKEY data | |||
| Users may have a local key store with OpenPGP public keys. An | ||||
| application supporting the use of OPENPGPKEY DNS records MUST NOT | ||||
| modify the local key store without explicit confirmation of the user, | ||||
| as the application is unaware of the user's personal policy for | ||||
| adding, removing or updating their local key store. An application | ||||
| MAY warn the user if an OPENPGPKEY record does not match the OpenPGP | ||||
| public key in the local key store. | ||||
| OpenPGP public keys obtained via OPENPGPKEY records should not be | ||||
| stored beyond their DNS TTL value. | ||||
| 6.4. Forward security of OpenPGP versus DNSSEC | ||||
| DNSSEC key sizes are chosen based on the fact that these keys can be | DNSSEC key sizes are chosen based on the fact that these keys can be | |||
| rolled with next to no requirement for security in the future. If | rolled with next to no requirement for security in the future. If | |||
| one doubts the strength or security of the DNSSEC key for whatever | one doubts the strength or security of the DNSSEC key for whatever | |||
| reason, one simply rolls to a new DNSSEC key with a stronger | reason, one simply rolls to a new DNSSEC key with a stronger | |||
| algorithm or larger key size. On the other hand, OpenPGP key sizes | algorithm or larger key size. On the other hand, OpenPGP key sizes | |||
| are chosen based on how many years (or decades) their encryption | are chosen based on how many years (or decades) their encryption | |||
| should remain unbreakable by adversaries that own large scale | should remain unbreakable by adversaries that own large scale | |||
| computational resources. | computational resources. | |||
| skipping to change at page 7, line 5 ¶ | skipping to change at page 8, line 42 ¶ | |||
| delegated child zones, irrespective of the key size of the OpenPGP | delegated child zones, irrespective of the key size of the OpenPGP | |||
| keypair. Any future messages encrypted with the malicious OpenPGP | keypair. Any future messages encrypted with the malicious OpenPGP | |||
| key could then be read. | key could then be read. | |||
| Therefore, an OpenPGP key obtained via an OPENPGPKEY record can only | Therefore, an OpenPGP key obtained via an OPENPGPKEY record can only | |||
| be trusted as much as the DNS domain can be trusted, and is no | be trusted as much as the DNS domain can be trusted, and is no | |||
| substitute for in-person key verification of the "Web of Trust". See | substitute for in-person key verification of the "Web of Trust". See | |||
| [OPENPGPKEY-USAGE] for more in-depth information on safe usage of | [OPENPGPKEY-USAGE] for more in-depth information on safe usage of | |||
| OPENPGPKEY based OpenPGP keys. | OPENPGPKEY based OpenPGP keys. | |||
| 6. IANA Considerations | 7. IANA Considerations | |||
| 6.1. OPENPGPKEY RRtype | 7.1. OPENPGPKEY RRtype | |||
| This document uses a new DNS RR type, OPENPGPKEY, whose value 61 has | This document uses a new DNS RR type, OPENPGPKEY, whose value 61 has | |||
| been allocated by IANA from the Resource Record (RR) TYPEs | been allocated by IANA from the Resource Record (RR) TYPEs | |||
| subregistry of the Domain Name System (DNS) Parameters registry. | subregistry of the Domain Name System (DNS) Parameters registry. | |||
| 7. Acknowledgements | 8. Acknowledgments | |||
| This document is based on RFC-4255 and draft-ietf-dane-smime whose | This document is based on RFC-4255 and draft-ietf-dane-smime whose | |||
| authors are Paul Hoffman, Jacob Schlyter and W. Griffin. Olafur | authors are Paul Hoffman, Jacob Schlyter and W. Griffin. Olafur | |||
| Gudmundsson provided feedback and suggested various improvements. | Gudmundsson provided feedback and suggested various improvements. | |||
| Willem Toorop contributed the gpg and hexdump command options. Edwin | Willem Toorop contributed the gpg and hexdump command options. Edwin | |||
| Taylor contributed language improvements for various iterations of | Taylor contributed language improvements for various iterations of | |||
| this document. | this document. Text regarding email mappings was taken from draft- | |||
| levine-dns-mailbox whose author is John Levine. | ||||
| 8. References | 9. References | |||
| 8.1. Normative References | 9.1. Normative References | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
| [RFC4033] Arends, R., Austein, R., Larson, M., Massey, D., and S. | [RFC4033] Arends, R., Austein, R., Larson, M., Massey, D., and S. | |||
| Rose, "DNS Security Introduction and Requirements", RFC | Rose, "DNS Security Introduction and Requirements", RFC | |||
| 4033, March 2005. | 4033, March 2005. | |||
| [RFC4034] Arends, R., Austein, R., Larson, M., Massey, D., and S. | [RFC4034] Arends, R., Austein, R., Larson, M., Massey, D., and S. | |||
| Rose, "Resource Records for the DNS Security Extensions", | Rose, "Resource Records for the DNS Security Extensions", | |||
| skipping to change at page 7, line 50 ¶ | skipping to change at page 9, line 40 ¶ | |||
| [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data | [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data | |||
| Encodings", RFC 4648, October 2006. | Encodings", RFC 4648, October 2006. | |||
| [RFC4880] Callas, J., Donnerhacke, L., Finney, H., Shaw, D., and R. | [RFC4880] Callas, J., Donnerhacke, L., Finney, H., Shaw, D., and R. | |||
| Thayer, "OpenPGP Message Format", RFC 4880, November 2007. | Thayer, "OpenPGP Message Format", RFC 4880, November 2007. | |||
| [RFC5754] Turner, S., "Using SHA2 Algorithms with Cryptographic | [RFC5754] Turner, S., "Using SHA2 Algorithms with Cryptographic | |||
| Message Syntax", RFC 5754, January 2010. | Message Syntax", RFC 5754, January 2010. | |||
| 8.2. Informative References | 9.2. Informative References | |||
| [DNS-COOKIES] | [DNS-COOKIES] | |||
| Eastlake, Donald., "Domain Name System (DNS) Cookies", | Eastlake, Donald., "Domain Name System (DNS) Cookies", | |||
| draft-ietf-dnsop-cookies (work in progress), February | draft-ietf-dnsop-cookies (work in progress), February | |||
| 2015. | 2015. | |||
| [OPENPGPKEY-USAGE] | [OPENPGPKEY-USAGE] | |||
| Wouters, P., "Usage considerations with the DNS OPENPGPKEY | Wouters, P., "Usage considerations with the DNS OPENPGPKEY | |||
| record", draft-dane-openpgpkey-usage (work in progress), | record", draft-dane-openpgpkey-usage (work in progress), | |||
| October 2014. | October 2014. | |||
| [RFC2181] Elz, R. and R. Bush, "Clarifications to the DNS | [RFC2181] Elz, R. and R. Bush, "Clarifications to the DNS | |||
| Specification", RFC 2181, July 1997. | Specification", RFC 2181, July 1997. | |||
| [RFC2822] Resnick, P., "Internet Message Format", RFC 2822, April | [RFC2822] Resnick, P., "Internet Message Format", RFC 2822, April | |||
| 2001. | 2001. | |||
| [RFC3597] Gustafsson, A., "Handling of Unknown DNS Resource Record | [RFC3597] Gustafsson, A., "Handling of Unknown DNS Resource Record | |||
| (RR) Types", RFC 3597, September 2003. | (RR) Types", RFC 3597, September 2003. | |||
| [RFC5233] Murchison, K., "Sieve Email Filtering: Subaddress | ||||
| Extension", RFC 5233, January 2008. | ||||
| [RFC5321] Klensin, J., "Simple Mail Transfer Protocol", RFC 5321, | ||||
| October 2008. | ||||
| [RFC6530] Klensin, J. and Y. Ko, "Overview and Framework for | [RFC6530] Klensin, J. and Y. Ko, "Overview and Framework for | |||
| Internationalized Email", RFC 6530, February 2012. | Internationalized Email", RFC 6530, February 2012. | |||
| [RFC6672] Rose, S. and W. Wijngaards, "DNAME Redirection in the | [RFC6672] Rose, S. and W. Wijngaards, "DNAME Redirection in the | |||
| DNS", RFC 6672, June 2012. | DNS", RFC 6672, June 2012. | |||
| [RFC6698] Hoffman, P. and J. Schlyter, "The DNS-Based Authentication | [RFC6698] Hoffman, P. and J. Schlyter, "The DNS-Based Authentication | |||
| of Named Entities (DANE) Transport Layer Security (TLS) | of Named Entities (DANE) Transport Layer Security (TLS) | |||
| Protocol: TLSA", RFC 6698, August 2012. | Protocol: TLSA", RFC 6698, August 2012. | |||
| [RFC7129] Gieben, R. and W. Mekking, "Authenticated Denial of | ||||
| Existence in the DNS", RFC 7129, February 2014. | ||||
| Appendix A. Generating OPENPGPKEY records | Appendix A. Generating OPENPGPKEY records | |||
| The commonly available GnuPG software can be used to generate the | The commonly available GnuPG software can be used to generate the | |||
| RRdata portion of an OPENPGPKEY record: | RRdata portion of an OPENPGPKEY record: | |||
| gpg --export --export-options export-minimal \ | gpg --export --export-options export-minimal \ | |||
| hugh@example.com | base64 | hugh@example.com | base64 | |||
| The --armor or -a option of the gpg command should NOT be used, as it | The --armor or -a option of the gpg command should NOT be used, as it | |||
| adds additional markers around the armored key. | adds additional markers around the armored key. | |||
| skipping to change at page 9, line 15 ¶ | skipping to change at page 11, line 15 ¶ | |||
| gpg --export --export-options export-minimal \ | gpg --export --export-options export-minimal \ | |||
| hugh@example.com | wc -c | hugh@example.com | wc -c | |||
| gpg --export --export-options export-minimal \ | gpg --export --export-options export-minimal \ | |||
| hugh@example.com | hexdump -e \ | hugh@example.com | hexdump -e \ | |||
| '"\t" /1 "%.2x"' -e '/32 "\n"' | '"\t" /1 "%.2x"' -e '/32 "\n"' | |||
| These values can then be used to generate a generic record (line | These values can then be used to generate a generic record (line | |||
| break has been added for formatting): | break has been added for formatting): | |||
| <SHA2-224(hugh)>._openpgpkey.example.com. IN TYPE61 \# \ | <SHA2-256-trunc(hugh)>._openpgpkey.example.com. IN TYPE61 \# \ | |||
| <numOctets> <keydata in hex> | <numOctets> <keydata in hex> | |||
| The openpgpkey command in the hash-slinger software can be used to | The openpgpkey command in the hash-slinger software can be used to | |||
| generate complete OPENPGPKEY records | generate complete OPENPGPKEY records | |||
| ~> openpgpkey --output rfc hugh@example.com | ~> openpgpkey --output rfc hugh@example.com | |||
| 8d[...]b7._openpgpkey.example.com. IN OPENPGPKEY mQCNAzIG[...] | c9[..]d6._openpgpkey.example.com. IN OPENPGPKEY mQCNAzIG[...] | |||
| ~> openpgpkey --output generic hugh@example.com | ~> openpgpkey --output generic hugh@example.com | |||
| 8d[...]b7._openpgpkey.example.com. IN TYPE61 \# 2313 99008d03[...] | c9[..]d6._openpgpkey.example.com. IN TYPE61 \# 2313 99008d03[...] | |||
| Author's Address | Author's Address | |||
| Paul Wouters | Paul Wouters | |||
| Red Hat | Red Hat | |||
| Email: pwouters@redhat.com | Email: pwouters@redhat.com | |||
| End of changes. 37 change blocks. | ||||
| 86 lines changed or deleted | 168 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||