diff options
Diffstat (limited to 'doc/protocol/draft-rescorla-dtls-02.txt')
-rw-r--r-- | doc/protocol/draft-rescorla-dtls-02.txt | 994 |
1 files changed, 0 insertions, 994 deletions
diff --git a/doc/protocol/draft-rescorla-dtls-02.txt b/doc/protocol/draft-rescorla-dtls-02.txt deleted file mode 100644 index 9a2636910a..0000000000 --- a/doc/protocol/draft-rescorla-dtls-02.txt +++ /dev/null @@ -1,994 +0,0 @@ - - - E. Rescorla - RTFM, Inc. - N. Modadugu -INTERNET-DRAFT Stanford University -<draft-rescorla-dtls-02.txt> December 2003 (Expires June 2004) - - Datagram Transport Layer Security - -Status of this Memo - -By submitting this Internet-Draft, I certify that any applicable -patent or other IPR claims of which I am aware have been disclosed, -and any of which I become aware will be disclosed, in accordance with -RFC 3668. - -Internet-Drafts are working documents of the Internet Engineering -Task Force (IETF), its areas, and its working groups. Note that other -groups may also distribute working documents as Internet-Drafts. - -Internet-Drafts are draft documents valid for a maximum of six months -and may be updated, replaced, or obsoleted by other documents at any -time. It is inappropriate to use Internet-Drafts as reference -material or to cite them other than a "work in progress." - -The list of current Internet-Drafts can be accessed at -http://www.ietf.org/1id-abstracts.html - -The list of Internet-Draft Shadow Directories can be accessed at -http://www.ietf.org/shadow.html - -Copyright Notice - - Copyright (C) The Internet Society (1999-2004). All Rights Reserved. - - - -Rescorla, Modadugu [Page 1] - -Contents - - - -Abstract - - This document specifies Version 1.0 of the Datagram Transport Layer - Security (DTLS) protocol. The DTLS protocol provides communications - privacy for datagram protocols. The protocol allows client/server - applications to communicate in a way that is designed to prevent - eavesdropping, tampering, or message forgery. The DTLS protocol is - based on the TLS protocol and provides equivalent security - guarantees. Datagram semantics of the underlying transport are - preserved by the DTLS protocol. - -1. Introduction - - TLS [TLS] is the most widely deployed protocol for securing network - traffic. It is widely used for protecting Web traffic and for e-mail - protocols such as IMAP [IMAP] and POP [POP]. The primary advantage of - TLS is that it provides a transparent channel. Thus, it is easy to - secure an application protocol by inserting TLS between the - application layer and the network layer. However, TLS must run over a - reliable transport channel--typically TCP [TCP]. It therefore cannot - be used to secure unreliable datagram traffic. - - However, over the past few years an increasing number of application - layer protocols have been designed which UDP transport. In particular - such protocols as the Session Initiation Protocol (SIP) [SIP], and - electronic gaming protocols are increasingly popular. (Note that SIP - can run over both TCP and UDP, but that there are situations in which - UDP is preferable). Currently, designers these applications are faced - with a number of unsatisfactory choices. First, they can use IPsec - [RFC2401]. However, for a number of reasons detailed in [WHYIPSEC], - this is only suitable for some applications. Second, they can design - a custom application layer security protocol. SIP, for instance, uses - a variant of S/MIME to secure its traffic. Unfortunately, application - layer security protocols typically require a large amount of effort - to design--by contrast to the relatively small amount of effort - required to run the protocol over TLS. - - In many cases, the most desirable way to secure client/server - applications would be to use TLS, however the requirement for - datagram semantics automatically prohibits use of TLS. Thus, a - datagram-compatible variant of TLS would be very desirable. This memo - describes such a protocol: Datagram Transport Layer Security (DTLS). - - -Rescorla, Modadugu [Page 2] - - DTLS is deliberately designed to be as similar to to TLS as possible, - both to minimize new security invention and to maximize the amount of - code and infrastructure reuse. - -2. Usage Model - - The DTLS protocol is designed to secure data between communicating - applications. It is designed to run in application space, without - requiring any kernel modifications. While the design of the DTLS - protocol does not preclude its use in securing arbitrary datagram - traffic, it is primarily expected to secure communication based on - datagram sockets. - - Datagram transport does not guarantee reliable or in-order delivery - of data. The DTLS protocol preserves this property for payload data. - Applications such as media streaming, Internet telephony and online - gaming use datagram transport for communication due to the delay- - sensitive nature of transported data. The behavior of such - applications is unchanged when the DTLS protocol is used to secure - communication, since the DTLS protocol does not compensate for lost - or re-ordered data traffic. - -3. Overview of DTLS - - The basic design philosophy of DTLS is to construct "TLS over - datagram". The reason that TLS cannot be used directly in datagram - environments is simply that packets may be lost or reordered. TLS has - no internal facilities to handle this kind of unreliability and - therefore TLS implementations break when rehosted on datagram - transport. The purpose of DTLS is to make only the minimal changes to - TLS required to fix this problem. To the greatest extent possible, - DTLS is identical to TLS. Whenever we need to invent new mechanisms, - we attempt to do so in such a way that it preserves the style of TLS. - - Unreliability creates problems for TLS at two levels: - - 1. TLS's traffic encryption layer does not allow independent - decryption of individual records. If record N is not received, - then record N+1 cannot be decrypted. - - 2. The TLS handshake layer assumes that handshake messages are - delivered reliably and breaks if those messages are lost. - - The rest of this section describes the approach that DTLS uses to - solve these problems. - - - -Rescorla, Modadugu [Page 3] - -3.1. Loss-insensitive messaging - - In TLS's traffic encryption layer (called the TLS Record Layer), - records are not independent. There are two kinds of inter-record - dependency: - - 1. Cryptographic context (CBC state, stream cipher key stream) is - chained between records. - - 2. Anti-replay and message reordering protection are provided by a - MAC which includes a sequence number, but the sequence numbers are - implicit in the records. - - The fix for both of these problems is straightforward and well-known - from IPsec ESP [ESP]: add explicit state to the records. TLS 1.1 - [TLS11] is already adding explicit CBC state to TLS records. DTLS - borrows that mechanism and adds explicit sequence numbers. - -3.2. Providing Reliability for Handshake - - The TLS handshake is a lockstep cryptographic handshake. Messages - must be transmitted and received in a defined order and any other - order is an error. Clearly, this is incompatible with reordering and - message loss. In addition, TLS handshake messages are potentially - larger than any given datagram, thus creating the problem of - fragmentation. DTLS must provide fixes for both these problems. - -3.2.1. Packet Loss - - DTLS uses a simple retransmission timer to handle packet loss. The - following figure demonstrates the basic concept using the first phase - of the DTLS handshake: - - Client Server - ------ ------ - ClientHello ------> - - X<-- HelloVerifyRequest - (lost) - - [Timer Expires] - - ClientHello ------> - (retransmit) - - Once the client has transmitted the ClientHello message, it expects - to see a HelloVerifyRequest from the server. However, if the server's - message is lost the client knows that either the ClientHello or the - - -Rescorla, Modadugu [Page 4] - - HelloVerifyRequest has been lost and retransmits. When the server - receives the retransmission, it knows to retransmit. The server also - maintains a retransmission timer and retransmits when that timer - expires. - -3.2.2. Reordering - - In DTLS, each handshake message is assigned a specific sequence - number within that handshake. When a peer receives a handshake - message, it can quickly determine whether that message is the next - message it expects. If it is, then it processes it. If not, it queues - it up for future handling once all previous messages have been - received. - -3.3. Message Size - - TLS and DTLS handshake messages can be quite large (in theory up to - 2^24-1 bytes, in practice many kilobytes). By contrast, UDP datagrams - are often limited to <1500 bytes. In order to compensate for this - limitation, each DTLS handshake message may be fragmented over - several DTLS records. Each DTLS handshake message contains both a - fragment offset and a fragment length. Thus, a recipient in - possession of all bytes of a handshake message can reassemble the - original unfragmented message. - DTLS optionally supports record replay detection. The technique used - is the same as in IPsec AH/ESP, by maintaining a bitmap window of - received records. Records that are too old to fit in the window and - records that have been previously received are silently discarded. - The replay detection feature is optional, since packet duplication is - not always malicious, but can also occur due to routing errors. - Applications may conceivably detect duplicate packets and accordingly - modify their data transmission strategy. - -4. Differences from TLS - - As mentioned in Section , DTLS is intentionally very similar to TLS. - Therefore, instead of presenting DTLS as a new protocol, we instead - present it as a series of deltas from TLS 1.1 [TLS11]. Where we do - not explicitly call out differences, DTLS is the same as TLS. - -4.1. Record Layer - - The DTLS record layer is extremely similar to that of TLS 1.1. The - only change is the inclusion of an explicit sequence number in the - record. This sequence number allows the recipient to correctly verify - the TLS MAC. The DTLS record format is shown below: - - - -Rescorla, Modadugu [Page 5] - - struct { - ContentType type; - ProtocolVersion version; - uint16 epoch; - uint48 sequence_number; - uint16 length; - opaque fragment[DTLSPlaintext.length]; - } DTLSPlaintext; - - type - Equivalent to the type field in a TLS 1.1 record. - - version - The version of the protocol being employed. This document - describes DTLS Version 1.0, which uses the version { 254, 255 - }. The version value of 254.255 is the 1's complement of DTLS - Version 1.0. This maximal spacing between TLS and DTLS version - numbers ensures that records from the two protocols can be - easily distinguished. - - epoch - A counter value that is incremented on every cipher state - change. - - sequence_number - The sequence number for this record. - - length - Identical to the length field in a TLS 1.1 record. As in TLS - 1.1, the length should not exceed 2^14. - - fragment - Identical to the fragment field of a TLS 1.1 record. - - DTLS uses an explicit rather than implicit sequence number, carried - in the sequence_number field of the record. As with TLS, the sequence - number is set to zero after each ChangeCipherSpec message is sent. - - If several handshakes are performed in close succession, there might - be multiple records on the wire with the same sequence number but - from different cipher states. The epoch field allows recipients to - distinguish such packets. The epoch number is initially zero and is - incremented each time the ChangeCipherSpec messages is sent. In order - to ensure that any given sequence/epoch pair is unique, - implementations MUST NOT allow the same epoch value to be reused - within two times the maximum segment lifetime. In practice, TLS - implementations rehandshake rarely and we therefore do not expect - this to be a problem. - - -Rescorla, Modadugu [Page 6] - -4.1.1. Transport Layer Mapping - - Each DTLS record MUST fit within a single datagram. In order to avoid - IP fragmentation [MOGUL], DTLS implementations SHOULD determine the - MTU and send records smaller than the MTU. DTLS implementations - SHOULD provide a way for applications to determine the value of the - MTU (optimally the maximum application datagram size, which is the - PMTU minus the DTLS per-record overhead). If the application attempts - to send a record larger than the MTU, the DTLS implementation MUST - either generate an error or fragment the packet. - -4.1.1.1. PMTU Discovery - - The PMTU SHOULD be initialized from the interface MTU that will be - used to send packets. - - To perform PMTU discovery, the DTLS sender sets the IP Don't Fragment - (DF) bit. As specified in [RFC 1191], when a router receives a packet - with DF set that is larger than the next link's MTU, it sends an ICMP - Destination Unreachable message to the source of the datagram with - the Code indicating "fragmentation needed and DF set" (also known as - a "Datagram Too Big" message). When a DTLS implementation receives a - Datagram Too Big message, it decreases its PMTU to the Next-Hop MTU - value given in the ICMP message. If the MTU given in the message is - zero, the sender chooses a value for PMTU using the algorithm - described in Section 7 of [RFC 1191]. If the MTU given in the message - is greater than the current PMTU, the Datagram Too Big message is - ignored, as described in [RFC 1191]. - - A DTLS implementation may allow the application to occasionally - request that PMTU discovery be performed again. This will reset the - PMTU to the outgoing interface's MTU. Such requests SHOULD be rate - limited, to one per two seconds, for example. - - Because some firewalls and routers screen out ICMP messages, it is - difficult to distinguish packet loss from a large PMTU estimate. In - order to allow connections under these circumstances, DTLS - implementations MAY choose to back off their PMTU estimate during the - retransmit backoff described in Section . For instance, if a large - packet is being sent, after 3 retransmits a sender might choose to - fragment the packet. - -4.1.2. Record payload protection - -4.1.2.1. MAC - - The DTLS MAC is the same as that of TLS 1.1. However, rather than - using TLS's implicit sequence number, the sequence number used to - - -Rescorla, Modadugu [Page 7] - - compute the MAC is the 64-bit value formed by concatenating the epoch - and the sequence number in the order they appear on the wire. Note - that the DTLS epoch + sequence number is the same length as the TLS - sequence number. - -4.1.2.2. Null or standard stream cipher - - The DTLS NULL cipher is performed exactly as the TLS 1.1 NULL cipher. - - The only stream cipher described in TLS 1.1 is RC4, which cannot be - randomly accessed. RC4 MUST NOT be used with DTLS. - -4.1.2.3. Block Cipher - - DTLS block cipher encryption and decryption are performed exactly as - with TLS 1.1. - -4.1.2.4. Anti-Replay - - DTLS records contain a sequence number to provide replay protection. - Sequence number verification SHOULD be performed using the following - sliding, window procedure, borrowed from Section 3.4.3 of [RFC 2402] - - The receiver packet counter for this session MUST be initialized to - zero when the session is established. For each received record, the - receiver MUST verify that the record contains a Sequence Number that - does not duplicate the Sequence Number of any other record received - during the life of this session. This SHOULD be the first check - applied to a packet after it has been matched to a session, to speed - rejection of duplicate records. - - Duplicates are rejected through the use of a sliding receive window. - (How the window is implemented is a local matter, but the following - text describes the functionality that the implementation must - exhibit.) A MINIMUM window size of 32 MUST be supported; but a window - size of 64 is preferred and SHOULD be employed as the default. - Another window size (larger than the MINIMUM) MAY be chosen by the - receiver. (The receiver does NOT notify the sender of the window - size.) - - The "right" edge of the window represents the highest, validated - Sequence Number value received on this session. Records that contain - Sequence Numbers lower than the "left" edge of the window are - rejected. Packets falling within the window are checked against a - list of received packets within the window. An efficient means for - performing this check, based on the use of a bit mask, is described - in [RFC 2401]. - - -Rescorla, Modadugu [Page 8] - - If the received record falls within the window and is new, or if the - packet is to the right of the window, then the receiver proceeds to - MAC verification. If the MAC validation fails, the receiver MUST - discard the received record as invalid. The receive window is updated - only if the MAC verification succeeds. - -4.2. The DTLS Handshake Protocol - - DTLS uses all of the same handshake messages and flows as TLS, with - three principal changes: - - 1. A stateless cookie exchange to prevent denial of service - attacks. - - 2. Modifications to the handshake header to handle message loss, - reordering and fragmentation. - - 3. Retransmission timers to handle message loss. - - With these exceptions, the DTLS message formats, flows, and logic are - the same as those of TLS 1.1. - -4.2.1. Denial of Service Countermeasures - - Datagram security protocols are extremely susceptible to a variety of - denial of service (DoS) attacks. Two attacks are of particular - concern: - - 1. An attacker can consume excessive resources on the server by - transmitting a series of handshake initiation requests, causing - the server to allocate state and potentially perform expensive - cryptographic operations. - - 2. An attacker can use the server as an amplifier by sending - connection initiation messages with a forged source of the victim. - The server then sends its next message (in DTLS, a Certificate - message, which can be quite large) to the victim machine, thus - flooding it. - - In order to prevent both of these attacks, DTLS borrows the stateless - cookie technique used by Photuris [PHOTURIS] and IKEv2 [IKE]. When - the client sends its ClientHello message to the server, the server - MAY respond with a HelloVerifyRequest message. This message contains - a stateless cookie generated using the technique of [PHOTURIS]. The - client MUST retransmit the ClientHello with the cookie added. The - server then verifies the cookie and proceeds with the handshake only - if it is valid. - - -Rescorla, Modadugu [Page 9] - - The exchange is shown below: - - Client Server - ------ ------ - ClientHello ------> - - <----- HelloVerifyRequest - (contains cookie) - - ClientHello ------> - (with cookie) - - [Rest of handshake] - - DTLS therefore modifies the ClientHello message to add the cookie - value. - - struct { - ProtocolVersion client_version; - Random random; - SessionID session_id; - Cookie cookie<0..32>; // New field - CipherSuite cipher_suites<2..2^16-1>; - CompressionMethod compression_methods<1..2^8-1>; - } ClientHello; - - If the client does not have a cookie for a given server, it should - use a zero-length cookie. - - The definition of HelloVerifyRequest is as follows: - - struct { - Cookie cookie<0..32>; - } HelloVerifyRequest; - - The HelloVerifyRequest message type is hello_verify_request(3). - - When responding to a HelloVerifyRequest the client MUST use the same - parameter values (version, random, session_id, cipher_suites, - compression_method) as in the original ClientHello. The server SHOULD - use those values to generate its cookie and verify that they are - correct upon cookie receipt. - - Although DTLS servers are not required to do a cookie exchange, they - SHOULD do so whenever a new handshake is performed in order to avoid - being used as amplifiers. If the server is being operated in an - environment where amplification is not a problem, the server MAY - choose not to perform a cookie exchange. In addition, the server MAY - - -Rescorla, Modadugu [Page 10] - - choose not do to a cookie exchange when a session is resumed. Clients - MUST be prepared to do a cookie exchange with every handshake. - -4.2.2. Handshake Message Format - - In order to support message loss, reordering, and fragmentation DTLS - modifies the TLS 1.1 handshake header: - - struct { - HandshakeType msg_type; - uint24 length; - uint16 message_seq; // New field - uint24 fragment_offset; // New field - uint24 fragment_length; // New field - select (HandshakeType) { - case hello_request: HelloRequest; - case client_hello: ClientHello; - case hello_verify_request: HelloVerifyRequest; // New message type - case server_hello: ServerHello; - case certificate:Certificate; - case server_key_exchange: ServerKeyExchange; - case certificate_request: CertificateRequest; - case server_hello_done:ServerHelloDone; - case certificate_verify: CertificateVerify; - case client_key_exchange: ClientKeyExchange; - case finished:Finished; - } body; - } Handshake; - - The first message each side transmits in each handshake always has - message_seq = 0. Whenever each new message is generated, the - message_seq value is incremented by one. When a message is - retransmitted, the same message_seq value is used. For example. - - Client Server - ------ ------ - ClientHello (seq=0) ------> - - X<-- HelloVerifyRequest (seq=0) - (lost) - - [Timer Expires] - - ClientHello (seq=0) ------> - (retransmit) - - <------ HelloVerifyRequest (seq=0) - - -Rescorla, Modadugu [Page 11] - - ClientHello (seq=1) ------> - (with cookie) - - <------ ServerHello (seq=1) - <------ Certificate (seq=2) - <------ ServerHelloDone (seq=3) - - [Rest of handshake] - - DTLS implementations maintain (at least notionally) a - next_receive_seq counter. This counter is initially set to zero. When - a message is received, if its sequence number matches - next_receive_seq, next_receive_seq is incremented and the message is - processed. If the sequence number is less than next_receive_seq the - message MUST be discarded. If the sequence number is greater than - next_receive_seq, the implementation SHOULD queue the message but MAY - discard it. (This is a simple space/bandwidth tradeoff). - -4.2.3. Message Fragmentation and Reassembly - - As noted in Section , each DTLS message MUST fit within a single - transport layer datagram. However, handshake messages are potentially - bigger than the maximum record size. Therefore DTLS provides a - mechanism for fragmenting a handshake message over a number of - records. - - When transmitting the handshake message, the sender divides the - message into a series of N contiguous data ranges. These range must - be no larger than the maximum handshake fragment size and MUST - jointly contain the entire handshake message. The ranges SHOULD NOT - overlap. The sender then creates N handshake messages, all with the - same message_seq value as the original handshake message. Each new - message is labelled with the fragment_offset (the number of bytes - contained in previous fragments) and the fragment_length (the length - of this fragment). The length field in all messages is the same as - the length field of the original message. An unfragmented message is - a degenerate case with fragment_offset=0 and fragment_length=length. - - When a DTLS implementation receives a handshake message fragment, it - MUST buffer it until it has the entire handshake message. DTLS - implementations MUST be able to handle overlapping fragment ranges. - This allows senders to retransmit handshake messages with smaller - fragment sizes during path MTU discovery. - -4.2.4. Timeout and Retransmission - - DTLS messages are grouped into a series of message flights, according - the diagrams below. Although each flight of messages may consist of a - - -Rescorla, Modadugu [Page 12] - - number of messages, they should be viewed as monolithic for the - purpose of timeout and retransmission. - - Client Server - ------ ------ - - ClientHello --------> Flight 1 - - <------- HelloVerifyRequest Flight 2 - - ClientHello --------> Flight 3 - - ServerHello \ - Certificate* \ - ServerKeyExchange* Flight 4 - CertificateRequest* / - <-------- ServerHelloDone / - - Certificate* \ - ClientKeyExchange \ - CertificateVerify* Flight 5 - [ChangeCipherSpec] / - Finished --------> / - - [ChangeCipherSpec] \ Flight 6 - <-------- Finished / - Figure 1: Message flights for full handshake - - Client Server - ------ ------ - - ClientHello --------> Flight 1 - - ServerHello \ - [ChangeCipherSpec] Flight 2 - <-------- Finished / - - [ChangeCipherSpec] \Flight 3 - Finished --------> / - Figure 2: Message flights for session resuming handshake (no cookie exchange) - - DTLS uses a simple timeout and retransmission scheme with the - following state machine. - - - -Rescorla, Modadugu [Page 13] - - +--------+ - | PREPAR | - +---> | -ING | - | | | - | +--------+ - | | - | | - | | Buffer next flight - | | - | \|/ - | +---------+ - | | | - | | SENDING |<--------------------+ - | | | | - | +---------+ | - Receive | | | - next | | Send flight | - flight | +-------+ | - | | | Set retransmit timer | - | | \|/ | - | | +---------+ | - | | | | | - +--)--| WAITING |---------------------+ - | | | | Timer expires | - | | +---------+ | - | | | | - | | | | - | | +------------------------+ - | | Read retransmit - Receive | | - last | | - flight | | - | | - \|/\|/ - - FINISH - Figure 3: DTLS timeout and retransmission state machine - - The state machine has three basic states. - - In the PREPARING state the implementation does whatever computations - are necessary to prepare the next flight of messages. It then buffers - them up for transmission (emptying the buffer first) and enters the - SENDING state. - - - -Rescorla, Modadugu [Page 14] - - In the SENDING state, the implementation transmits the buffered - flight of messages. Once the messages have been sent, the - implementation then enters the FINISH state if this is the last - flight in the handshake, or, if the implementation expects to receive - more messages, sets a retransmit timer and then enters the WAITING - state. - - There are three ways to exit the WAITING state: - - 1. The retransmit timer expires: the implementation transitions to - the SENDING state, where it retransmits the flight, resets the - retransmit timer, and returns to the WAITING state. - - 2. The implementation reads a retransmitted flight from the peer: - the implementation transitions to the SENDING state, where it - retransmits the flight, resets the retransmit timer, and returns - to the WAITING state. The rationale here is that the receipt of a - duplicate message is the likely result of timer expiry on the peer - and therefore suggests that part of one's previous flight was - lost. - - 3. The implementation receives the next flight of messages: if - this is the final flight of messages the implementation - transitions to FINISHED. If the implementation needs to send a new - flight, it transitions to the PREPARING state. Partial reads - (whether partial messages or only some of the messages in the - flight) do not cause state transitions or timer resets. - - Because DTLS clients send the first message (ClientHello) they start - in the PREPARING state. DTLS servers start in the WAITING state, but - with empty buffers and no retransmit timer. - -4.2.4.1. Timer Values - - Timer value choices are a local matter. We recommend that - implementations use an initial timer value of 500 ms and double the - value at each retransmission, up to 2MSL. Implementations SHOULD - start the timer value at the initial value with each new flight of - messages. - -4.2.5. ChangeCipherSpec - - As with TLS, the ChangeCipherSpec message is not technically a - handshake message but MUST be treated as part of the same flight as - the associated Finished message for the purposes of timeout and - retransmission. - - - -Rescorla, Modadugu [Page 15] - -4.2.6. Finished messages - - Finished messages have the same format as in TLS. However, in order - to remove sensitivity to fragmentation, the Finished MAC MUST be - computed as if each handshake message had been sent as a single - fragment. Note that in cases where the cookie exchange is used, the - initial ClientHello and HelloVerifyRequest ARE included in the - Finished MAC. - - -A.1 Summary of new syntax - - This section includes specifications for the data structures that - have changed between TLS 1.1 and DTLS. - -4.2. Record Layer - struct { - ContentType type; - ProtocolVersion version; - uint16 epoch; // NEW - uint48 sequence_number; // NEW - uint16 length; - opaque fragment[DTLSPlaintext.length]; - } DTLSPlaintext; - - struct { - ContentType type; - ProtocolVersion version; - uint16 epoch; // NEW - uint48 sequence_number; // NEW - uint16 length; - opaque fragment[DTLSCompressed.length]; - } DTLSCompressed; - - struct { - ContentType type; - ProtocolVersion version; - uint16 epoch; // NEW - uint48 sequence_number; // NEW - uint16 length; - select (CipherSpec.cipher_type) { - case block: GenericBlockCipher; - } fragment; - } DTLSCiphertext; - - - -Rescorla, Modadugu [Page 16] - -4.3. Handshake Protocol - - enum { - hello_request(0), client_hello(1), server_hello(2), - hello_verify_request(3), // NEW - certificate(11), server_key_exchange (12), - certificate_request(13), server_hello_done(14), - certificate_verify(15), client_key_exchange(16), - finished(20), (255) - } HandshakeType; - - struct { - HandshakeType msg_type; - uint24 length; - uint16 message_seq; // NEW - uint24 fragment_offset; // NEW - uint24 fragment_length; // NEW - select (HandshakeType) { - case hello_request: HelloRequest; - case client_hello: ClientHello; - case server_hello: ServerHello; - case hello_verify_request: HelloVerifyRequest; // NEW - case certificate:Certificate; - case server_key_exchange: ServerKeyExchange; - case certificate_request: CertificateRequest; - case server_hello_done:ServerHelloDone; - case certificate_verify: CertificateVerify; - case client_key_exchange: ClientKeyExchange; - case finished:Finished; - } body; - } Handshake; - - struct { - Cookie cookie<H0..32>; - } HelloVerifyRequest; - -5. Security Considerations - - This document describes a variant of TLS 1.1 and therefore most of - the security considerations are the same as TLS 1.1. - - The primary additional security consideration raised by DTLS is that - of denial of service. DTLS includes a cookie exchange designed to - protect against denial of service. However, implementations which do - not use this cookie exchange are still vulnerable to DoS. In - particular, DTLS servers which do not use the cookie exchange may be - used as attack amplifiers even if they themselves are not - experiencing DoS. Therefore DTLS servers SHOULD use the cookie - - -Rescorla, Modadugu [Page 17] - - exchange unless there is good reason to believe that amplification is - not a threat in their environment. - -6. IANA Considerations - - This document uses the same identifier space as does TLS [TLS11], so - no IANA registries are required beyond those for TLS. Identifiers MAY - NOT be assigned for DTLS that conflict with TLS. - -References - -Normative References - - [PHOTURIS] Karn, P., Simpson, W., "Photuris: Session-Key Management - Protocol", RFC 2521, March 1999. - - [RFC1191] Mogul, J. C., Deering, S.E., "Path MTU Discovery", - RFC 1191, November 1990. - - [RFC2401] Kent, S., Atkinson, R., "Security Architecture for the - Internet Protocol", RFC2401, November 1998. - - [TLS] Dierks, T., and Allen, C., "The TLS Protocol Version 1.0", - RFC 2246, January 1999. - - [TLS11] Dierks, T., Rescorla, E., "The TLS Protocol Version 1.1", - draft-ietf-tls-rfc2246-bis-05.txt, July 2003. - -Informative References - - [AH] Kent, S., and Atkinson, R., "IP Authentication Header", - RFC 2402, November 1998. - - [DCCP] Kohler, E., Handley, M., Floyd, S., Padhye, J., "Datagram - Congestion Control Protocol", draft-ietf-dccp-spec-05.txt, - October 2003 - - [DTLS] Modadugu, N., Rescorla, E., "The Design and Implementation - of Datagram TLS", in Proceedings of ISOC NDSS 2004, - February 2004. - - [ESP] Kent, S., and Atkinson, R., "IP Encapsulating Security - Payload (ESP)", RFC 2406, November 1998. - - [IKE] Harkins, D., Carrel, D., "The Internet Key Exchange (IKE)", - RFC 2409, November 1998. - - -Rescorla, Modadugu [Page 18] - - [IMAP] Crispin, M., "Internet Message Access Protocol - Version - 4rev1", RFC 3501, March 2003. - - [POP] Myers, J., and Rose, M., "Post Office Protocol - - Version 3", RFC 1939, May 1996. - - [SIP] Rosenberg, J., Schulzrinne, Camarillo, G., Johnston, A., - Peterson, J., Sparks, R., Handley, M., Schooler, E., - "SIP: Session Initiation Protocol", RFC 3261, - June 2002. - - [TCP] Postel, J., "Transmission Control Protocol", - RFC 793, September 1981. - - [WHYIPSEC] Bellovin, S., "Guidelines for Mandating the Use of IPsec", - draft-bellovin-useipsec-02.txt, October 2003 - -Authors' Address - - Eric Rescorla <ekr@rtfm.com> - RTFM, Inc. - 2064 Edgewood Drive - Palo Alto, CA 94303 - - Nagendra Modadugu <nagendra@cs.stanford.edu> - Computer Science Department - 353 Serra Mall - Stanford University - Stanford, CA 94305 - - -Acknowledgements - - The authors would like to thank Dan Boneh, Eu-Jin Goh, Constantine - Sapuntzakis, and Hovav Shacham for discussions and comments on the - design of DTLS. Thanks to the anonymous NDSS reviewers of our - original NDSS paper on DTLS [DTLS] for their comments. Also, thanks - to Steve Kent for feedback that helped clarify many points. The - section on PMTU was cribbed from the DCCP specification [DCCP]. - - - - - -Rescorla, Modadugu [Page 19] - -Full Copyright Statement - - 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. - -Copyright Notice - Copyright (C) The Internet Society (2003). 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 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. - - - - - - - - -Rescorla, Modadugu [Page 20] |