diff options
-rw-r--r-- | README | 13 | ||||
-rw-r--r-- | anytun.cpp | 4 | ||||
-rw-r--r-- | cypher.cpp | 49 | ||||
-rw-r--r-- | cypher.h | 11 | ||||
-rw-r--r-- | doc/libsrtp-1.4.4.pdf | bin | 0 -> 364186 bytes | |||
-rw-r--r-- | doc/rfc3711-srtp.txt | 3139 |
6 files changed, 3194 insertions, 22 deletions
@@ -1,9 +1,17 @@ +Building +======== + +* install libSRTP (as seen below) +* ./configure +* make + + Building and Installing libSRTP: =============================== -go to http://srtp.sourceforge.net/download.html and grab the latest and greatest. +go to https://sourceforge.net/projects/srtp/ and grab the version 1.4.4 (e.g. http://puzzle.dl.sourceforge.net/sourceforge/srtp/srtp-1.4.4.tgz): -Then on your server decompress it: +Then on your computer decompress it: tar xzvf srtp-x.y.z.tgz cd srtp @@ -11,3 +19,4 @@ cd srtp make make install +to install libsrtp.a under /usr/local/lib/ @@ -82,7 +82,7 @@ void* sender(void* p) pack.addPayloadType(0); // cypher the packet - param->c.cypher(pack); + param->c.cypher(pack, seq, param->opt.getSenderId()); // add header to packet pack.addHeader(seq, param->opt.getSenderId()); @@ -132,7 +132,7 @@ void* receiver(void* p) pack.removeHeader(); // decypher the packet - param->c.cypher(pack); + param->c.cypher(pack, pack.getSeqNr(), pack.getSenderId()); // check payload_type and remove it if((param->dev.getType() == TunDevice::TYPE_TUN && pack.getPayloadType() != PAYLOAD_TYPE_TUN) || @@ -31,7 +31,7 @@ #include <stdexcept> #include <vector> -#include "datatypes.h" +//#include "datatypes.h" #include "cypher.h" @@ -39,9 +39,9 @@ extern "C" { #include <srtp/crypto_kernel.h> } -void Cypher::cypher(Buffer& buf) +void Cypher::cypher(Buffer& buf, seq_nr_t seq_nr, sender_id_t sender_id) { - Buffer stream = getBitStream(buf.getLength()); + Buffer stream = getBitStream(buf.getLength(), seq_nr, sender_id); exor(buf, stream); } @@ -55,7 +55,7 @@ void Cypher::exor(Buffer& buf, const Buffer& bit_stream) catch(std::out_of_range& o) {} } -Buffer NullCypher::getBitStream(u_int32_t length) +Buffer NullCypher::getBitStream(u_int32_t length, seq_nr_t seq_nr, sender_id_t sender_id) { Buffer buf(length); for(u_int32_t i; i<length; ++i) @@ -63,27 +63,50 @@ Buffer NullCypher::getBitStream(u_int32_t length) return buf; } -void AesIcmCypher::cypher(Buffer& buf) +void AesIcmCypher::cypher(Buffer& buf, seq_nr_t seq_nr, sender_id_t sender_id) { } -Buffer AesIcmCypher::getBitStream(u_int32_t length) +Buffer AesIcmCypher::getBitStream(u_int32_t length, seq_nr_t seq_nr, sender_id_t sender_id) { Buffer buf(length); extern cipher_type_t aes_icm; err_status_t status; cipher_t* cipher = NULL; - const uint8_t key = 0x42; - uint8_t idx[16] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x34 + uint8_t key[20] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13 }; + v128_t iv; + v128_set_to_zero(&iv); - status = cipher_type_alloc(&aes_icm, &cipher, sizeof(key)); - status = cipher_init(cipher, &key, direction_encrypt); + // allocate cipher + status = cipher_type_alloc(&aes_icm, &cipher, 30); + if(status) + return buf; - status = cipher_set_iv(cipher, idx); + // init cipher + status = cipher_init(cipher, key, direction_any); + if(status) + return buf; + + //set iv + // where the 128-bit integer value IV SHALL be defined by the SSRC, the + // SRTP packet index i, and the SRTP session salting key k_s, as below. + // + // IV = (k_s * 2^16) XOR (SSRC * 2^64) XOR (i * 2^16) + + // sizeof(k_s) = 112, random + + + iv.v32[0] ^= 0; + iv.v32[1] ^= sender_id; + iv.v32[2] ^= (seq_nr >> 16); + iv.v32[3] ^= (seq_nr << 16); + + status = cipher_set_iv(cipher, &iv); status = cipher_output(cipher, buf, length); status = cipher_dealloc(cipher); @@ -31,6 +31,7 @@ #ifndef _CYPHER_H_ #define _CYPHER_H_ +#include "datatypes.h" #include "buffer.h" @@ -40,26 +41,26 @@ public: Cypher() {}; virtual ~Cypher() {}; - void cypher(Buffer& buf); + void cypher(Buffer& buf, seq_nr_t seq_nr, sender_id_t sender_id); protected: void exor(Buffer& buf, const Buffer& bit_stream); - virtual Buffer getBitStream(u_int32_t length) = 0; + virtual Buffer getBitStream(u_int32_t length, seq_nr_t seq_nr, sender_id_t sender_id) = 0; }; class NullCypher : public Cypher { protected: - Buffer getBitStream(u_int32_t length); + Buffer getBitStream(u_int32_t length, seq_nr_t seq_nr, sender_id_t sender_id); }; class AesIcmCypher : public Cypher { public: - void cypher(Buffer& buf); + void cypher(Buffer& buf, seq_nr_t seq_nr, sender_id_t sender_id); protected: - Buffer getBitStream(u_int32_t length); + Buffer getBitStream(u_int32_t length, seq_nr_t seq_nr, sender_id_t sender_id); }; #endif diff --git a/doc/libsrtp-1.4.4.pdf b/doc/libsrtp-1.4.4.pdf Binary files differnew file mode 100644 index 0000000..94ad008 --- /dev/null +++ b/doc/libsrtp-1.4.4.pdf diff --git a/doc/rfc3711-srtp.txt b/doc/rfc3711-srtp.txt new file mode 100644 index 0000000..ecc0648 --- /dev/null +++ b/doc/rfc3711-srtp.txt @@ -0,0 +1,3139 @@ + + + + + + +Network Working Group M. Baugher +Request for Comments: 3711 D. McGrew +Category: Standards Track Cisco Systems, Inc. + M. Naslund + E. Carrara + K. Norrman + Ericsson Research + March 2004 + + + The Secure Real-time Transport Protocol (SRTP) + +Status of this Memo + + This document specifies an Internet standards track protocol for the + Internet community, and requests discussion and suggestions for + improvements. Please refer to the current edition of the "Internet + Official Protocol Standards" (STD 1) for the standardization state + and status of this protocol. Distribution of this memo is unlimited. + +Copyright Notice + + Copyright (C) The Internet Society (2004). All Rights Reserved. + +Abstract + + This document describes the Secure Real-time Transport Protocol + (SRTP), a profile of the Real-time Transport Protocol (RTP), which + can provide confidentiality, message authentication, and replay + protection to the RTP traffic and to the control traffic for RTP, the + Real-time Transport Control Protocol (RTCP). + +Table of Contents + + 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 + 1.1. Notational Conventions . . . . . . . . . . . . . . . . . 3 + 2. Goals and Features . . . . . . . . . . . . . . . . . . . . . . 4 + 2.1. Features . . . . . . . . . . . . . . . . . . . . . . . . 5 + 3. SRTP Framework . . . . . . . . . . . . . . . . . . . . . . . . 5 + 3.1. Secure RTP . . . . . . . . . . . . . . . . . . . . . . . 6 + 3.2. SRTP Cryptographic Contexts. . . . . . . . . . . . . . . 7 + 3.2.1. Transform-independent parameters . . . . . . . . 8 + 3.2.2. Transform-dependent parameters . . . . . . . . . 10 + 3.2.3. Mapping SRTP Packets to Cryptographic Contexts . 10 + 3.3. SRTP Packet Processing . . . . . . . . . . . . . . . . . 11 + 3.3.1. Packet Index Determination, and ROC, s_l Update. 13 + 3.3.2. Replay Protection. . . . . . . . . . . . . . . . 15 + 3.4. Secure RTCP . . . . . . . . . . . . . . . . . . . . . . . 15 + + + +Baugher, et al. Standards Track [Page 1] + +RFC 3711 SRTP March 2004 + + + 4. Pre-Defined Cryptographic Transforms . . . . . . . . . . . . . 19 + 4.1. Encryption . . . . . . . . . . . . . . . . . . . . . . . 19 + 4.1.1. AES in Counter Mode. . . . . . . . . . . . . . . 21 + 4.1.2. AES in f8-mode . . . . . . . . . . . . . . . . . 22 + 4.1.3. NULL Cipher. . . . . . . . . . . . . . . . . . . 25 + 4.2. Message Authentication and Integrity . . . . . . . . . . 25 + 4.2.1. HMAC-SHA1. . . . . . . . . . . . . . . . . . . . 25 + 4.3. Key Derivation . . . . . . . . . . . . . . . . . . . . . 26 + 4.3.1. Key Derivation Algorithm . . . . . . . . . . . . 26 + 4.3.2. SRTCP Key Derivation . . . . . . . . . . . . . . 28 + 4.3.3. AES-CM PRF . . . . . . . . . . . . . . . . . . . 28 + 5. Default and mandatory-to-implement Transforms. . . . . . . . . 28 + 5.1. Encryption: AES-CM and NULL. . . . . . . . . . . . . . . 29 + 5.2. Message Authentication/Integrity: HMAC-SHA1. . . . . . . 29 + 5.3. Key Derivation: AES-CM PRF . . . . . . . . . . . . . . . 29 + 6. Adding SRTP Transforms . . . . . . . . . . . . . . . . . . . . 29 + 7. Rationale. . . . . . . . . . . . . . . . . . . . . . . . . . . 30 + 7.1. Key derivation . . . . . . . . . . . . . . . . . . . . . 30 + 7.2. Salting key. . . . . . . . . . . . . . . . . . . . . . . 30 + 7.3. Message Integrity from Universal Hashing . . . . . . . . 31 + 7.4. Data Origin Authentication Considerations. . . . . . . . 31 + 7.5. Short and Zero-length Message Authentication . . . . . . 32 + 8. Key Management Considerations. . . . . . . . . . . . . . . . . 33 + 8.1. Re-keying . . . . . . . . . . . . . . . . . . . . . . . 34 + 8.1.1. Use of the <From, To> for re-keying. . . . . . . 34 + 8.2. Key Management parameters. . . . . . . . . . . . . . . . 35 + 9. Security Considerations. . . . . . . . . . . . . . . . . . . . 37 + 9.1. SSRC collision and two-time pad. . . . . . . . . . . . . 37 + 9.2. Key Usage. . . . . . . . . . . . . . . . . . . . . . . . 38 + 9.3. Confidentiality of the RTP Payload . . . . . . . . . . . 39 + 9.4. Confidentiality of the RTP Header. . . . . . . . . . . . 40 + 9.5. Integrity of the RTP payload and header. . . . . . . . . 40 + 9.5.1. Risks of Weak or Null Message Authentication. . . 42 + 9.5.2. Implicit Header Authentication . . . . . . . . . 43 + 10. Interaction with Forward Error Correction mechanisms. . . . . 43 + 11. Scenarios . . . . . . . . . . . . . . . . . . . . . . . . . . 43 + 11.1. Unicast. . . . . . . . . . . . . . . . . . . . . . . . . 43 + 11.2. Multicast (one sender) . . . . . . . . . . . . . . . . . 44 + 11.3. Re-keying and access control . . . . . . . . . . . . . . 45 + 11.4. Summary of basic scenarios . . . . . . . . . . . . . . . 46 + 12. IANA Considerations. . . . . . . . . . . . . . . . . . . . . . 46 + 13. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 47 + 14. References . . . . . . . . . . . . . . . . . . . . . . . . . . 47 + 14.1. Normative References . . . . . . . . . . . . . . . . . . 47 + 14.2. Informative References . . . . . . . . . . . . . . . . . 48 + Appendix A: Pseudocode for Index Determination . . . . . . . . . . 51 + Appendix B: Test Vectors . . . . . . . . . . . . . . . . . . . . . 51 + B.1. AES-f8 Test Vectors. . . . . . . . . . . . . . . . . . . 51 + + + +Baugher, et al. Standards Track [Page 2] + +RFC 3711 SRTP March 2004 + + + B.2. AES-CM Test Vectors. . . . . . . . . . . . . . . . . . . 52 + B.3. Key Derivation Test Vectors. . . . . . . . . . . . . . . 53 + Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 55 + Full Copyright Statement . . . . . . . . . . . . . . . . . . . . . 56 + +1. Introduction + + This document describes the Secure Real-time Transport Protocol + (SRTP), a profile of the Real-time Transport Protocol (RTP), which + can provide confidentiality, message authentication, and replay + protection to the RTP traffic and to the control traffic for RTP, + RTCP (the Real-time Transport Control Protocol) [RFC3350]. + + SRTP provides a framework for encryption and message authentication + of RTP and RTCP streams (Section 3). SRTP defines a set of default + cryptographic transforms (Sections 4 and 5), and it allows new + transforms to be introduced in the future (Section 6). With + appropriate key management (Sections 7 and 8), SRTP is secure + (Sections 9) for unicast and multicast RTP applications (Section 11). + + SRTP can achieve high throughput and low packet expansion. SRTP + proves to be a suitable protection for heterogeneous environments + (mix of wired and wireless networks). To get such features, default + transforms are described, based on an additive stream cipher for + encryption, a keyed-hash based function for message authentication, + and an "implicit" index for sequencing/synchronization based on the + RTP sequence number for SRTP and an index number for Secure RTCP + (SRTCP). + +1.1. Notational Conventions + + The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this + document are to be interpreted as described in [RFC2119]. The + terminology conforms to [RFC2828] with the following exception. For + simplicity we use the term "random" throughout the document to denote + randomly or pseudo-randomly generated values. Large amounts of + random bits may be difficult to obtain, and for the security of SRTP, + pseudo-randomness is sufficient [RFC1750]. + + By convention, the adopted representation is the network byte order, + i.e., the left most bit (octet) is the most significant one. By XOR + we mean bitwise addition modulo 2 of binary strings, and || denotes + concatenation. In other words, if C = A || B, then the most + significant bits of C are the bits of A, and the least significant + bits of C equal the bits of B. Hexadecimal numbers are prefixed by + 0x. + + + + +Baugher, et al. Standards Track [Page 3] + +RFC 3711 SRTP March 2004 + + + The word "encryption" includes also use of the NULL algorithm (which + in practice does leave the data in the clear). + + With slight abuse of notation, we use the terms "message + authentication" and "authentication tag" as is common practice, even + though in some circumstances, e.g., group communication, the service + provided is actually only integrity protection and not data origin + authentication. + +2. Goals and Features + + The security goals for SRTP are to ensure: + + * the confidentiality of the RTP and RTCP payloads, and + + * the integrity of the entire RTP and RTCP packets, together with + protection against replayed packets. + + These security services are optional and independent from each other, + except that SRTCP integrity protection is mandatory (malicious or + erroneous alteration of RTCP messages could otherwise disrupt the + processing of the RTP stream). + + Other, functional, goals for the protocol are: + + * a framework that permits upgrading with new cryptographic + transforms, + + * low bandwidth cost, i.e., a framework preserving RTP header + compression efficiency, + + and, asserted by the pre-defined transforms: + + * a low computational cost, + + * a small footprint (i.e., small code size and data memory for + keying information and replay lists), + + * limited packet expansion to support the bandwidth economy goal, + + * independence from the underlying transport, network, and physical + layers used by RTP, in particular high tolerance to packet loss + and re-ordering. + + These properties ensure that SRTP is a suitable protection scheme for + RTP/RTCP in both wired and wireless scenarios. + + + + + +Baugher, et al. Standards Track [Page 4] + +RFC 3711 SRTP March 2004 + + +2.1. Features + + Besides the above mentioned direct goals, SRTP provides for some + additional features. They have been introduced to lighten the burden + on key management and to further increase security. They include: + + * A single "master key" can provide keying material for + confidentiality and integrity protection, both for the SRTP stream + and the corresponding SRTCP stream. This is achieved with a key + derivation function (see Section 4.3), providing "session keys" + for the respective security primitive, securely derived from the + master key. + + * In addition, the key derivation can be configured to periodically + refresh the session keys, which limits the amount of ciphertext + produced by a fixed key, available for an adversary to + cryptanalyze. + + * "Salting keys" are used to protect against pre-computation and + time-memory tradeoff attacks [MF00] [BS00]. + + Detailed rationale for these features can be found in Section 7. + +3. SRTP Framework + + RTP is the Real-time Transport Protocol [RFC3550]. We define SRTP as + a profile of RTP. This profile is an extension to the RTP + Audio/Video Profile [RFC3551]. Except where explicitly noted, all + aspects of that profile apply, with the addition of the SRTP security + features. Conceptually, we consider SRTP to be a "bump in the stack" + implementation which resides between the RTP application and the + transport layer. SRTP intercepts RTP packets and then forwards an + equivalent SRTP packet on the sending side, and intercepts SRTP + packets and passes an equivalent RTP packet up the stack on the + receiving side. + + Secure RTCP (SRTCP) provides the same security services to RTCP as + SRTP does to RTP. SRTCP message authentication is MANDATORY and + thereby protects the RTCP fields to keep track of membership, provide + feedback to RTP senders, or maintain packet sequence counters. SRTCP + is described in Section 3.4. + + + + + + + + + + +Baugher, et al. Standards Track [Page 5] + +RFC 3711 SRTP March 2004 + + +3.1. Secure RTP + + The format of an SRTP packet is illustrated in Figure 1. + + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+ + |V=2|P|X| CC |M| PT | sequence number | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | + | timestamp | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | + | synchronization source (SSRC) identifier | | + +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | + | contributing source (CSRC) identifiers | | + | .... | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | + | RTP extension (OPTIONAL) | | + +>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | + | | payload ... | | + | | +-------------------------------+ | + | | | RTP padding | RTP pad count | | + +>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+ + | ~ SRTP MKI (OPTIONAL) ~ | + | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | + | : authentication tag (RECOMMENDED) : | + | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | + | | + +- Encrypted Portion* Authenticated Portion ---+ + + Figure 1. The format of an SRTP packet. *Encrypted Portion is the + same size as the plaintext for the Section 4 pre-defined transforms. + + The "Encrypted Portion" of an SRTP packet consists of the encryption + of the RTP payload (including RTP padding when present) of the + equivalent RTP packet. The Encrypted Portion MAY be the exact size + of the plaintext or MAY be larger. Figure 1 shows the RTP payload + including any possible padding for RTP [RFC3550]. + + None of the pre-defined encryption transforms uses any padding; for + these, the RTP and SRTP payload sizes match exactly. New transforms + added to SRTP (following Section 6) may require padding, and may + hence produce larger payloads. RTP provides its own padding format + (as seen in Fig. 1), which due to the padding indicator in the RTP + header has merits in terms of compactness relative to paddings using + prefix-free codes. This RTP padding SHALL be the default method for + transforms requiring padding. Transforms MAY specify other padding + methods, and MUST then specify the amount, format, and processing of + their padding. It is important to note that encryption transforms + + + +Baugher, et al. Standards Track [Page 6] + +RFC 3711 SRTP March 2004 + + + that use padding are vulnerable to subtle attacks, especially when + message authentication is not used [V02]. Each specification for a + new encryption transform needs to carefully consider and describe the + security implications of the padding that it uses. Message + authentication codes define their own padding, so this default does + not apply to authentication transforms. + + The OPTIONAL MKI and the RECOMMENDED authentication tag are the only + fields defined by SRTP that are not in RTP. Only 8-bit alignment is + assumed. + + MKI (Master Key Identifier): configurable length, OPTIONAL. The + MKI is defined, signaled, and used by key management. The + MKI identifies the master key from which the session + key(s) were derived that authenticate and/or encrypt the + particular packet. Note that the MKI SHALL NOT identify + the SRTP cryptographic context, which is identified + according to Section 3.2.3. The MKI MAY be used by key + management for the purposes of re-keying, identifying a + particular master key within the cryptographic context + (Section 3.2.1). + + Authentication tag: configurable length, RECOMMENDED. The + authentication tag is used to carry message authentication + data. The Authenticated Portion of an SRTP packet + consists of the RTP header followed by the Encrypted + Portion of the SRTP packet. Thus, if both encryption and + authentication are applied, encryption SHALL be applied + before authentication on the sender side and conversely on + the receiver side. The authentication tag provides + authentication of the RTP header and payload, and it + indirectly provides replay protection by authenticating + the sequence number. Note that the MKI is not integrity + protected as this does not provide any extra protection. + +3.2. SRTP Cryptographic Contexts + + Each SRTP stream requires the sender and receiver to maintain + cryptographic state information. This information is called the + "cryptographic context". + + SRTP uses two types of keys: session keys and master keys. By a + "session key", we mean a key which is used directly in a + cryptographic transform (e.g., encryption or message authentication), + and by a "master key", we mean a random bit string (given by the key + management protocol) from which session keys are derived in a + + + + + +Baugher, et al. Standards Track [Page 7] + +RFC 3711 SRTP March 2004 + + + cryptographically secure way. The master key(s) and other parameters + in the cryptographic context are provided by key management + mechanisms external to SRTP, see Section 8. + +3.2.1. Transform-independent parameters + + Transform-independent parameters are present in the cryptographic + context independently of the particular encryption or authentication + transforms that are used. The transform-independent parameters of + the cryptographic context for SRTP consist of: + + * a 32-bit unsigned rollover counter (ROC), which records how many + times the 16-bit RTP sequence number has been reset to zero after + passing through 65,535. Unlike the sequence number (SEQ), which + SRTP extracts from the RTP packet header, the ROC is maintained by + SRTP as described in Section 3.3.1. + + We define the index of the SRTP packet corresponding to a given + ROC and RTP sequence number to be the 48-bit quantity + + i = 2^16 * ROC + SEQ. + + * for the receiver only, a 16-bit sequence number s_l, which can be + thought of as the highest received RTP sequence number (see + Section 3.3.1 for its handling), which SHOULD be authenticated + since message authentication is RECOMMENDED, + + * an identifier for the encryption algorithm, i.e., the cipher and + its mode of operation, + + * an identifier for the message authentication algorithm, + + * a replay list, maintained by the receiver only (when + authentication and replay protection are provided), containing + indices of recently received and authenticated SRTP packets, + + * an MKI indicator (0/1) as to whether an MKI is present in SRTP and + SRTCP packets, + + * if the MKI indicator is set to one, the length (in octets) of the + MKI field, and (for the sender) the actual value of the currently + active MKI (the value of the MKI indicator and length MUST be kept + fixed for the lifetime of the context), + + * the master key(s), which MUST be random and kept secret, + + + + + + +Baugher, et al. Standards Track [Page 8] + +RFC 3711 SRTP March 2004 + + + * for each master key, there is a counter of the number of SRTP + packets that have been processed (sent) with that master key + (essential for security, see Sections 3.3.1 and 9), + + * non-negative integers n_e, and n_a, determining the length of the + session keys for encryption, and message authentication. + + In addition, for each master key, an SRTP stream MAY use the + following associated values: + + * a master salt, to be used in the key derivation of session keys. + This value, when used, MUST be random, but MAY be public. Use of + master salt is strongly RECOMMENDED, see Section 9.2. A "NULL" + salt is treated as 00...0. + + * an integer in the set {1,2,4,...,2^24}, the "key_derivation_rate", + where an unspecified value is treated as zero. The constraint to + be a power of 2 simplifies the session-key derivation + implementation, see Section 4.3. + + * an MKI value, + + * <From, To> values, specifying the lifetime for a master key, + expressed in terms of the two 48-bit index values inside whose + range (including the range end-points) the master key is valid. + For the use of <From, To>, see Section 8.1.1. <From, To> is an + alternative to the MKI and assumes that a master key is in one- + to-one correspondence with the SRTP session key on which the + <From, To> range is defined. + + SRTCP SHALL by default share the crypto context with SRTP, except: + + * no rollover counter and s_l-value need to be maintained as the + RTCP index is explicitly carried in each SRTCP packet, + + * a separate replay list is maintained (when replay protection is + provided), + + * SRTCP maintains a separate counter for its master key (even if the + master key is the same as that for SRTP, see below), as a means to + maintain a count of the number of SRTCP packets that have been + processed with that key. + + Note in particular that the master key(s) MAY be shared between SRTP + and the corresponding SRTCP, if the pre-defined transforms (including + the key derivation) are used but the session key(s) MUST NOT be so + shared. + + + + +Baugher, et al. Standards Track [Page 9] + +RFC 3711 SRTP March 2004 + + + In addition, there can be cases (see Sections 8 and 9.1) where + several SRTP streams within a given RTP session, identified by their + synchronization source (SSRCs, which is part of the RTP header), + share most of the crypto context parameters (including possibly + master and session keys). In such cases, just as in the normal + SRTP/SRTCP parameter sharing above, separate replay lists and packet + counters for each stream (SSRC) MUST still be maintained. Also, + separate SRTP indices MUST then be maintained. + + A summary of parameters, pre-defined transforms, and default values + for the above parameters (and other SRTP parameters) can be found in + Sections 5 and 8.2. + +3.2.2. Transform-dependent parameters + + All encryption, authentication/integrity, and key derivation + parameters are defined in the transforms section (Section 4). + Typical examples of such parameters are block size of ciphers, + session keys, data for the Initialization Vector (IV) formation, etc. + Future SRTP transform specifications MUST include a section to list + the additional cryptographic context's parameters for that transform, + if any. + +3.2.3. Mapping SRTP Packets to Cryptographic Contexts + + Recall that an RTP session for each participant is defined [RFC3550] + by a pair of destination transport addresses (one network address + plus a port pair for RTP and RTCP), and that a multimedia session is + defined as a collection of RTP sessions. For example, a particular + multimedia session could include an audio RTP session, a video RTP + session, and a text RTP session. + + A cryptographic context SHALL be uniquely identified by the triplet + context identifier: + + context id = <SSRC, destination network address, destination + transport port number> + + where the destination network address and the destination transport + port are the ones in the SRTP packet. It is assumed that, when + presented with this information, the key management returns a context + with the information as described in Section 3.2. + + As noted above, SRTP and SRTCP by default share the bulk of the + parameters in the cryptographic context. Thus, retrieving the crypto + context parameters for an SRTCP stream in practice may imply a + binding to the correspondent SRTP crypto context. It is up to the + implementation to assure such binding, since the RTCP port may not be + + + +Baugher, et al. Standards Track [Page 10] + +RFC 3711 SRTP March 2004 + + + directly deducible from the RTP port only. Alternatively, the key + management may choose to provide separate SRTP- and SRTCP- contexts, + duplicating the common parameters (such as master key(s)). The + latter approach then also enables SRTP and SRTCP to use, e.g., + distinct transforms, if so desired. Similar considerations arise + when multiple SRTP streams, forming part of one single RTP session, + share keys and other parameters. + + If no valid context can be found for a packet corresponding to a + certain context identifier, that packet MUST be discarded. + +3.3. SRTP Packet Processing + + The following applies to SRTP. SRTCP is described in Section 3.4. + + Assuming initialization of the cryptographic context(s) has taken + place via key management, the sender SHALL do the following to + construct an SRTP packet: + + 1. Determine which cryptographic context to use as described in + Section 3.2.3. + + 2. Determine the index of the SRTP packet using the rollover counter, + the highest sequence number in the cryptographic context, and the + sequence number in the RTP packet, as described in Section 3.3.1. + + 3. Determine the master key and master salt. This is done using the + index determined in the previous step or the current MKI in the + cryptographic context, according to Section 8.1. + + 4. Determine the session keys and session salt (if they are used by + the transform) as described in Section 4.3, using master key, + master salt, key_derivation_rate, and session key-lengths in the + cryptographic context with the index, determined in Steps 2 and 3. + + 5. Encrypt the RTP payload to produce the Encrypted Portion of the + packet (see Section 4.1, for the defined ciphers). This step uses + the encryption algorithm indicated in the cryptographic context, + the session encryption key and the session salt (if used) found in + Step 4 together with the index found in Step 2. + + 6. If the MKI indicator is set to one, append the MKI to the packet. + + 7. For message authentication, compute the authentication tag for the + Authenticated Portion of the packet, as described in Section 4.2. + This step uses the current rollover counter, the authentication + + + + + +Baugher, et al. Standards Track [Page 11] + +RFC 3711 SRTP March 2004 + + + algorithm indicated in the cryptographic context, and the session + authentication key found in Step 4. Append the authentication tag + to the packet. + + 8. If necessary, update the ROC as in Section 3.3.1, using the packet + index determined in Step 2. + + To authenticate and decrypt an SRTP packet, the receiver SHALL do the + following: + + 1. Determine which cryptographic context to use as described in + Section 3.2.3. + + 2. Run the algorithm in Section 3.3.1 to get the index of the SRTP + packet. The algorithm uses the rollover counter and highest + sequence number in the cryptographic context with the sequence + number in the SRTP packet, as described in Section 3.3.1. + + 3. Determine the master key and master salt. If the MKI indicator in + the context is set to one, use the MKI in the SRTP packet, + otherwise use the index from the previous step, according to + Section 8.1. + + 4. Determine the session keys, and session salt (if used by the + transform) as described in Section 4.3, using master key, master + salt, key_derivation_rate and session key-lengths in the + cryptographic context with the index, determined in Steps 2 and 3. + + 5. For message authentication and replay protection, first check if + the packet has been replayed (Section 3.3.2), using the Replay + List and the index as determined in Step 2. If the packet is + judged to be replayed, then the packet MUST be discarded, and the + event SHOULD be logged. + + Next, perform verification of the authentication tag, using the + rollover counter from Step 2, the authentication algorithm + indicated in the cryptographic context, and the session + authentication key from Step 4. If the result is "AUTHENTICATION + FAILURE" (see Section 4.2), the packet MUST be discarded from + further processing and the event SHOULD be logged. + + 6. Decrypt the Encrypted Portion of the packet (see Section 4.1, for + the defined ciphers), using the decryption algorithm indicated in + the cryptographic context, the session encryption key and salt (if + used) found in Step 4 with the index from Step 2. + + + + + + +Baugher, et al. Standards Track [Page 12] + +RFC 3711 SRTP March 2004 + + + 7. Update the rollover counter and highest sequence number, s_l, in + the cryptographic context as in Section 3.3.1, using the packet + index estimated in Step 2. If replay protection is provided, also + update the Replay List as described in Section 3.3.2. + + 8. When present, remove the MKI and authentication tag fields from + the packet. + +3.3.1. Packet Index Determination, and ROC, s_l Update + + SRTP implementations use an "implicit" packet index for sequencing, + i.e., not all of the index is explicitly carried in the SRTP packet. + For the pre-defined transforms, the index i is used in replay + protection (Section 3.3.2), encryption (Section 4.1), message + authentication (Section 4.2), and for the key derivation (Section + 4.3). + + When the session starts, the sender side MUST set the rollover + counter, ROC, to zero. Each time the RTP sequence number, SEQ, wraps + modulo 2^16, the sender side MUST increment ROC by one, modulo 2^32 + (see security aspects below). The sender's packet index is then + defined as + + i = 2^16 * ROC + SEQ. + + Receiver-side implementations use the RTP sequence number to + determine the correct index of a packet, which is the location of the + packet in the sequence of all SRTP packets. A robust approach for + the proper use of a rollover counter requires its handling and use to + be well defined. In particular, out-of-order RTP packets with + sequence numbers close to 2^16 or zero must be properly handled. + + The index estimate is based on the receiver's locally maintained ROC + and s_l values. At the setup of the session, the ROC MUST be set to + zero. Receivers joining an on-going session MUST be given the + current ROC value using out-of-band signaling such as key-management + signaling. Furthermore, the receiver SHALL initialize s_l to the RTP + sequence number (SEQ) of the first observed SRTP packet (unless the + initial value is provided by out of band signaling such as key + management). + + On consecutive SRTP packets, the receiver SHOULD estimate the index + as + i = 2^16 * v + SEQ, + + where v is chosen from the set { ROC-1, ROC, ROC+1 } (modulo 2^32) + such that i is closest (in modulo 2^48 sense) to the value 2^16 * ROC + + s_l (see Appendix A for pseudocode). + + + +Baugher, et al. Standards Track [Page 13] + +RFC 3711 SRTP March 2004 + + + After the packet has been processed and authenticated (when enabled + for SRTP packets for the session), the receiver MUST use v to + conditionally update its s_l and ROC variables as follows. If + v=(ROC-1) mod 2^32, then there is no update to s_l or ROC. If v=ROC, + then s_l is set to SEQ if and only if SEQ is larger than the current + s_l; there is no change to ROC. If v=(ROC+1) mod 2^32, then s_l is + set to SEQ and ROC is set to v. + + After a re-keying occurs (changing to a new master key), the rollover + counter always maintains its sequence of values, i.e., it MUST NOT be + reset to zero. + + As the rollover counter is 32 bits long and the sequence number is 16 + bits long, the maximum number of packets belonging to a given SRTP + stream that can be secured with the same key is 2^48 using the pre- + defined transforms. After that number of SRTP packets have been sent + with a given (master or session) key, the sender MUST NOT send any + more packets with that key. (There exists a similar limit for SRTCP, + which in practice may be more restrictive, see Section 9.2.) This + limitation enforces a security benefit by providing an upper bound on + the amount of traffic that can pass before cryptographic keys are + changed. Re-keying (see Section 8.1) MUST be triggered, before this + amount of traffic, and MAY be triggered earlier, e.g., for increased + security and access control to media. Recurring key derivation by + means of a non-zero key_derivation_rate (see Section 4.3), also gives + stronger security but does not change the above absolute maximum + value. + + On the receiver side, there is a caveat to updating s_l and ROC: if + message authentication is not present, neither the initialization of + s_l, nor the ROC update can be made completely robust. The + receiver's "implicit index" approach works for the pre-defined + transforms as long as the reorder and loss of the packets are not too + great and bit-errors do not occur in unfortunate ways. In + particular, 2^15 packets would need to be lost, or a packet would + need to be 2^15 packets out of sequence before synchronization is + lost. Such drastic loss or reorder is likely to disrupt the RTP + application itself. + + The algorithm for the index estimate and ROC update is a matter of + implementation, and should take into consideration the environment + (e.g., packet loss rate) and the cases when synchronization is likely + to be lost, e.g., when the initial sequence number (randomly chosen + by RTP) is not known in advance (not sent in the key management + protocol) but may be near to wrap modulo 2^16. + + + + + + +Baugher, et al. Standards Track [Page 14] + +RFC 3711 SRTP March 2004 + + + A more elaborate and more robust scheme than the one given above is + the handling of RTP's own "rollover counter", see Appendix A.1 of + [RFC3550]. + +3.3.2. Replay Protection + + Secure replay protection is only possible when integrity protection + is present. It is RECOMMENDED to use replay protection, both for RTP + and RTCP, as integrity protection alone cannot assure security + against replay attacks. + + A packet is "replayed" when it is stored by an adversary, and then + re-injected into the network. When message authentication is + provided, SRTP protects against such attacks through a Replay List. + Each SRTP receiver maintains a Replay List, which conceptually + contains the indices of all of the packets which have been received + and authenticated. In practice, the list can use a "sliding window" + approach, so that a fixed amount of storage suffices for replay + protection. Packet indices which lag behind the packet index in the + context by more than SRTP-WINDOW-SIZE can be assumed to have been + received, where SRTP-WINDOW-SIZE is a receiver-side, implementation- + dependent parameter and MUST be at least 64, but which MAY be set to + a higher value. + + The receiver checks the index of an incoming packet against the + replay list and the window. Only packets with index ahead of the + window, or, inside the window but not already received, SHALL be + accepted. + + After the packet has been authenticated (if necessary the window is + first moved ahead), the replay list SHALL be updated with the new + index. + + The Replay List can be efficiently implemented by using a bitmap to + represent which packets have been received, as described in the + Security Architecture for IP [RFC2401]. + +3.4. Secure RTCP + + Secure RTCP follows the definition of Secure RTP. SRTCP adds three + mandatory new fields (the SRTCP index, an "encrypt-flag", and the + authentication tag) and one optional field (the MKI) to the RTCP + packet definition. The three mandatory fields MUST be appended to an + RTCP packet in order to form an equivalent SRTCP packet. The added + fields follow any other profile-specific extensions. + + + + + + +Baugher, et al. Standards Track [Page 15] + +RFC 3711 SRTP March 2004 + + + According to Section 6.1 of [RFC3550], there is a REQUIRED packet + format for compound packets. SRTCP MUST be given packets according + to that requirement in the sense that the first part MUST be a sender + report or a receiver report. However, the RTCP encryption prefix (a + random 32-bit quantity) specified in that Section MUST NOT be used + since, as is stated there, it is only applicable to the encryption + method specified in [RFC3550] and is not needed by the cryptographic + mechanisms used in SRTP. + + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+ + |V=2|P| RC | PT=SR or RR | length | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | + | SSRC of sender | | + +>+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | + | ~ sender info ~ | + | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | + | ~ report block 1 ~ | + | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | + | ~ report block 2 ~ | + | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | + | ~ ... ~ | + | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | + | |V=2|P| SC | PT=SDES=202 | length | | + | +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | + | | SSRC/CSRC_1 | | + | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | + | ~ SDES items ~ | + | +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | + | ~ ... ~ | + +>+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | + | |E| SRTCP index | | + | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+ + | ~ SRTCP MKI (OPTIONAL) ~ | + | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | + | : authentication tag : | + | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | + | | + +-- Encrypted Portion Authenticated Portion -----+ + + + Figure 2. An example of the format of a Secure RTCP packet, + consisting of an underlying RTCP compound packet with a Sender Report + and SDES packet. + + + + + + +Baugher, et al. Standards Track [Page 16] + +RFC 3711 SRTP March 2004 + + + The Encrypted Portion of an SRTCP packet consists of the encryption + (Section 4.1) of the RTCP payload of the equivalent compound RTCP + packet, from the first RTCP packet, i.e., from the ninth (9) octet to + the end of the compound packet. The Authenticated Portion of an + SRTCP packet consists of the entire equivalent (eventually compound) + RTCP packet, the E flag, and the SRTCP index (after any encryption + has been applied to the payload). + + The added fields are: + + E-flag: 1 bit, REQUIRED + The E-flag indicates if the current SRTCP packet is + encrypted or unencrypted. Section 9.1 of [RFC3550] allows + the split of a compound RTCP packet into two lower-layer + packets, one to be encrypted and one to be sent in the + clear. The E bit set to "1" indicates encrypted packet, and + "0" indicates non-encrypted packet. + + SRTCP index: 31 bits, REQUIRED + The SRTCP index is a 31-bit counter for the SRTCP packet. + The index is explicitly included in each packet, in contrast + to the "implicit" index approach used for SRTP. The SRTCP + index MUST be set to zero before the first SRTCP packet is + sent, and MUST be incremented by one, modulo 2^31, after + each SRTCP packet is sent. In particular, after a re-key, + the SRTCP index MUST NOT be reset to zero again. + + Authentication Tag: configurable length, REQUIRED + The authentication tag is used to carry message + authentication data. + + MKI: configurable length, OPTIONAL + The MKI is the Master Key Indicator, and functions according + to the MKI definition in Section 3. + + SRTCP uses the cryptographic context parameters and packet processing + of SRTP by default, with the following changes: + + * The receiver does not need to "estimate" the index, as it is + explicitly signaled in the packet. + + * Pre-defined SRTCP encryption is as specified in Section 4.1, but + using the definition of the SRTCP Encrypted Portion given in this + section, and using the SRTCP index as the index i. The encryption + transform and related parameters SHALL by default be the same + selected for the protection of the associated SRTP stream(s), + while the NULL algorithm SHALL be applied to the RTCP packets not + to be encrypted. SRTCP may have a different encryption transform + + + +Baugher, et al. Standards Track [Page 17] + +RFC 3711 SRTP March 2004 + + + than the one used by the corresponding SRTP. The expected use for + this feature is when the former has NULL-encryption and the latter + has a non NULL-encryption. + + The E-flag is assigned a value by the sender depending on whether the + packet was encrypted or not. + + * SRTCP decryption is performed as in Section 4, but only if the E + flag is equal to 1. If so, the Encrypted Portion is decrypted, + using the SRTCP index as the index i. In case the E-flag is 0, + the payload is simply left unmodified. + + * SRTCP replay protection is as defined in Section 3.3.2, but using + the SRTCP index as the index i and a separate Replay List that is + specific to SRTCP. + + * The pre-defined SRTCP authentication tag is specified as in + Section 4.2, but with the Authenticated Portion of the SRTCP + packet given in this section (which includes the index). The + authentication transform and related parameters (e.g., key size) + SHALL by default be the same as selected for the protection of the + associated SRTP stream(s). + + * In the last step of the processing, only the sender needs to + update the value of the SRTCP index by incrementing it modulo 2^31 + and for security reasons the sender MUST also check the number of + SRTCP packets processed, see Section 9.2. + + Message authentication for RTCP is REQUIRED, as it is the control + protocol (e.g., it has a BYE packet) for RTP. + + Precautions must be taken so that the packet expansion in SRTCP (due + to the added fields) does not cause SRTCP messages to use more than + their share of RTCP bandwidth. To avoid this, the following two + measures MUST be taken: + + 1. When initializing the RTCP variable "avg_rtcp_size" defined in + chapter 6.3 of [RFC3550], it MUST include the size of the fields + that will be added by SRTCP (index, E-bit, authentication tag, and + when present, the MKI). + + 2. When updating the "avg_rtcp_size" using the variable "packet_size" + (section 6.3.3 of [RFC3550]), the value of "packet_size" MUST + include the size of the additional fields added by SRTCP. + + + + + + + +Baugher, et al. Standards Track [Page 18] + +RFC 3711 SRTP March 2004 + + + With these measures in place the SRTCP messages will not use more + than the allotted bandwidth. The effect of the size of the added + fields on the SRTCP traffic will be that messages will be sent with + longer packet intervals. The increase in the intervals will be + directly proportional to size of the added fields. For the pre- + defined transforms, the size of the added fields will be at least 14 + octets, and upper bounded depending on MKI and the authentication tag + sizes. + +4. Pre-Defined Cryptographic Transforms + + While there are numerous encryption and message authentication + algorithms that can be used in SRTP, below we define default + algorithms in order to avoid the complexity of specifying the + encodings for the signaling of algorithm and parameter identifiers. + The defined algorithms have been chosen as they fulfill the goals + listed in Section 2. Recommendations on how to extend SRTP with new + transforms are given in Section 6. + +4.1. Encryption + + The following parameters are common to both pre-defined, non-NULL, + encryption transforms specified in this section. + + * BLOCK_CIPHER-MODE indicates the block cipher used and its mode of + operation + * n_b is the bit-size of the block for the block cipher + * k_e is the session encryption key + * n_e is the bit-length of k_e + * k_s is the session salting key + * n_s is the bit-length of k_s + * SRTP_PREFIX_LENGTH is the octet length of the keystream prefix, a + non-negative integer, specified by the message authentication code + in use. + + The distinct session keys and salts for SRTP/SRTCP are by default + derived as specified in Section 4.3. + + The encryption transforms defined in SRTP map the SRTP packet index + and secret key into a pseudo-random keystream segment. Each + keystream segment encrypts a single RTP packet. The process of + encrypting a packet consists of generating the keystream segment + corresponding to the packet, and then bitwise exclusive-oring that + keystream segment onto the payload of the RTP packet to produce the + Encrypted Portion of the SRTP packet. In case the payload size is + not an integer multiple of n_b bits, the excess (least significant) + bits of the keystream are simply discarded. Decryption is done the + same way, but swapping the roles of the plaintext and ciphertext. + + + +Baugher, et al. Standards Track [Page 19] + +RFC 3711 SRTP March 2004 + + + +----+ +------------------+---------------------------------+ + | KG |-->| Keystream Prefix | Keystream Suffix |---+ + +----+ +------------------+---------------------------------+ | + | + +---------------------------------+ v + | Payload of RTP Packet |->(*) + +---------------------------------+ | + | + +---------------------------------+ | + | Encrypted Portion of SRTP Packet|<--+ + +---------------------------------+ + + Figure 3: Default SRTP Encryption Processing. Here KG denotes the + keystream generator, and (*) denotes bitwise exclusive-or. + + The definition of how the keystream is generated, given the index, + depends on the cipher and its mode of operation. Below, two such + keystream generators are defined. The NULL cipher is also defined, + to be used when encryption of RTP is not required. + + The SRTP definition of the keystream is illustrated in Figure 3. The + initial octets of each keystream segment MAY be reserved for use in a + message authentication code, in which case the keystream used for + encryption starts immediately after the last reserved octet. The + initial reserved octets are called the "keystream prefix" (not to be + confused with the "encryption prefix" of [RFC3550, Section 6.1]), and + the remaining octets are called the "keystream suffix". The + keystream prefix MUST NOT be used for encryption. The process is + illustrated in Figure 3. + + The number of octets in the keystream prefix is denoted as + SRTP_PREFIX_LENGTH. The keystream prefix is indicated by a positive, + non-zero value of SRTP_PREFIX_LENGTH. This means that, even if + confidentiality is not to be provided, the keystream generator output + may still need to be computed for packet authentication, in which + case the default keystream generator (mode) SHALL be used. + + The default cipher is the Advanced Encryption Standard (AES) [AES], + and we define two modes of running AES, (1) Segmented Integer Counter + Mode AES and (2) AES in f8-mode. In the remainder of this section, + let E(k,x) be AES applied to key k and input block x. + + + + + + + + + + +Baugher, et al. Standards Track [Page 20] + +RFC 3711 SRTP March 2004 + + +4.1.1. AES in Counter Mode + + Conceptually, counter mode [AES-CTR] consists of encrypting + successive integers. The actual definition is somewhat more + complicated, in order to randomize the starting point of the integer + sequence. Each packet is encrypted with a distinct keystream + segment, which SHALL be computed as follows. + + A keystream segment SHALL be the concatenation of the 128-bit output + blocks of the AES cipher in the encrypt direction, using key k = k_e, + in which the block indices are in increasing order. Symbolically, + each keystream segment looks like + + E(k, IV) || E(k, IV + 1 mod 2^128) || E(k, IV + 2 mod 2^128) ... + + where the 128-bit integer value IV SHALL be defined by the SSRC, the + SRTP packet index i, and the SRTP session salting key k_s, as below. + + IV = (k_s * 2^16) XOR (SSRC * 2^64) XOR (i * 2^16) + + Each of the three terms in the XOR-sum above is padded with as many + leading zeros as needed to make the operation well-defined, + considered as a 128-bit value. + + The inclusion of the SSRC allows the use of the same key to protect + distinct SRTP streams within the same RTP session, see the security + caveats in Section 9.1. + + In the case of SRTCP, the SSRC of the first header of the compound + packet MUST be used, i SHALL be the 31-bit SRTCP index and k_e, k_s + SHALL be replaced by the SRTCP encryption session key and salt. + + Note that the initial value, IV, is fixed for each packet and is + formed by "reserving" 16 zeros in the least significant bits for the + purpose of the counter. The number of blocks of keystream generated + for any fixed value of IV MUST NOT exceed 2^16 to avoid keystream + re-use, see below. The AES has a block size of 128 bits, so 2^16 + output blocks are sufficient to generate the 2^23 bits of keystream + needed to encrypt the largest possible RTP packet (except for IPv6 + "jumbograms" [RFC2675], which are not likely to be used for RTP-based + multimedia traffic). This restriction on the maximum bit-size of the + packet that can be encrypted ensures the security of the encryption + method by limiting the effectiveness of probabilistic attacks [BDJR]. + + For a particular Counter Mode key, each IV value used as an input + MUST be distinct, in order to avoid the security exposure of a two- + time pad situation (Section 9.1). To satisfy this constraint, an + implementation MUST ensure that the combination of the SRTP packet + + + +Baugher, et al. Standards Track [Page 21] + +RFC 3711 SRTP March 2004 + + + index of ROC || SEQ, and the SSRC used in the construction of the IV + are distinct for any particular key. The failure to ensure this + uniqueness could be catastrophic for Secure RTP. This is in contrast + to the situation for RTP itself, which may be able to tolerate such + failures. It is RECOMMENDED that, if a dedicated security module is + present, the RTP sequence numbers and SSRC either be generated or + checked by that module (i.e., sequence-number and SSRC processing in + an SRTP system needs to be protected as well as the key). + +4.1.2. AES in f8-mode + + To encrypt UMTS (Universal Mobile Telecommunications System, as 3G + networks) data, a solution (see [f8-a] [f8-b]) known as the f8- + algorithm has been developed. On a high level, the proposed scheme + is a variant of Output Feedback Mode (OFB) [HAC], with a more + elaborate initialization and feedback function. As in normal OFB, + the core consists of a block cipher. We also define here the use of + AES as a block cipher to be used in what we shall call "f8-mode of + operation" RTP encryption. The AES f8-mode SHALL use the same + default sizes for session key and salt as AES counter mode. + + Figure 4 shows the structure of block cipher, E, running in f8-mode. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Baugher, et al. Standards Track [Page 22] + +RFC 3711 SRTP March 2004 + + + IV + | + v + +------+ + | | + +--->| E | + | +------+ + | | + m -> (*) +-----------+-------------+-- ... ------+ + | IV' | | | | + | | j=1 -> (*) j=2 -> (*) ... j=L-1 ->(*) + | | | | | + | | +-> (*) +-> (*) ... +-> (*) + | | | | | | | | + | v | v | v | v + | +------+ | +------+ | +------+ | +------+ + k_e ---+--->| E | | | E | | | E | | | E | + | | | | | | | | | | | + +------+ | +------+ | +------+ | +------+ + | | | | | | | + +------+ +--------+ +-- ... ----+ | + | | | | + v v v v + S(0) S(1) S(2) . . . S(L-1) + + Figure 4. f8-mode of operation (asterisk, (*), denotes bitwise XOR). + The figure represents the KG in Figure 3, when AES-f8 is used. + +4.1.2.1. f8 Keystream Generation + + The Initialization Vector (IV) SHALL be determined as described in + Section 4.1.2.2 (and in Section 4.1.2.3 for SRTCP). + + Let IV', S(j), and m denote n_b-bit blocks. The keystream, + S(0) ||... || S(L-1), for an N-bit message SHALL be defined by + setting IV' = E(k_e XOR m, IV), and S(-1) = 00..0. For + j = 0,1,..,L-1 where L = N/n_b (rounded up to nearest integer if it + is not already an integer) compute + + S(j) = E(k_e, IV' XOR j XOR S(j-1)) + + Notice that the IV is not used directly. Instead it is fed through E + under another key to produce an internal, "masked" value (denoted + IV') to prevent an attacker from gaining known input/output pairs. + + + + + + + +Baugher, et al. Standards Track [Page 23] + +RFC 3711 SRTP March 2004 + + + The role of the internal counter, j, is to prevent short keystream + cycles. The value of the key mask m SHALL be + + m = k_s || 0x555..5, + + i.e., the session salting key, appended by the binary pattern 0101.. + to fill out the entire desired key size, n_e. + + The sender SHOULD NOT generate more than 2^32 blocks, which is + sufficient to generate 2^39 bits of keystream. Unlike counter mode, + there is no absolute threshold above (below) which f8 is guaranteed + to be insecure (secure). The above bound has been chosen to limit, + with sufficient security margin, the probability of degenerative + behavior in the f8 keystream generation. + +4.1.2.2. f8 SRTP IV Formation + + The purpose of the following IV formation is to provide a feature + which we call implicit header authentication (IHA), see Section 9.5. + + The SRTP IV for 128-bit block AES-f8 SHALL be formed in the following + way: + + IV = 0x00 || M || PT || SEQ || TS || SSRC || ROC + + M, PT, SEQ, TS, SSRC SHALL be taken from the RTP header; ROC is from + the cryptographic context. + + The presence of the SSRC as part of the IV allows AES-f8 to be used + when a master key is shared between multiple streams within the same + RTP session, see Section 9.1. + +4.1.2.3. f8 SRTCP IV Formation + + The SRTCP IV for 128-bit block AES-f8 SHALL be formed in the + following way: + + IV= 0..0 || E || SRTCP index || V || P || RC || PT || length || SSRC + + where V, P, RC, PT, length, SSRC SHALL be taken from the first header + in the RTCP compound packet. E and SRTCP index are the 1-bit and + 31-bit fields added to the packet. + + + + + + + + + +Baugher, et al. Standards Track [Page 24] + +RFC 3711 SRTP March 2004 + + +4.1.3. NULL Cipher + + The NULL cipher is used when no confidentiality for RTP/RTCP is + requested. The keystream can be thought of as "000..0", i.e., the + encryption SHALL simply copy the plaintext input into the ciphertext + output. + +4.2. Message Authentication and Integrity + + Throughout this section, M will denote data to be integrity + protected. In the case of SRTP, M SHALL consist of the Authenticated + Portion of the packet (as specified in Figure 1) concatenated with + the ROC, M = Authenticated Portion || ROC; in the case of SRTCP, M + SHALL consist of the Authenticated Portion (as specified in Figure 2) + only. + + Common parameters: + + * AUTH_ALG is the authentication algorithm + * k_a is the session message authentication key + * n_a is the bit-length of the authentication key + * n_tag is the bit-length of the output authentication tag + * SRTP_PREFIX_LENGTH is the octet length of the keystream prefix as + defined above, a parameter of AUTH_ALG + + The distinct session authentication keys for SRTP/SRTCP are by + default derived as specified in Section 4.3. + + The values of n_a, n_tag, and SRTP_PREFIX_LENGTH MUST be fixed for + any particular fixed value of the key. + + We describe the process of computing authentication tags as follows. + The sender computes the tag of M and appends it to the packet. The + SRTP receiver verifies a message/authentication tag pair by computing + a new authentication tag over M using the selected algorithm and key, + and then compares it to the tag associated with the received message. + If the two tags are equal, then the message/tag pair is valid; + otherwise, it is invalid and the error audit message "AUTHENTICATION + FAILURE" MUST be returned. + +4.2.1. HMAC-SHA1 + + The pre-defined authentication transform for SRTP is HMAC-SHA1 + [RFC2104]. With HMAC-SHA1, the SRTP_PREFIX_LENGTH (Figure 3) SHALL + be 0. For SRTP (respectively SRTCP), the HMAC SHALL be applied to + the session authentication key and M as specified above, i.e., + HMAC(k_a, M). The HMAC output SHALL then be truncated to the n_tag + left-most bits. + + + +Baugher, et al. Standards Track [Page 25] + +RFC 3711 SRTP March 2004 + + +4.3. Key Derivation + +4.3.1. Key Derivation Algorithm + + Regardless of the encryption or message authentication transform that + is employed (it may be an SRTP pre-defined transform or newly + introduced according to Section 6), interoperable SRTP + implementations MUST use the SRTP key derivation to generate session + keys. Once the key derivation rate is properly signaled at the start + of the session, there is no need for extra communication between the + parties that use SRTP key derivation. + + packet index ---+ + | + v + +-----------+ master +--------+ session encr_key + | ext | key | |----------> + | key mgmt |-------->| key | session auth_key + | (optional | | deriv |----------> + | rekey) |-------->| | session salt_key + | | master | |----------> + +-----------+ salt +--------+ + + Figure 5: SRTP key derivation. + + At least one initial key derivation SHALL be performed by SRTP, i.e., + the first key derivation is REQUIRED. Further applications of the + key derivation MAY be performed, according to the + "key_derivation_rate" value in the cryptographic context. The key + derivation function SHALL initially be invoked before the first + packet and then, when r > 0, a key derivation is performed whenever + index mod r equals zero. This can be thought of as "refreshing" the + session keys. The value of "key_derivation_rate" MUST be kept fixed + for the lifetime of the associated master key. + + Interoperable SRTP implementations MAY also derive session salting + keys for encryption transforms, as is done in both of the pre- + defined transforms. + + Let m and n be positive integers. A pseudo-random function family is + a set of keyed functions {PRF_n(k,x)} such that for the (secret) + random key k, given m-bit x, PRF_n(k,x) is an n-bit string, + computationally indistinguishable from random n-bit strings, see + [HAC]. For the purpose of key derivation in SRTP, a secure PRF with + m = 128 (or more) MUST be used, and a default PRF transform is + defined in Section 4.3.3. + + + + + +Baugher, et al. Standards Track [Page 26] + +RFC 3711 SRTP March 2004 + + + Let "a DIV t" denote integer division of a by t, rounded down, and + with the convention that "a DIV 0 = 0" for all a. We also make the + convention of treating "a DIV t" as a bit string of the same length + as a, and thus "a DIV t" will in general have leading zeros. + + Key derivation SHALL be defined as follows in terms of <label>, an + 8-bit constant (see below), master_salt and key_derivation_rate, as + determined in the cryptographic context, and index, the packet index + (i.e., the 48-bit ROC || SEQ for SRTP): + + * Let r = index DIV key_derivation_rate (with DIV as defined above). + + * Let key_id = <label> || r. + + * Let x = key_id XOR master_salt, where key_id and master_salt are + aligned so that their least significant bits agree (right- + alignment). + + <label> MUST be unique for each type of key to be derived. We + currently define <label> 0x00 to 0x05 (see below), and future + extensions MAY specify new values in the range 0x06 to 0xff for other + purposes. The n-bit SRTP key (or salt) for this packet SHALL then be + derived from the master key, k_master as follows: + + PRF_n(k_master, x). + + (The PRF may internally specify additional formatting and padding of + x, see e.g., Section 4.3.3 for the default PRF.) + + The session keys and salt SHALL now be derived using: + + - k_e (SRTP encryption): <label> = 0x00, n = n_e. + + - k_a (SRTP message authentication): <label> = 0x01, n = n_a. + + - k_s (SRTP salting key): <label> = 0x02, n = n_s. + + where n_e, n_s, and n_a are from the cryptographic context. + + The master key and master salt MUST be random, but the master salt + MAY be public. + + Note that for a key_derivation_rate of 0, the application of the key + derivation SHALL take place exactly once. + + The definition of DIV above is purely for notational convenience. + For a non-zero t among the set of allowed key derivation rates, "a + DIV t" can be implemented as a right-shift by the base-2 logarithm of + + + +Baugher, et al. Standards Track [Page 27] + +RFC 3711 SRTP March 2004 + + + t. The derivation operation is further facilitated if the rates are + chosen to be powers of 256, but that granularity was considered too + coarse to be a requirement of this specification. + + The upper limit on the number of packets that can be secured using + the same master key (see Section 9.2) is independent of the key + derivation. + +4.3.2. SRTCP Key Derivation + + SRTCP SHALL by default use the same master key (and master salt) as + SRTP. To do this securely, the following changes SHALL be done to + the definitions in Section 4.3.1 when applying session key derivation + for SRTCP. + + Replace the SRTP index by the 32-bit quantity: 0 || SRTCP index + (i.e., excluding the E-bit, replacing it with a fixed 0-bit), and use + <label> = 0x03 for the SRTCP encryption key, <label> = 0x04 for the + SRTCP authentication key, and, <label> = 0x05 for the SRTCP salting + key. + +4.3.3. AES-CM PRF + + The currently defined PRF, keyed by 128, 192, or 256 bit master key, + has input block size m = 128 and can produce n-bit outputs for n up + to 2^23. PRF_n(k_master,x) SHALL be AES in Counter Mode as described + in Section 4.1.1, applied to key k_master, and IV equal to (x*2^16), + and with the output keystream truncated to the n first (left-most) + bits. (Requiring n/128, rounded up, applications of AES.) + +5. Default and mandatory-to-implement Transforms + + The default transforms also are mandatory-to-implement transforms in + SRTP. Of course, "mandatory-to-implement" does not imply + "mandatory-to-use". Table 1 summarizes the pre-defined transforms. + The default values below are valid for the pre-defined transforms. + + mandatory-to-impl. optional default + + encryption AES-CM, NULL AES-f8 AES-CM + message integrity HMAC-SHA1 - HMAC-SHA1 + key derivation (PRF) AES-CM - AES-CM + + Table 1: Mandatory-to-implement, optional and default transforms in + SRTP and SRTCP. + + + + + + +Baugher, et al. Standards Track [Page 28] + +RFC 3711 SRTP March 2004 + + +5.1. Encryption: AES-CM and NULL + + AES running in Segmented Integer Counter Mode, as defined in Section + 4.1.1, SHALL be the default encryption algorithm. The default key + lengths SHALL be 128-bit for the session encryption key (n_e). The + default session salt key-length (n_s) SHALL be 112 bits. + + The NULL cipher SHALL also be mandatory-to-implement. + +5.2. Message Authentication/Integrity: HMAC-SHA1 + + HMAC-SHA1, as defined in Section 4.2.1, SHALL be the default message + authentication code. The default session authentication key-length + (n_a) SHALL be 160 bits, the default authentication tag length + (n_tag) SHALL be 80 bits, and the SRTP_PREFIX_LENGTH SHALL be zero + for HMAC-SHA1. In addition, for SRTCP, the pre-defined HMAC-SHA1 + MUST NOT be applied with a value of n_tag, nor n_a, that are smaller + than these defaults. For SRTP, smaller values are NOT RECOMMENDED, + but MAY be used after careful consideration of the issues in Section + 7.5 and 9.5. + +5.3. Key Derivation: AES-CM PRF + + The AES Counter Mode based key derivation and PRF defined in Sections + 4.3.1 to 4.3.3, using a 128-bit master key, SHALL be the default + method for generating session keys. The default master salt length + SHALL be 112 bits and the default key-derivation rate SHALL be zero. + +6. Adding SRTP Transforms + + Section 4 provides examples of the level of detail needed for + defining transforms. Whenever a new transform is to be added to + SRTP, a companion standard track RFC MUST be written to exactly + define how the new transform can be used with SRTP (and SRTCP). Such + a companion RFC SHOULD avoid overlap with the SRTP protocol document. + Note however, that it MAY be necessary to extend the SRTP or SRTCP + cryptographic context definition with new parameters (including fixed + or default values), add steps to the packet processing, or even add + fields to the SRTP/SRTCP packets. The companion RFC SHALL explain + any known issues regarding interactions between the transform and + other aspects of SRTP. + + Each new transform document SHOULD specify its key attributes, e.g., + size of keys (minimum, maximum, recommended), format of keys, + recommended/required processing of input keying material, + requirements/recommendations on key lifetime, re-keying and key + derivation, whether sharing of keys between SRTP and SRTCP is allowed + or not, etc. + + + +Baugher, et al. Standards Track [Page 29] + +RFC 3711 SRTP March 2004 + + + An added message integrity transform SHOULD define a minimum + acceptable key/tag size for SRTCP, equivalent in strength to the + minimum values as defined in Section 5.2. + +7. Rationale + + This section explains the rationale behind several important features + of SRTP. + +7.1. Key derivation + + Key derivation reduces the burden on the key establishment. As many + as six different keys are needed per crypto context (SRTP and SRTCP + encryption keys and salts, SRTP and SRTCP authentication keys), but + these are derived from a single master key in a cryptographically + secure way. Thus, the key management protocol needs to exchange only + one master key (plus master salt when required), and then SRTP itself + derives all the necessary session keys (via the first, mandatory + application of the key derivation function). + + Multiple applications of the key derivation function are optional, + but will give security benefits when enabled. They prevent an + attacker from obtaining large amounts of ciphertext produced by a + single fixed session key. If the attacker was able to collect a + large amount of ciphertext for a certain session key, he might be + helped in mounting certain attacks. + + Multiple applications of the key derivation function provide + backwards and forward security in the sense that a compromised + session key does not compromise other session keys derived from the + same master key. This means that the attacker who is able to recover + a certain session key, is anyway not able to have access to messages + secured under previous and later session keys (derived from the same + master key). (Note that, of course, a leaked master key reveals all + the session keys derived from it.) + + Considerations arise with high-rate key refresh, especially in large + multicast settings, see Section 11. + +7.2. Salting key + + The master salt guarantees security against off-line key-collision + attacks on the key derivation that might otherwise reduce the + effective key size [MF00]. + + + + + + + +Baugher, et al. Standards Track [Page 30] + +RFC 3711 SRTP March 2004 + + + The derived session salting key used in the encryption, has been + introduced to protect against some attacks on additive stream + ciphers, see Section 9.2. The explicit inclusion method of the salt + in the IV has been selected for ease of hardware implementation. + +7.3. Message Integrity from Universal Hashing + + The particular definition of the keystream given in Section 4.1 (the + keystream prefix) is to give provision for particular universal hash + functions, suitable for message authentication in the Wegman-Carter + paradigm [WC81]. Such functions are provably secure, simple, quick, + and especially appropriate for Digital Signal Processors and other + processors with a fast multiply operation. + + No authentication transforms are currently provided in SRTP other + than HMAC-SHA1. Future transforms, like the above mentioned + universal hash functions, MAY be added following the guidelines in + Section 6. + +7.4. Data Origin Authentication Considerations + + Note that in pair-wise communications, integrity and data origin + authentication are provided together. However, in group scenarios + where the keys are shared between members, the MAC tag only proves + that a member of the group sent the packet, but does not prevent + against a member impersonating another. Data origin authentication + (DOA) for multicast and group RTP sessions is a hard problem that + needs a solution; while some promising proposals are being + investigated [PCST1] [PCST2], more work is needed to rigorously + specify these technologies. Thus SRTP data origin authentication in + groups is for further study. + + DOA can be done otherwise using signatures. However, this has high + impact in terms of bandwidth and processing time, therefore we do not + offer this form of authentication in the pre-defined packet-integrity + transform. + + The presence of mixers and translators does not allow data origin + authentication in case the RTP payload and/or the RTP header are + manipulated. Note that these types of middle entities also disrupt + end-to-end confidentiality (as the IV formation depends e.g., on the + RTP header preservation). A certain trust model may choose to trust + the mixers/translators to decrypt/re-encrypt the media (this would + imply breaking the end-to-end security, with related security + implications). + + + + + + +Baugher, et al. Standards Track [Page 31] + +RFC 3711 SRTP March 2004 + + +7.5. Short and Zero-length Message Authentication + + As shown in Figure 1, the authentication tag is RECOMMENDED in SRTP. + A full 80-bit authentication-tag SHOULD be used, but a shorter tag or + even a zero-length tag (i.e., no message authentication) MAY be used + under certain conditions to support either of the following two + application environments. + + 1. Strong authentication can be impractical in environments where + bandwidth preservation is imperative. An important special + case is wireless communication systems, in which bandwidth is a + scarce and expensive resource. Studies have shown that for + certain applications and link technologies, additional bytes + may result in a significant decrease in spectrum efficiency + [SWO]. Considerable effort has been made to design IP header + compression techniques to improve spectrum efficiency + [RFC3095]. A typical voice application produces 20 byte + samples, and the RTP, UDP and IP headers need to be jointly + compressed to one or two bytes on average in order to obtain + acceptable wireless bandwidth economy [RFC3095]. In this case, + strong authentication would impose nearly fifty percent + overhead. + + 2. Authentication is impractical for applications that use data + links with fixed-width fields that cannot accommodate the + expansion due to the authentication tag. This is the case for + some important existing wireless channels. For example, zero- + byte header compression is used to adapt EVRC/SMV voice with + the legacy IS-95 bearer channel in CDMA2000 VoIP services. It + was found that not a single additional octet could be added to + the data, which motivated the creation of a zero-byte profile + for ROHC [RFC3242]. + + A short tag is secure for a restricted set of applications. Consider + a voice telephony application, for example, such as a G.729 audio + codec with a 20-millisecond packetization interval, protected by a + 32-bit message authentication tag. The likelihood of any given + packet being successfully forged is only one in 2^32. Thus an + adversary can control no more than 20 milliseconds of audio output + during a 994-day period, on average. In contrast, the effect of a + single forged packet can be much larger if the application is + stateful. A codec that uses relative or predictive compression + across packets will propagate the maliciously generated state, + affecting a longer duration of output. + + + + + + + +Baugher, et al. Standards Track [Page 32] + +RFC 3711 SRTP March 2004 + + + Certainly not all SRTP or telephony applications meet the criteria + for short or zero-length authentication tags. Section 9.5.1 + discusses the risks of weak or no message authentication, and section + 9.5 describes the circumstances when it is acceptable and when it is + unacceptable. + +8. Key Management Considerations + + There are emerging key management standards [MIKEY] [KEYMGT] [SDMS] + for establishing an SRTP cryptographic context (e.g., an SRTP master + key). Both proprietary and open-standard key management methods are + likely to be used for telephony applications [MIKEY] [KINK] and + multicast applications [GDOI]. This section provides guidance for + key management systems that service SRTP session. + + For initialization, an interoperable SRTP implementation SHOULD be + given the SSRC and MAY be given the initial RTP sequence number for + the RTP stream by key management (thus, key management has a + dependency on RTP operational parameters). Sending the RTP sequence + number in the key management may be useful e.g., when the initial + sequence number is close to wrapping (to avoid synchronization + problems), and to communicate the current sequence number to a + joining endpoint (to properly initialize its replay list). + + If the pre-defined transforms are used, SRTP allows sharing of the + same master key between SRTP/SRTCP streams belonging to the same RTP + session. + + First, sharing between SRTP streams belonging to the same RTP session + is secure if the design of the synchronization mechanism, i.e., the + IV, avoids keystream re-use (the two-time pad, Section 9.1). This is + taken care of by the fact that RTP provides for unique SSRCs for + streams belonging to the same RTP session. See Section 9.1 for + further discussion. + + Second, sharing between SRTP and the corresponding SRTCP is secure. + The fact that an SRTP stream and its associated SRTCP stream both + carry the same SSRC does not constitute a problem for the two-time + pad due to the key derivation. Thus, SRTP and SRTCP corresponding to + one RTP session MAY share master keys (as they do by default). + + Note that message authentication also has a dependency on SSRC + uniqueness that is unrelated to the problem of keystream reuse: SRTP + streams authenticated under the same key MUST have a distinct SSRC in + order to identify the sender of the message. This requirement is + needed because the SSRC is the cryptographically authenticated field + + + + + +Baugher, et al. Standards Track [Page 33] + +RFC 3711 SRTP March 2004 + + + used to distinguish between different SRTP streams. Were two streams + to use identical SSRC values, then an adversary could substitute + messages from one stream into the other without detection. + + SRTP/SRTCP MUST NOT share master keys under any other circumstances + than the ones given above, i.e., between SRTP and its corresponding + SRTCP, and, between streams belonging to the same RTP session. + +8.1. Re-keying + + The recommended way for a particular key management system to provide + re-key within SRTP is by associating a master key in a crypto context + with an MKI. + + This provides for easy master key retrieval (see Scenarios in Section + 11), but has the disadvantage of adding extra bits to each packet. + As noted in Section 7.5, some wireless links do not cater for added + bits, therefore SRTP also defines a more economic way of triggering + re-keying, via use of <From, To>, which works in some specific, + simple scenarios (see Section 8.1.1). + + SRTP senders SHALL count the amount of SRTP and SRTCP traffic being + used for a master key and invoke key management to re-key if needed + (Section 9.2). These interactions are defined by the key management + interface to SRTP and are not defined by this protocol specification. + +8.1.1. Use of the <From, To> for re-keying + + In addition to the use of the MKI, SRTP defines another optional + mechanism for master key retrieval, the <From, To>. The <From, To> + specifies the range of SRTP indices (a pair of sequence number and + ROC) within which a certain master key is valid, and is (when used) + part of the crypto context. By looking at the 48-bit SRTP index of + the current SRTP packet, the corresponding master key can be found by + determining which From-To interval it belongs to. For SRTCP, the + most recently observed/used SRTP index (which can be obtained from + the cryptographic context) is used for this purpose, even though + SRTCP has its own (31-bit) index (see caveat below). + + This method, compared to the MKI, has the advantage of identifying + the master key and defining its lifetime without adding extra bits to + each packet. This could be useful, as already noted, for some + wireless links that do not cater for added bits. However, its use + SHOULD be limited to specific, very simple scenarios. We recommend + to limit its use when the RTP session is a simple unidirectional or + bi-directional stream. This is because in case of multiple streams, + it is difficult to trigger the re-key based on the <From, To> of a + single RTP stream. For example, if several streams share a master + + + +Baugher, et al. Standards Track [Page 34] + +RFC 3711 SRTP March 2004 + + + key, there is no simple one-to-one correspondence between the index + sequence space of a certain stream, and the index sequence space on + which the <From, To> values are based. Consequently, when a master + key is shared between streams, one of these streams MUST be + designated by key management as the one whose index space defines the + re-keying points. Also, the re-key triggering on SRTCP is based on + the correspondent SRTP stream, i.e., when the SRTP stream changes the + master key, so does the correspondent SRTCP. This becomes obviously + more and more complex with multiple streams. + + The default values for the <From, To> are "from the first observed + packet" and "until further notice". However, the maximum limit of + SRTP/SRTCP packets that are sent under each given master/session key + (Section 9.2) MUST NOT be exceeded. + + In case the <From, To> is used as key retrieval, then the MKI is not + inserted in the packet (and its indicator in the crypto context is + zero). However, using the MKI does not exclude using <From, To> key + lifetime simultaneously. This can for instance be useful to signal + at the sender side at which point in time an MKI is to be made + active. + +8.2. Key Management parameters + + The table below lists all SRTP parameters that key management can + supply. For reference, it also provides a summary of the default and + mandatory-to-support values for an SRTP implementation as described + in Section 5. + + + + + + + + + + + + + + + + + + + + + + + +Baugher, et al. Standards Track [Page 35] + +RFC 3711 SRTP March 2004 + + + Parameter Mandatory-to-support Default + --------- -------------------- ------- + + SRTP and SRTCP encr transf. AES_CM, NULL AES_CM + (Other possible values: AES_f8) + + SRTP and SRTCP auth transf. HMAC-SHA1 HMAC-SHA1 + + SRTP and SRTCP auth params: + n_tag (tag length) 80 80 + SRTP prefix_length 0 0 + + Key derivation PRF AES_CM AES_CM + + Key material params + (for each master key): + master key length 128 128 + n_e (encr session key length) 128 128 + n_a (auth session key length) 160 160 + master salt key + length of the master salt 112 112 + n_s (session salt key length) 112 112 + key derivation rate 0 0 + + key lifetime + SRTP-packets-max-lifetime 2^48 2^48 + SRTCP-packets-max-lifetime 2^31 2^31 + from-to-lifetime <From, To> + MKI indicator 0 0 + length of the MKI 0 0 + value of the MKI + + Crypto context index params: + SSRC value + ROC + SEQ + SRTCP Index + Transport address + Port number + + Relation to other RTP profiles: + sender's order between FEC and SRTP FEC-SRTP FEC-SRTP + (see Section 10) + + + + + + + + +Baugher, et al. Standards Track [Page 36] + +RFC 3711 SRTP March 2004 + + +9. Security Considerations + +9.1. SSRC collision and two-time pad + + Any fixed keystream output, generated from the same key and index + MUST only be used to encrypt once. Re-using such keystream (jokingly + called a "two-time pad" system by cryptographers), can seriously + compromise security. The NSA's VENONA project [C99] provides a + historical example of such a compromise. It is REQUIRED that + automatic key management be used for establishing and maintaining + SRTP and SRTCP keying material; this requirement is to avoid + keystream reuse, which is more likely to occur with manual key + management. Furthermore, in SRTP, a "two-time pad" is avoided by + requiring the key, or some other parameter of cryptographic + significance, to be unique per RTP/RTCP stream and packet. The pre- + defined SRTP transforms accomplish packet-uniqueness by including the + packet index and stream-uniqueness by inclusion of the SSRC. + + The pre-defined transforms (AES-CM and AES-f8) allow master keys to + be shared across streams belonging to the same RTP session by the + inclusion of the SSRC in the IV. A master key MUST NOT be shared + among different RTP sessions. + + Thus, the SSRC MUST be unique between all the RTP streams within the + same RTP session that share the same master key. RTP itself provides + an algorithm for detecting SSRC collisions within the same RTP + session. Thus, temporary collisions could lead to temporary two-time + pad, in the unfortunate event that SSRCs collide at a point in time + when the streams also have identical sequence numbers (occurring with + probability roughly 2^(-48)). Therefore, the key management SHOULD + take care of avoiding such SSRC collisions by including the SSRCs to + be used in the session as negotiation parameters, proactively + assuring their uniqueness. This is a strong requirements in + scenarios where for example, there are multiple senders that can + start to transmit simultaneously, before SSRC collision are detected + at the RTP level. + + Note also that even with distinct SSRCs, extensive use of the same + key might improve chances of probabilistic collision and time- + memory-tradeoff attacks succeeding. + + As described, master keys MAY be shared between streams belonging to + the same RTP session, but it is RECOMMENDED that each SSRC have its + own master key. When master keys are shared among SSRC participants + and SSRCs are managed by a key management module as recommended + above, the RECOMMENDED policy for an SSRC collision error is for the + participant to leave the SRTP session as it is a sign of malfunction. + + + + +Baugher, et al. Standards Track [Page 37] + +RFC 3711 SRTP March 2004 + + +9.2. Key Usage + + The effective key size is determined (upper bounded) by the size of + the master key and, for encryption, the size of the salting key. Any + additive stream cipher is vulnerable to attacks that use statistical + knowledge about the plaintext source to enable key collision and + time-memory tradeoff attacks [MF00] [H80] [BS00]. These attacks take + advantage of commonalities among plaintexts, and provide a way for a + cryptanalyst to amortize the computational effort of decryption over + many keys, or over many bytes of output, thus reducing the effective + key size of the cipher. A detailed analysis of these attacks and + their applicability to the encryption of Internet traffic is provided + in [MF00]. In summary, the effective key size of SRTP when used in a + security system in which m distinct keys are used, is equal to the + key size of the cipher less the logarithm (base two) of m. + Protection against such attacks can be provided simply by increasing + the size of the keys used, which here can be accomplished by the use + of the salting key. Note that the salting key MUST be random but MAY + be public. A salt size of (the suggested) size 112 bits protects + against attacks in scenarios where at most 2^112 keys are in use. + This is sufficient for all practical purposes. + + Implementations SHOULD use keys that are as large as possible. + Please note that in many cases increasing the key size of a cipher + does not affect the throughput of that cipher. + + The use of the SRTP and SRTCP indices in the pre-defined transforms + fixes the maximum number of packets that can be secured with the same + key. This limit is fixed to 2^48 SRTP packets for an SRTP stream, + and 2^31 SRTCP packets, when SRTP and SRTCP are considered + independently. Due to for example re-keying, reaching this limit may + or may not coincide with wrapping of the indices, and thus the sender + MUST keep packet counts. However, when the session keys for related + SRTP and SRTCP streams are derived from the same master key (the + default behavior, Section 4.3), the upper bound that has to be + considered is in practice the minimum of the two quantities. That + is, when 2^48 SRTP packets or 2^31 SRTCP packets have been secured + with the same key (whichever occurs before), the key management MUST + be called to provide new master key(s) (previously stored and used + keys MUST NOT be used again), or the session MUST be terminated. If + a sender of RTCP discovers that the sender of SRTP (or SRTCP) has not + updated the master or session key prior to sending 2^48 SRTP (or 2^31 + SRTCP) packets belonging to the same SRTP (SRTCP) stream, it is up to + the security policy of the RTCP sender how to behave, e.g., whether + an RTCP BYE-packet should be sent and/or if the event should be + logged. + + + + + +Baugher, et al. Standards Track [Page 38] + +RFC 3711 SRTP March 2004 + + + Note: in most typical applications (assuming at least one RTCP packet + for every 128,000 RTP packets), it will be the SRTCP index that first + reaches the upper limit, although the time until this occurs is very + long: even at 200 SRTCP packets/sec, the 2^31 index space of SRTCP is + enough to secure approximately 4 months of communication. + + Note that if the master key is to be shared between SRTP streams + within the same RTP session (Section 9.1), although the above bounds + are on a per stream (i.e., per SSRC) basis, the sender MUST base re- + key decision on the stream whose sequence number space is the first + to be exhausted. + + Key derivation limits the amount of plaintext that is encrypted with + a fixed session key, and made available to an attacker for analysis, + but key derivation does not extend the master key's lifetime. To see + this, simply consider our requirements to avoid two-time pad: two + distinct packets MUST either be processed with distinct IVs, or with + distinct session keys, and both the distinctness of IV and of the + session keys are (for the pre-defined transforms) dependent on the + distinctness of the packet indices. + + Note that with the key derivation, the effective key size is at most + that of the master key, even if the derived session key is + considerably longer. With the pre-defined authentication transform, + the session authentication key is 160 bits, but the master key by + default is only 128 bits. This design choice was made to comply with + certain recommendations in [RFC2104] so that an existing HMAC + implementation can be plugged into SRTP without problems. Since the + default tag size is 80 bits, it is, for the applications in mind, + also considered acceptable from security point of view. Users having + concerns about this are RECOMMENDED to instead use a 192 bit master + key in the key derivation. It was, however, chosen not to mandate + 192-bit keys since existing AES implementations to be used in the + key-derivation may not always support key-lengths other than 128 + bits. Since AES is not defined (or properly analyzed) for use with + 160 bit keys it is NOT RECOMMENDED that ad-hoc key-padding schemes + are used to pad shorter keys to 192 or 256 bits. + +9.3. Confidentiality of the RTP Payload + + SRTP's pre-defined ciphers are "seekable" stream ciphers, i.e., + ciphers able to efficiently seek to arbitrary locations in their + keystream (so that the encryption or decryption of one packet does + not depend on preceding packets). By using seekable stream ciphers, + SRTP avoids the denial of service attacks that are possible on stream + ciphers that lack this property. It is important to be aware that, + as with any stream cipher, the exact length of the payload is + revealed by the encryption. This means that it may be possible to + + + +Baugher, et al. Standards Track [Page 39] + +RFC 3711 SRTP March 2004 + + + deduce certain "formatting bits" of the payload, as the length of the + codec output might vary due to certain parameter settings etc. This, + in turn, implies that the corresponding bit of the keystream can be + deduced. However, if the stream cipher is secure (counter mode and + f8 are provably secure under certain assumptions [BDJR] [KSYH] [IK]), + knowledge of a few bits of the keystream will not aid an attacker in + predicting subsequent keystream bits. Thus, the payload length (and + information deducible from this) will leak, but nothing else. + + As some RTP packet could contain highly predictable data, e.g., SID, + it is important to use a cipher designed to resist known plaintext + attacks (which is the current practice). + +9.4. Confidentiality of the RTP Header + + In SRTP, RTP headers are sent in the clear to allow for header + compression. This means that data such as payload type, + synchronization source identifier, and timestamp are available to an + eavesdropper. Moreover, since RTP allows for future extensions of + headers, we cannot foresee what kind of possibly sensitive + information might also be "leaked". + + SRTP is a low-cost method, which allows header compression to reduce + bandwidth. It is up to the endpoints' policies to decide about the + security protocol to employ. If one really needs to protect headers, + and is allowed to do so by the surrounding environment, then one + should also look at alternatives, e.g., IPsec [RFC2401]. + +9.5. Integrity of the RTP payload and header + + SRTP messages are subject to attacks on their integrity and source + identification, and these risks are discussed in Section 9.5.1. To + protect against these attacks, each SRTP stream SHOULD be protected + by HMAC-SHA1 [RFC2104] with an 80-bit output tag and a 160-bit key, + or a message authentication code with equivalent strength. Secure + RTP SHOULD NOT be used without message authentication, except under + the circumstances described in this section. It is important to note + that encryption algorithms, including AES Counter Mode and f8, do not + provide message authentication. SRTCP MUST NOT be used with weak (or + NULL) authentication. + + SRTP MAY be used with weak authentication (e.g., a 32-bit + authentication tag), or with no authentication (the NULL + authentication algorithm). These options allow SRTP to be used to + provide confidentiality in situations where + + * weak or null authentication is an acceptable security risk, and + * it is impractical to provide strong message authentication. + + + +Baugher, et al. Standards Track [Page 40] + +RFC 3711 SRTP March 2004 + + + These conditions are described below and in Section 7.5. Note that + both conditions MUST hold in order for weak or null authentication to + be used. The risks associated with exercising the weak or null + authentication options need to be considered by a security audit + prior to their use for a particular application or environment given + the risks, which are discussed in Section 9.5.1. + + Weak authentication is acceptable when the RTP application is such + that the effect of a small fraction of successful forgeries is + negligible. If the application is stateless, then the effect of a + single forged RTP packet is limited to the decoding of that + particular packet. Under this condition, the size of the + authentication tag MUST ensure that only a negligible fraction of the + packets passed to the RTP application by the SRTP receiver can be + forgeries. This fraction is negligible when an adversary, if given + control of the forged packets, is not able to make a significant + impact on the output of the RTP application (see the example of + Section 7.5). + + Weak or null authentication MAY be acceptable when it is unlikely + that an adversary can modify ciphertext so that it decrypts to an + intelligible value. One important case is when it is difficult for + an adversary to acquire the RTP plaintext data, since for many + codecs, an adversary that does not know the input signal cannot + manipulate the output signal in a controlled way. In many cases it + may be difficult for the adversary to determine the actual value of + the plaintext. For example, a hidden snooping device might be + required in order to know a live audio or video signal. The + adversary's signal must have a quality equivalent to or greater than + that of the signal under attack, since otherwise the adversary would + not have enough information to encode that signal with the codec used + by the victim. Plaintext prediction may also be especially difficult + for an interactive application such as a telephone call. + + Weak or null authentication MUST NOT be used when the RTP application + makes data forwarding or access control decisions based on the RTP + data. In such a case, an attacker may be able to subvert + confidentiality by causing the receiver to forward data to an + attacker. See Section 3 of [B96] for a real-life example of such + attacks. + + Null authentication MUST NOT be used when a replay attack, in which + an adversary stores packets then replays them later in the session, + could have a non-negligible impact on the receiver. An example of a + successful replay attack is the storing of the output of a + surveillance camera for a period of time, later followed by the + + + + + +Baugher, et al. Standards Track [Page 41] + +RFC 3711 SRTP March 2004 + + + injection of that output to the monitoring station to avoid + surveillance. Encryption does not protect against this attack, and + non-null authentication is REQUIRED in order to defeat it. + + If existential message forgery is an issue, i.e., when the accuracy + of the received data is of non-negligible importance, null + authentication MUST NOT be used. + +9.5.1. Risks of Weak or Null Message Authentication + + During a security audit considering the use of weak or null + authentication, it is important to keep in mind the following attacks + which are possible when no message authentication algorithm is used. + + An attacker who cannot predict the plaintext is still always able to + modify the message sent between the sender and the receiver so that + it decrypts to a random plaintext value, or to send a stream of bogus + packets to the receiver that will decrypt to random plaintext values. + This attack is essentially a denial of service attack, though in the + absence of message authentication, the RTP application will have + inputs that are bit-wise correlated with the true value. Some + multimedia codecs and common operating systems will crash when such + data are accepted as valid video data. This denial of service attack + may be a much larger threat than that due to an attacker dropping, + delaying, or re-ordering packets. + + An attacker who cannot predict the plaintext can still replay a + previous message with certainty that the receiver will accept it. + Applications with stateless codecs might be robust against this type + of attack, but for other, more complex applications these attacks may + be far more grave. + + An attacker who can predict the plaintext can modify the ciphertext + so that it will decrypt to any value of her choosing. With an + additive stream cipher, an attacker will always be able to change + individual bits. + + An attacker may be able to subvert confidentiality due to the lack of + authentication when a data forwarding or access control decision is + made on decrypted but unauthenticated plaintext. This is because the + receiver may be fooled into forwarding data to an attacker, leading + to an indirect breach of confidentiality (see Section 3 of [B96]). + This is because data-forwarding decisions are made on the decrypted + plaintext; information in the plaintext will determine to what subnet + (or process) the plaintext is forwarded in ESP [RFC2401] tunnel mode + (respectively, transport mode). When Secure RTP is used without + + + + + +Baugher, et al. Standards Track [Page 42] + +RFC 3711 SRTP March 2004 + + + message authentication, it should be verified that the application + does not make data forwarding or access control decisions based on + the decrypted plaintext. + + Some cipher modes of operation that require padding, e.g., standard + cipher block chaining (CBC) are very sensitive to attacks on + confidentiality if certain padding types are used in the absence of + integrity. The attack [V02] shows that this is indeed the case for + the standard RTP padding as discussed in reference to Figure 1, when + used together with CBC mode. Later transform additions to SRTP MUST + therefore carefully consider the risk of using this padding without + proper integrity protection. + +9.5.2. Implicit Header Authentication + + The IV formation of the f8-mode gives implicit authentication (IHA) + of the RTP header, even when message authentication is not used. + When IHA is used, an attacker that modifies the value of the RTP + header will cause the decryption process at the receiver to produce + random plaintext values. While this protection is not equivalent to + message authentication, it may be useful for some applications. + +10. Interaction with Forward Error Correction mechanisms + + The default processing when using Forward Error Correction (e.g., RFC + 2733) processing with SRTP SHALL be to perform FEC processing prior + to SRTP processing on the sender side and to perform SRTP processing + prior to FEC processing on the receiver side. Any change to this + ordering (reversing it, or, placing FEC between SRTP encryption and + SRTP authentication) SHALL be signaled out of band. + +11. Scenarios + + SRTP can be used as security protocol for the RTP/RTCP traffic in + many different scenarios. SRTP has a number of configuration + options, in particular regarding key usage, and can have impact on + the total performance of the application according to the way it is + used. Hence, the use of SRTP is dependent on the kind of scenario + and application it is used with. In the following, we briefly + illustrate some use cases for SRTP, and give some guidelines for + recommended setting of its options. + +11.1. Unicast + + A typical example would be a voice call or video-on-demand + application. + + + + + +Baugher, et al. Standards Track [Page 43] + +RFC 3711 SRTP March 2004 + + + Consider one bi-directional RTP stream, as one RTP session. It is + possible for the two parties to share the same master key in the two + directions according to the principles of Section 9.1. The first + round of the key derivation splits the master key into any or all of + the following session keys (according to the provided security + functions): + + SRTP_encr_key, SRTP_auth_key, SRTCP_encr_key, and SRTCP_auth key. + + (For simplicity, we omit discussion of the salts, which are also + derived.) In this scenario, it will in most cases suffice to have a + single master key with the default lifetime. This guarantees + sufficiently long lifetime of the keys and a minimum set of keys in + place for most practical purposes. Also, in this case RTCP + protection can be applied smoothly. Under these assumptions, use of + the MKI can be omitted. As the key-derivation in combination with + large difference in the packet rate in the respective directions may + require simultaneous storage of several session keys, if storage is + an issue, we recommended to use low-rate key derivation. + + The same considerations can be extended to the unicast scenario with + multiple RTP sessions, where each session would have a distinct + master key. + +11.2. Multicast (one sender) + + Just as with (unprotected) RTP, a scalability issue arises in big + groups due to the possibly very large amount of SRTCP Receiver + Reports that the sender might need to process. In SRTP, the sender + may have to keep state (the cryptographic context) for each receiver, + or more precisely, for the SRTCP used to protect Receiver Reports. + The overhead increases proportionally to the size of the group. In + particular, re-keying requires special concern, see below. + + Consider first a small group of receivers. There are a few possible + setups with the distribution of master keys among the receivers. + Given a single RTP session, one possibility is that the receivers + share the same master key as per Section 9.1 to secure all their + respective RTCP traffic. This shared master key could then be the + same one used by the sender to protect its outbound SRTP traffic. + Alternatively, it could be a master key shared only among the + receivers and used solely for their SRTCP traffic. Both alternatives + require the receivers to trust each other. + + Considering SRTCP and key storage, it is recommended to use low-rate + (or zero) key_derivation (except the mandatory initial one), so that + the sender does not need to store too many session keys (each SRTCP + stream might otherwise have a different session key at a given point + + + +Baugher, et al. Standards Track [Page 44] + +RFC 3711 SRTP March 2004 + + + in time, as the SRTCP sources send at different times). Thus, in + case key derivation is wanted for SRTP, the cryptographic context for + SRTP can be kept separate from the SRTCP crypto context, so that it + is possible to have a key_derivation_rate of 0 for SRTCP and a non- + zero value for SRTP. + + Use of the MKI for re-keying is RECOMMENDED for most applications + (see Section 8.1). + + If there are more than one SRTP/SRTCP stream (within the same RTP + session) that share the master key, the upper limit of 2^48 SRTP + packets / 2^31 SRTCP packets means that, before one of the streams + reaches its maximum number of packets, re-keying MUST be triggered on + ALL streams sharing the master key. (From strict security point of + view, only the stream reaching the maximum would need to be re-keyed, + but then the streams would no longer be sharing master key, which is + the intention.) A local policy at the sender side should force + rekeying in a way that the maximum packet limit is not reached on any + of the streams. Use of the MKI for re-keying is RECOMMENDED. + + In large multicast with one sender, the same considerations as for + the small group multicast hold. The biggest issue in this scenario + is the additional load placed at the sender side, due to the state + (cryptographic contexts) that has to be maintained for each receiver, + sending back RTCP Receiver Reports. At minimum, a replay window + might need to be maintained for each RTCP source. + +11.3. Re-keying and access control + + Re-keying may occur due to access control (e.g., when a member is + removed during a multicast RTP session), or for pure cryptographic + reasons (e.g., the key is at the end of its lifetime). When using + SRTP default transforms, the master key MUST be replaced before any + of the index spaces are exhausted for any of the streams protected by + one and the same master key. + + How key management re-keys SRTP implementations is out of scope, but + it is clear that there are straightforward ways to manage keys for a + multicast group. In one-sender multicast, for example, it is + typically the responsibility of the sender to determine when a new + key is needed. The sender is the one entity that can keep track of + when the maximum number of packets has been sent, as receivers may + join and leave the session at any time, there may be packet loss and + delay etc. In scenarios other than one-sender multicast, other + methods can be used. Here, one must take into consideration that key + exchange can be a costly operation, taking several seconds for a + single exchange. Hence, some time before the master key is + exhausted/expires, out-of-band key management is initiated, resulting + + + +Baugher, et al. Standards Track [Page 45] + +RFC 3711 SRTP March 2004 + + + in a new master key that is shared with the receiver(s). In any + event, to maintain synchronization when switching to the new key, + group policy might choose between using the MKI and the <From, To>, + as described in Section 8.1. + + For access control purposes, the <From, To> periods are set at the + desired granularity, dependent on the packet rate. High rate re- + keying can be problematic for SRTCP in some large-group scenarios. + As mentioned, there are potential problems in using the SRTP index, + rather than the SRTCP index, for determining the master key. In + particular, for short periods during switching of master keys, it may + be the case that SRTCP packets are not under the current master key + of the correspondent SRTP. Therefore, using the MKI for re-keying in + such scenarios will produce better results. + +11.4. Summary of basic scenarios + + The description of these scenarios highlights some recommendations on + the use of SRTP, mainly related to re-keying and large scale + multicast: + + - Do not use fast re-keying with the <From, To> feature. It may, in + particular, give problems in retrieving the correct SRTCP key, if + an SRTCP packet arrives close to the re-keying time. The MKI + SHOULD be used in this case. + + - If multiple SRTP streams in the same RTP session share the same + master key, also moderate rate re-keying MAY have the same + problems, and the MKI SHOULD be used. + + - Though offering increased security, a non-zero key_derivation_rate + is NOT RECOMMENDED when trying to minimize the number of keys in + use with multiple streams. + +12. IANA Considerations + + The RTP specification establishes a registry of profile names for use + by higher-level control protocols, such as the Session Description + Protocol (SDP), to refer to transport methods. This profile + registers the name "RTP/SAVP". + + SRTP uses cryptographic transforms which a key management protocol + signals. It is the task of each particular key management protocol + to register the cryptographic transforms or suites of transforms with + IANA. The key management protocol conveys these protocol numbers, + not SRTP, and each key management protocol chooses the numbering + scheme and syntax that it requires. + + + + +Baugher, et al. Standards Track [Page 46] + +RFC 3711 SRTP March 2004 + + + Specification of a key management protocol for SRTP is out of scope + here. Section 8.2, however, provides guidance on the parameters that + need to be defined for the default and mandatory transforms. + +13. Acknowledgements + + David Oran (Cisco) and Rolf Blom (Ericsson) are co-authors of this + document but their valuable contributions are acknowledged here to + keep the length of the author list down. + + The authors would in addition like to thank Magnus Westerlund, Brian + Weis, Ghyslain Pelletier, Morgan Lindqvist, Robert Fairlie- + Cuninghame, Adrian Perrig, the AVT WG and in particular the chairmen + Colin Perkins and Stephen Casner, the Transport and Security Area + Directors, and Eric Rescorla for their reviews and support. + +14. References + +14.1. Normative References + + [AES] NIST, "Advanced Encryption Standard (AES)", FIPS PUB 197, + http://www.nist.gov/aes/ + + [RFC2104] Krawczyk, H., Bellare, M. and R. Canetti, "HMAC: Keyed- + Hashing for Message Authentication", RFC 2104, February + 1997. + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, March 1997. + + [RFC2401] Kent, S. and R. Atkinson, "Security Architecture for + Internet Protocol", RFC 2401, November 1998. + + [RFC2828] Shirey, R., "Internet Security Glossary", FYI 36, RFC 2828, + May 2000. + + [RFC3550] Schulzrinne, H., Casner, S., Frederick, R. and V. Jacobson, + "RTP: A Transport Protocol for Real-time Applications", RFC + 3550, July 2003. + + [RFC3551] Schulzrinne, H. and S. Casner, "RTP Profile for Audio and + Video Conferences with Minimal Control", RFC 3551, July + 2003. + + + + + + + + +Baugher, et al. Standards Track [Page 47] + +RFC 3711 SRTP March 2004 + + +14.2. Informative References + + [AES-CTR] Lipmaa, H., Rogaway, P. and D. Wagner, "CTR-Mode + Encryption", NIST, http://csrc.nist.gov/encryption/modes/ + workshop1/papers/lipmaa-ctr.pdf + + [B96] Bellovin, S., "Problem Areas for the IP Security + Protocols," in Proceedings of the Sixth Usenix Unix + Security Symposium, pp. 1-16, San Jose, CA, July 1996 + (http://www.research.att.com/~smb/papers/index.html). + + [BDJR] Bellare, M., Desai, A., Jokipii, E. and P. Rogaway, "A + Concrete Treatment of Symmetric Encryption: Analysis of DES + Modes of Operation", Proceedings 38th IEEE FOCS, pp. 394- + 403, 1997. + + [BS00] Biryukov, A. and A. Shamir, "Cryptanalytic Time/Memory/Data + Tradeoffs for Stream Ciphers", Proceedings, ASIACRYPT 2000, + LNCS 1976, pp. 1-13, Springer Verlag. + + [C99] Crowell, W. P., "Introduction to the VENONA Project", + http://www.nsa.gov:8080/docs/venona/index.html. + + [CTR] Dworkin, M., NIST Special Publication 800-38A, + "Recommendation for Block Cipher Modes of Operation: + Methods and Techniques", 2001. + http://csrc.nist.gov/publications/nistpubs/800-38a/sp800- + 38a.pdf. + + [f8-a] 3GPP TS 35.201 V4.1.0 (2001-12) Technical Specification 3rd + Generation Partnership Project; Technical Specification + Group Services and System Aspects; 3G Security; + Specification of the 3GPP Confidentiality and Integrity + Algorithms; Document 1: f8 and f9 Specification (Release + 4). + + [f8-b] 3GPP TR 33.908 V4.0.0 (2001-09) Technical Report 3rd + Generation Partnership Project; Technical Specification + Group Services and System Aspects; 3G Security; General + Report on the Design, Specification and Evaluation of 3GPP + Standard Confidentiality and Integrity Algorithms (Release + 4). + + [GDOI] Baugher, M., Weis, B., Hardjono, T. and H. Harney, "The + Group Domain of Interpretation, RFC 3547, July 2003. + + + + + + +Baugher, et al. Standards Track [Page 48] + +RFC 3711 SRTP March 2004 + + + [HAC] Menezes, A., Van Oorschot, P. and S. Vanstone, "Handbook + of Applied Cryptography", CRC Press, 1997, ISBN 0-8493- + 8523-7. + + [H80] Hellman, M. E., "A cryptanalytic time-memory trade-off", + IEEE Transactions on Information Theory, July 1980, pp. + 401-406. + + [IK] T. Iwata and T. Kohno: "New Security Proofs for the 3GPP + Confidentiality and Integrity Algorithms", Proceedings of + FSE 2004. + + [KINK] Thomas, M. and J. Vilhuber, "Kerberized Internet + Negotiation of Keys (KINK)", Work in Progress. + + [KEYMGT] Arrko, J., et al., "Key Management Extensions for Session + Description Protocol (SDP) and Real Time Streaming Protocol + (RTSP)", Work in Progress. + + [KSYH] Kang, J-S., Shin, S-U., Hong, D. and O. Yi, "Provable + Security of KASUMI and 3GPP Encryption Mode f8", + Proceedings Asiacrypt 2001, Springer Verlag LNCS 2248, pp. + 255-271, 2001. + + [MIKEY] Arrko, J., et. al., "MIKEY: Multimedia Internet KEYing", + Work in Progress. + + [MF00] McGrew, D. and S. Fluhrer, "Attacks on Encryption of + Redundant Plaintext and Implications on Internet Security", + the Proceedings of the Seventh Annual Workshop on Selected + Areas in Cryptography (SAC 2000), Springer-Verlag. + + [PCST1] Perrig, A., Canetti, R., Tygar, D. and D. Song, "Efficient + and Secure Source Authentication for Multicast", in Proc. + of Network and Distributed System Security Symposium NDSS + 2001, pp. 35-46, 2001. + + [PCST2] Perrig, A., Canetti, R., Tygar, D. and D. Song, "Efficient + Authentication and Signing of Multicast Streams over Lossy + Channels", in Proc. of IEEE Security and Privacy Symposium + S&P2000, pp. 56-73, 2000. + + [RFC1750] Eastlake, D., Crocker, S. and J. Schiller, "Randomness + Recommendations for Security", RFC 1750, December 1994. + + [RFC2675] Borman, D., Deering, S. and R. Hinden, "IPv6 Jumbograms", + RFC 2675, August 1999. + + + + +Baugher, et al. Standards Track [Page 49] + +RFC 3711 SRTP March 2004 + + + [RFC3095] Bormann, C., Burmeister, C., Degermark, M., Fukuhsima, H., + Hannu, H., Jonsson, L-E., Hakenberg, R., Koren, T., Le, K., + Liu, Z., Martensson, A., Miyazaki, A., Svanbro, K., Wiebke, + T., Yoshimura, T. and H. Zheng, "RObust Header Compression: + Framework and Four Profiles: RTP, UDP, ESP, and + uncompressed (ROHC)", RFC 3095, July 2001. + + [RFC3242] Jonsson, L-E. and G. Pelletier, "RObust Header Compression + (ROHC): A Link-Layer Assisted Profile for IP/UDP/RTP ", RFC + 3242, April 2002. + + [SDMS] Andreasen, F., Baugher, M. and D. Wing, "Session + Description Protocol Security Descriptions for Media + Streams", Work in Progress. + + [SWO] Svanbro, K., Wiorek, J. and B. Olin, "Voice-over-IP-over- + wireless", Proc. PIMRC 2000, London, Sept. 2000. + + [V02] Vaudenay, S., "Security Flaws Induced by CBC Padding - + Application to SSL, IPsec, WTLS...", Advances in + Cryptology, EUROCRYPT'02, LNCS 2332, pp. 534-545. + + [WC81] Wegman, M. N., and J.L. Carter, "New Hash Functions and + Their Use in Authentication and Set Equality", JCSS 22, + 265-279, 1981. + + + + + + + + + + + + + + + + + + + + + + + + + + +Baugher, et al. Standards Track [Page 50] + +RFC 3711 SRTP March 2004 + + +Appendix A: Pseudocode for Index Determination + + The following is an example of pseudo-code for the algorithm to + determine the index i of an SRTP packet with sequence number SEQ. In + the following, signed arithmetic is assumed. + + if (s_l < 32,768) + if (SEQ - s_l > 32,768) + set v to (ROC-1) mod 2^32 + else + set v to ROC + endif + else + if (s_l - 32,768 > SEQ) + set v to (ROC+1) mod 2^32 + else + set v to ROC + endif + endif + return SEQ + v*65,536 + +Appendix B: Test Vectors + + All values are in hexadecimal. + +B.1. AES-f8 Test Vectors + + SRTP PREFIX LENGTH : 0 + + RTP packet header : 806e5cba50681de55c621599 + + RTP packet payload : 70736575646f72616e646f6d6e657373 + 20697320746865206e65787420626573 + 74207468696e67 + + ROC : d462564a + key : 234829008467be186c3de14aae72d62c + salt key : 32f2870d + key-mask (m) : 32f2870d555555555555555555555555 + key XOR key-mask : 11baae0dd132eb4d3968b41ffb278379 + + IV : 006e5cba50681de55c621599d462564a + IV' : 595b699bbd3bc0df26062093c1ad8f73 + + + + + + + + +Baugher, et al. Standards Track [Page 51] + +RFC 3711 SRTP March 2004 + + + j = 0 + IV' xor j : 595b699bbd3bc0df26062093c1ad8f73 + S(-1) : 00000000000000000000000000000000 + IV' xor S(-1) xor j : 595b699bbd3bc0df26062093c1ad8f73 + S(0) : 71ef82d70a172660240709c7fbb19d8e + plaintext : 70736575646f72616e646f6d6e657373 + ciphertext : 019ce7a26e7854014a6366aa95d4eefd + + j = 1 + IV' xor j : 595b699bbd3bc0df26062093c1ad8f72 + S(0) : 71ef82d70a172660240709c7fbb19d8e + IV' xor S(0) xor j : 28b4eb4cb72ce6bf020129543a1c12fc + S(1) : 3abd640a60919fd43bd289a09649b5fc + plaintext : 20697320746865206e65787420626573 + ciphertext : 1ad4172a14f9faf455b7f1d4b62bd08f + + j = 2 + IV' xor j : 595b699bbd3bc0df26062093c1ad8f71 + S(1) : 3abd640a60919fd43bd289a09649b5fc + IV' xor S(1) xor j : 63e60d91ddaa5f0b1dd4a93357e43a8d + S(2) : 220c7a8715266565b09ecc8a2a62b11b + plaintext : 74207468696e67 + ciphertext : 562c0eef7c4802 + +B.2. AES-CM Test Vectors + + Keystream segment length: 1044512 octets (65282 AES blocks) + Session Key: 2B7E151628AED2A6ABF7158809CF4F3C + Rollover Counter: 00000000 + Sequence Number: 0000 + SSRC: 00000000 + Session Salt: F0F1F2F3F4F5F6F7F8F9FAFBFCFD0000 (already shifted) + Offset: F0F1F2F3F4F5F6F7F8F9FAFBFCFD0000 + + Counter Keystream + + F0F1F2F3F4F5F6F7F8F9FAFBFCFD0000 E03EAD0935C95E80E166B16DD92B4EB4 + F0F1F2F3F4F5F6F7F8F9FAFBFCFD0001 D23513162B02D0F72A43A2FE4A5F97AB + F0F1F2F3F4F5F6F7F8F9FAFBFCFD0002 41E95B3BB0A2E8DD477901E4FCA894C0 + ... ... + F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF EC8CDF7398607CB0F2D21675EA9EA1E4 + F0F1F2F3F4F5F6F7F8F9FAFBFCFDFF00 362B7C3C6773516318A077D7FC5073AE + F0F1F2F3F4F5F6F7F8F9FAFBFCFDFF01 6A2CC3787889374FBEB4C81B17BA6C44 + + Nota Bene: this test case is contrived so that the latter part of the + keystream segment coincides with the test case in Section F.5.1 of + [CTR]. + + + + +Baugher, et al. Standards Track [Page 52] + +RFC 3711 SRTP March 2004 + + +B.3. Key Derivation Test Vectors + + This section provides test data for the default key derivation + function, which uses AES-128 in Counter Mode. In the following, we + walk through the initial key derivation for the AES-128 Counter Mode + cipher, which requires a 16 octet session encryption key and a 14 + octet session salt, and an authentication function which requires a + 94-octet session authentication key. These values are called the + cipher key, the cipher salt, and the auth key in the following. + Since this is the initial key derivation and the key derivation rate + is equal to zero, the value of (index DIV key_derivation_rate) is + zero (actually, a six-octet string of zeros). In the following, we + shorten key_derivation_rate to kdr. + + The inputs to the key derivation function are the 16 octet master key + and the 14 octet master salt: + + master key: E1F97A0D3E018BE0D64FA32C06DE4139 + master salt: 0EC675AD498AFEEBB6960B3AABE6 + + We first show how the cipher key is generated. The input block for + AES-CM is generated by exclusive-oring the master salt with the + concatenation of the encryption key label 0x00 with (index DIV kdr), + then padding on the right with two null octets (which implements the + multiply-by-2^16 operation, see Section 4.3.3). The resulting value + is then AES-CM- encrypted using the master key to get the cipher key. + + index DIV kdr: 000000000000 + label: 00 + master salt: 0EC675AD498AFEEBB6960B3AABE6 + ----------------------------------------------- + xor: 0EC675AD498AFEEBB6960B3AABE6 (x, PRF input) + + x*2^16: 0EC675AD498AFEEBB6960B3AABE60000 (AES-CM input) + + cipher key: C61E7A93744F39EE10734AFE3FF7A087 (AES-CM output) + + + + + + + + + + + + + + + +Baugher, et al. Standards Track [Page 53] + +RFC 3711 SRTP March 2004 + + + Next, we show how the cipher salt is generated. The input block for + AES-CM is generated by exclusive-oring the master salt with the + concatenation of the encryption salt label. That value is padded and + encrypted as above. + + index DIV kdr: 000000000000 + label: 02 + master salt: 0EC675AD498AFEEBB6960B3AABE6 + + ---------------------------------------------- + xor: 0EC675AD498AFEE9B6960B3AABE6 (x, PRF input) + + x*2^16: 0EC675AD498AFEE9B6960B3AABE60000 (AES-CM input) + + 30CBBC08863D8C85D49DB34A9AE17AC6 (AES-CM ouptut) + + cipher salt: 30CBBC08863D8C85D49DB34A9AE1 + + We now show how the auth key is generated. The input block for AES- + CM is generated as above, but using the authentication key label. + + index DIV kdr: 000000000000 + label: 01 + master salt: 0EC675AD498AFEEBB6960B3AABE6 + ----------------------------------------------- + xor: 0EC675AD498AFEEAB6960B3AABE6 (x, PRF input) + + x*2^16: 0EC675AD498AFEEAB6960B3AABE60000 (AES-CM input) + + Below, the auth key is shown on the left, while the corresponding AES + input blocks are shown on the right. + + auth key AES input blocks + CEBE321F6FF7716B6FD4AB49AF256A15 0EC675AD498AFEEAB6960B3AABE60000 + 6D38BAA48F0A0ACF3C34E2359E6CDBCE 0EC675AD498AFEEAB6960B3AABE60001 + E049646C43D9327AD175578EF7227098 0EC675AD498AFEEAB6960B3AABE60002 + 6371C10C9A369AC2F94A8C5FBCDDDC25 0EC675AD498AFEEAB6960B3AABE60003 + 6D6E919A48B610EF17C2041E47403576 0EC675AD498AFEEAB6960B3AABE60004 + 6B68642C59BBFC2F34DB60DBDFB2 0EC675AD498AFEEAB6960B3AABE60005 + + + + + + + + + + + + +Baugher, et al. Standards Track [Page 54] + +RFC 3711 SRTP March 2004 + + +Authors' Addresses + + Questions and comments should be directed to the authors and + avt@ietf.org: + + Mark Baugher + Cisco Systems, Inc. + 5510 SW Orchid Street + Portland, OR 97219 USA + + Phone: +1 408-853-4418 + EMail: mbaugher@cisco.com + + + Elisabetta Carrara + Ericsson Research + SE-16480 Stockholm + Sweden + + Phone: +46 8 50877040 + EMail: elisabetta.carrara@ericsson.com + + + David A. McGrew + Cisco Systems, Inc. + San Jose, CA 95134-1706 + USA + + Phone: +1 301-349-5815 + EMail: mcgrew@cisco.com + + + Mats Naslund + Ericsson Research + SE-16480 Stockholm + Sweden + + Phone: +46 8 58533739 + EMail: mats.naslund@ericsson.com + + + Karl Norrman + Ericsson Research + SE-16480 Stockholm + Sweden + + Phone: +46 8 4044502 + EMail: karl.norrman@ericsson.com + + + +Baugher, et al. Standards Track [Page 55] + +RFC 3711 SRTP March 2004 + + +Full Copyright Statement + + Copyright (C) The Internet Society (2004). 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. + +Intellectual Property + + The IETF takes no position regarding the validity or scope of any + Intellectual Property Rights or other rights that might be claimed to + pertain to the implementation or use of the technology described in + this document or the extent to which any license under such rights + might or might not be available; nor does it represent that it has + made any independent effort to identify any such rights. Information + on the procedures with respect to rights in RFC documents can be + found in BCP 78 and BCP 79. + + Copies of IPR disclosures made to the IETF Secretariat and any + assurances of licenses to be made available, or the result of an + attempt made to obtain a general license or permission for the use of + such proprietary rights by implementers or users of this + specification can be obtained from the IETF on-line IPR repository at + http://www.ietf.org/ipr. + + The IETF invites any interested party to bring to its attention any + copyrights, patents or patent applications, or other proprietary + rights that may cover technology that may be required to implement + this standard. Please address the information to the IETF at ietf- + ipr@ietf.org. + +Acknowledgement + + Funding for the RFC Editor function is currently provided by the + Internet Society. + + + + + + + + + +Baugher, et al. Standards Track [Page 56] + |