Internet DRAFT - draft-smith-sipping-auth-examples
draft-smith-sipping-auth-examples
sipping
Internet Draft Paul D.Smith
Expires: November 2005 Data Connection Ltd
Ian Clarkson
Data Connection Ltd
June 2005
Digest Authentication Examples for Session Initiation Protocol (SIP)
draft-smith-sipping-auth-examples-01.txt
Status of this Memo
By submitting this Internet-Draft, each author represents that any
applicable patent or other IPR claims of which he or she is aware
have been or will be disclosed, and any of which he or she becomes
aware will be disclosed, in accordance with Section 6 of BCP 79.
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/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
This Internet-Draft will expire in November, 2005.
Copyright Notice
Copyright (C) The Internet Society (2005). All Rights Reserved.
Abstract
RFC3261 [2] recommends that SIP requests be authenticated using HTTP
Digest authentication as defined in RFC2617 [3], and many vendors
have successfully added this function to their products. However
implementation bugs are still being observed both at interoperability
events and in the field.
This document provides worked examples of Digest authentication usage
in SIP. It is intended to help new SIP implementers, and to provide
a common set of test authentication examples against which an
implementation may be checked.
Smith & Clarkson Expires - November 2005 [Page 1]
Digest Authentication Examples for SIP June 2005
Table of Contents
1. Introduction...................................................3
2. Common Mistakes................................................3
2.1 Quotation marks in Quality-of-protection (QOP) Description..3
2.2 Absent QOP and qop=auth result in different digests.........5
2.3 Invalid validation of a nonce...............................6
3. Worked Examples................................................7
3.1 Algorithm and QOP not specified.............................8
3.1.1 Challenge...............................................8
3.1.2 Authenticated Request...................................8
3.1.3 Digest Generation Process...............................9
3.2 auth and algorithm unspecified (MD5 assumed)...............11
3.2.1 Challenge..............................................11
3.2.2 Authenticated Request..................................11
3.2.3 Digest Generation Process..............................12
3.3 auth and MD5...............................................14
3.3.1 Challenge..............................................14
3.3.2 Authenticated Request..................................14
3.3.3 Digest Generation Process..............................15
3.4 auth and MD5-Sess..........................................17
3.4.1 Challenge..............................................17
3.4.2 Authenticated Request..................................17
3.4.3 Digest Generation Process..............................18
3.5 auth-int and MD5...........................................20
3.5.1 Challenge..............................................20
3.5.2 Authenticated Request..................................20
3.5.3 Digest Generation Process..............................21
3.6 auth-int and MD5-Sess......................................24
3.6.1 Challenge..............................................24
3.6.2 Authenticated Request..................................24
3.6.3 Digest Generation Process..............................25
4. Changes.......................................................27
4.1 Changes since draft-smith-sip-auth-digest-00...............27
4.2 Changes since draft-smith-sipping-auth-digest-00...........27
Security Considerations..........................................28
IANA Considerations..............................................28
Normative References.............................................28
Informative References...........................................28
Acknowledgments..................................................28
Authors' Addresses...............................................29
Conventions used in this document
The key words "MUST", "MUST NOT" and "SHOULD NOT" in this document
should be interpreted as described in RFC2119 [4].
This document uses the <hex> representations introduced in
draft-ietf-sipping-torture-tests [5] to specify the input and output
from cryptographic operations.
Smith & Clarkson Expires - November 2005 [Page 2]
Digest Authentication Examples for SIP June 2005
1. Introduction
This document performs two tasks. Firstly, it describes three common
problems encountered with Digest authentication usage in SIP
implementations. Secondly, it provides SIP implementers with a set
of Digest authentication examples, complete with checkpoints, for the
various stages of the Digest calculations. These examples can be
used to test and prove implementations.
This document does not comment on the benefits or deficiencies of
HTTP Digest authentication compared to other possible authentication
schemes.
Similarly, HTTP Basic authentication is deprecated from SIP by
RFC3261 [1] so is not covered by this document.
It is assumed that the reader is familiar with RFC3261 [1] and
RFC2617 [3].
2. Common Mistakes
2.1 Quotation marks in Quality-of-protection (QOP) Description
In typical SIP usage, the Quality-of-Protection (QOP) indicates
whether the authentication digest includes a hash of the body of the
SIP message or just the name and password of the caller.
A challenging UAS may indicate which of these QOP options is
supported by returning a list of permitted QOPs through the
qop-options field of a challenge. The requesting UAC then chooses
one of these QOPs and indicates which it has chosen through the
message-qop field of the credentials. However, since the qop-options
in a challenge consists of a comma separated list, the qop-value(s)
associated with the qop-options MUST be surrounded by double-quotes.
The message-qop in the resulting credentials consists of a single
qop-value and MUST NOT be surrounded by double-quotes.
Examples of "double-quotes in credentials" and "missing double-quotes
in challenges", both of which are invalid, have been observed.
Smith & Clarkson Expires - November 2005 [Page 3]
Digest Authentication Examples for SIP June 2005
The ABNF in RFC2617 [3] that specifies this syntax is reproduced
here. The challenge contains a qop-options, and the qop-values are
surrounded by double-quotes. Note that this is true even if only a
single qop-value is specified.
challenge = "Digest" digest-challenge
digest-challenge = 1#( realm | [ domain ] | nonce |
[ opaque ] |[ stale ] | [ algorithm ] |
[ qop-options ] | [auth-param] )
qop-options = "qop" "=" <"> 1#qop-value <">
qop-value = "auth" | "auth-int" | token
The credentials contain a single message-qop value which is not
surrounded by double quotes.
credentials = "Digest" digest-response
digest-response = 1#( username | realm | nonce | digest-uri |
response | [ algorithm ] | [cnonce] |
[opaque] | [message-qop] |
[nonce-count] | [auth-param] )
message-qop = "qop" "=" qop-value
The following examples, taken from RFC3261 [1], display this subtle
point. The WWW-Authenticate header is an example of a challenge,
whilst the Authorization header is an example of credentials.
WWW-Authenticate: Digest
realm="biloxi.com",
qop="auth,auth-int",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
Authorization: Digest username="bob",
realm="biloxi.com",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
uri="sip:bob@biloxi.com",
qop=auth,
nc=00000001,
cnonce="0a4f113b",
response="6629fae49393a05397450978507c4ef1",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
Smith & Clarkson Expires - November 2005 [Page 4]
Digest Authentication Examples for SIP June 2005
2.2 Absent QOP and qop=auth result in different digests
Another common mistake arises from the following part of RFC2617 [3].
If the "qop" value is "auth" or "auth-int":
request-digest = <"> < KD ( H(A1), unq(nonce-value)
":" nc-value
":" unq(cnonce-value)
":" unq(qop-value)
":" H(A2) ) >
<">
If the "qop" directive is not present (this construction is for
compatibility with RFC 2069):
request-digest =
<"> < KD ( H(A1), unq(nonce-value) ":" H(A2) ) >
<">
Although the values for A1 and A2 are the same regardless of whether
the "qop" directive is unspecified or auth, the Digest is different.
Smith & Clarkson Expires - November 2005 [Page 5]
Digest Authentication Examples for SIP June 2005
2.3 Invalid validation of a nonce
It has been observed that some implementations create, and then
attempt to validate, nonces based on the contents of the request that
has been challenged. This causes implementation problems where the
partner does not maintain certain SIP header fields between the
original and later, authenticated, request.
RFC 3261 does not specify a mechanism for creating a nonce for use in
an authentication challenge. An implementation is free to generate a
nonce in whichever way it sees fit and may choose to do so such that
it may be validated and stale nonces detected to avoid replay
attacks.
RFC3261 [1] section 8.1.3.5 describes how to act on receipt of a 4XX
class response, including 401 and 407 challenges, and states the
following:
In all of the above cases, the request is retried by creating a
new request with the appropriate modifications. This new request
constitutes a new transaction and SHOULD have the same value of
the Call-ID, To, and From of the previous request, but the CSeq
should contain a new sequence number that is one higher than the
previous.
This has been interpreted by some implementations to mean that an
authenticated request can be relied upon to always contain the same
Call-ID, To and From as the previous request. However this
assumption is wrong in the case of dialog creating requests.
If an initial dialog creating request fails, the dialog has ended.
Reusing the same Call-ID and From tag appears to indicate that the
dialog is expected to still exist. It does not and thus reuse of the
same Call-ID and From tag should not be assumed.
Nonces SHOULD NOT be generated based on information such as the Call-
ID and tags unless a dialog has successfully been established and the
request is therefore in-dialog.
Smith & Clarkson Expires - November 2005 [Page 6]
Digest Authentication Examples for SIP June 2005
3. Worked Examples
This chapter gives worked examples of challenges and the resulting
authorized requests using the various combinations of QOP and
algorithm options defined in RFC2617 [3].
For each worked example, each phase of the generation of the request-
dialog, the value assigned to the "response" parameter of the
Authorization header, is presented. These examples, and the
checkpoint values, may be used to test and prove new SIP
implementations using Digest authentication.
In order to remove any doubt regarding possible whitespace, the first
example shows key values both using plain text and also the <hex>
representation [5].
For each example, it may be assumed that a similar, but unauthorized,
INVITE has been issued previously which the UAS has challenged.
Many SIP header fields that are not pertinent to the explanation of
the digest calculation have been omitted for clarity.
Finally, it should be noted that in all cases, Bob's password is:
zanzibar
or
<hex>7a616e7a69626172</hex>
Smith & Clarkson Expires - November 2005 [Page 7]
Digest Authentication Examples for SIP June 2005
3.1 Algorithm and QOP not specified
3.1.1 Challenge
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP s19.biloxi.com;branch=z9hG4bKfjsduen
From: Bob <sip:bob@biloxi.com>;tag=9483056782
To: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 314159 INVITE
WWW-Authenticate: Digest
realm="biloxi.com",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
Content-Length: 0
3.1.2 Authenticated Request
INVITE sip:alice@atlanta.com.com SIP/2.0
Via: SIP/2.0/UDP s19.biloxi.com;branch=z9hG4bKnashds8
Max-Forwards: 70
From: Bob <sip:bob@biloxi.com>
To: Alice <sip:alice@atlanta.com>;tag=8493745023
Call-ID: ab734d9e6b793b
CSeq: 83952 INVITE
Contact: <sip:bob@s19.biloxi.com>
Authorization: Digest username="bob",
realm="biloxi.com",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
uri="sip:bob@biloxi.com",
nc=00000001,
cnonce="0a4f113b",
response="bf57e4e0d0bffc0fbaedce64d59add5e",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
Content-Type: application/sdp
Content-Length: 142
(Alice's SDP not shown)
Smith & Clarkson Expires - November 2005 [Page 8]
Digest Authentication Examples for SIP June 2005
3.1.3 Digest Generation Process
The challenge contains no QOP information. In order to be compliant
with RFC2617 [3], implementations SHOULD provide a qop-options field.
This field is only optional in RFC2617 [3] for back-compatibility
with RFC2069 [6].
However implementations may choose to handle this challenge in order
to provide maximum chance of interoperating against other
implementations.
Given the absence of both algorithm and QOP, RFC2617 [3] defines A1
as:
If the "algorithm" directive's value is "MD5" or is unspecified,
then
A1 is:
A1 = unq(username-value) ":" unq(realm-value) ":" passwd
where
passwd = < user's password >
This value of A1 is:
bob:biloxi.com:zanzibar
or
<hex>626f623a62696c6f78692e636f6d3a7a616e7a69626172</hex>
Using the definition of H(A1) given in RFC2617 [3], H(A1) has the
following value:
12af60467a33e8518da5c68bbff12b11
From RFC2617 [3], A2 is defined as:
If the "qop" directive's value is "auth" or is unspecified, then
A2 is:
A2 = Method ":" digest-uri-value
The value of A2 is
INVITE:sip:bob@biloxi.com
Smith & Clarkson Expires - November 2005 [Page 9]
Digest Authentication Examples for SIP June 2005
or
<hex>494e564954453a7369703a626f624062696c6f78692e636f6d</hex>
H(A2) then has value:
13a14a3eb5e2c24732a1a04fff543e92
Finally, the Digest is given by the following:
If the "qop" directive is not present (this construction is for
compatibility with RFC 2069):
request-digest =
<"> < KD ( H(A1), unq(nonce-value) ":" H(A2) ) >
<">
H(A1) and H(A2) have been calculated above. The nonce-value is
provided by the server in the challenge.
From the definition of KD given in RFC2617 [3] it follows that the
request-digest has value
<"> H(12af60467a33e8518da5c68bbff12b11:
dcd98b7102dd2f0e8b11d0f600bfb0c093:
13a14a3eb5e2c24732a1a04fff543e92) <">
or
<"> H(<hex>313261663630343637613333653835313864613563363862626666
31326231313a646364393862373130326464326630653862313164
306636303062666230633039333a31336131346133656235653263
32343733326131613034666666353433653932</hex>) <">
This results in a final value of:
Digest = "bf57e4e0d0bffc0fbaedce64d59add5e"
Smith & Clarkson Expires - November 2005 [Page 10]
Digest Authentication Examples for SIP June 2005
3.2 auth and algorithm unspecified (MD5 assumed)
3.2.1 Challenge
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP s19.biloxi.com;branch=z9hG4bKfjsduen
From: Bob <sip:bob@biloxi.com>;tag=9483056782
To: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 314159 INVITE
WWW-Authenticate: Digest
realm="biloxi.com",
qop="auth,auth-int",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
Content-Length: 0
3.2.2 Authenticated Request
INVITE sip:alice@atlanta.com.com SIP/2.0
Via: SIP/2.0/UDP s19.biloxi.com;branch=z9hG4bKnashds8
Max-Forwards: 70
From: Bob <sip:bob@biloxi.com>
To: Alice <sip:alice@atlanta.com>;tag=8493745023
Call-ID: ab734d9e6b793b
CSeq: 83952 INVITE
Contact: <sip:bob@s19.biloxi.com>
Authorization: Digest username="bob",
realm="biloxi.com",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
uri="sip:bob@biloxi.com",
qop=auth,
nc=00000001,
cnonce="0a4f113b",
response="89eb0059246c02b2f6ee02c7961d5ea3",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
Content-Type: application/sdp
Content-Length: 142
(Alice's SDP not shown)
Smith & Clarkson Expires - November 2005 [Page 11]
Digest Authentication Examples for SIP June 2005
3.2.3 Digest Generation Process
Firstly, it should be noted that the challenge contained two qop-
options, "auth" and "auth-int", and the UAC chose to use a message-
qop of "auth". Secondly, no algorithm is specified in the challenge
so the default value of MD5 is used.
Given these values of algorithm and QOP, RFC2617 [3] defines A1 as:
If the "algorithm" directive's value is "MD5" or is unspecified,
then
A1 is:
A1 = unq(username-value) ":" unq(realm-value) ":" passwd
where
passwd = < user's password >
This value of A1 is:
bob:biloxi.com:zanzibar
Using the definition of H(A1) given in RFC2617 [3], H(A1) has the
following value:
12af60467a33e8518da5c68bbff12b11
From RFC2617 [3], A2 is defined as follows:
If the "qop" directive's value is "auth" or is unspecified, then
A2 is:
A2 = Method ":" digest-uri-value
Thus the value of A2 is
INVITE:sip:bob@biloxi.com
H(A2) then has value:
13a14a3eb5e2c24732a1a04fff543e92
Smith & Clarkson Expires - November 2005 [Page 12]
Digest Authentication Examples for SIP June 2005
Finally, the Digest is given by the following:
If the "qop" value is "auth" or "auth-int":
request-digest = <"> < KD ( H(A1), unq(nonce-value)
":" nc-value
":" unq(cnonce-value)
":" unq(qop-value)
":" H(A2)
) <">
H(A1) and H(A2) have been calculated above. The nonce-value is
provided by the server in the challenge. The nonce-count (nc-value)
and cnonce-value are generated by the client as per RFC2617 [3] and
the qop-value is chosen from the qop-options proposed by the server.
From the definition of KD given in RFC2617 [3] it follows that the
request-digest has value
<"> H(12af60467a33e8518da5c68bbff12b11:
dcd98b7102dd2f0e8b11d0f600bfb0c093:
00000001:
0a4f113b:
auth:
13a14a3eb5e2c24732a1a04fff543e92) <">
This results in a final value of:
Digest = "89eb0059246c02b2f6ee02c7961d5ea3"
Smith & Clarkson Expires - November 2005 [Page 13]
Digest Authentication Examples for SIP June 2005
3.3 auth and MD5
3.3.1 Challenge
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP s19.biloxi.com;branch=z9hG4bKfjsduen
From: Bob <sip:bob@biloxi.com>;tag=9483056782
To: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 314159 INVITE
WWW-Authenticate: Digest
realm="biloxi.com",
qop="auth,auth-int",
algorithm=MD5,
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
Content-Length: 0
3.3.2 Authenticated Request
INVITE sip:alice@atlanta.com.com SIP/2.0
Via: SIP/2.0/UDP s19.biloxi.com;branch=z9hG4bKnashds8
Max-Forwards: 70
From: Bob <sip:bob@biloxi.com>
To: Alice <sip:alice@atlanta.com>;tag=8493745023
Call-ID: ab734d9e6b793b
CSeq: 83952 INVITE
Contact: <sip:bob@s19.biloxi.com>
Authorization: Digest username="bob",
realm="biloxi.com",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
uri="sip:bob@biloxi.com",
qop=auth,
algorithm=MD5,
nc=00000001,
cnonce="0a4f113b",
response="89eb0059246c02b2f6ee02c7961d5ea3",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
Content-Type: application/sdp
Content-Length: 142
(Alice's SDP not shown)
Smith & Clarkson Expires - November 2005 [Page 14]
Digest Authentication Examples for SIP June 2005
3.3.3 Digest Generation Process
No choice is allowed in the selection of an algorithm. The challenge
indicates one, and only one algorithm and the challenged party must
accept this choice or fail to present an authenticated request.
The presence of MD5 as an algorithm is exactly equivalent to no
algorithm being specified.
Given these values of algorithm and QOP, RFC2617 [3] defines A1 as:
If the "algorithm" directive's value is "MD5" or is unspecified,
then
A1 is:
A1 = unq(username-value) ":" unq(realm-value) ":" passwd
where
passwd = < user's password >
This value of A1 is:
bob:biloxi.com:zanzibar
Using the definition of H(A1) given in RFC2617 [3], H(A1) has the
following value:
12af60467a33e8518da5c68bbff12b11
From RFC2617 [3], A2 is defined as follows:
If the "qop" directive's value is "auth" or is unspecified, then
A2 is:
A2 = Method ":" digest-uri-value
Thus the value of A2 is
INVITE:sip:bob@biloxi.com
H(A2) then has value:
13a14a3eb5e2c24732a1a04fff543e92
Smith & Clarkson Expires - November 2005 [Page 15]
Digest Authentication Examples for SIP June 2005
Finally, the Digest is given by the following:
If the "qop" value is "auth" or "auth-int":
request-digest = <"> < KD ( H(A1), unq(nonce-value)
":" nc-value
":" unq(cnonce-value)
":" unq(qop-value)
":" H(A2)
) <">
H(A1) and H(A2) have been calculated above. The nonce-value is
provided by the server in the challenge. The nonce-count (nc-value)
and cnonce-value are generated by the client as per RFC2617 [3] and
the qop-value is chosen from the qop-options proposed by the server.
From the definition of KD given in RFC2617 [3] it follows that the
request-digest has value
<"> H(12af60467a33e8518da5c68bbff12b11:
dcd98b7102dd2f0e8b11d0f600bfb0c093:
00000001:
0a4f113b:
auth:
13a14a3eb5e2c24732a1a04fff543e92) <">
This results in a final value of:
Digest = "89eb0059246c02b2f6ee02c7961d5ea3"
Smith & Clarkson Expires - November 2005 [Page 16]
Digest Authentication Examples for SIP June 2005
3.4 auth and MD5-Sess
3.4.1 Challenge
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP s19.biloxi.com;branch=z9hG4bKfjsduen
From: Bob <sip:bob@biloxi.com>;tag=9483056782
To: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 314159 INVITE
WWW-Authenticate: Digest
realm="biloxi.com",
qop="auth,auth-int",
algorithm=MD5-sess,
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
Content-Length: 0
3.4.2 Authenticated Request
INVITE sip:alice@atlanta.com.com SIP/2.0
Via: SIP/2.0/UDP s19.biloxi.com;branch=z9hG4bKnashds8
Max-Forwards: 70
From: Bob <sip:bob@biloxi.com>
To: Alice <sip:alice@atlanta.com>;tag=8493745023
Call-ID: ab734d9e6b793b
CSeq: 83952 INVITE
Contact: <sip:bob@s19.biloxi.com>
Authorization: Digest username="bob",
realm="biloxi.com",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
uri="sip:bob@biloxi.com",
qop=auth,
algorithm=MD5-sess,
nc=00000001,
cnonce="0a4f113b",
response="e4e4ea61d186d07a92c9e1f6919902e9",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
Content-Type: application/sdp
Content-Length: 142
(Alice's SDP not shown)
Smith & Clarkson Expires - November 2005 [Page 17]
Digest Authentication Examples for SIP June 2005
3.4.3 Digest Generation Process
Algorithm MD5-sess can be used to implement a SIP server that never
knows the actual password for a given user. The SIP server is
required to request the password, through an undefined mechanism,
from a 3rd party authentication server, which returns a digest of the
password which can then be used to authenticate the user.
Given these values of algorithm and QOP, RFC2617 [3] defines A1 as:
If the "algorithm" directive's value is "MD5-sess" then
A1 = H( unq(username-value) ":" unq(realm-value)
":" passwd )
":" unq(nonce-value) ":" unq(cnonce-value)
where
passwd = < user's password >
Now the MD5 hash of username-value, realm-value and passwd would
normally be returned by the authentication server. This has the
following value.
H(bob:biloxi.com:zanzibar)
or
12af60467a33e8518da5c68bbff12b11
So the value of A1 is:
12af60467a33e8518da5c68bbff12b11:
dcd98b7102dd2f0e8b11d0f600bfb0c093:
0a4f113b
Using the definition of H(A1) given in RFC2617 [3], H(A1) has the
following value:
4f36886771c77832be5c5a8de5a7ec82
From RFC2617 [3], A2 is defined as follows:
If the "qop" directive's value is "auth" or is unspecified, then
A2 is:
A2 = Method ":" digest-uri-value
Smith & Clarkson Expires - November 2005 [Page 18]
Digest Authentication Examples for SIP June 2005
Thus the value of A2 is
INVITE:sip:bob@biloxi.com
H(A2) then has value:
13a14a3eb5e2c24732a1a04fff543e92
Finally, the Digest is given by the following:
If the "qop" value is "auth" or "auth-int":
request-digest = <"> < KD ( H(A1), unq(nonce-value)
":" nc-value
":" unq(cnonce-value)
":" unq(qop-value)
":" H(A2)
) <">
H(A1) and H(A2) have been calculated above. The nonce-value is
provided by the server in the challenge. The nonce-count (nc-value)
and cnonce-value are generated by the client as per RFC2617 [3] and
the qop-value is chosen from the qop-options proposed by the server.
From the definition of KD given in RFC2617 [3] it follows that the
request-digest has value
<"> H(4f36886771c77832be5c5a8de5a7ec82:
dcd98b7102dd2f0e8b11d0f600bfb0c093:
00000001:
0a4f113b:
auth:
13a14a3eb5e2c24732a1a04fff543e92) <">
This results in a final value of:
Digest = "e4e4ea61d186d07a92c9e1f6919902e9"
Smith & Clarkson Expires - November 2005 [Page 19]
Digest Authentication Examples for SIP June 2005
3.5 auth-int and MD5
The use of qop value auth-int indicates that integrity protection is
required. This means that the calculated digest includes a hash of
the body of the authenticated message, which allows a change to the
body of the message to be detected.
This may lead to possible problems traversing Network Address
Translators (NATs), Back-to-back UAs (B2BUAs) and Application Level
Gateways (ALGs), any of which may modify the body in order to permit
the SIP request to traverse some form of network boundary. In this
case, the NAT/B2BUA/ALG must also act as an endpoint and police and
possibly modify the authentication header.
3.5.1 Challenge
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP s19.biloxi.com;branch=z9hG4bKfjsduen
From: Bob <sip:bob@biloxi.com>;tag=9483056782
To: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 314159 INVITE
WWW-Authenticate: Digest
realm="biloxi.com",
qop="auth,auth-int",
algorithm=MD5,
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
Content-Length: 0
3.5.2 Authenticated Request
INVITE sip:alice@atlanta.com.com SIP/2.0
Via: SIP/2.0/UDP s19.biloxi.com;branch=z9hG4bKnashds8
Max-Forwards: 70
From: Bob <sip:bob@biloxi.com>
To: Alice <sip:alice@atlanta.com>;tag=8493745023
Call-ID: ab734d9e6b793b
CSeq: 83952 INVITE
Contact: <sip:bob@s19.biloxi.com>
Authorization: Digest username="bob",
realm="biloxi.com",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
uri="sip:bob@biloxi.com",
qop=auth-int,
algorithm=MD5,
nc=00000001,
cnonce="0a4f113b",
response="bdbeebb2da6adb6bca02599c2239e192",
Smith & Clarkson Expires - November 2005 [Page 20]
Digest Authentication Examples for SIP June 2005
opaque="5ccc069c403ebaf9f0171e9517f40e41"
Content-Type: application/sdp
Content-Length: 142
v=0
o=bob 2890844526 2890844526 IN IP4 media.biloxi.com
s=-
c=IN IP4 media.biloxi.com
t=0 0
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000
m=video 51372 RTP/AVP 31
a=rtpmap:31 H261/90000
m=video 53000 RTP/AVP 32
a=rtpmap:32 MPV/90000
3.5.3 Digest Generation Process
No choice is allowed in the selection of an algorithm. The challenge
indicates one, and only one algorithm (and thus no double-quotes are
present) and the challenged party must accept this choice or fail to
present an authenticated request.
The presence of MD5 as an algorithm is exactly equivalent to no
algorithm being specified.
Given these values of algorithm and QOP, RFC2617 [3] defines A1 as:
If the "algorithm" directive's value is "MD5" or is unspecified,
then
A1 is:
A1 = unq(username-value) ":" unq(realm-value) ":" passwd
where
passwd = < user's password >
This value of A1 is:
bob:biloxi.com:zanzibar
Using the definition of H(A1) given in RFC2617 [3], H(A1) has the
following value:
12af60467a33e8518da5c68bbff12b11
From RFC2617 [3], A2 is defined as follows:
Smith & Clarkson Expires - November 2005 [Page 21]
Digest Authentication Examples for SIP June 2005
If the "qop" value is "auth-int", then A2 is:
A2 = Method ":" digest-uri-value ":" H(entity-body)
Thus the value of A2 is
INVITE:sip:bob@biloxi.com:H(entity-body)
entity-body consists of every byte comprising the body after the
blank line that separates the SIP headers from the SIP body, up to
the limit imposed by Content-Length or the end of the UDP datagram if
no Content-Length field is present. Note that white-space is
relevant in this case. Be careful of the presence, or absence,
carriage return an/or linefeeds at the end of the data!
Thus H(entity-body) is given by
H(v=0
o=bob 2890844526 2890844526 IN IP4 media.biloxi.com
s=-
c=IN IP4 media.biloxi.com
t=0 0
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000
m=video 51372 RTP/AVP 31
a=rtpmap:31 H261/90000
m=video 53000 RTP/AVP 32
a=rtpmap:32 MPV/90000
)
or
H(<hex>763D300D0A6F3D626F622032383930383434353236203238393038343435
323620494E20495034206D656469612E62696C6F78692E636F6D0D0A733D
2D0D0A633D494E20495034206D656469612E62696C6F78692E636F6D0D0A
743D3020300D0A6D3D617564696F203439313730205254502F4156502030
0D0A613D7274706D61703A302050434D552F383030300D0A6D3D76696465
6F203531333732205254502F4156502033310D0A613D7274706D61703A33
3120483236312F39303030300D0A6D3D766964656F203533303030205254
502F4156502033320D0A613D7274706D61703A3332204D50562F39303030
300D0A</hex>)
H(entity-body) has the value
c1ed018b8ec4a3b170c0921f5b564e48
H(A2) has the value:
Smith & Clarkson Expires - November 2005 [Page 22]
Digest Authentication Examples for SIP June 2005
3e8ec46a56447dbb073e1171b1be0683
Finally, the Digest is given by the following:
If the "qop" value is "auth" or "auth-int":
request-digest = <"> < KD ( H(A1), unq(nonce-value)
":" nc-value
":" unq(cnonce-value)
":" unq(qop-value)
":" H(A2)
) > <">
H(A1) and H(A2) have been calculated above. The nonce-value is
provided by the server in the challenge. The nonce-count (nc-value)
and cnonce-value are generated by the client as per RFC2617 [3] and
the qop-value is chosen from the qop-options proposed by the server.
From the definition of KD given in RFC2617 [3] it follows that the
request-digest has value
<"> H(12af60467a33e8518da5c68bbff12b11:
dcd98b7102dd2f0e8b11d0f600bfb0c093:
00000001:
0a4f113b:
auth-int:
3e8ec46a56447dbb073e1171b1be0683) <">
This results in a final value of:
Digest = "bdbeebb2da6adb6bca02599c2239e192"
Smith & Clarkson Expires - November 2005 [Page 23]
Digest Authentication Examples for SIP June 2005
3.6 auth-int and MD5-Sess
3.6.1 Challenge
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP s19.biloxi.com;branch=z9hG4bKfjsduen
From: Bob <sip:bob@biloxi.com>;tag=9483056782
To: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 314159 INVITE
WWW-Authenticate: Digest
realm="biloxi.com",
qop="auth,auth-int",
algorithm=MD5-sess,
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
Content-Length: 0
3.6.2 Authenticated Request
INVITE sip:alice@atlanta.com.com SIP/2.0
Via: SIP/2.0/UDP s19.biloxi.com;branch=z9hG4bKnashds8
Max-Forwards: 70
From: Bob <sip:bob@biloxi.com>
To: Alice <sip:alice@atlanta.com>;tag=8493745023
Call-ID: ab734d9e6b793b
CSeq: 83952 INVITE
Contact: <sip:bob@s19.biloxi.com>
Authorization: Digest username="bob",
realm="biloxi.com",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
uri="sip:bob@biloxi.com",
qop=auth-int,
algorithm=MD5-sess,
nc=00000001,
cnonce="0a4f113b",
response="91984da2d8663716e91554859c22ca70",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
Content-Type: application/sdp
Content-Length: 142
v=0
o=bob 2890844526 2890844526 IN IP4 media.biloxi.com
s=-
c=IN IP4 media.biloxi.com
t=0 0
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000
m=video 51372 RTP/AVP 31
Smith & Clarkson Expires - November 2005 [Page 24]
Digest Authentication Examples for SIP June 2005
a=rtpmap:31 H261/90000
m=video 53000 RTP/AVP 32
a=rtpmap:32 MPV/90000
3.6.3 Digest Generation Process
Note that no choice is allowed in the selection of an algorithm. The
challenge indicates one, and only one algorithm (and thus no double-
quotes are present) and the challenged party must accept this choice
it fail to present an authenticated request.
Also note that the presence of MD5 as an algorithm is exactly
equivalent to no algorithm being specified.
Given these values of algorithm and QOP, RFC2617 [3] defines A1 as:
If the "algorithm" directive's value is "MD5-sess" then
A1 = H( unq(username-value) ":" unq(realm-value)
":" passwd )
":" unq(nonce-value) ":" unq(cnonce-value)
where
passwd = < user's password >
Now the MD5 hash of username-value, realm-value and passwd would
normally be returned by the authentication server. This has the
following value.
H(bob:biloxi.com:zanzibar)
or
12af60467a33e8518da5c68bbff12b11
So the value of A1 is:
12af60467a33e8518da5c68bbff12b11:
dcd98b7102dd2f0e8b11d0f600bfb0c093:
0a4f113b
Using the definition of H(A1) given in RFC2617 [3], H(A1) has the
following value:
4f36886771c77832be5c5a8de5a7ec82
From RFC2617 [3], A2 is defined as follows:
Smith & Clarkson Expires - November 2005 [Page 25]
Digest Authentication Examples for SIP June 2005
If the "qop" value is "auth-int", then A2 is:
A2 = Method ":" digest-uri-value ":" H(entity-body)
Thus the value of A2 is
INVITE:sip:bob@biloxi.com:H(entity-body)
Thus H(entity-body) is given by
H(v=0
o=bob 2890844526 2890844526 IN IP4 media.biloxi.com
s=-
c=IN IP4 media.biloxi.com
t=0 0
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000
m=video 51372 RTP/AVP 31
a=rtpmap:31 H261/90000
m=video 53000 RTP/AVP 32
a=rtpmap:32 MPV/90000
)
H(entity-body) has the value
c1ed018b8ec4a3b170c0921f5b564e48
Finally, the Digest is given by the following:
If the "qop" value is "auth" or "auth-int":
request-digest = <"> < KD ( H(A1), unq(nonce-value)
":" nc-value
":" unq(cnonce-value)
":" unq(qop-value)
":" H(A2)
) <">
H(A1) and H(A2) have been calculated above. The nonce-value is
provided by the server in the challenge. The nonce-count (nc-value)
and cnonce-value are generated by the client as per RFC2617 [3] and
the qop-value is chosen from the qop-options proposed by the server.
Smith & Clarkson Expires - November 2005 [Page 26]
Digest Authentication Examples for SIP June 2005
From the definition of KD given in RFC2617 [3] it follows that the
request-digest has value
<"> H(4f36886771c77832be5c5a8de5a7ec82:
dcd98b7102dd2f0e8b11d0f600bfb0c093:
00000001:
0a4f113b:
auth-int:
3e8ec46a56447dbb073e1171b1be0683) <">
This results in a final value of:
Digest = "91984da2d8663716e91554859c22ca70"
4. Changes
*** [Note to RFC editor. Please remove this entire section when this
draft is published as an RFC.] ***
4.1 Changes since draft-smith-sip-auth-digest-00
Moved to Sipping WG and renamed draft-smith-sipping-auth-digest-00.
Corrections to SDP subject field and resultant digest values.
Updated boiler place in accordance with RFC 3667 and RFC 3668.
4.2 Changes since draft-smith-sipping-auth-digest-00
Corrected calculated digests for sections 3.1 and 3.2.
Updated boiler place in accordance with RFC 3978 and RFC 3979.
Smith & Clarkson Expires - November 2005 [Page 27]
Digest Authentication Examples for SIP June 2005
Security Considerations
This document introduces no new protocol elements and therefore has
no effect on the security of SIP.
IANA Considerations
This document has no actions for IANA.
Normative References
1 Bradner, S., "The Internet Standards Process -- Revision 3", BCP
9, RFC 2026, October 1996.
2 Rosenberg, J., et al., "SIP: Session Initiation Protocol", RFC
3261, June 2002
3 Franks, J., et al., "HTTP Authentication: Basic and Digest Access
Authentication", RFC 2617, June 1999
4 Bradner, S., "Key words for use in RFCs to Indicate Requirement
Levels", BCP 14, RFC 2119, March 1997
5 Sparks, R., et al., "Session Initiation Protocol Torture Test
Messages", Internet Draft, October 2003, Work in progress.
6 Franks, J., et al., "Extension to HTTP : Digest Access
Authentication", RFC 2069, January 1997
Informative References
None.
Acknowledgments
Paul and Ian would like to thank their colleagues at Data Connection
for their input during the production of this document, and WG
members for useful feedback.
Smith & Clarkson Expires - November 2005 [Page 28]
Digest Authentication Examples for SIP June 2005
Authors' Addresses
Paul D.Smith
Data Connection Ltd
100 Church Street
Enfield
Middlesex
EN2 6BQ
United Kingdom
Email: paul.d.smith@dataconnection.com
Ian Clarkson
Data Connection Ltd
100 Church Street
Enfield
Middlesex
EN2 6BQ
United Kingdom
Email: ian.clarkson@dataconnection.com
Disclaimer of validity
The IETF takes no position regarding the validity or scope of any
Intellectual Property Rights or other rights that might be claimed to
pertain to the implementation or use of the technology described in
this document or the extent to which any license under such rights
might or might not be available; nor does it represent that it has
made any independent effort to identify any such rights. Information
on the procedures with respect to rights in RFC documents can be
found in BCP 78 and BCP 79.
Copies of IPR disclosures made to the IETF Secretariat and any
assurances of licenses to be made available, or the result of an
attempt made to obtain a general license or permission for the use of
such proprietary rights by implementers or users of this
specification can be obtained from the IETF on-line IPR repository at
http://www.ietf.org/ipr.
The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary
rights that may cover technology that may be required to implement
this standard. Please address the information to the IETF at
ietf-ipr@ietf.org.
Smith & Clarkson Expires - November 2005 [Page 29]
Digest Authentication Examples for SIP June 2005
Full Copyright Statement
Copyright (C) The Internet Society (2005). This document is
subject to the rights, licenses and restrictions contained in BCP
78, and except as set forth therein, the authors retain all their
rights.
This document and the information contained herein are provided
on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE
REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND
THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT
THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR
ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A
PARTICULAR PURPOSE.
Smith & Clarkson Expires - November 2005 [Page 30]