RADIUS Extension for Digest Authentication
obsoletes
- rfc-4590 — RADIUS Extension for Digest Authentication
Extracted elements (29)
Digest-Username is defined separately from User-Name because HTTP Digest uses a username in the digest calculation, but the RADIUS server must use User-Name for credential lookup to ensure consistent policy enforcement and avoid spoofing.
Nonces are generated by the RADIUS server rather than the RADIUS client to avoid security and operational issues; generating them at the client would also prevent AKA-based digest algorithms from working correctly.
The existing RADIUS User-Password and CHAP attributes cannot carry HTTP Digest credentials because the RADIUS client does not receive a cleartext password from the HTTP-style client, and the CHAP algorithm is incompatible with HTTP Digest.
A companion Diameter specification (RFC 4740) defines Digest Authentication support for Diameter and addresses RADIUS/Diameter compatibility; this document covers only the RADIUS side.
Digest-Qop is optional in Access-Challenge to preserve backward compatibility with RFC 2069 minimal implementations; however, RADIUS servers SHOULD insert at least one Digest-Qop attribute.
A RADIUS client MUST send zero or exactly one credential to the RADIUS server, and MUST choose the credential of the (Proxy-)Authorization header if the realm directive matches its locally configured realm.
An Access-Challenge MUST contain a State attribute, which is copied to the subsequent Access-Request. A server receiving an Access-Request with a State attribute MUST respond with Access-Accept or Access-Reject and MUST NOT respond with another Access-Challenge.
Digest-HA1 MUST only be sent/processed when Digest-Algorithm is 'MD5-sess' or 'AKAv1-MD5-sess', or when IPsec is configured to protect RADIUS traffic; it MUST NOT be sent when qop is 'auth' or unspecified.
If Access-Challenge attributes (Digest-Qop, Digest-Algorithm, Digest-Domain, Digest-Opaque) are present in the nonce-carrying challenge, the RADIUS client MUST use them when constructing the (Proxy-)Authenticate header.
If mandatory Digest attributes are missing from an Access-Request containing a Digest-Response, the RADIUS server MUST respond with an Access-Reject.
If the Digest-Qop Attribute value is 'auth-int' and the Access-Accept contains a Digest-Response-Auth Attribute, the RADIUS client MUST ignore the Access-Accept and treat it as an Access-Reject, because the RADIUS server cannot know the HTTP-style response body contents.
RADIUS over IPsec, if used, MUST conform to the requirements described in RFC 3579, Section 4.2.
The Message-Authenticator Attribute MUST be included in Access-Request, Access-Challenge, Access-Reject, and Access-Accept messages that contain any attributes defined in this specification.
The RADIUS client MUST add a Message-Authenticator Attribute (defined in RFC 3579) to every Access-Request packet containing Digest attributes before sending it to the RADIUS server.
The RADIUS server MUST add Digest-Realm and Message-Authenticator to an Access-Challenge carrying a nonce; it SHOULD add Digest-Algorithm and one or more Digest-Qop attributes.
The RADIUS server MUST check whether the RADIUS client is authorized to serve users of the realm in Digest-Realm; if not, the server MUST send an Access-Reject and SHOULD log the event.
The RADIUS server MUST use the User-Name Attribute (not Digest-Username) to look up user credentials, and Digest-Username MUST only be used for digest calculation purposes.
Digest-Auth-Param (type 117) is an extensibility placeholder carrying unknown auth-param name/value pairs verbatim; multiple unknown parameters require multiple instances of this attribute.
Digest-Entity-Body-Hash (type 112) carries the hexadecimal H(entity-body) required when qop is 'auth-int', avoiding the need to transmit the full HTTP message body over RADIUS.
Digest-HA1 (type 121) carries the hexadecimal H(A1) value, enabling the RADIUS client to compute the rspauth value for Authentication-Info when qop is 'auth-int' and the response body is not available to the RADIUS server.
Digest-Response (type 103) carries the request-digest hex string from the HTTP-style client's Authorization header; its presence in an Access-Request signals the server to perform Digest Authentication.
SIP-AOR (type 122) carries the SIP or tel URI identifying the Address-of-Record whose use must be authenticated and authorized; used only in Access-Request packets for SIP authorization.
RADIUS Attribute Types registry updated with 20 new attributes: Digest-Response (103) through SIP-AOR (122), originally assigned in RFC 4590 and confirmed in this document with two corrected assignments (Digest-Response-Auth=106, Digest-Nextnonce=107).
All Digest-* attributes are sent in cleartext over RADIUS; a man-in-the-middle can perform a bidding-down attack by modifying or removing Digest-Qop and Digest-Algorithm attributes in Access-Challenge messages, causing the client to use weaker authentication.
The Digest-HA1 attribute contains no random components when the algorithm is 'MD5' or 'AKAv1-MD5', making it vulnerable to offline dictionary attacks and replay attacks; IPsec or equally strong transport protection is required when this attribute is used.
To mitigate denial-of-service attacks via large volumes of unauthenticated HTTP-style requests, the RADIUS server MUST verify that it generated the nonce received from the HTTP-style client, preferably statelessly using a cryptographic signature embedded in the nonce.
RADIUS Digest flow states: (1) NAS sends Access-Request without Digest-Nonce to obtain nonce; (2) Server responds with Access-Challenge containing Digest-Nonce; (3) NAS sends Access-Request with full Digest credentials; (4) Server responds with Access-Accept (success), Access-Challenge with Digest-Stale='true' (stale nonce), or Access-Reject (failure).
All new Digest-* attributes share the TLV format: 1-octet Type, 1-octet Length (>=3), followed by Text. Digest-Nonce-Count (type 114) is fixed at length 10. Digest-Stale (type 120) and Digest-Domain (type 119) have length 3.
Quoted-string HTTP Digest directives are translated into RADIUS attributes by removing the leading and trailing quote characters only; internal escaped quotes and backslashes are preserved as-is in the attribute text.