Internet DRAFT - draft-byerly-sip-radius
draft-byerly-sip-radius
Internet Engineering Task Force Bryan J. Byerly
Internet Draft David Williams
draft-byerly-sip-radius-00.txt Cisco Systems
October, 2000
Expires: March, 2001
SIP Authentication using CHAP-Password
Status of this Memo
This document is an Internet-Draft and is in full conformance with
all provisions of Section 10 of RFC2026.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet-
Drafts.
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."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/lid-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
Abstract
This document describes a proposed extension to SIP. This
document proposes using an alternative SIP authentication mechanism
for use in Proxy-Authorization or Authorization headers in order
to support SIP client Authentication using backend RADIUS servers.
The introduction of this extension would allow a SIP proxy
(or called SIP client) to authenticate a SIP client using a backend
RADIUS server.
Byerly/Williams draft-byerly-sip-radius-00.txt Page 1
Internet Draft SIP Authentication using CHAP-Password October 2000
1 Introduction
Some ISPs currently use RADIUS servers to authenticate
(and implicitly authorize) dialup users for PPP service.
It would be advantageous to allow the re-use of this same
RADIUS infrastructure for SIP client authentication.
Although the currently defined mechanisms for SIP client
authentication [section 3.2.2.2 of RFC 2617] and RADIUS
authentication using a User-Password or CHAP-Password
[sections 5.2, 5.3 of RFC 2138] both use MD5, they run MD5
across differently formatted messages. There are two
approaches to solving this problem. One is to extend
RADIUS to support HTTP-Digest; the other is to extend
the SIP list of authentication schemes to support a CHAP-Password.
This document proposes extending the SIP list of authentication
schemes to support a CHAP-Password.
2 Definitions
The definitions of several terms used in this document follow:
nonce
A nonce is a octet string that is uniquely generated each time a
request is made. It is recommended that a nonce be constructed
to exhibit global and temporal uniqueness.
The SIP specification [SIP] calls this a "nonce-value"
(Section 3.2.1 of [DIG]).
The RADIUS specification calls this a (random) challenge.
(Section 2.2 of [RAD])
In RADIUS, the nonce can be placed in the Request Authenticator
(Section 4.2 of [RADIUS]) or in the CHAP-Challenge attribute.
(Section 5.40 of [RADIUS])
The CHAP Response in the CHAP-Password and the
nonce-value in the HTTP-Digest use a 16-octet nonce.
sequence number
A sequence number is a monotonically increasing integer.
Sequence numbers allow detection of replays.
The "nonce-count" of the HTTP-Digest is a 32-bit sequence number
(formatted as 8 hex digit characters)
The "Chap-ID" in the CHAP-Password is a 1 octet sequence number.
Byerly/Williams draft-byerly-sip-radius-00.txt Page 2
Internet Draft SIP Authentication using CHAP-Password October 2000
shared secret
A secret shared between two entities.
In this document, we assume that:
- A user shares a secret (i.e. password) with
the RADIUS server.
- The PPP NAS (or SIP proxy) also shares a secret
with the RADIUS server.
3 Analogous Model - PPP
When a SIP proxy is used for user authentication
an analogy can be drawn from PPP message flows.
3.1 Message flow for PPP user authentication with Radius backend:
dialup PPP RADIUS
user NAS server
| | |
|--modem connection--->| |
| | |
| PPP | |
|<-Configure-Request---| |
| | |
| PPP | |
|--Configure-Ack------>| |
| | |
| |--Access-Request------>|
| | |
| |<-Access-Challenge-----|
| | |
|<-CHAP Challenge------| |
| | |
|--CHAP Response------>| |
| | |
| |--Access-Request------>|
| | |
| |<-Access-Accept--------|
| | |
| | |
Byerly/Williams draft-byerly-sip-radius-00.txt Page 3
Internet Draft SIP Authentication using CHAP-Password October 2000
3.2 Message flow for SIP user authentication with Radius backend:
SIP SIP RADIUS
client proxy server
| | |
|--[1] INVITE--------->| |
| | |
| |--[2] Access-Request-->|
| | |
| |<-[3] Access-Challenge-|
| | |
|<-[4] 407-------------| |
| (Proxy-Authenticate:) |
| | |
|--[5] INVITE--------->| |
|(Proxy-Authorization:) |
| | |
| |--[6] Access-Request-->|
| | |
| |<-[7] Access-Accept----|
| | |
| |--[8] INVITE------------------>
| | |
.
.
.
|<--200---------------|<--200------------------------
When a PPP client authentication failure occurs, in some
cases the PPP NAS implementation terminates the link.
However, other PPP NAS implementations may choose to allow
the client to continue, but with a filtered list of services.
A PPP NAS may allow traffic which lets the user update his credentials
(such as email to the sysadmin).
Similarly, a SIP proxy server may wish to allow the user to place
calls to the ISP's home office (to obtain updated credentials).
A SIP proxy server may also wish to allow 911 calls to complete.
4 Current PAP/CHAP/SIP/HTTP Authentication mechanisms
The following sections briefly describe the current mechanisms
used for user authentication in PPP (PAP/CHAP) and HTTP/SIP
(Basic and Digest).
Byerly/Williams draft-byerly-sip-radius-00.txt Page 4
Internet Draft SIP Authentication using CHAP-Password October 2000
4.1 PAP authentication mechanism
Why not use RADIUS User-Password?
The RADIUS User-Password attribute is calculated as:
User-Password = md5hash(NAS-secret, nonce) XOR user-password
If a PPP user sends his password in cleartext (eg. using PAP), then
the PPP server can calculate the User-Password attribute of the
Access-Request to authenticate the user.
It is undesirable for a SIP user to send his password in cleartext.
If the user does NOT send his password in cleartext,
the User-Password cannot be calculated by either the PPP client
(because he doesn't know the NAS-secret) or the NAS
(because he doesn't know the user-password).
4.2 CHAP authentication mechanism
PPP defines usage of the CHAP-Password (as an alternative
to User-Password) to avoid cleartext transmission of the
users's password.
When a CHAP-Password is used a cleartext sequence number, cleartext
nonce, and the following MD5 hash are transmitted by the client:
md5hash(seqnum, user-password, nonce)
The nonce can be generated by the client or the server.
If the nonce is generated by the client, the server may choose
to accept it or may challenge the client with a new nonce.
4.3 SIP/HTTP authentication mechanisms:
SIP and HTTP define two basic authentication mechanisms.
HTTP-Basic and HTTP-Digest. Usage of HTTP-Basic involves
sending the the user's password in cleartext, and is thus
undesirable.
The currently defined mechanisms for SIP client authentication
using HTTP-Digest are taken from section 3.2.2.2 of RFC 2617
and the hash constructions are repeated here for
clarity:
If the directive's value is "MD5" or is unspecified, then A1 is:
A1 = unq(username-value) ":" unq(realm-value) ":" passwd
If the directive's value is "MD5-sess", then A1 is
Byerly/Williams draft-byerly-sip-radius-00.txt Page 5
Internet Draft SIP Authentication using CHAP-Password October 2000
calculated only once - on the first request by the client following
receipt of a WWW-Authenticate challenge from the server. It uses
the server nonce from the challenge, and the first client nonce
value to construct A1 as follows:
A1 = H( unq(username-value) ":" unq(realm-value)
":" passwd
":" unq(nonce-value) ":" unq(cnonce-value))
This creates a 'session key' for the authentication of subsequent
requests and responses which is different for each "authentication
session", thus limiting the amount of material hashed with any one
key. [RFC 2617]
5 Interaction/Mapping problems
There are two problems:
5.1 CHAP-Password construction problem:
If a SIP proxy receives an HTTP-Digest from a SIP client
(without CHAP-Password support), the SIP proxy is unable
to construct a CHAP-Password. This is because the SIP proxy
doesn't have access to the client's password.
The SIP proxy only has access to a hash of the client's password,
and (as dicussed above) this hash is computed across a
message whose format is different than the RADIUS server expects.
Nor can the SIP proxy simply forward the hash calculated in
the HTTP-Digest:
5.2 Message mapping problem:
Since the message format over which a hash is computed
is different for the CHAP-Password than the message format
used for the HTTP-Digest "MD5" or "MD5-sess" algorithms,
a RADIUS server could not verify a proxied HTTP-Digest
(which uses either the "MD5" or "MD5-sess" algorithms).
The RADIUS server would discard such a HTTP-Digest
formulated hash as invalid.
Here is the proposed solution to these problems:
6 SIP Authentication using CHAP-Password
To solve these problems, we specify an additional mechanism
for SIP authentication which uses a CHAP-Password. CHAP-Password
can either be used for endpoint-to-endpoint authentication
(when used in WWW-Authenticate and Authorization) or for
endpoint-to-proxy authentication (when used in Proxy-Authenticate
and Proxy-Authorization).
Byerly/Williams draft-byerly-sip-radius-00.txt Page 6
Internet Draft SIP Authentication using CHAP-Password October 2000
6.1 The WWW-Authenticate Response Header
When a CHAP-Password is used for SIP authentication,
the WWW-Authenticate Response Header (3.2.2 of RFC 2617)
is defined as:
WWW-Authenticate = "WWW-Authenticate" ":" "CHAP-Password" chap-challenge
chap-challenge = * (";" chap-params )
chap-params = chap-username | chap-algorithm | chap-id | nonce
chap-algorithm = "algorithm" "=" ( "MD5" | token )
chap-username = quoted-string
chap-id = "id" "=" + ( digit )
chap-nonce = "nonce" "=" nonce-value
chap-nonce-value = <"> 32LHEX <">
LHEX = "0" | "1" | "2" | "3" |
"4" | "5" | "6" | "7" |
"8" | "9" | "a" | "b" |
"c" | "d" | "e" | "f"
chap-algorithm: A string indicating the authentication
method to be used.
chap-username: A string containing the user name.
chap-id: The CHAP Identifier is a one octet sequence number.
nonce: A string of 32 hex digits. The contents of the
nonce are implementation dependent. The quality
of the implementation depends on a good choice.
Example:
WWW-Authenticate: CHAP-Password ;username="byerly" ;algorithm="MD5"
;id=0 ;nonce="10131973aaa511bb05261975aaa505fb"
The chap-username is copied from the User-Name attribute
of the Access-Challenge message received from the RADIUS server.
The chap-id is copied from the (1-octet) Identifier field of the
Access-Challenge message received from the RADIUS server.
The chap-nonce-value is copied from the Access-Challenge message
from the RADIUS server (from the CHAP-Challenge attribute if
present, otherwise from the Request Authenticator).
Byerly/Williams draft-byerly-sip-radius-00.txt Page 7
Internet Draft SIP Authentication using CHAP-Password October 2000
6.2 The Authorization Request Header
When challenged, the SIP client is expected to retry the request,
passing an Authorization header line, which is defined as follows:
Authorization = "Authorization" ":" "CHAP-Password" chap-response-line
chap-response-line = * (";" chap-response-params )
chap-response-params = chap-username | chap-id | nonce | chap-response
chap-response = "response" "=" chap-response-value
chap-response-value = <"> 32LHEX <">
chap-response-value: A string of 32 hex digits computed as defined
in Section 4.1 of RFC1994, which proves that the user knows a
password.
Example:
Authorization: CHAP-Password ;username="byerly" ;id=0
;nonce="10131973aaa511bb05261975aaa505fb"
;response="f53a66e43c12a383aa65219ec873ce35"
The client MUST increment the CSeq header before resubmitting
the request.
A server MAY be configured not to generate nonces only if replay
attacks are not a concern.
The Response Value (chap-response-value) of the CHAP-Password is
computed per Section 4.1 of RFC 1994 [CHAP]. The 16-octet
Response Value of the CHAP-Password should be formatted as
32 hex digits and placed in the "chap-response-value" of
the Authorization request.
The chap-id should be placed in the (1-octet) Identifier field
of the Access-Request message to the RADIUS server. The chap-id
should also be placed in the (1-octet) CHAP Identifier field
of the CHAP-Password attribute of the Access-Request message
to the RADIUS server. (See sections 3, 5.3, [RAD])
The nonce-value SHOULD be placed in the Request Authenticator
of the Access-Request message to the RADIUS server.
(See section 3, [RAD])
Alternatively, the nonce-value MAY be placed in a CHAP-Challenge
attribute in the Access-Request message to the RADIUS server.
(See section 5.3, [RAD])
The chap-response-value should be placed in the 16-octet
String field of the CHAP-Password attribute in the Access-Request
message to the RADIUS server. (See section 5.3, [RAD])
Byerly/Williams draft-byerly-sip-radius-00.txt Page 8
Internet Draft SIP Authentication using CHAP-Password October 2000
7 Proxy-Authenticate and Proxy-Authorization
The CHAP-Password authentication scheme may also be used
for authenticating users to proxies.
8 Security Considerations
Security issues are the primary topic of this RFC.
The security issues for this document are the same as those
in the Security Considerations sections of RFC 1994 [CHAP]
and RFC 2617 [DIG].
9 Further Examples
Only the relevant headers have been included in the following
examples.
9.1 User Authentication using backend RADIUS server -
With Server Challenge.
[1] SIP Client to SIP proxy server:
INVITE sip:+19195551212@cisco.com SIP/2.0
From: sip:+19195551234@domain.com
To: sip:+19195551212@cisco.com
Call-ID: 12345600@cisco.com
CSeq: 1 INVITE
Proxy-Authorization: CHAP-Password
;username="byerly"
;algorithm="MD5"
;id=0
;nonce="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
;response="bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
Content-Type: application/sdp
NOTE: The Proxy-Authorization header sent in the first message
may have been cached from a previous exchange with the
SIP proxy. If the SIP client does not place a
Proxy-Authorization header in the INVITE, the RADIUS server will
(transitting through SIP proxy) challenge him with a
new nonce.
[2] SIP proxy server to RADIUS server:
Code = 1 (Access-Request)
ID = 0
Length = 71
Request Authenticator = {16 octet random number also used as
CHAP challenge
(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)}
Byerly/Williams draft-byerly-sip-radius-00.txt Page 9
Internet Draft SIP Authentication using CHAP-Password October 2000
Attributes:
User-Name = "byerly"
CHAP-Password = {1 octet CHAP ID (00) followed by 16 octet
CHAP response
(bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)}
NAS-IP-Address = 192.168.1.16
NAS-Port = 5
[3] RADIUS server to SIP proxy server:
Code = 11 (Access-Challenge}
ID = 0 (same as in Access-Request)
Length = 68
Attributes:
Reply-Message = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
State = {Magic Cookie to be returned along with user's
response; in this example 8 octets of data}
[4] SIP proxy server to client:
SIP/2.0 407 Proxy Authentication required
From: sip:+19195551234@domain.com
To: sip:+19195551212@cisco.com
Call-ID: 12345600@cisco.com
CSeq: 1 INVITE
Proxy-Authenticate: CHAP-Password
;username="byerly"
;algorithm="MD5"
;id=0
;nonce="cccccccccccccccccccccccccccccccc"
State: {Magic Cookie from Access-Challenge packet, unchanged}
(formatted as hex digits)
NOTE: In this instance, the RADIUS server chooses to re-challenge
the SIP client with a new nonce.
[5] SIP Client to SIP proxy server:
INVITE sip:+19195551212@cisco.com SIP/2.0
From: sip:+19195551234@domain.com
To: sip:+19195551212@cisco.com
Call-ID: 12345600@cisco.com
CSeq: 2 INVITE
Content-Type: application/sdp
Proxy-Authorization: CHAP-Password
;username="byerly"
;algorithm="MD5"
;id=0
;nonce="cccccccccccccccccccccccccccccccc"
;response="dddddddddddddddddddddddddddddddd"
State: {Magic Cookie from Access-Challenge packet, unchanged}
(formatted as hex digits)
Byerly/Williams draft-byerly-sip-radius-00.txt Page 10
Internet Draft SIP Authentication using CHAP-Password October 2000
[6] SIP proxy server to RADIUS server:
Code = 1 (Access-Request)
ID = 1 (Note that this changes)
Length = 71
Request Authenticator = {NEW 16 octet CHAP challenge
()}
Attributes:
User-Name = "byerly"
CHAP-Password = {1 octet CHAP ID followed by 16 octet
CHAP response
(dddddddddddddddddddddddddddddddd)}
NAS-IP-Address = 192.168.1.16
NAS-Port = 5
State = {Magic Cookie from Access-Challenge packet,
unchanged}
[7] RADIUS server to SIP proxy server:
Code = 2 (Access-Accept)
ID = 1 (same as in Access-Request)
Length = 30
[8] SIP proxy server to next hop UAS:
INVITE sip:+19195551212@cisco.com SIP/2.0
From: sip:+19195551234@domain.com
To: sip:+19195551212@cisco.com
Call-ID: 12345600@cisco.com
CSeq: 2 INVITE
Content-Type: application/sdp
9.2 User Authentication using backend RADIUS server -
Without Server Challenge.
[a] SIP Client to SIP proxy server:
INVITE sip:+19195551212@cisco.com SIP/2.0
From: sip:+19195551234@domain.com
To: sip:+19195551212@cisco.com
Call-ID: 12345601@cisco.com
CSeq: 3 INVITE
Proxy-Authorization: CHAP-Password
;username="byerly"
;algorithm="MD5"
;id=0
;nonce="eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
;response="ffffffffffffffffffffffffffffffff"
Content-Type: application/sdp
Byerly/Williams draft-byerly-sip-radius-00.txt Page 11
Internet Draft SIP Authentication using CHAP-Password October 2000
[b] SIP proxy server to RADIUS server:
Code = 1 (Access-Request)
ID = 0
Length = 71
Request Authenticator = {16 octet random number also used as
CHAP challenge
(eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee)}
Attributes:
User-Name = "byerly"
CHAP-Password = {1 octet CHAP ID (00) followed by 16 octet
CHAP response
(ffffffffffffffffffffffffffffffff)}
NAS-IP-Address = 192.168.1.16
NAS-Port = 5
[c] RADIUS server to SIP proxy server:
Code = 2 (Access-Accept)
ID = 1 (same as in Access-Request)
Length = 56
[d] SIP proxy server to next hop UAS:
INVITE sip:+19195551212@cisco.com SIP/2.0
From: sip:+19195551234@domain.com
To: sip:+19195551212@cisco.com
Call-ID: 12345601@cisco.com
CSeq: 3 INVITE
Content-Type: application/sdp
There are two cases when a SIP client could pre-send a
Proxy-Authorization that the RADIUS server might accept:
1) The RADIUS server originally generated the nonce
when challenging the SIP client on a previous call.
The SIP client is reusing the previously sucessful
Authorization for a new call.
2) The SIP client originally generated the nonce.
The parsed format of the nonce is known to both the SIP
client and the RADIUS server. The nonce contains a timestamp
which the RADIUS server can extract and use to limit the
replay window. Since a RADIUS server silently discards
invalid/unauthorized requests, this scheme is not subject
to the form of the man-in-the-middle attack where Mallory
sends a bogus request to the server and uses the response
to make the client believe she is a legitimate server.
To dos:
1) Fix the RADIUS Lengths to be correct
2) Calculate real MD5 hashes
Byerly/Williams draft-byerly-sip-radius-00.txt Page 12
Internet Draft SIP Authentication using CHAP-Password October 2000
Outstanding issues:
1) Do we/how do we support the RADIUS State: attribute?
What are the implications for collision with (DCS-)State:
object?
2) Do we reuse the RADIUS NAS-Port and NAS-Port-Type attributes to
allow the RADIUS server to have media port control over calls?
(eg. using UDP port numbers for RTP streams)
10 Acknowledgements
We would like to thank Roger Levesque, David Oran, Mike Thomas,
David Daiker, Shail Bhatnagar, and Denise Caballero-McCann for
discussions on the need for and improvements to this draft.
We would also like to thank Tyrone Floryanzia for his insights on
H.323 gateway/gatekeeper call authorization using RADIUS.
11 References
[SIP] M. Handley, H. Schulzrinne, E. Schooler, and J. Rosenberg, SIP:
Session Initiation Protocol", RFC 2543, March 1999.
[RAD] C. Rigney, A. Rubens, W. Simpson, and S. Willens, "Remote
Authentication Dial in User Service (RADIUS)," RFC 2138,
April 1997.
[DIG] Franks, J, et al. "HTTP Authentication: Basic and Digest Access
Authentication," RFC 2617, June 1999.
[CHAP] Simpson, W. "PPP Challenge Handshake Authentication Protocol
(CHAP)", RFC 1994, August 1996.
[PAP] Lloyd, B, W. Simpson. "PPP Authentication Protocols",
RFC 1334, October 1992.
[PPP] Simpson, W., Editor, "The Point-to-Point Protocol (PPP)", STD
51, RFC 1661, DayDreamer, July 1994.
[MD5] Rivest, R., and S. Dusse, "The MD5 Message-Digest Algorithm",
MIT Laboratory for Computer Science and RSA Data Security,
Inc., RFC 1321, April 1992.
[REQ] Bradner, S., "Key words for use in RFCs to Indicate Requirement
Levels," RFC-2119, March 1997.
Byerly/Williams draft-byerly-sip-radius-00.txt Page 13
Internet Draft SIP Authentication using CHAP-Password October 2000
Authors' Addresses
Bryan J. Byerly
Cisco Systems
7025 Kit Creek Road
P.O. Box 14987
Research Triangle Park, NC 27709
USA
Email: byerly@cisco.com
David Williams
Cisco Systems
7025 Kit Creek Road
P.O. Box 14987
Research Triangle Park, NC 27709
USA
Email: dwilli@cisco.com