ABFAB | J. Howlett |
Internet-Draft | JANET(UK) |
Intended status: Informational | S. Hartman |
Expires: September 15, 2011 | Painless Security |
March 14, 2011 |
Key Negotiation Protocol for RadSec (KNP)
draft-howlett-radsec-knp-01
RadSec provides a means to secure the communication between a RADIUS client and server on the transport layer by using a TLS cipher-suite. This avoids the security weaknesses inherent in RADIUS' use of the MD5 algorithm.
The Key Negotiation Protocol for RadSec enables a RADIUS client and RADIUS server to derive a key that can be used with a TLS PSK ciphersuite and applied with a RadSec connection.
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."
This Internet-Draft will expire on September 15, 2011.
Copyright (c) 2011 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.
The ABFAB architecture [I-D.lear-abfab-arch] provides an overview of how AAA protocols, such as RADIUS[RFC2865], can be used to support application layer authentication. In this architecture, the AAA protocols are part of the 'federation substrate' that ultimately binds relying parties to identity providers. The ABFAB substrate provides the architectural roles:
Today, AAA protocols are already commonly employed for federation between different domains. These system generally exhibit many of these behaviours.
In a simple federated relationship, static configuration of RADIUS is used to achieve technical trust. The RADIUS proxy is configured with a static set of mappings from realm suffix to RADIUS server. There are statically configured shared secrets with each of these servers. Statically configured attribute release policies describe what attributes may be expressed by RADIUS servers outside of the local realm.
Another common deployment involves an organization running a network of RADIUS proxies. These proxies are statically configured with routing, credentials and filtering information. A RADIUS proxy network and this static configuration is sometimes known as a proxy fabric.
One disadvantage of a proxy fabric is that the intermediate proxies can see information exchanged between the RADIUS client (or the relying party in the ABFAB architecture) and terminal RADIUS server (or the identity provider in the ABFAB architecture). Sometimes this might be desirable: for example if an intermediate proxy is needed to validate some of this information. However, it does create a significant privacy exposure.
Also, especially for the Extensible Authentication Protocol [RFC3748], reducing the latency of a round trip can provide a significant performance advantage.
TLS encryption for RADIUS (RadSec) [I-D.ietf-radext-radsec] provides a means to secure the communication between a RADIUS and server on the transport layer by using a TLS [RFC5246] cipher-suite. This avoids the security weaknesses inherent in RADIUS' use of the MD5 algorithm and removes the requirement for a RADIUS client to be preconfigured with a shared secret to communicate with a particular RADIUS server. This can be a significant part of reducing the intermediaries in a RADIUS deployment.
RadSec mandates the use of one of the [RFC5246] ciphersuites and recommends the use of two other ciphersuites specified in that document. However any ciphersuite, including the TLS Pre-Shared Key (PSK) ciphersuites [RFC4279], may be used providing that it supports encryption.
The KNP is motivated by the following requirements:
In order to provide a scalable substrate for federation, the AAA fabric needs to provide authentication and exchange of policy information between RADIUS clients and servers that cross organizational boundaries. That is, federated access management is required for RADIUS as an application.
As with other applications, the ABFAB technologies can be applied to provide federated access management. RADIUS clients act as clients and subjects. They have identities issued by the organization establishing the federation, which acts as an identity provider. The foreign RADIUS server acts as a relying party.
This specification defines a protocol that permits the ABFAB architecture to be used for federated access to RADIUS, providing the technical details for interactions between parties. In an environment where ABFAB is in use, this technology may provide significant advantages over other approaches such as a public-key infrastructure. In ABFAB, credentials are always managed between two parties. The subject and identity provider (in this case, the RADIUS client and federation) share a credential. The relying party and identity provider share a secure channel created by AAA credentials. Since only two parties need to interact with each credential, their requirements dictate the complexity of enrollment, revocation, policies, practices, and other credential management issues. Trust anchor management may be significantly simpler.
The Key Negotiation Protocol (KNP) provides two functions:
In summary, the first function enables a RADIUS client and server to negotiate a key by means of a trusted third-party called the Introducer. The second function enables a RADIUS client to establish an Introducer which it might subsequently use the first facility against; or, in an iterative manner, repeat the second facility to establish yet another Introducer.
TODO: this document currently only documents the first of these functions. The second facility will be documented in a later revision.
The composition of these two facilities enables a RADIUS client to dynamically establish a trust relationship with a RADIUS server in the absence of any pre-existing relationship, providing that there exists a path between the RADIUS client and server via one or more intermediate Introducers.
Conceptually the role of an Introducer as a trust broker is not dissimilar to that of a conventional AAA proxy. The key difference is that the trust path between the RADIUS client and server need not bear any resemblance to the transit path taken by the AAA messages between the RADIUS client and server.
Static configuration of routing information does not scale. Instead it would be desirable to have a protocol that dynamically assembles the necessary configuration information for RADIUS proxies.
This protocol has a lot in common with a routing protocol. The protocol maintains a distributed database synchronized across a number of replicas. It's likely that multiple paths will be able to reach the same destination in some cases. Thus, some sort of shortest-path algorithm is required. The metric often will be more complex than simply length of path: business rules may prefer certain paths. Business rules may also filter out certain paths at various points.
We propose that as ABFAB deployment complexity increases, such a protocol will be required. Within a federation, local procedures, such as frequently updated static configuration could be used. However, to provide scalable inter-federation, a trust router protocol is required to exchange the information necessary to establish technical trust in a dynamic manner. This document does not define a specific instantiation of a trust routing protocol. Instead, it focuses on a problem that results once a trust routing protocol exists. Efforts to design a proposal for a trust router protocol are ongoing but less mature than this proposal.
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 RFC 2119 [RFC2119].
The KNP does not require the RADIUS client and RADIUS server to share a trust relationship. Instead, it only requires that these parties share a trust relationship with a mutually trusted third party. In the KNP, this party is known as the "Introducer".
Figure 1 below depicts the trust relationships for a RADIUS client, RADIUS server and the Introducer before the KNP has been invoked.
Introducer /\ / \ / \ RADIUS RADIUS Client Server Figure 1
Figure 2 below depicts the new trust relationship between the RADIUS client, RADIUS server and the Introducer after the KNP has been invoked.
Introducer /\ / \ / \ RADIUS------RADIUS Client Server Figure 2
Figure 3 below depicts the flow of RADIUS packets from the RADIUS client to the RADIUS server using the new trust relationship.
Introducer RADIUS ---> RADIUS Client Server Figure 3
The KNP builds on a variety of protocols. This section describes the relationship of KNP to these.
The KNP builds on the GSS-API [RFC2743] framework, the GSS EAP mechanism [I-D.ietf-abfab-gss-eap] and EAP [RFC3748]. The RADIUS client, acting as the GSS initiator and EAP peer, establishes a GSS-API security context with the RADIUS server, acting as the GSS acceptor and EAP authenticator, by reference to an EAP server that acts as the Introducer.
The KNP enables all three parties - RADIUS client, RADIUS server and Introducer - to establish a common view of their mutual relationships as described by the names and keys that the KNP generates.
The RADIUS client must possess an EAP credential for the introducer, allowing mutual authentication of both parties when applied with an appropriate EAP method.
Figure 4 below depicts the relationships between these entities:
Introducer /\ / \ / \ RADIUS RADIUS Client Server (wielding EAP credential for the introducer) Figure 4
The RADIUS server uses an AAA protocol to forward the EAP transaction to the Introducer.
The RADIUS server must possess an AAA credential for the Introducer, allowing mutual authentication of both parties.
Figure 5 below depicts the relationships between these entities:
Introducer /\ / \ / \ RADIUS RADIUS Client Server (wielding EAP (wielding AAA credential for credential for the Introducer) the Introducer) Figure 5
The Introducer is always a single system entity: the EAP server. However, the AAA link between the RADIUS server and Introducer may not be direct, and instead may be composed of one or more proxies.
For the purposes of KNP, the RADIUS server and Introducer must have equivalent or greater trust in any intermediate proxies than they do with each other.
The GSS EAP mechanism is transported using the HTTP Negotiate authentication scheme [RFC4559] between the RADIUS client and the RADIUS server's KNP endpoint.
This section describes the KNP.
The KNP is invoked when the RADIUS client creates or receives (in the case that it is also a proxy) a RADIUS message which must be forwarded towards a RADIUS server but for which the RADIUS client lacks a PSK. For example:
The RADIUS client first selects a RADIUS server. Implementations MUST support the use of Dynamic Peer Discovery [I-D.ietf-radext-dynamic-discovery], but MAY use any selection algorithm.
Having selected a RADIUS server and obtained its network location, the RADIUS client MUST attempt to establish an HTTP [RFC2616] connection with the RADIUS server's KNP end-point.
This specification defines the SRV prefix "_knp._tcp". This MAY be used to describe the network location of the KNP endpoint. Implementations MUST support the use of this SRV RR. The label used for this record is the RADIUS server.
Example:
_knp._tcp.radsec.example.com. IN SRV 0 10 TODO knp.example.com.
TODO: obtain a port.
It is essential that all three actors - RADIUS Client, Server and Introducer - are able to validate each other's respective claims to their names. These are determined using different processes for each relationship, and are summarised in Figure 6 below.
+===============+===============+==================+===============+ | Subject | Relying Party | Process | Evidence from | +===============+===============+==================+===============+ | RADIUS Client | Introducer | EAP GSS | EAP method | +---------------+---------------+ authentication | w/ qualifying | | Introducer | RADIUS Client | (section 6.3.1. )|Security Claims| +===============+===============+==================+===============+ | Introducer | RADIUS Server | AAA | AAA | +---------------+---------------+ authentication | shared | | RADIUS Server | Introducer | (section 6.3.2. )| secret | +===============+===============+==================+===============+ | RADIUS | RADIUS | Channel bindings | Assertion by | | Server | Client | (section 6.3.3. )| Introducer | +---------------+---------------+------------------+---------------+ | RADIUS | RADIUS | RADIUS attribute | Assertion by | | Client | Server | (section 6.3.4. )| Introducer | +===============+===============+==================+===============+ Figure 6
The following sections describe how these processes are used by the KNP to establish trust between the actors and, in particular, how they determine their respective names.
The RADIUS client invokes the GSS authentication handshake using the GSS EAP mechanism [I-D.ietf-abfab-gss-eap] using an empty POST method. The RADIUS client, in its role as GSS initiator, MUST request mutual authentication from the GSS layer.
The RADIUS server, acting as an EAP authenticator as described in section 2.3 of [RFC3748], MUST forward the EAP Request messages from the RADIUS client towards the Introducer over RADIUS; and also all EAP Responses received from the Introducer over RADIUS from the Introducer to the RADIUS client.
The RADIUS client and Introducer MUST negotiate an EAP method supporting the following EAP Security Claims: mutual authentication, integrity protection, replay protection, confidentiality, key derivation, dictionary attack resistance, session independence and channel binding.
The RADIUS Server and Introducer MUST each possess a shared secret to protect the RADIUS exchange described in section Section 5.3.1. The shared secret MUST be established out-of-band prior to the invocation of the KNP; this is not within the scope of the KNP.
The RADIUS client and Introducer MUST use the EAP channel binding protocol [I-D.ietf-emu-chbind]. If the channel binding verification fails, the Introducer MUST reject the authentication.
If the Introducer successfully authenticates the RADIUS client, the Introducer MUST send the client's authenticated name to the RADIUS server using the X RADIUS Attribute. The RADIUS server MAY use this name to perform authorisation.
TODO: select an appropriate RADIUS attribute
The completion of the EAP method exchange results in the derivation of an EAP MSK known only to the client and server and Peer-Id(s) and Server-Id(s) identifying these respectively. The Introducer MUST replicate the keying material and Server-Id to the RADIUS server.
The RADIUS client and server, in possession of the EAP MSK, establish a GSS-API security context as described in section 6 of [I-D.ietf-abfab-gss-eap].
The PSK identity and value shall be the output of GSS_Pseudo_random() [RFC4401] using the Pseudo-Random Function defined for the GSS EAP mechanism [I-D.ietf-abfab-gss-eap].
For the PSK identity, the prf_in input string MUST be prepended with the string "tls-psk-identity"; desired_out_len MUST be set to 128 octets.
Note: this should use base64 representation
Note: should we append an NAI realm to the PSK identity?
For the PSK value, the prf_in input string MUST be prepended with the string "tls-psk-value"; desired_out_len MUST be set to 64 octets.
Finally the RADIUS client invokes RadSec, requesting a PSK TLS ciphersuite. The RADIUS client MUST include its PSK identity in the ClientKeyExchange message.
The RADIUS server and client MAY cache the GSS context until expiry of the GSS context. However, either party MAY delete a GSS context at any time up to expiry. When a GSS context is deleted, the corresponding PSK value MUST also be deleted. The PSK identity MAY be retained for auditing or other purposes.
TODO
Note: register KNP TCP port and SRV RR label.
TODO
[I-D.lear-abfab-arch] | Howlett, J, Hartman, S, Tschofenig, H and E Lear, "Application Bridging for Federated Access Beyond Web (ABFAB) Architecture", Internet-Draft draft-lear-abfab-arch-02, March 2011. |