]> Extended Random Values for TLS RTFM, Inc.
2064 Edgewood Drive Palo Alto 94303 CA USA ekr@rtfm.com
National Security Agency
9800 Savage Rd. Fort Meade 20755-6709 MD USA msalter@restarea.ncsc.mil
<<<<<<< .mine ======= >>>>>>> .r3465 This document describes an extension for using larger client and server Random values with Transport Layer Security (TLS) and Datagram TLS (DTLS).
TLS and DTLS use a 32-byte "Random" value consisting of a 32-bit time value time and 28 randomly generated bytes: struct { uint32 gmt_unix_time; opaque random_bytes[28]; } Random; The client and server each contribute a Random value which is then mixed with secret keying material to produce the final per-association keying material. The United States Department of Defense has requested a TLS mode which allows the use of longer public randomness values for use with high security level cipher suites like those specified in Suite B . The rationale for this as stated by DoD is that the public randomness for each side should be at least twice as long as the security level for cryptographic parity, which makes the 224 bits of randomness provided by the current TLS random values insufficient. This document specifies an extension which allows for additional randomness to be exchanged in the Hello messages.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in .
This document defines a new TLS extension called "extended_random". The "extended_random" extension carried in a new TLS extension called "ExtendedRandom". ; } ExtendedRandom; ]]> The extended_random_value MUST be a randomly generated byte string. A cryptographically secure PRNG SHOULD be used.
The client requests support for the extended randomness feature by sending an "extended_random" extension in its ClientHello. The "extension_data" field contains an ExtendedRandom value. When a server which does not recognize the "extended_random" extension receives one, it will ignore it as required. A server which recognizes the extension MAY choose to ignore it, in which case it SHOULD continue with the exchange as if it had not received the extension. If the server wishes to use the extended randomness feature, it MUST send its own "extended_random" extension with an extended_random_value equal in length to the client's extended_random_value. Clients SHOULD check the length of the server's extended_random_value and generate a fatal "illegal_parameter" error if it is present but does does not match the length that was transmitted in the ClientHello. Because TLS does not permit servers to request extensions which the client did not offer, the client may not offer the "extended_random" extension even if the server requires it. In this case, the server should generate a fatal "handshake_failure" alert. Because there is no way to mark extensions as critical, the server may ignore the "extended_random" extension even though the client requires it. If a client requires the extended randomness input feature but the server does not negotiate it, the client SHOULD generate a fatal "handshake_failure" alert.
When the extended randomness feature is in use, the extended random values MUST be mixed into the PRF along with the client and server random values during the PMS->MS conversion. Thus, the PRF becomes: master_secret = PRF(pre_master_secret, "master secret", ClientHello.random + ClientHello.extended_random_value + ServerHello.random + ServerHello.extended_random_value)[0..47]; Because new extensions may not be introduced in resumed handshakes, mixing in the extended inputs during the MS->keying material conversion would simply involve mixing in the same material twice. Therefore, the extended random inputs are only used when the PMS is converted into the MS.
When this extension is in use it increases the amount of data that an attacker can inject into the PRF. This potentially would allow an attacker who had partially compromised the PRF greater scope for influencing the output. Hash-based PRFs like the one in TLS are designed to be fairly indifferent to the input size (the input is already greater than the block size of most hash functions), however there is currently no proof that a larger input space would not make attacks easier. Another concern is that bad implementations might generate low entropy extented random values. TLS is designed to function correctly even when fed low-entropy random values because they are primarily used to generate distinct keying material for each connection.
This document defines an extension to TLS, in accordance with :
[[ NOTE: These values need to be assigned by IANA ]]
This work was supported by the US Department of Defense.
&bibxml2rfc-normative; &bibxml2rfc-informative;