draft-ietf-tls-rfc4347-bis-01.txt | draft-ietf-tls-rfc4347-bis-02.txt | |||
---|---|---|---|---|
INTERNET-DRAFT E. Rescorla | INTERNET-DRAFT E. Rescorla | |||
Obsoletes (if approved): RFC 4347 RTFM, Inc. | Obsoletes (if approved): RFC 4347 RTFM, Inc. | |||
Intended Status: Proposed Standard N. Modadugu | Intended Status: Proposed Standard N. Modadugu | |||
<draft-ietf-tls-rfc4347-bis-01.txt> Stanford University | <draft-ietf-tls-rfc4347-bis-02.txt> Stanford University | |||
November 2008 (Expires May 2009) | March 7, 2009 (Expires September 2009) | |||
Datagram Transport Layer Security version 1.2 | Datagram Transport Layer Security version 1.2 | |||
Status of This Memo | Status of This Memo | |||
By submitting this Internet-Draft, each author represents that any | This Internet-Draft is submitted to IETF in full conformance with the | |||
applicable patent or other IPR claims of which he or she is aware | provisions of BCP 78 and BCP 79. This document may contain material | |||
have been or will be disclosed, and any of which he or she becomes | from IETF Documents or IETF Contributions published or made publicly | |||
aware will be disclosed, in accordance with Section 6 of BCP 79. | available before November 10, 2008. The person(s) controlling the | |||
copyright in some of this material may not have granted the IETF | ||||
Trust the right to allow modifications of such material outside the | ||||
IETF Standards Process. Without obtaining an adequate license from | ||||
the person(s) controlling the copyright in such materials, this | ||||
document may not be modified outside the IETF Standards Process, and | ||||
derivative works of it may not be created outside the IETF Standards | ||||
Process, except to format it for publication as an RFC or to | ||||
translate it into languages other than English. | ||||
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 | |||
other groups may also distribute working documents as Internet- | other groups may also distribute working documents as Internet- | |||
Drafts. | Drafts. | |||
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." | |||
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. | |||
Copyright Notice | Copyright Notice | |||
Copyright (C) The IETF Trust (2008). | Copyright (c) 2009 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | ||||
This document is subject to BCP 78 and the IETF Trust's Legal | ||||
Provisions Relating to IETF Documents in effect on the date of | ||||
publication of this document (http://trustee.ietf.org/license-info). | ||||
Please review these documents carefully, as they describe your rights | ||||
and restrictions with respect to this document. | ||||
Abstract | Abstract | |||
This document specifies Version 1.2 of the Datagram Transport Layer | This document specifies Version 1.2 of the Datagram Transport Layer | |||
Security (DTLS) protocol. The DTLS protocol provides communications | Security (DTLS) protocol. The DTLS protocol provides communications | |||
privacy for datagram protocols. The protocol allows client/server | privacy for datagram protocols. The protocol allows client/server | |||
applications to communicate in a way that is designed to prevent | applications to communicate in a way that is designed to prevent | |||
eavesdropping, tampering, or message forgery. The DTLS protocol is | eavesdropping, tampering, or message forgery. The DTLS protocol is | |||
based on the Transport Layer Security (TLS) protocol and provides | based on the Transport Layer Security (TLS) protocol and provides | |||
equivalent security guarantees. Datagram semantics of the underlying | equivalent security guarantees. Datagram semantics of the underlying | |||
transport are preserved by the DTLS protocol. This document | transport are preserved by the DTLS protocol. This document updates | |||
updates DTLS 1.0 to work with TLS version 1.2. | DTLS 1.0 to work with TLS version 1.2. | |||
Legal | ||||
This documents and the information contained therein 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 THEREIN WILL NOT INFRINGE | ||||
ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS | ||||
FOR A PARTICULAR PURPOSE. | ||||
Table of Contents | Table of Contents | |||
1. Introduction 2 | 1. Introduction 3 | |||
1.1. Requirements Terminology 3 | 1.1. Requirements Terminology 4 | |||
2. Usage Model 3 | 2. Usage Model 4 | |||
3. Overview of DTLS 4 | 3. Overview of DTLS 5 | |||
3.1. Loss-Insensitive Messaging 4 | 3.1. Loss-Insensitive Messaging 5 | |||
3.2. Providing Reliability for Handshake 5 | 3.2. Providing Reliability for Handshake 5 | |||
3.2.1. Packet Loss 5 | 3.2.1. Packet Loss 6 | |||
3.2.2. Reordering 5 | 3.2.2. Reordering 6 | |||
3.2.3. Message Size 6 | 3.2.3. Message Size 6 | |||
3.3. Replay Detection 6 | 3.3. Replay Detection 7 | |||
4. Differences from TLS 6 | 4. Differences from TLS 7 | |||
4.1. Record Layer 6 | 4.1. Record Layer 7 | |||
4.1.1. Transport Layer Mapping 8 | 4.1.1. Transport Layer Mapping 9 | |||
4.1.1.1. PMTU Issues 9 | 4.1.1.1. PMTU Issues 10 | |||
4.1.2. Record Payload Protection 10 | 4.1.2. Record Payload Protection 11 | |||
4.1.2.1. MAC 10 | 4.1.2.1. MAC 11 | |||
4.1.2.2. Null or Standard Stream Cipher 11 | 4.1.2.2. Null or Standard Stream Cipher 12 | |||
4.1.2.3. Block Cipher 11 | 4.1.2.3. Block Cipher 12 | |||
4.1.2.3. AEAD Ciphers 11 | 4.1.2.3. AEAD Ciphers 12 | |||
4.1.2.5. New Cipher Suites 11 | 4.1.2.5. New Cipher Suites 12 | |||
4.1.2.6. Anti-replay 11 | 4.1.2.6. Anti-replay 13 | |||
4.2. The DTLS Handshake Protocol 12 | 4.2. The DTLS Handshake Protocol 13 | |||
4.2.1. Denial of Service Countermeasures 12 | 4.2.1. Denial of Service Countermeasures 14 | |||
4.2.2. Handshake Message Format 15 | 4.2.2. Handshake Message Format 16 | |||
4.2.3. Message Fragmentation and Reassembly 16 | 4.2.3. Message Fragmentation and Reassembly 18 | |||
4.2.4. Timeout and Retransmission 17 | 4.2.4. Timeout and Retransmission 18 | |||
4.2.4.1. Timer Values 21 | 4.2.4.1. Timer Values 22 | |||
4.2.5. ChangeCipherSpec 21 | 4.2.5. ChangeCipherSpec 22 | |||
4.2.6. CertificateVerify and Finished Messages 21 | 4.2.6. CertificateVerify and Finished Messages 22 | |||
4.2.7. Alert Messages 21 | 4.2.7. Alert Messages 22 | |||
4.3. Summary of new syntax 22 | 4.3. Summary of new syntax 23 | |||
4.3.1. Record Layer 23 | 4.3.1. Record Layer 24 | |||
4.3.2. Handshake Protocol 23 | 4.3.2. Handshake Protocol 24 | |||
5. Security Considerations 24 | 5. Security Considerations 25 | |||
6. Acknowledgements 25 | 6. Acknowledgements 26 | |||
7. IANA Considerations 25 | 7. IANA Considerations 26 | |||
8. References 25 | 8. References 26 | |||
8.1. Normative References 25 | 8.1. Normative References 26 | |||
8.2. Informative References 26 | 8.2. Informative References 27 | |||
1. Introduction | 1. Introduction | |||
TLS [TLS] is the most widely deployed protocol for securing network | TLS [TLS] is the most widely deployed protocol for securing network | |||
traffic. It is widely used for protecting Web traffic and for e-mail | traffic. It is widely used for protecting Web traffic and for e-mail | |||
protocols such as IMAP [IMAP] and POP [POP]. The primary advantage | protocols such as IMAP [IMAP] and POP [POP]. The primary advantage | |||
of TLS is that it provides a transparent connection-oriented channel. | of TLS is that it provides a transparent connection-oriented channel. | |||
Thus, it is easy to secure an application protocol by inserting TLS | Thus, it is easy to secure an application protocol by inserting TLS | |||
between the application layer and the transport layer. However, TLS | between the application layer and the transport layer. However, TLS | |||
must run over a reliable transport channel -- typically TCP [TCP]. | must run over a reliable transport channel -- typically TCP [TCP]. | |||
skipping to change at page 7, line 34 | skipping to change at page 8, line 22 | |||
The sequence number for this record. | The sequence number for this record. | |||
length | length | |||
Identical to the length field in a TLS 1.2 record. As in TLS | Identical to the length field in a TLS 1.2 record. As in TLS | |||
1.2, the length should not exceed 2^14. | 1.2, the length should not exceed 2^14. | |||
fragment | fragment | |||
Identical to the fragment field of a TLS 1.2 record. | Identical to the fragment field of a TLS 1.2 record. | |||
DTLS uses an explicit sequence number, rather than an implicit one, | DTLS uses an explicit sequence number, rather than an implicit one, | |||
carried in the sequence_number field of the record. As with TLS, the | carried in the sequence_number field of the record. Sequence numbers | |||
sequence number is set to zero after each ChangeCipherSpec message is | are maintained separately for each epoch, with each sequence_number | |||
sent. | initially being 0 for each epoch. For instance, if a handshake | |||
message from epoch 0 is retransmitted, it might have a sequence | ||||
number after a message from epoch 1, even if the message from epoch 1 | ||||
was transmitted first. Note that some care needs to be taken during | ||||
the handshake to ensure that retransmitted messages use the right | ||||
epoch and keying material. | ||||
If several handshakes are performed in close succession, there might | If several handshakes are performed in close succession, there might | |||
be multiple records on the wire with the same sequence number but | be multiple records on the wire with the same sequence number but | |||
from different cipher states. The epoch field allows recipients to | from different cipher states. The epoch field allows recipients to | |||
distinguish such packets. The epoch number is initially zero and is | distinguish such packets. The epoch number is initially zero and is | |||
incremented each time the ChangeCipherSpec messages is sent. In | incremented each time the ChangeCipherSpec messages is sent. In | |||
order to ensure that any given sequence/epoch pair is unique, | order to ensure that any given sequence/epoch pair is unique, | |||
implementations MUST NOT allow the same epoch value to be reused | implementations MUST NOT allow the same epoch value to be reused | |||
within two times the TCP maximum segment lifetime. In practice, TLS | within two times the TCP maximum segment lifetime. In practice, TLS | |||
implementations rarely rehandshake and we therefore do not expect | implementations rarely rehandshake and we therefore do not expect | |||
this to be a problem. | this to be a problem. | |||
Note that because DTLS records may be reordered, a record from epoch | Note that because DTLS records may be reordered, a record from epoch | |||
1 may be received after epoch 2 has begun. In general, | 1 may be received after epoch 2 has begun. In general, | |||
implementations SHOULD discard packets from earlier epochs, but if | implementations SHOULD discard packets from earlier epochs, but if | |||
packet loss causes noticeable problems MAY choose to retain keying | packet loss causes noticeable problems MAY choose to retain keying | |||
material from previous epochs for up to 120 seconds (the default TCP | material from previous epochs for up to 120 seconds (the default TCP | |||
MSL) to allow for packet reordering. | MSL) to allow for packet reordering. Until the handshake has | |||
completed, implementations MUST accept packets from the old epoch. | ||||
Conversely, it is possible for records that are protected by the | Conversely, it is possible for records that are protected by the | |||
newly negotiated context to be received prior to the completion of a | newly negotiated context to be received prior to the completion of a | |||
handshake. For instance, the server may send its Finished and then | handshake. For instance, the server may send its Finished and then | |||
start transmitting data. Implementations MAY either buffer or | start transmitting data. Implementations MAY either buffer or | |||
discard such packets, though when DTLS is used over reliable | discard such packets, though when DTLS is used over reliable | |||
transports (e.g., SCTP), they SHOULD be buffered and processed once | transports (e.g., SCTP), they SHOULD be buffered and processed once | |||
the handshake completes. Note that TLS's restrictions on when | the handshake completes. Note that TLS's restrictions on when | |||
packets may be sent still apply, and the receiver treats the packets | packets may be sent still apply, and the receiver treats the packets | |||
as if they were sent in the right order. In particular, it is still | as if they were sent in the right order. In particular, it is still | |||
impermissible to send data prior to completion of the first | impermissible to send data prior to completion of the first | |||
handshake. | handshake. | |||
Note that in the special case of a rehandshake on an existing | ||||
association, it is safe to process a data packet immediately even if | ||||
the CSS or Finished has not yet been received provided that either | ||||
the rehandshake resumes the existing session or that it uses exactly | ||||
the same security parameters as the existing association. In an | ||||
other case, the implementation MUST wait for the receipt of the | ||||
Finished to prevent downgrade attack. | ||||
4.1.1. Transport Layer Mapping | 4.1.1. Transport Layer Mapping | |||
Each DTLS record MUST fit within a single datagram. In order to | Each DTLS record MUST fit within a single datagram. In order to | |||
avoid fragmentation, that clients of the DTLS record layer SHOULD | avoid fragmentation, that clients of the DTLS record layer SHOULD | |||
attempt to size records so that they fit within any PMTU estimates | attempt to size records so that they fit within any PMTU estimates | |||
obtained from the record layer. | obtained from the record layer. | |||
Note that unlike IPsec, DTLS records do not contain any association | Note that unlike IPsec, DTLS records do not contain any association | |||
identifiers. Applications must arrange to multiplex between | identifiers. Applications must arrange to multiplex between | |||
associations. With UDP, this is presumably done with host/port | associations. With UDP, this is presumably done with host/port | |||
skipping to change at page 9, line 41 | skipping to change at page 10, line 45 | |||
particular: | particular: | |||
- For DTLS over UDP, the upper layer protocol SHOULD be allowed | - For DTLS over UDP, the upper layer protocol SHOULD be allowed | |||
to obtain the PMTU estimate maintained in the IP layer. | to obtain the PMTU estimate maintained in the IP layer. | |||
- For DTLS over DCCP, the upper layer protocol | - For DTLS over DCCP, the upper layer protocol | |||
SHOULD be allowed to obtain the current estimate of the | SHOULD be allowed to obtain the current estimate of the | |||
PMTU. | PMTU. | |||
- For DTLS over TCP or SCTP, which automatically fragment | - For DTLS over TCP or SCTP, which automatically fragment | |||
and reassemble datagrams, the upper layer protocol | and reassemble datagrams, there is no PMTU limitation. | |||
SHOULD be informed that the PMTU is effectively infinite. | However, the upper layer protocol MUST NOT write any | |||
record that exceeds the maximum record size of 2^14 bytes. | ||||
The DTLS record layer SHOULD allow the upper layer protocol to | The DTLS record layer SHOULD allow the upper layer protocol to | |||
discover the amount of record expansion expected by the DTLS | discover the amount of record expansion expected by the DTLS | |||
processing. Note that this number is only an estimate because of | processing. Note that this number is only an estimate because of | |||
block padding and the potential use of DTLS compression. | block padding and the potential use of DTLS compression. | |||
If there is a transport protocol indication (either via ICMP or via a | If there is a transport protocol indication (either via ICMP or via a | |||
refusal to send the datagram as in DCCP Section 14), then DTLS record | refusal to send the datagram as in DCCP Section 14), then DTLS record | |||
layer should inform the upper layer protocol of the error. | layer should inform the upper layer protocol of the error. | |||
skipping to change at page 15, line 26 | skipping to change at page 16, line 34 | |||
handshake. | handshake. | |||
If HelloVerifyRequest is used, the initial ClientHello and | If HelloVerifyRequest is used, the initial ClientHello and | |||
HelloVerifyRequest are not included in the calculation of the | HelloVerifyRequest are not included in the calculation of the | |||
handshake_messages (for the CertificateVerify message) and | handshake_messages (for the CertificateVerify message) and | |||
verify_data (for the Finished message). | verify_data (for the Finished message). | |||
If a server receives a ClientHello with an invalid cookie, it SHOULD | If a server receives a ClientHello with an invalid cookie, it SHOULD | |||
treat it the same as a ClientHello with no cookie. This avoids | treat it the same as a ClientHello with no cookie. This avoids | |||
race/deadlock conditions if the client somehow gets a bad cookie | race/deadlock conditions if the client somehow gets a bad cookie | |||
(e.g., because the server changes its cookie signing key). | (e.g., because the server changes its cookie signing key). Note to | |||
implementors: this may results in clients receiving multiple | ||||
HelloVerifyRequest messages with different cookies. Clients SHOULD | ||||
handle this by sending a new HelloVerify in response to the new | ||||
HelloVerifyRequest. | ||||
4.2.2. Handshake Message Format | 4.2.2. Handshake Message Format | |||
In order to support message loss, reordering, and fragmentation, DTLS | In order to support message loss, reordering, and fragmentation, DTLS | |||
modifies the TLS 1.2 handshake header: | modifies the TLS 1.2 handshake header: | |||
struct { | struct { | |||
HandshakeType msg_type; | HandshakeType msg_type; | |||
uint24 length; | uint24 length; | |||
uint16 message_seq; // New field | uint16 message_seq; // New field | |||
skipping to change at page 28, line 4 | skipping to change at line 1261 | |||
EMail: ekr@rtfm.com | EMail: ekr@rtfm.com | |||
Nagendra Modadugu | Nagendra Modadugu | |||
Computer Science Department | Computer Science Department | |||
Stanford University | Stanford University | |||
353 Serra Mall | 353 Serra Mall | |||
Stanford, CA 94305 | Stanford, CA 94305 | |||
EMail: nagendra@cs.stanford.edu | EMail: nagendra@cs.stanford.edu | |||
Full Copyright Statement | ||||
Copyright (C) The IETF Trust (2008). | ||||
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. | ||||
Acknowledgment | ||||
Funding for the RFC Editor function is provided by the IETF | ||||
Administrative Support Activity (IASA). | ||||
End of changes. 13 change blocks. | ||||
53 lines changed or deleted | 98 lines changed or added | |||
This html diff was produced by rfcdiff 1.35. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |