rfc8760xml2.original.xml | rfc8760.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="iso-8859-1"?> | <?xml version='1.0' encoding='utf-8'?> | |||
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | ||||
<?rfc toc="yes"?> | ||||
<?rfc symrefs="yes"?> | ||||
<?rfc sortrefs="yes"?> | ||||
<?rfc compact="yes"?> | ||||
<?rfc comments="yes"?> | ||||
<?rfc inline="yes"?> | ||||
<?rfc subcompact="no"?> | ||||
<?rfc rfcedstyle="yes"?> | ||||
<?rfc-ext allow-markup-in-artwork="yes" ?> | ||||
<!DOCTYPE rfc [ | ||||
]> | ||||
<rfc ipr="pre5378Trust200902" | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
docName="draft-ietf-sipcore-digest-scheme-15" | ||||
category="std" | ||||
xml:lang="en" | ||||
updates="3261"> | ||||
<!-- ********************************** FRONT ********************************** | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="pre5378Trust200902" | |||
--> | docName="draft-ietf-sipcore-digest-scheme-15" category="std" | |||
xml:lang="en" updates="3261" tocInclude="true" symRefs="true" | ||||
sortRefs="true" version="3" number="8760" consensus="true" | ||||
submissionType="IETF"> | ||||
<!-- xml2rfc v2v3 conversion 2.38.1 --> | ||||
<!-- ********************************** FRONT ******************************** | ||||
** --> | ||||
<front> | <front> | |||
<title abbrev="SIP Digest Authentication"> | ||||
The Session Initiation Protocol (SIP) Digest Access Authentication Sche | ||||
me | ||||
</title> | ||||
<seriesInfo name="RFC" value="8760"/> | ||||
<author initials="R." surname="Shekh-Yusef" fullname="Rifaat Shekh-Yusef"> | ||||
<organization>Avaya</organization> | ||||
<address> | ||||
<postal> | ||||
<street>425 Legget Dr.</street> | ||||
<city>Ottawa</city> | ||||
<region>Ontario</region> | ||||
<country>Canada</country> | ||||
</postal> | ||||
<phone>+1-613-595-9106</phone> | ||||
<email>rifaat.ietf@gmail.com</email> | ||||
</address> | ||||
</author> | ||||
<date month="March" year="2020"/> | ||||
<area>RAI</area> | ||||
<workgroup>SIP Core</workgroup> | ||||
<keyword>Digest Auth</keyword> | ||||
<abstract> | ||||
<title abbrev="SIP Digest Authentication"> | <!--[rfced]] *ADs - please review and approve the following changes | |||
The Session Initiation Protocol (SIP) Digest Authentication Scheme | submitted by the author during EDIT state to use "SHA-512/256" | |||
</title> | instead of "SHA-512-256" (affects 3 sentences in the document). | |||
<author initials="R." surname="Shekh-Yusef" fullname="Rifaat Shekh-Yusef"> | *Follow-up question: Also, please review the other | |||
<organization>Avaya</organization> | occurrence of "SHA-512-256" (in code) and | |||
<address> | let us know if any further updates are necessary (based on use in RFCs | |||
<postal> | 4868 and 7616, we believe the dash is correct in this case). | |||
<street>425 Legget Dr.</street> | ||||
<city>Ottawa</city> | ||||
<region>Ontario</region> | ||||
<country>Canada</country> | ||||
</postal> | ||||
<phone>+1-613-595-9106</phone> | ||||
<email>rifaat.ietf@gmail.com</email> | ||||
</address> | ||||
</author> | ||||
<date year="2019" /> | Original: | |||
<area>RAI</area> | ||||
<workgroup>SIP Core</workgroup> | ||||
<keyword>Digest Auth</keyword> | ||||
<abstract><t> | ... for more secure digest algorithms, e.g., SHA-256 and SHA-512-256, to replace | |||
This document updates RFC 3261 by updating the Digest Access | the... | |||
Authentication scheme used by the Session Initiation Protocol (SIP) to add su | ||||
pport | ||||
for more secure digest algorithms, e.g., SHA-256 and SHA-512-256, to replace | ||||
the | ||||
obsolete MD5 algorithm. | ||||
</t></abstract> | ||||
</front> | Edited: | |||
...for more secure digest algorithms, e.g., SHA-256 and SHA-512/256, to | ||||
replace the... | ||||
<!-- ********************************** MIDDLE ********************************* | Original: | |||
* --> | ...resulting from that reference update. It adds support for the SHA-256 and SHA | |||
<middle> | -512-256 algorithms... | |||
<section title="Introduction" anchor="introduction"> | Edited: | |||
...resulting from that reference update. It adds support for the | ||||
SHA-256 and SHA-512/256 algorithms... | ||||
<t> | Original: | |||
...representation of 1111 as 'f'. If the SHA-256 or SHA-512-256 | ||||
algorithm is... | ||||
Edited: | ||||
...representation of 1111 as 'f'. If the SHA-256 or SHA-512/256 algorithm is... | ||||
--> | ||||
<t> | ||||
This document updates RFC 3261 by modifying the Digest Access | ||||
Authentication scheme used by the Session Initiation Protocol (SIP) to add su | ||||
pport | ||||
for more secure digest algorithms, e.g., SHA-256 and SHA-512/256, to replace | ||||
the | ||||
obsolete MD5 algorithm. | ||||
</t> | ||||
</abstract> | ||||
</front> | ||||
<!-- ********************************** MIDDLE ******************************* | ||||
*** --> | ||||
<middle> | ||||
<section anchor="introduction"> | ||||
<name>Introduction</name> | ||||
<t> | ||||
The Session Initiation Protocol <xref target="RFC3261"/> uses the same mecha nism | The Session Initiation Protocol <xref target="RFC3261"/> uses the same mecha nism | |||
that the Hypertext Transfer Protocol (HTTP) uses for authenticating | as the Hypertext Transfer Protocol (HTTP) does for authenticating | |||
users. This mechanism is called Digest Access Authentication, and | users. This mechanism is called "Digest Access Authentication". It | |||
it is a simple challenge-response mechanism that allows a server | is a simple challenge-response mechanism that allows a server | |||
to challenge a client request and allows a client to provide | to challenge a client request and allows a client to provide | |||
authentication information in response to that challenge. The | authentication information in response to that challenge. The | |||
version of Digest Access Authentication that <xref target="RFC3261"/> refere nces | version of Digest Access Authentication that <xref target="RFC3261"/> refere nces | |||
is specified in <xref target="RFC2617"/>. | is specified in <xref target="RFC2617"/>. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
The default hash algorithm for Digest Access Authentication is MD5. | The default hash algorithm for Digest Access Authentication is MD5. | |||
However, it has been demonstrated that the MD5 algorithm is not | However, it has been demonstrated that the MD5 algorithm is not | |||
collision resistant, and is now considered a bad choice for a hash function | collision resistant and is now considered a bad choice for a hash | |||
<xref target="RFC6151"/>. | function (see <xref target="RFC6151"/>). | |||
</t> | </t> | |||
<t> | ||||
<t> | The HTTP Digest Access Authentication document <xref target="RFC7616"/> obso | |||
The HTTP Digest Access Authentication <xref target="RFC7616"/> document obso | letes | |||
letes | <xref target="RFC2617"/> and adds stronger algorithms that can be used with | |||
[RFC2617] and adds stronger algorithms that can be used with | the Digest Access Authentication scheme and establishes a registry for | |||
the Digest Authentication scheme, and establishes a registry for | ||||
these algorithms, known as the "Hash Algorithms for HTTP Digest | these algorithms, known as the "Hash Algorithms for HTTP Digest | |||
Authentication" registry, so that algorithms can be added in the | Authentication" IANA registry, so that algorithms can be added in the | |||
future. | future. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
This document updates the Digest Access Authentication scheme used | This document updates the Digest Access Authentication scheme used | |||
by SIP to support the algorithms listed in the "Hash Algorithms | by SIP to support the algorithms listed in the "Hash Algorithms | |||
for HTTP Digest Authentication" registry defined by <xref target="RFC7616"/> | for HTTP Digest Authentication" IANA registry defined by <xref target="RFC76 | |||
. | 16"/>. | |||
</t> | </t> | |||
<t> <vspace blankLines="1" /> </t> | ||||
<section title="Terminology" anchor="terminology"> | ||||
<t> | ||||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | ||||
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", | ||||
"MAY", and "OPTIONAL" in this document are to be interpreted as | ||||
described in BCP 14 <xref target="RFC2119" /> <xref target="RFC8174" /> wh | ||||
en, | ||||
and only when, they appear in all capitals, as shown here. | ||||
</t> | ||||
<t> <vspace blankLines="1" /> </t> | ||||
</section> | ||||
</section> <!-- Introduction --> | <section anchor="terminology"> | |||
<name>Terminology</name> | ||||
<t> | ||||
The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | ||||
IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | ||||
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | ||||
RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | ||||
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | ||||
be interpreted as | ||||
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | ||||
when, and only when, they appear in all capitals, as shown here. | ||||
</t> | ||||
</section> | ||||
</section> | ||||
<section title="SIP Digest Authentication Scheme Updates" | <!-- Introduction --> | |||
anchor="sip.digest.scheme"> | ||||
<t> | <section anchor="sip.digest.scheme"> | |||
<name>Updates to the SIP Digest Access Authentication Scheme</name> | ||||
<t> | ||||
This section describes the modifications to the operation of the | This section describes the modifications to the operation of the | |||
Digest mechanism as specified in <xref target="RFC3261"/> in order to suppor t | Digest mechanism as specified in <xref target="RFC3261"/> in order to suppor t | |||
the algorithms defined in the "Hash Algorithms for HTTP Digest Authenticatio n" | the algorithms defined in the "Hash Algorithms for HTTP Digest Authenticatio n" | |||
registry described in <xref target="RFC7616"/>. | IANA registry described in <xref target="RFC7616"/>. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
It replaces the reference used in <xref target="RFC3261"/> for Digest Access Authentication, | It replaces the reference used in <xref target="RFC3261"/> for Digest Access Authentication, | |||
substituting <xref target="RFC7616"/> for the obsolete <xref target="RFC2617 "/>, and describes | substituting <xref target="RFC7616"/> for the obsolete <xref target="RFC2617 "/>, and describes | |||
the modifications to the usage of the Digest mechanism in <xref target="RFC3 261"/> | the modifications to the usage of the Digest mechanism in <xref target="RFC3 261"/> | |||
resulting from that reference update. It adds support for the SHA-256 and SH A-512-256 algorithms <xref target="SHA2"/>. | resulting from that reference update. It adds support for the SHA-256 and SH A-512/256 algorithms <xref target="SHA2"/>. | |||
It adds required support for the "qop" parameter. It provides additional Use r Agent Client (UAC) | It adds required support for the "qop" parameter. It provides additional Use r Agent Client (UAC) | |||
and User Agent Server (UAS) procedures regarding usage of multiple SIP Autho rization, | and User Agent Server (UAS) procedures regarding usage of multiple SIP Autho rization, | |||
WWW-Authenticate and Proxy-Authenticate header fields, including in which or | WWW-Authenticate, and Proxy-Authenticate header fields, including the order | |||
der to insert | in which to insert | |||
and process them. It provides guidance regarding forking. Finally, it update | and process them. It provides guidance regarding forking. Finally, it update | |||
s the SIP BNF | s the SIP ABNF | |||
as required by the updates. | as required by the updates. | |||
</t> | </t> | |||
<section anchor="hash.algorithms"> | ||||
<t> <vspace blankLines="1" /> </t> | <name>Hash Algorithms</name> | |||
<t> | ||||
<section title="Hash Algorithms" anchor="hash.algorithms"> | The Digest Access Authentication scheme has an "algorithm" parameter that | |||
specifies the | ||||
<t> | algorithm to be used to compute the digest of the response. The "Hash | |||
The Digest scheme has an 'algorithm' parameter that specifies the | Algorithms for HTTP Digest Authentication" IANA registry specifies | |||
algorithm to be used to compute the digest of the response. The IANA | ||||
registry named the "Hash Algorithms for HTTP Digest Authentication" specif | ||||
ies | ||||
the algorithms that correspond to 'algorithm' values. | the algorithms that correspond to 'algorithm' values. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
<xref target="RFC3261"/> specifies only one algorithm, MD5, which is used by default. | <xref target="RFC3261"/> specifies only one algorithm, MD5, which is used by default. | |||
This document extends <xref target="RFC3261"/> to allow use of any algorit hm listed in | This document extends <xref target="RFC3261"/> to allow use of any algorit hm listed in | |||
the "Hash Algorithms for HTTP Digest Authentication" registry. | the "Hash Algorithms for HTTP Digest Authentication" IANA registry. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
A UAS prioritizes which algorithm to use based on its policy, | A UAS prioritizes which algorithm to use based on its policy, | |||
which is specified in section 2.3 and parallels the process used in | which is specified in <xref target="uas.behavior" /> and parallels the proc ess used in | |||
HTTP specified by <xref target="RFC7616"/>. | HTTP specified by <xref target="RFC7616"/>. | |||
</t> | </t> | |||
<t> <vspace blankLines="1" /> </t> | ||||
</section> <!-- Hash Algorithms --> | ||||
<section title="Representation of Digest Values" anchor="rep.digest.values"> | </section> | |||
<!-- Hash Algorithms --> | ||||
<t> | <section anchor="rep.digest.values"> | |||
<name>Representation of Digest Values</name> | ||||
<t> | ||||
The size of the digest depends on the algorithm used. The bits in | The size of the digest depends on the algorithm used. The bits in | |||
the digest are converted from the most significant to the least | the digest are converted from the most significant to the least | |||
significant bit, four bits at a time to the ASCII representation as | significant bit, four bits at a time, to the ASCII representation as | |||
follows. Each four bits is represented by its familiar hexadecimal | follows. Each set of four bits is represented by its familiar hexadecimal | |||
notation from the characters 0123456789abcdef, that is binary 0000 is | notation from the characters 0123456789abcdef; that is, binary 0000 is | |||
represented by the character '0', 0001 by '1' and so on up to the | represented by the character '0', 0001 is represented by '1', and so on up | |||
representation of 1111 as 'f'. If the SHA-256 or SHA-512-256 algorithm is | to the | |||
representation of 1111 as 'f'. If the SHA-256 or SHA-512/256 algorithm is | ||||
used to calculate the digest, then the digest will be represented as 64 | used to calculate the digest, then the digest will be represented as 64 | |||
hexadecimal characters. | hexadecimal characters. | |||
</t> | </t> | |||
<t> <vspace blankLines="1" /> </t> | ||||
</section> | ||||
<section title="UAS Behavior" anchor="uas.behavior"> | </section> | |||
<section anchor="uas.behavior"> | ||||
<name>UAS Behavior</name> | ||||
<t> | <t> | |||
When a UAS receives a request from a UAC, and an acceptable | When a UAS receives a request from a UAC, and an acceptable | |||
Authorization header field is not received, the UAS can challenge the | Authorization header field is not received, the UAS can challenge the | |||
originator to provide credentials by rejecting the request with a | originator to provide credentials by rejecting the request with a | |||
401/407 status code with the WWW-Authenticate/Proxy-Authenticate | 401/407 status code with the WWW-Authenticate/Proxy-Authenticate | |||
header field respectively. The UAS MAY add multiple WWW-Authenticate/Proxy -Authenticate | header field, respectively. The UAS <bcp14>MAY</bcp14> add multiple WWW-Au thenticate/Proxy-Authenticate | |||
header fields to allow the UAS to utilize the best available | header fields to allow the UAS to utilize the best available | |||
algorithm supported by the client. | algorithm supported by the client. | |||
</t> | </t> | |||
<t> | ||||
<t> | If the UAS challenges the originator using multiple WWW-Authenticate/Proxy | |||
If the UAS challenges with multiple WWW-Authenticate/Proxy-Authenticate | -Authenticate | |||
header fields with the same realm, then each one of these | header fields with the same realm, then each of these | |||
header fields MUST use a different digest algorithm. The UAS MUST add thes | header fields <bcp14>MUST</bcp14> use a different digest algorithm. The UA | |||
e | S <bcp14>MUST</bcp14> add these | |||
header fields to the response in the order that it would prefer to see the | header fields to the response in the order in which it would prefer to see | |||
m | them | |||
used, starting with the most preferred algorithm at the top, followed | used, starting with the most preferred algorithm at the top. The UAS canno | |||
by the less preferred algorithms. The UAS cannot assume that the client | t assume that the client | |||
will use the algorithm specified at the topmost header field. | will use the algorithm specified in the topmost header field. | |||
</t> | </t> | |||
<t> <vspace blankLines="1" /> </t> | ||||
</section> | ||||
<section title="UAC Behavior" anchor="uac.behavior"> | ||||
<t> | ||||
When the UAC receives a response with multiple WWW-Authenticate/Proxy-Auth | ||||
enticate | ||||
header fields with the same realm it SHOULD use the topmost | ||||
header field that it supports, unless a local policy dictates otherwise. | ||||
The client MUST ignore any challenge it does not understand. | ||||
</t> | ||||
<t> | </section> | |||
<section anchor="uac.behavior"> | ||||
<name>UAC Behavior</name> | ||||
<t> When the UAC receives a response with multiple WWW-Authenticate/Proxy-A | ||||
uthenticate | ||||
header fields with the same realm, it <bcp14>SHOULD</bcp14> use the topmos | ||||
t | ||||
header field that it supports unless a local policy dictates otherwise. | ||||
The client <bcp14>MUST</bcp14> ignore any challenge it does not understand | ||||
. | ||||
</t> | ||||
<t> | ||||
When the UAC receives a 401 response with multiple WWW-Authenticate | When the UAC receives a 401 response with multiple WWW-Authenticate | |||
header fields with different realms it SHOULD retry and add an | header fields with different realms, it <bcp14>SHOULD</bcp14> retry and ad d an | |||
Authorization header field containing credentials that match the topmost | Authorization header field containing credentials that match the topmost | |||
header field of any one of the realms, unless a local policy dictates othe | header field of any of the realms unless a local policy dictates otherwise | |||
rwise. | . | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
If the UAC cannot respond to any of the challenges in the response, | If the UAC cannot respond to any of the challenges in the response, | |||
then it SHOULD abandon attempts to send the request, unless a local | then it <bcp14>SHOULD</bcp14> abandon attempts to send the request unless a | |||
policy dictates otherwise, e.g. the policy might indicate the use of non-Dig | local | |||
est mechanisms. | policy dictates otherwise, e.g., the policy might indicate the use of non-Di | |||
gest mechanisms. | ||||
For example, if the UAC does not have credentials or has stale credentials f or | For example, if the UAC does not have credentials or has stale credentials f or | |||
any of the realms, the UAC will abandon the request. | any of the realms, the UAC will abandon the request. | |||
</t> | </t> | |||
<t> <vspace blankLines="1" /> </t> | ||||
</section> | ||||
<section title="Forking" anchor="forking"> | ||||
<t> | </section> | |||
Section 22.3 of <xref target="RFC3261"/> discusses the operation of the pr | <section anchor="forking"> | |||
oxy-to-user | <name>Forking</name> | |||
<t> | ||||
<xref target="RFC3261" sectionFormat="of" section="22.3"/> discusses the o | ||||
peration of the proxy-to-user | ||||
authentication, which describes the operation of the proxy when it | authentication, which describes the operation of the proxy when it | |||
forks a request. This section clarifies that operation. | forks a request. This section clarifies that operation. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
If a request is forked, various proxy servers and/or UAs may wish to | If a request is forked, various proxy servers and/or UAs may wish to | |||
challenge the UAC. In this case, the forking proxy server is | challenge the UAC. In this case, the forking proxy server is | |||
responsible for aggregating these challenges into a single response. | responsible for aggregating these challenges into a single response. | |||
Each WWW-Authenticate and Proxy-Authenticate value received in | Each WWW-Authenticate and Proxy-Authenticate value received in | |||
responses to the forked request MUST be placed into the single | response to the forked request <bcp14>MUST</bcp14> be placed into the sing le | |||
response that is sent by the forking proxy to the UAC. | response that is sent by the forking proxy to the UAC. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
When the forking proxy places multiple WWW-Authenticate and Proxy-Authentica te header | When the forking proxy places multiple WWW-Authenticate and Proxy-Authentica te header | |||
fields received from one downstream proxy into a single response, it MUST ma intain | fields received from one downstream proxy into a single response, it <bcp14> MUST</bcp14> maintain | |||
the order of these header fields. The ordering of values received from diff erent downstream | the order of these header fields. The ordering of values received from diff erent downstream | |||
proxies is not significant. | proxies is not significant. | |||
</t> | </t> | |||
<t> <vspace blankLines="1" /> </t> | ||||
</section> <!-- Forking --> | ||||
<section title="HTTP Digest Authentication Scheme Modifications" anchor="htt | </section> | |||
p.modifications"> | <!-- Forking --> | |||
<t> | <section anchor="http.modifications"> | |||
<name>HTTP Digest Authentication Scheme Modifications</name> | ||||
<t> | ||||
This section describes the modifications and clarifications required | This section describes the modifications and clarifications required | |||
to apply the HTTP Digest authentication scheme to SIP. The SIP scheme | to apply the HTTP Digest Access Authentication scheme to SIP. The SIP sche me | |||
usage is similar to that for HTTP. For completeness, the bullets specified | usage is similar to that for HTTP. For completeness, the bullets specified | |||
below are mostly copied from section 22.4 of <xref target="RFC3261"/>; the | below are mostly copied from <xref target="RFC3261" | |||
sectionFormat="of" section="22.4"/>; the | ||||
only semantic changes are specified in bullets 1, 7, and 8 below. | only semantic changes are specified in bullets 1, 7, and 8 below. | |||
</t> | </t> | |||
<t> | ||||
<t> | SIP clients and servers <bcp14>MUST NOT</bcp14> accept or request Basic | |||
SIP clients and servers MUST NOT accept or request Basic | ||||
authentication. | authentication. | |||
</t> | </t> | |||
<t> | ||||
<t> | The rules for Digest Access Authentication follow those defined in HTTP, | |||
The rules for Digest authentication follow those defined in HTTP, | ||||
with "HTTP/1.1" <xref target="RFC7616"/> replaced by "SIP/2.0" in addition to the following | with "HTTP/1.1" <xref target="RFC7616"/> replaced by "SIP/2.0" in addition to the following | |||
differences: | differences: | |||
</t> | </t> | |||
<ol> | ||||
<li> | ||||
<t> | <t> | |||
1. The URI included in the challenge has the following BNF <xref target="R | The URI included in the challenge has the following ABNF <xref target="RFC5234"/ | |||
FC5234"/>: | >: | |||
<list><t> | ||||
URI = Request-URI ; as defined in <xref target="RFC3261"/>, Section 25 | ||||
</t></list> | ||||
</t> | </t> | |||
<sourcecode name="" type="abnf"><![CDATA[ | ||||
<t> | URI = Request-URI ; as defined in RFC 3261, Section 25 | |||
2. The 'uri' parameter of the Authorization header field MUST be | ]]></sourcecode> | |||
</li> | ||||
<li> | ||||
The "uri" parameter of the Authorization header field <bcp14>MUST</bcp14> be | ||||
enclosed in quotation marks. | enclosed in quotation marks. | |||
</t> | </li> | |||
<li><t> | ||||
<t> | The ABNF for digest-uri-value is:</t> | |||
3. The BNF for digest-uri-value is: | <sourcecode name="" type="abnf"><![CDATA[ | |||
<list><t> | ||||
digest-uri-value = Request-URI | digest-uri-value = Request-URI | |||
</t></list> | ]]></sourcecode> | |||
</t> | </li> | |||
<li> | ||||
<t> | The example procedure for choosing a nonce based on ETag does not | |||
4. The example procedure for choosing a nonce based on Etag does not | ||||
work for SIP. | work for SIP. | |||
</t> | </li> | |||
<li> | ||||
<t> | The text in <xref target="RFC7234"/> regarding cache operation does not | |||
5. The text in <xref target="RFC7234"/> regarding cache operation does not | ||||
apply to SIP. | apply to SIP. | |||
</t> | </li> | |||
<li> | ||||
<t> | <xref target="RFC7616"/> requires that a server check that the URI in the | |||
6. <xref target="RFC7616"/> requires that a server check that the URI in t | ||||
he | ||||
request line and the URI included in the Authorization header | request line and the URI included in the Authorization header | |||
field point to the same resource. In a SIP context, these two | field point to the same resource. In a SIP context, these two | |||
URIs may refer to different users, due to forwarding at some | URIs may refer to different users due to forwarding at some | |||
proxy. Therefore, in SIP, a UAS MUST check if the Request-URI in the | proxy. Therefore, in SIP, a UAS <bcp14>MUST</bcp14> check if the Requ | |||
est-URI in the | ||||
Authorization/Proxy-Authorization header field value corresponds to a | Authorization/Proxy-Authorization header field value corresponds to a | |||
user for whom the UAS is willing to accept forwarded or direct | user for whom the UAS is willing to accept forwarded or direct | |||
requests, but MAY still accept it if the two fields are not equivalent | requests; however, it <bcp14>MAY</bcp14> still accept it if the two fi | |||
. | elds are not equivalent. | |||
</t> | </li> | |||
<li> | ||||
<t> | <t>As a clarification to the calculation of the A2 value for | |||
7. As a clarification to the calculation of the A2 value for | message integrity assurance in the Digest Access Authentication | |||
message integrity assurance in the Digest authentication | scheme, implementers should assume that the hash of the entity-body | |||
scheme, implementers should assume, when the entity-body is | resolves to the hash of an empty string when the entity-body is empty (that | |||
empty (that is, when SIP messages have no body) that the hash | is, when SIP messages have no body):</t> | |||
of the entity-body resolves to the hash of an empty | ||||
string: | ||||
<list><t> | <sourcecode name="" type=""><![CDATA[ | |||
H(entity-body) = <algorithm>("") | H(entity-body) = <algorithm>("") | |||
</t></list> | ]]></sourcecode> | |||
For example, when the chosen algorithm is SHA-256, then: | <t>For example, when the chosen algorithm is SHA-256, then:</t> | |||
<list><t> | ||||
H(entity-body) = SHA-256("") = | ||||
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" | ||||
</t></list> | ||||
</t> | ||||
<t> | <sourcecode name="" type=""><![CDATA[ | |||
8. A UAS MUST be able to properly handle "qop" parameter received | H(entity-body) = SHA-256("") = | |||
in an Authorization/Proxy-Authorization header field, and a UAC MUST be | "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" | |||
able to | ]]> </sourcecode> | |||
properly handle "qop" parameter received in WWW-Authenticate and | </li> | |||
<li> | ||||
<t> | ||||
A UAS <bcp14>MUST</bcp14> be able to properly handle a "qop" parameter received | ||||
in an Authorization/Proxy-Authorization header field, and a UAC <bcp14> | ||||
MUST</bcp14> be able to | ||||
properly handle a "qop" parameter received in WWW-Authenticate and | ||||
Proxy-Authenticate header fields. However, for backward compatibility | Proxy-Authenticate header fields. However, for backward compatibility | |||
reasons, the "qop" parameter is optional for RFC3261-based clients and | reasons, the "qop" parameter is optional for clients and | |||
servers to receive. If the "qop" parameter is not specified, then the d | servers based on <xref target="RFC3261" /> to receive. If the "qop" para | |||
efault | meter is not specified, then the default | |||
value is "auth". | value is "auth". | |||
</t> | </t> | |||
<t> | ||||
A UAS MUST always send a "qop" parameter in WWW-Authenticate | <t> | |||
and Proxy-Authenticate header field values, and a UAC MUST | A UAS <bcp14>MUST</bcp14> always send a "qop" parameter in WWW-Authenti | |||
cate | ||||
and Proxy-Authenticate header field values, and a UAC <bcp14>MUST</bcp1 | ||||
4> | ||||
send the "qop" parameter in any resulting authorization header | send the "qop" parameter in any resulting authorization header | |||
field. | field. | |||
</t> | </t> | |||
</li> | ||||
<t> <vspace blankLines="1" /> </t> | </ol> | |||
<t> | <t> | |||
The usage of the Authentication-Info header field continues to be | The usage of the Authentication-Info header field continues to be | |||
allowed, since it provides integrity checks over the bodies and | allowed, since it provides integrity checks over the bodies and | |||
provides mutual authentication. | provides mutual authentication. | |||
</t> | </t> | |||
<t> <vspace blankLines="1" /> </t> | </section> | |||
</section> <!-- HTTP Modifications --> | <!-- HTTP Modifications --> | |||
<section title="Augmented BNF for SIP" anchor="abnf"> | <section anchor="abnf"> | |||
<t> | <name>ABNF for SIP</name> | |||
This document updates the Augmented BNF <xref target="RFC5234"/> for SIP a | <t> | |||
s | This document updates the ABNF <xref target="RFC5234"/> for SIP as | |||
follows. | follows. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
It extends the request-digest as follows to allow for different | It extends the request-digest as follows to allow for different | |||
digest sizes: | digest sizes: | |||
</t> | </t> | |||
<t> | <sourcecode name="" type="abnf"><![CDATA[ | |||
<list><t> | ||||
request-digest = LDQUOT *LHEX RDQUOT | request-digest = LDQUOT *LHEX RDQUOT | |||
</t></list> | ]]></sourcecode> | |||
</t> | <t> | |||
<t> | ||||
The number of hex digits is implied by the length of the value of the algo rithm used, | The number of hex digits is implied by the length of the value of the algo rithm used, | |||
with the minimum size of 32. A parameter with an empty value (empty string ) | with a minimum size of 32. A parameter with an empty value (empty string) | |||
is allowed when the UAC has not yet received a challenge. | is allowed when the UAC has not yet received a challenge. | |||
</t> | </t> | |||
<t> | ||||
<t> | It extends the algorithm parameter as follows to allow any algorithm | |||
It extends the algorithm parameter as follows to allow for any algorithm | ||||
in the registry to be used: | in the registry to be used: | |||
</t> | </t> | |||
<!-- [rfced] Please note that we updated the document in order to fit | ||||
<t> | within the 72-character line limit. Please review these changes | |||
<list><t> | to the indentation of code snippets and let us know if you have | |||
algorithm = "algorithm" EQUAL ( "MD5" / "MD5-sess" / "SHA-256" / "SHA-256 | any concerns. | |||
-sess" / | --> | |||
"SHA-512-256" / "SHA-512-256-sess" / token ) | ||||
</t></list> | ||||
</t> | ||||
<t> <vspace blankLines="1" /> </t> | <sourcecode name="" type=""><![CDATA[ | |||
</section> <!-- Augmented BNF for the SIP Protocol--> | algorithm = "algorithm" EQUAL ( "MD5" / "MD5-sess" / "SHA-256" / | |||
</section> <!-- The SIP Digest Authentication Scheme --> | "SHA-256-sess" / | |||
"SHA-512-256" / "SHA-512-256-sess" / token ) | ||||
]]></sourcecode> | ||||
</section> | ||||
<!-- Augmented BNF for the SIP Protocol--> | ||||
</section> | ||||
<!-- The SIP Digest Authentication Scheme --> | ||||
<section title="Security Considerations" anchor="security.considerations"> | <section anchor="security.considerations"> | |||
<t> | <name>Security Considerations</name> | |||
<t> | ||||
This specification adds new secure algorithms to be used with the | This specification adds new secure algorithms to be used with the | |||
Digest mechanism to authenticate users. The obsolete MD5 algorithm | Digest mechanism to authenticate users. The obsolete MD5 algorithm | |||
remains only for backward compatibility with <xref target="RFC2617"/> but it | remains only for backward compatibility with <xref target="RFC2617"/>, but i | |||
s use is | ts use is | |||
NOT RECOMMENDED. | <bcp14>NOT RECOMMENDED</bcp14>. | |||
</t> | </t> | |||
<t> | ||||
<t> | This opens the system to the potential for a downgrade attack by an on-path | |||
This opens the system to the potential of a downgrade attack by an on-path a | attacker. | |||
ttacker. | ||||
The most effective way of dealing with this type of attack is to either vali date the | The most effective way of dealing with this type of attack is to either vali date the | |||
client and challenge it accordingly, or remove the support for backward comp atibility | client and challenge it accordingly or remove the support for backward compa tibility | |||
by not supporting MD5. | by not supporting MD5. | |||
</t> | </t> | |||
<t> | ||||
<t> | See <xref target="RFC7616" sectionFormat="of" section="5"/> for a detailed sec | |||
See section 5 of <xref target="RFC7616"/> for a detailed security discussion o | urity discussion of | |||
f | the Digest Access Authentication scheme. | |||
the Digest scheme. | </t> | |||
</t> | ||||
<t> <vspace blankLines="1" /> </t> | </section> | |||
</section> <!-- Security Considerations --> | <!-- Security Considerations --> | |||
<section title="IANA Considerations" anchor="iana.considerations"> | <section anchor="iana.considerations"> | |||
<t> | <name>IANA Considerations</name> | |||
<t> | ||||
<xref target="RFC7616"/> defines an IANA registry named "Hash Algorithms | <xref target="RFC7616"/> defines an IANA registry named "Hash Algorithms | |||
for HTTP Digest Authentication" to simplify the introduction of new | for HTTP Digest Authentication" to simplify the introduction of new | |||
algorithms in the future. This document specifies that algorithms defined in | algorithms in the future. This document specifies that algorithms defined in | |||
that registry may be used in SIP digest authentication. | that registry may be used in SIP digest authentication. | |||
</t> | </t> | |||
<t> | <t> | |||
This document has no actions for IANA. | This document has no actions for IANA. | |||
</t> | </t> | |||
<t> <vspace blankLines="1" /> </t> | ||||
</section> <!-- IANA Considerations --> | ||||
<section title="Acknowledgments" anchor="acknowledgments"> | </section> | |||
<t> | <!-- IANA Considerations --> | |||
The author would like to thank the following individuals | ||||
for their careful reviews, comments, and suggestions: Paul Kyzivat, | ||||
Olle Johansson, Dale Worley, Michael Procter, Iaki Baz Castillo, | ||||
Tolga Asveren, Christer Holmberg, Brian Rosen, Jean Mahoney, Adam Roach, | ||||
Barry Leiba, Roni Even, ric Vyncke, Benjamin Kaduk, Alissa Cooper, Roman Dan | ||||
yliw, | ||||
and Alexey Melnikov, and Maxim Sobolev. | ||||
. | ||||
</t> | ||||
<t> <vspace blankLines="1" /> </t> | ||||
</section> <!-- Acknowledgments --> | ||||
</middle> | <!-- Acknowledgments --> | |||
<!-- ********************************** BACK ********************************** | </middle> | |||
--> | <!-- ********************************** BACK ********************************* | |||
* --> | ||||
<back> | <back> | |||
<references> | ||||
<name>References</name> | ||||
<references> | ||||
<name>Normative References</name> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8174.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.2119.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.3261.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7234.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7616.x | ||||
ml"/> | ||||
<references title="Normative References"> | <reference anchor="SHA2"> | |||
<front> | ||||
<?rfc include="reference.RFC.8174.xml"?> | <title abbrev="SHA">Secure Hash Standard (SHS)</title> | |||
<?rfc include="reference.RFC.2119.xml"?> | <seriesInfo name="FIPS" value="180-4"/> | |||
<seriesInfo name="DOI" value="10.6028/NIST.FIPS.180-4"/> | ||||
<reference anchor="RFC3261"> | <author><organization>National Institute of Standards and | |||
<front> | Technology</organization></author> | |||
<title abbrev="SIP">SIP: Session Initiation Protocol</title> | <date month="August" year="2015"/> | |||
<author initials="J." surname="Rosenberg" fullname="Jonathan Rosenberg" | </front> | |||
/> | </reference> | |||
<author initials="H." surname="Schulzrinne" fullname="Henning Schulzrinn | </references> | |||
e" /> | <references> | |||
<author initials="H." surname="Camarillo" fullname="Gonzalo Camarillo" / | <name>Informative References</name> | |||
> | ||||
<author initials="A." surname="Johnston" fullname="Alan Johnston" /> | ||||
<author initials="J." surname="Peterson" fullname="Jon Peterson" /> | ||||
<author initials="R." surname="Sparks" fullname="Robert Sparks" /> | ||||
<author initials="M." surname="Handley" fullname="Mark Handley" /> | ||||
<author initials="E." surname="Schooler" fullname="Eve Schooler" /> | ||||
<date month="June" year="2002" /> | ||||
</front> | ||||
<seriesInfo name="RFC" value="3261" /> | ||||
</reference> | ||||
<reference anchor="RFC7234"> | ||||
<front> | ||||
<title abbrev="HTTP Caching">Hypertext Transfer Protocol (HTTP/1.1): Cac | ||||
hing</title> | ||||
<author initials="R." surname="Fielding" fullname="Roy Fielding" /> | ||||
<author initials="M." surname="Nottingham" fullname="Mark Nottingham" /> | ||||
<author initials="J." surname="Reschke" fullname="Julian Reschke" /> | ||||
<date month="June" year="2014" /> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7234" /> | ||||
</reference> | ||||
<reference anchor="RFC7616"> | ||||
<front> | ||||
<title abbrev="HTTP Digest">HTTP Digest Access Authentication</title> | ||||
<author initials="R." surname="Shekh-Yusef" fullname="Rifaat Shekh-Yusef | ||||
" /> | ||||
<author initials="D." surname="Ahrens" fullname="David Ahrens" /> | ||||
<author initials="S." surname="Bremer" fullname="Sophie Bremer" /> | ||||
<date month="September" year="2015" /> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7616" /> | ||||
</reference> | ||||
<reference anchor="SHA2"> | ||||
<front> | ||||
<title abbrev="SHA">SHA: SECURE HASH STANDARD, FIPS 180-2</title> | ||||
<author initials="" surname="" fullname="" /> | ||||
<date month="August" year="2002" /> | ||||
</front> | ||||
</reference> | ||||
</references> | ||||
<references title="Informative References"> | ||||
<reference anchor="RFC2617"> | ||||
<front> | ||||
<title abbrev="HTTP Basic and Digest">HTTP Authentication: Basic and Dig | ||||
est Access Authentication</title> | ||||
<author initials="J." surname="Franks" fullname="John Franks" /> | ||||
<author initials="P." surname="M. Hallam-Baker" fullname="Phillip M. Hal | ||||
lam-Baker" /> | ||||
<author initials="J." surname="L. Hostetler" fullname="Jeffery L. Hostet | ||||
ler" /> | ||||
<author initials="S." surname="D. Lawrence" fullname="Scott D. Lawrence" | ||||
/> | ||||
<author initials="P." surname="J. Leach" fullname="Paul J. Leach" /> | ||||
<author initials="A." surname="Luotonen" fullname="Ari Luotonen" /> | ||||
<author initials="L." surname="C. Stewart" fullname="Lawrence C. Stewart | ||||
" /> | ||||
<date month="June" year="1999" /> | ||||
</front> | ||||
<seriesInfo name="RFC" value="2617" /> | ||||
</reference> | ||||
<?rfc include="reference.RFC.6151.xml"?> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<?rfc include="reference.RFC.5234.xml"?> | FC.2617.xml"/> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6151.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.5234.xml"/> | ||||
</references> | ||||
</references> | ||||
<section anchor="acknowledgments" numbered="false"> | ||||
<name>Acknowledgments</name> | ||||
<t> | ||||
The author would like to thank the following individuals | ||||
for their careful review, comments, and suggestions: <contact fullname="Paul | ||||
Kyzivat"/>, | ||||
<contact fullname="Olle Johansson"/>, <contact fullname="Dale Worley"/>, <co | ||||
ntact fullname="Michael Procter"/>, <contact fullname="Inaki Baz Castillo"/>, | ||||
<contact fullname="Tolga Asveren"/>, <contact fullname="Christer Holmberg"/> | ||||
, <contact fullname="Brian Rosen"/>, <contact fullname="Jean Mahoney"/>, <contac | ||||
t fullname="Adam Roach"/>, | ||||
<contact fullname="Barry Leiba"/>, <contact fullname="Roni Even"/>, <contact | ||||
fullname="Eric Vyncke"/>, <contact fullname="Benjamin Kaduk"/>, <contact fullna | ||||
me="Alissa Cooper"/>, <contact fullname="Roman Danyliw"/>, <contact fullname="Al | ||||
exey Melnikov"/>, and <contact fullname="Maxim Sobolev"/>. | ||||
</t> | ||||
</references> | <!--[rfced] Terminology: Throughout the document, we noted the | |||
following similar terms. Should these uses be reviewed for | ||||
uniformity? | ||||
</back> | Digest Access Authentication scheme vs. Digest Authentication scheme | |||
vs. Digest scheme vs Digest authentication (scheme) | ||||
--> | ||||
</section> | ||||
</back> | ||||
</rfc> | </rfc> | |||
End of changes. 97 change blocks. | ||||
439 lines changed or deleted | 406 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |