rfc-7802

A Pseudo-Random Function (PRF) for the Kerberos V Generic Security Service Application Program Interface (GSS-API) Mechanism

S. Emery, N. Williams
date2016-03 streamIETF areasec wgkitten statusPROPOSED STANDARD pages8 canonicalhttps://www.rfc-editor.org/rfc/rfc7802 doi10.17487/RFC7802
This document defines the Pseudo-Random Function (PRF) for the Kerberos V mechanism for the Generic Security Service Application Program Interface (GSS-API), based on the PRF defined for the Kerberos V cryptographic framework, for keying application protocols given an established Kerberos V GSS-API security context. This document obsoletes RFC 4402 and reclassifies that document as Historic. RFC 4402 starts the PRF+ counter at 1; however, a number of implementations start the counter at 0. As a result, the original specification would not be interoperable with existing implementations.

obsoletes

Extracted elements (13)

design-rationale §1

This document obsoletes RFC 4402 and changes the PRF+ counter to start at 0 instead of 1. RFC 4402 specified starting at 1, but multiple implementations already used 0, making the original specification non-interoperable with deployed code.

crypto, security

interoperability-note §1

RFC 4402 is reclassified as Historic because its counter-starts-at-1 specification conflicts with existing implementations that start the counter at 0. Implementations conforming to RFC 4402 would not interoperate with those conforming to this document.

crypto, security

normative-requirement §3 MUST

For GSS_C_PRF_KEY_PARTIAL, the PRF+ MUST use the sub-session key asserted by the initiator if any exists, or the Ticket's session key otherwise.

crypto, security

normative-requirement §3 MUST

The PRF+ MUST be keyed with the key indicated by the 'prf_key' input parameter. For GSS_C_PRF_KEY_FULL, use the acceptor's sub-session key if present, else the initiator's sub-session key if present, else the Ticket's session key.

crypto, security

normative-requirement §3 MUST

When the input size exceeds 2^14 octets per RFC 4401 and exceeds an implementation's resources, the mechanism MUST return GSS_S_FAILURE with GSS_KRB5_S_KG_INPUT_TOO_LONG as the minor status code.

crypto, security

protocol-element §3

The Kerberos V GSS-API PRF is defined as PRF+(K, L, S) = truncate(L, T0 || T1 || .. || Tn), where Tn = pseudo-random(K, n || S). K is the session key, L is the desired output length, S is the input string, and pseudo-random() is the Kerberos V PRF from RFC 3961.

crypto, security

protocol-element §3

The maximum output size of the Kerberos V mechanism's GSS-API PRF is 2^32 times the output size of the pseudo-random() function for the encryption type of the given key, owing to the 32-bit counter.

crypto, security

registry §4

This document has no current IANA actions. If a relevant IANA registry of GSS-API symbols and constants is created in the future, the GSS_KRB5_S_KG_INPUT_TOO_LONG minor status code should be added to it.

registry, security

security-consideration §5

Kerberos V encryption types' PRF functions use a key derived from session keys and should preserve the forward security properties of the mechanism's key exchanges.

crypto, security

security-consideration §5

Legacy Kerberos V encryption types, particularly single-DES encryption types, may be weak and their use in this PRF construction inherits those weaknesses.

crypto, security

security-consideration §5

The computational cost of the PRF+ grows with input and output octet string lengths, but the counter-based construction allows parallelization of the underlying pseudo-random() calls.

crypto, security

security-consideration §5

Use of Ticket session keys instead of sub-session keys is dangerous because ticket reuse leads to key reuse. Initiators should always assert sub-session keys, and acceptors should assert sub-session keys at least when initiators fail to do so.

crypto, security

wire-format §3

The counter 'n' in the PRF+ construction is encoded as a network byte order 32-bit unsigned binary number, prepended to the input string S before each invocation of the underlying Kerberos V pseudo-random function.

crypto, security