| < draft-ietf-tls-openpgp-keys-10.txt | draft-ietf-tls-openpgp-keys-11.txt > | |||
|---|---|---|---|---|
| TLS Working Group N. Mavrogiannopoulos | TLS Working Group N. Mavrogiannopoulos | |||
| Internet-Draft Independent | Internet-Draft Independent | |||
| Expires: December 7, 2006 June 5, 2006 | Expires: February 1, 2007 July 31, 2006 | |||
| Using OpenPGP keys for TLS authentication | Using OpenPGP keys for TLS authentication | |||
| draft-ietf-tls-openpgp-keys-10 | draft-ietf-tls-openpgp-keys-11 | |||
| Status of this Memo | Status of this Memo | |||
| By submitting this Internet-Draft, each author represents that any | By submitting this Internet-Draft, each author represents that any | |||
| applicable patent or other IPR claims of which he or she is aware | applicable patent or other IPR claims of which he or she is aware | |||
| have been or will be disclosed, and any of which he or she becomes | have been or will be disclosed, and any of which he or she becomes | |||
| aware will be disclosed, in accordance with Section 6 of BCP 79. | aware will be disclosed, in accordance with Section 6 of BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that | |||
| skipping to change at page 1, line 33 ¶ | skipping to change at page 1, line 33 ¶ | |||
| 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." | |||
| The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
| http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
| The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
| http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
| This Internet-Draft will expire on December 7, 2006. | This Internet-Draft will expire on February 1, 2007. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The Internet Society (2006). | Copyright (C) The Internet Society (2006). | |||
| Abstract | Abstract | |||
| This memo proposes extensions to the TLS protocol to support the | This memo proposes extensions to the TLS protocol to support the | |||
| OpenPGP trust model and keys. The extensions discussed here include | OpenPGP key format. The extensions discussed here include a | |||
| a certificate type negotiation mechanism, and the required | certificate type negotiation mechanism, and the required | |||
| modifications to the TLS Handshake Protocol. | modifications to the TLS Handshake Protocol. | |||
| Table of Contents | ||||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | ||||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | ||||
| 3. Changes to the Handshake Message Contents . . . . . . . . . . 5 | ||||
| 3.1. Client Hello . . . . . . . . . . . . . . . . . . . . . . . 5 | ||||
| 3.2. Server Hello . . . . . . . . . . . . . . . . . . . . . . . 5 | ||||
| 3.3. Server Certificate . . . . . . . . . . . . . . . . . . . . 6 | ||||
| 3.4. Certificate request . . . . . . . . . . . . . . . . . . . 7 | ||||
| 3.5. Client certificate . . . . . . . . . . . . . . . . . . . . 7 | ||||
| 3.6. Other Handshake messages . . . . . . . . . . . . . . . . . 7 | ||||
| 4. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | ||||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | ||||
| 6. References . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | ||||
| 6.1. Normative References . . . . . . . . . . . . . . . . . . . 10 | ||||
| 6.2. Informative References . . . . . . . . . . . . . . . . . . 10 | ||||
| Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 11 | ||||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 12 | ||||
| Intellectual Property and Copyright Statements . . . . . . . . . . 13 | ||||
| 1. Introduction | 1. Introduction | |||
| At the time of writing, TLS [TLS] uses the PKIX [PKIX] | The IETF has two sets of standards for public key certificates, one | |||
| infrastructure, to provide certificate services. Currently the PKIX | set for use of X.509 certificates [PKIX] and one for OpenPGP | |||
| protocols are limited to a hierarchical key management and as a | certificates [OpenPGP]. At the time of writing, the TLS [TLS] | |||
| result, applications which follow different - non hierarchical - | standards are defined to use only X.509 certificates. This document | |||
| trust models, could not be benefited by TLS. | specifies a way to negotiate use of OpenPGP certificates for a TLS | |||
| session, and specifies how to transport OpenPGP certificates via TLS. | ||||
| The proposed extensions are backward compatible with the current TLS | ||||
| specification, so that existing client and server implementations | ||||
| that make use of X.509 certificates are not affected. | ||||
| OpenPGP keys (sometimes called OpenPGP certificates), provide | 2. Terminology | |||
| security services for electronic communications. They are widely | ||||
| deployed, especially in electronic mail applications, provide public | ||||
| key authentication services, allow distributed key management and can | ||||
| be used with a non hierarchical trust model called the "web of trust" | ||||
| [WOT]. | ||||
| This document will extend the TLS protocol to support OpenPGP keys | The term ``OpenPGP key'' is used in this document as in the OpenPGP | |||
| using the existing TLS cipher suites. In brief this would be | specification [OpenPGP]. We use the term ``OpenPGP certificate'' to | |||
| achieved by adding a negotiation of the certificate type in addition | refer to OpenPGP keys that are enabled for authentication. | |||
| to the normal handshake negotiations. Then the required | ||||
| modifications to the handshake messages, in order to hold OpenPGP | ||||
| keys as well, will be described. The normal handshake procedure with | ||||
| X.509 certificates is not altered, to preserve compatibility with | ||||
| existing TLS servers and clients. | ||||
| This document uses the same notation used in the TLS Protocol | This document uses the same notation and terminology used in the TLS | |||
| specification [TLS]. | Protocol specification [TLS]. | |||
| 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 [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
| 2. Changes to the Handshake Message Contents | 3. Changes to the Handshake Message Contents | |||
| This section describes the changes to the TLS handshake message | This section describes the changes to the TLS handshake message | |||
| contents when OpenPGP keys are to be used for authentication. | contents when OpenPGP certificates are to be used for authentication. | |||
| 2.1. Client Hello | 3.1. Client Hello | |||
| In order to indicate the support of multiple certificate types | In order to indicate the support of multiple certificate types | |||
| clients will include an extension of type "cert_type" (see Section 4) | clients MUST include an extension of type "cert_type" (see Section 5) | |||
| to the extended client hello message. The hello extension mechanism | to the extended client hello message. The hello extension mechanism | |||
| is described in [TLSEXT]. | is described in [TLSEXT]. | |||
| This extension carries a list of supported certificate types the | This extension carries a list of supported certificate types the | |||
| client can use, sorted by client preference. This extension MUST be | client can use, sorted by client preference. This extension MUST be | |||
| omitted if the client only supports X.509 certificates. The | omitted if the client only supports X.509 certificates. The | |||
| "extension_data" field of this extension will contain a | "extension_data" field of this extension contains a | |||
| CertificateTypeExtension structure. | CertificateTypeExtension structure. | |||
| enum { client, server } ClientOrServerExtension; | enum { client, server } ClientOrServerExtension; | |||
| enum { X.509(0), OpenPGP(1), (255) } CertificateType; | enum { X.509(0), OpenPGP(1), (255) } CertificateType; | |||
| struct { | struct { | |||
| select(ClientOrServerExtension) { | select(ClientOrServerExtension) { | |||
| case client: | case client: | |||
| CertificateType certificate_types<1..2^8-1>; | CertificateType certificate_types<1..2^8-1>; | |||
| case server: | case server: | |||
| CertificateType certificate_type; | CertificateType certificate_type; | |||
| } | } | |||
| } CertificateTypeExtension; | } CertificateTypeExtension; | |||
| No new cipher suites are required to use OpenPGP keys. All existing | No new cipher suites are required to use OpenPGP certificates. All | |||
| cipher suites that support a compatible with the key, key exchange | existing cipher suites that support a compatible, with the key, key | |||
| method can be used in combination with OpenPGP keys. | exchange method can be used in combination with OpenPGP certificates. | |||
| 2.2. Server Hello | 3.2. Server Hello | |||
| Servers that receive an extended client hello containing the | If the server receives a client hello that contains the "cert_type" | |||
| "cert_type" extension, and have chosen a cipher suite that supports | extension and chooses a cipher suite that requires a certificate, | |||
| certificates, they MUST select a certificate type from the | then two outcomes are possible. The server MUST either select a | |||
| certificate_types field in the extended client hello, or terminate | certificate type from the certificate_types field in the extended | |||
| the connection with a fatal alert of type "unsupported_certificate". | client hello or terminate the connection with a fatal alert of type | |||
| "unsupported_certificate". | ||||
| The certificate type selected by the server, is encoded in a | The certificate type selected by the server is encoded in a | |||
| CertificateTypeExtension structure, which is included in the extended | CertificateTypeExtension structure, which is included in the extended | |||
| server hello message, using an extension of type "cert_type". | server hello message using an extension of type "cert_type". Servers | |||
| Servers that only support X.509 certificates MAY omit including the | that only support X.509 certificates MAY omit including the | |||
| "cert_type" extension in the extended server hello. | "cert_type" extension in the extended server hello. | |||
| 2.3. Server Certificate | 3.3. Server Certificate | |||
| The contents of the certificate message sent from server to client | The contents of the certificate message sent from server to client | |||
| and vice versa are determined by the negotiated certificate type and | and vice versa are determined by the negotiated certificate type and | |||
| the selected cipher suite's key exchange algorithm. | the selected cipher suite's key exchange algorithm. | |||
| If the OpenPGP certificate type is negotiated then it is required to | If the OpenPGP certificate type is negotiated then it is required to | |||
| present an OpenPGP key in the Certificate message. The OpenPGP key | present an OpenPGP certificate in the Certificate message. The | |||
| must contain a public key that matches the selected key exchange | certificate must contain a public key that matches the selected key | |||
| algorithm, as shown below. | exchange algorithm, as shown below. | |||
| Key Exchange Algorithm OpenPGP Key Type | Key Exchange Algorithm OpenPGP Certificate Type | |||
| RSA RSA public key which can be used for | RSA RSA public key which can be used for | |||
| encryption. | encryption. | |||
| DHE_DSS DSS public key. | DHE_DSS DSS public key which can be used for | |||
| authentication. | ||||
| DHE_RSA RSA public key which can be used for | DHE_RSA RSA public key which can be used for | |||
| signing. | authentication. | |||
| An OpenPGP public key appearing in the Certificate message will be | An OpenPGP certificate appearing in the Certificate message is sent | |||
| sent using the binary OpenPGP format. The term public key is used to | using the binary OpenPGP format. The certificate MUST contain all | |||
| describe a composition of OpenPGP packets to form a block of data | the elements required by Section 10.1 of [OpenPGP]. | |||
| which contains all information needed by the peer. This includes | ||||
| public key packets, user ID packets and all the fields described in | ||||
| section 10.1 of [OpenPGP]. | ||||
| The option is also available to send an OpenPGP fingerprint, instead | The option is also available to send an OpenPGP fingerprint, instead | |||
| of sending the entire key. The process of fingerprint generation is | of sending the entire certificate. The process of fingerprint | |||
| described in section 11.2 of [OpenPGP]. The peer shall respond with | generation is described in section 11.2 of [OpenPGP]. The peer shall | |||
| a "certificate_unobtainable" fatal alert if the key with the given | respond with a "certificate_unobtainable" fatal alert if the | |||
| key fingerprint cannot be found. The "certificate_unobtainable" | certificate with the given fingerprint cannot be found. The | |||
| fatal alert is defined in section 4 of [TLSEXT]. | "certificate_unobtainable" fatal alert is defined in section 4 of | |||
| [TLSEXT]. | ||||
| If the key is not valid, expired, revoked, corrupt, the appropriate | ||||
| fatal alert message is sent from section A.3 of the TLS | ||||
| specification. If a key is valid and neither expired nor revoked, it | ||||
| is accepted by the protocol. The key validation procedure is a local | ||||
| matter outside the scope of this document. | ||||
| enum { | enum { | |||
| key_fingerprint (0), key (1), (255) | cert_fingerprint (0), cert (1), (255) | |||
| } PGPKeyDescriptorType; | } OpenPGPCertDescriptorType; | |||
| opaque PGPKeyFingerprint<16..20>; | opaque OpenPGPCertFingerprint<16..20>; | |||
| opaque PGPKey<0..2^24-1>; | opaque OpenPGPCert<0..2^24-1>; | |||
| struct { | struct { | |||
| PGPKeyDescriptorType descriptorType; | OpenPGPCertDescriptorType descriptorType; | |||
| select (descriptorType) { | select (descriptorType) { | |||
| case key_fingerprint: PGPKeyFingerprint; | case cert_fingerprint: OpenPGPCertFingerprint; | |||
| case key: PGPKey; | case cert: OpenPGPCert; | |||
| } | } | |||
| } Certificate; | } Certificate; | |||
| 2.4. Certificate request | 3.4. Certificate request | |||
| The semantics of this message remain the same as in the TLS | The semantics of this message remain the same as in the TLS | |||
| specification. However if this message is sent, and the negotiated | specification. However if this message is sent, and the negotiated | |||
| certificate type is OpenPGP, the "certificate_authorities" list MUST | certificate type is OpenPGP, the "certificate_authorities" list MUST | |||
| be empty. | be empty. | |||
| 2.5. Client certificate | 3.5. Client certificate | |||
| This message is only sent in response to the certificate request | This message is only sent in response to the certificate request | |||
| message. The client certificate message is sent using the same | message. The client certificate message is sent using the same | |||
| formatting as the server certificate message and it is also required | formatting as the server certificate message and it is also required | |||
| to present a certificate that matches the negotiated certificate | to present a certificate that matches the negotiated certificate | |||
| type. If OpenPGP keys have been selected, and no key is available | type. If OpenPGP certificates have been selected and no certificate | |||
| from the client, then a Certificate that contains an empty PGPKey | is available from the client, then a Certificate structure that | |||
| should be sent. The server may respond with a "handshake_failure" | contains an empty OpenPGPCert vector MUST be sent. The server SHOULD | |||
| fatal alert if client authentication is required. | respond with a "handshake_failure" fatal alert if client | |||
| authentication is required. | ||||
| 2.6. Other Handshake messages | 3.6. Other Handshake messages | |||
| The rest of the handshake messages such as the server key exchange, | All the other handshake messages are identical to the TLS | |||
| the certificate verify and the finished messages are identical to the | specification. | |||
| TLS specification. | ||||
| 3. Security Considerations | 4. Security Considerations | |||
| As with X.509 ASN.1 formatted keys, OpenPGP keys need specialized | All security considerations discussed in [TLS], [TLSEXT] as well as | |||
| parsers. Care must be taken to make those parsers safe against | [OpenPGP] apply to this document. Considerations about the use of | |||
| maliciously modified keys, that could cause arbitrary code execution. | the web of trust or identity and certificate verification procedure | |||
| are outside the scope of this document. These are considered issues | ||||
| to be handled by the application layer protocols. | ||||
| Security considerations about the use of the web of trust or the | The protocol for certificate type negotiation is identical in | |||
| verification procedure are outside the scope of this document and | operation to ciphersuite negotiation of the [TLS] specification with | |||
| they are considered an issue to be handled by local policy. | the addition of default values when the extension is omitted. Since | |||
| those omissions have a unique meaning and the same protection is | ||||
| applied to the values as with ciphersuites, it is believed that the | ||||
| security properties of this negotiation are the same as with | ||||
| ciphersuite negotiation. | ||||
| 4. IANA Considerations | When using OpenPGP fingerprints instead of the full certificates, the | |||
| discussion in Section 6.3 of [TLSEXT] for "Client Certificate URLs" | ||||
| applies, especially when external servers are used to retrieve keys. | ||||
| However a major difference is that while the "client_certificate_url" | ||||
| extension allows to identify certificates without including the | ||||
| certificate hashes, this is not possible in the protocol proposed | ||||
| here. In this protocol the certificates, when not sent, are always | ||||
| identified by their fingerprint, which serves as a cryptographic hash | ||||
| of the certificate (see Section 11.2 of [OpenPGP]). | ||||
| The information that is available to participating parties and | ||||
| eavesdroppers (when confidentiality is not available through a | ||||
| previous handshake) is the number and the types of certificates they | ||||
| hold, plus the contents of certificates. | ||||
| 5. IANA Considerations | ||||
| This document defines a new TLS extension, "cert_type", assigned a | This document defines a new TLS extension, "cert_type", assigned a | |||
| value of TBD-BY-IANA (the value 7 is suggested) from the TLS | value of TBD-BY-IANA (the value 7 is suggested) from the TLS | |||
| ExtensionType registry defined in [TLSEXT]. This value is used as | ExtensionType registry defined in [TLSEXT]. This value is used as | |||
| the extension number for the extensions in both the client hello | the extension number for the extensions in both the client hello | |||
| message and the server hello message. The new extension type will be | message and the server hello message. The new extension type is used | |||
| used for certificate type negotiation. | for certificate type negotiation. | |||
| The "cert_type" extension contains an 8-bit CertificateType field, | The "cert_type" extension contains an 8-bit CertificateType field, | |||
| for which a new registry, named "TLS Certificate Types", is | for which a new registry, named "TLS Certificate Types", is | |||
| established in this document, to be maintained by IANA. The registry | established in this document, to be maintained by IANA. The registry | |||
| is segmented in the following way: | is segmented in the following way: | |||
| 1. Values 0 (X.509) and 1 (OpenPGP) are defined in this document. | 1. Values 0 (X.509) and 1 (OpenPGP) are defined in this document. | |||
| 2. Values from 2 through 223 decimal inclusive are assigned via IETF | 2. Values from 2 through 223 decimal inclusive are assigned via IETF | |||
| Consensus [RFC2434]. | Consensus [RFC2434]. | |||
| 3. Values from 224 decimal through 255 decimal inclusive are | 3. Values from 224 decimal through 255 decimal inclusive are | |||
| reserved for Private Use [RFC2434]. | reserved for Private Use [RFC2434]. | |||
| 5. References | 6. References | |||
| 5.1. Normative References | 6.1. Normative References | |||
| [TLS] Dierks, T. and E. Rescorla, "The TLS Protocol Version | [TLS] Dierks, T. and E. Rescorla, "The TLS Protocol Version | |||
| 1.1", RFC 4346, April 2006. | 1.1", RFC 4346, April 2006. | |||
| [OpenPGP] Callas, J., Donnerhacke, L., Finey, H., and R. Thayer, | [OpenPGP] Callas, J., Donnerhacke, L., Finey, H., Shaw, D., and R. | |||
| "OpenPGP Message Format", RFC 2440, November 1998. | Thayer, "OpenPGP Message Format", | |||
| draft-ietf-openpgp-rfc2440bis-18 (work in progress), | ||||
| May 2006. | ||||
| [TLSEXT] Blake-Wilson, S., Nystrom, M., Hopwood, D., Mikkelsen, J., | [TLSEXT] Blake-Wilson, S., Nystrom, M., Hopwood, D., Mikkelsen, J., | |||
| and T. Wright, "Transport Layer Security (TLS) | and T. Wright, "Transport Layer Security (TLS) | |||
| Extensions", RFC 4366, April 2006. | Extensions", RFC 4366, April 2006. | |||
| [RFC2434] Narten, T. and H. Alvestrand, "Guidelines for Writing an | [RFC2434] Narten, T. and H. Alvestrand, "Guidelines for Writing an | |||
| IANA Considerations Section in RFCs", RFC 2434, | IANA Considerations Section in RFCs", RFC 2434, | |||
| October 1998. | October 1998. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", RFC 2119, March 1997. | Requirement Levels", RFC 2119, March 1997. | |||
| 5.2. Informative References | 6.2. Informative References | |||
| [PKIX] Housley, R., Ford, W., Polk, W., and D. Solo, "Internet X.509 | [PKIX] Housley, R., Ford, W., Polk, W., and D. Solo, "Internet X.509 | |||
| Public Key Infrastructure Certificate and Certificate | Public Key Infrastructure Certificate and Certificate | |||
| Revocation List (CRL) Profile", RFC 3280, April 2002. | Revocation List (CRL) Profile", RFC 3280, April 2002. | |||
| [WOT] Abdul-Rahman, A., "The PGP Trust Model", EDI Forum: The | ||||
| Journal of Electronic Commerce, April 1997. | ||||
| Appendix A. Acknowledgements | Appendix A. Acknowledgements | |||
| This document was based on earlier work made by Will Price and | This document was based on earlier work made by Will Price and | |||
| Michael Elkins. | Michael Elkins. | |||
| The author wishes to thank Werner Koch, David Taylor, Timo Schulz and | The author wishes to thank Werner Koch, David Taylor, Timo Schulz, | |||
| Pasi Eronen for their suggestions on improving this document. | Pasi Eronen, Jon Callas, Stephen Kent, Robert Sparks and Hilarie | |||
| Orman for their suggestions on improving this document. | ||||
| Author's Address | Author's Address | |||
| Nikos Mavrogiannopoulos | Nikos Mavrogiannopoulos | |||
| Independent | Independent | |||
| Arkadias 8 | Arkadias 8 | |||
| Halandri, Attiki 15234 | Halandri, Attiki 15234 | |||
| Greece | Greece | |||
| Email: nmav@gnutls.org | Email: nmav@gnutls.org | |||
| End of changes. 47 change blocks. | ||||
| 104 lines changed or deleted | 133 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/ | ||||