rfc8688xml2.original.xml | rfc8688.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="US-ASCII"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | ||||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" consensus="true" | |||
<!ENTITY RFC2119 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | docName="draft-ietf-sipcore-rejected-09" | |||
nce.RFC.2119.xml"> | ipr="trust200902" number="8688" obsoletes="" sortRefs="true" | |||
<!ENTITY RFC3261 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | submissionType="IETF" symRefs="true" tocInclude="true" updates="" | |||
nce.RFC.3261.xml"> | version="3" xml:lang="en"> | |||
<!ENTITY RFC3262 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.3262.xml"> | ||||
<!ENTITY RFC3326 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.3326.xml"> | ||||
<!ENTITY RFC4103 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.4103.xml"> | ||||
<!ENTITY RFC4240 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.4240.xml"> | ||||
<!ENTITY RFC4566 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.4566.xml"> | ||||
<!ENTITY RFC5039 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.5039.xml"> | ||||
<!ENTITY RFC6350 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.6350.xml"> | ||||
<!ENTITY RFC6809 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.6809.xml"> | ||||
<!ENTITY RFC7092 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.7092.xml"> | ||||
<!ENTITY RFC7095 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.7095.xml"> | ||||
<!ENTITY RFC7340 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.7340.xml"> | ||||
<!ENTITY RFC7515 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.7515.xml"> | ||||
<!ENTITY RFC7518 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.7518.xml"> | ||||
<!ENTITY RFC7519 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.7519.xml"> | ||||
<!ENTITY RFC8174 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.8174.xml"> | ||||
<!ENTITY RFC8197 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.8197.xml"> | ||||
<!ENTITY RFC8224 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.8224.xml"> | ||||
<!ENTITY RFC8259 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.8259.xml"> | ||||
<!ENTITY RFC8445 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
nce.RFC.8445.xml"> | ||||
]> | ||||
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | ||||
<?rfc toc="yes"?> | ||||
<?rfc compact="yes"?> | ||||
<?rfc subcompact="no"?> | ||||
<?rfc sortrefs="yes"?> | ||||
<?rfc symrefs="yes"?> | ||||
<rfc submissionType="IETF" category="std" consensus="yes" number="XXXX" ipr="tru | ||||
st200902"> | ||||
<front> | <front> | |||
<title abbrev="SIP Response Code for Rejected Calls">A Session Initiation | <title abbrev="SIP Response Code for Rejected Calls">A Session Initiation | |||
Protocol (SIP) Response Code for Rejected Calls</title> | Protocol (SIP) Response Code for Rejected Calls</title> | |||
<seriesInfo name="RFC" value="8688"/> | ||||
<author fullname="Eric W. Burger" initials="E.W." surname="Burger"> | <author fullname="Eric W. Burger" initials="E.W." surname="Burger"> | |||
<organization>Georgetown University</organization> | <organization>Georgetown University</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>37th & O St, NW</street> | <street>37th & O St, NW</street> | |||
<city>Washington</city> | <city>Washington</city> | |||
<region>DC</region> | <region>DC</region> | |||
<code>20057</code> | <code>20057</code> | |||
<country>USA</country> | <country>United States of America</country> | |||
</postal> | </postal> | |||
<email>eburger@standardstrack.com</email> | <email>eburger@standardstrack.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Bhavik Nagda" initials="B." surname="Nagda"> | <author fullname="Bhavik Nagda" initials="B." surname="Nagda"> | |||
<organization>Massachusetts Institute of Technology</organization> | <organization>Massachusetts Institute of Technology</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>77 Massachusetts Avenue</street> | <street>77 Massachusetts Avenue</street> | |||
<city>Cambridge</city> | <city>Cambridge</city> | |||
<region>MA</region> | <region>MA</region> | |||
<code>02139</code> | <code>02139</code> | |||
<country>USA</country> | <country>United States of America</country> | |||
</postal> | </postal> | |||
<phone/> | <phone/> | |||
<facsimile/> | ||||
<email>nagdab@gmail.com</email> | <email>nagdab@gmail.com</email> | |||
<uri/> | <uri/> | |||
</address> | </address> | |||
</author> | </author> | |||
<!-- If the month and year are both specified and are the current ones, xml2 | <date month="December" year="2019"/> | |||
rfc will fill | ||||
in the current day for you. If only the current year is specified, xml2r | ||||
fc will fill | ||||
in the current day and month for you. If the year is not the current one | ||||
, it is | ||||
necessary to specify at least a month (xml2rfc assumes day="1" if not sp | ||||
ecified for the | ||||
purpose of calculating the expiry date). With drafts it is normally suf | ||||
ficient to | ||||
specify just the year. --> | ||||
<date month="September" year="2019"/> | ||||
<!-- Meta-data Declarations --> | ||||
<area>RAI</area> | <area>RAI</area> | |||
<workgroup>SIPCORE</workgroup> | <workgroup>SIPCORE</workgroup> | |||
<keyword>STIR</keyword> | <keyword>STIR</keyword> | |||
<keyword>SIPCORE</keyword> | <keyword>SIPCORE</keyword> | |||
<keyword>IANA</keyword> | <keyword>IANA</keyword> | |||
<abstract> | <abstract> | |||
<t>This document defines the 608 (Rejected) SIP response code. This | <t>This document defines the 608 (Rejected) Session Initiation Protocol | |||
response code enables calling parties to learn that an intermediary | (SIP) response code. This response code enables calling parties to learn | |||
rejected their call attempt. No one will deliver, and thus no one will | that an intermediary rejected their call attempt. No one will deliver, | |||
answer, the call. As a 6xx code, the caller will be aware that future | and thus answer, the call. As a 6xx code, the caller will be aware that | |||
attempts to contact the same User Agent Server will likely fail. The | future attempts to contact the same User Agent Server will likely fail. | |||
initial use case driving the need for the 608 response code is when the | The initial use case driving the need for the 608 response code is when | |||
intermediary is an analytics engine. In this case, the rejection is by a | the intermediary is an analytics engine. In this case, the rejection is | |||
machine or other process. This contrasts with the 607 (Unwanted) SIP | by a machine or other process. This contrasts with the 607 (Unwanted) | |||
response code, which a human at the target User Agent Server indicated | SIP response code in which a human at the target User Agent Server | |||
the user did not want the call. In some jurisdictions this distinction | indicates the user did not want the call. In some jurisdictions, this | |||
is important. This document also defines the use of the Call-Info header | distinction is important. This document also defines the use of the | |||
field in 608 responses to enable rejected callers to contact entities | Call-Info header field in 608 responses to enable rejected callers to | |||
that blocked their calls in error. This provides a remediation mechanism | contact entities that blocked their calls in error. This provides a | |||
for legal callers that find their calls blocked.</t> | remediation mechanism for legal callers that find their calls | |||
blocked.</t> | ||||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section title="Introduction"> | <section numbered="true" toc="default"> | |||
<name>Introduction</name> | ||||
<t>The IETF has been addressing numerous issues surrounding how to | <t>The IETF has been addressing numerous issues surrounding how to | |||
handle unwanted and, depending on the jurisdiction, illegal calls <xref | handle unwanted and, depending on the jurisdiction, illegal calls <xref | |||
target="RFC5039"/>. <xref target="RFC7340">STIR</xref> and <xref | format="default" target="RFC5039"/>. Secure Telephone Identity Revisited | |||
target="SHAKEN">SHAKEN</xref> address the cryptographic signing and | (STIR) <xref format="default" target="RFC7340"/> and Signature-based | |||
Handling of Asserted information using toKENs (SHAKEN) <xref | ||||
format="default" target="SHAKEN"/> address the cryptographic signing and | ||||
attestation, respectively, of signaling to ensure the integrity and | attestation, respectively, of signaling to ensure the integrity and | |||
authenticity of the asserted caller identity.</t> | authenticity of the asserted caller identity.</t> | |||
<t>This document describes a new <xref target="RFC3261">Session | <t>This document describes a new <xref format="default" | |||
Initiation Protocol (SIP)</xref> response code, 608, which allows | target="RFC3261">Session Initiation Protocol (SIP)</xref> response code, | |||
calling parties to learn that an intermediary rejected their call. As | 608, which allows calling parties to learn that an intermediary rejected | |||
described below, we need a distinct indicator to differentiate between a | their call. As described below, we need a distinct indicator to | |||
user rejection and an intermediary's rejection of a call. In some | differentiate between a user rejection and an intermediary's rejection | |||
jurisdictions, service providers may not be permitted to block calls, | of a call. In some jurisdictions, service providers may not be permitted | |||
even if unwanted by the user, unless there is an explicit user request. | to block calls, even if unwanted by the user, unless there is an | |||
Moreover, users may misidentify the nature of a caller.</t> | explicit user request. Moreover, users may misidentify the nature of a | |||
caller.</t> | ||||
<t>For example, a legitimate caller may call a user who finds the call | <t>For example, a legitimate caller may call a user who finds the call | |||
to be unwanted. However, instead of marking the call as unwanted, the | to be unwanted. However, instead of marking the call as unwanted, the | |||
user may mark the call as illegal. With that information, an analytics | user may mark the call as illegal. With that information, an analytics | |||
engine may determine to block all calls from that source. However, in | engine may determine to block all calls from that source. However, in | |||
some jurisdictions blocking calls from that source for other users may | some jurisdictions, blocking calls from that source for other users may | |||
not be legal. Likewise, one can envision jurisdictions that allow an | not be legal. Likewise, one can envision jurisdictions that allow an | |||
operator to block such calls, but only if there is a remediation | operator to block such calls, but only if there is a remediation | |||
mechanism in place to address false positives.</t> | mechanism in place to address false positives.</t> | |||
<t>Some call blocking services may return responses such as 604 (Does | <t>Some call-blocking services may return responses such as 604 (Does | |||
Not Exist Anywhere). This might be a strategy to try to get a | Not Exist Anywhere). This might be a strategy to try to get a | |||
destination's address removed from a calling database. However, other | destination's address removed from a calling database. However, other | |||
network elements might also interpret this to mean the user truly does | network elements might also interpret this to mean the user truly does | |||
not exist, which might result in the user not being able to receive | not exist, which might result in the user not being able to receive | |||
calls from anyone, even if they wanted to receive the calls. In many | calls from anyone, even if they wanted to receive the calls. In many | |||
jurisdictions, providing such false signaling is also illegal.</t> | jurisdictions, providing such false signaling is also illegal.</t> | |||
<t>The 608 response code addresses this need of remediating falsely | <t>The 608 response code addresses this need of remediating falsely | |||
blocked calls. Specifically, this code informs the SIP User Agent Client | blocked calls. Specifically, this code informs the SIP User Agent Client | |||
(UAC) that an intermediary blocked the call and provides a redress | (UAC) that an intermediary blocked the call and provides a redress | |||
mechanism that allows callers to contact the operator of the | mechanism that allows callers to contact the operator of the | |||
intermediary.</t> | intermediary.</t> | |||
<t>In the current call handling ecosystem, users can explicitly reject a | <t>In the current call handling ecosystem, users can explicitly reject a | |||
call or later mark a call as being unwanted by issuing a <xref | call or later mark a call as being unwanted by issuing a <xref | |||
target="RFC8197">607 SIP response code (Unwanted)</xref>. <xref | format="default" target="RFC8197">607 SIP response code | |||
target="uas_reject"/> and <xref target="reject_ladder"/> show the | (Unwanted)</xref>. Figures <xref format="counter" target="uas_reject"/> | |||
operation of the 607 SIP response code. The User Agent Server (UAS) | and <xref format="counter" target="reject_ladder"/> show the operation | |||
indicates the call was unwanted. As <xref target="RFC8197"/> explains, | of the 607 SIP response code. The User Agent Server (UAS) indicates the | |||
not only does the called party desire to reject that call, they can let | call was unwanted. As <xref format="default" target="RFC8197"/> | |||
their proxy know that they consider future calls from that source | explains, not only does the called party desire to reject that call, | |||
unwanted. Upon receipt of the 607 response from the UAS, the proxy may | they can let their proxy know that they consider future calls from that | |||
send unwanted call indicators, such as the value of the From header | source unwanted. Upon receipt of the 607 response from the UAS, the | |||
field and other information elements, to a call analytics engine. For | proxy may send unwanted call indicators, such as the value of the From | |||
various reasons described in <xref target="RFC8197"/>, if a network | header field and other information elements, to a call analytics engine. | |||
operator receives multiple reports of unwanted calls, that may indicate | For various reasons described in <xref format="default" | |||
that the entity placing the calls is likely to be a source of unwanted | target="RFC8197"/>, if a network operator receives multiple reports of | |||
calls for many people. As such, other customers of the service provider | unwanted calls, that may indicate that the entity placing the calls is | |||
may want the service provider to automatically reject calls on their | likely to be a source of unwanted calls for many people. As such, other | |||
behalf.</t> | customers of the service provider may want the service provider to | |||
automatically reject calls on their behalf.</t> | ||||
<t>There is another value of the 607 rejection code. Presuming the proxy | <t>There is another value of the 607 rejection code. Presuming the proxy | |||
forwards the response code to the User Agent Client (UAC), the calling | forwards the response code to the UAC, the calling UAC or intervening | |||
UAC or intervening proxies will also learn the user is not interested in | proxies will also learn the user is not interested in receiving calls | |||
receiving calls from that sender.</t> | from that sender.</t> | |||
<figure anchor="uas_reject" title="Unwanted (607) Call Flow"> | <figure anchor="uas_reject"> | |||
<artwork><![CDATA[ | <name>Unwanted (607) Call Flow</name> | |||
+-----------+ | ||||
| Call | | ||||
| Analytics | | ||||
| Engine | | ||||
+-----------+ | ||||
^ | (likely not SIP) | ||||
| v | ||||
+-----------+ | ||||
+-----+ 607 | Called | 607 +-----+ | ||||
| UAC | <--------- | Party | <-------- | UAS | | ||||
+-----+ | Proxy | +-----+ | ||||
+-----------+ | ||||
]]></artwork> | <artwork align="center" alt="" name="" type="ascii-art"><![CDATA[ | |||
+-----------+ | ||||
| Call | | ||||
| Analytics | | ||||
| Engine | | ||||
+-----------+ | ||||
^ | (likely not SIP) | ||||
| v | ||||
+-----------+ | ||||
+-----+ 607 | Called | 607 +-----+ | ||||
| UAC | <--------- | Party | <-------- | UAS | | ||||
+-----+ | Proxy | +-----+ | ||||
+-----------+ | ||||
]]></artwork> | ||||
</figure> | </figure> | |||
<t>For calls rejected with a 607 from a legitimate caller, receiving a | <t>For calls rejected with a 607 from a legitimate caller, receiving a | |||
607 response code can inform the caller to stop attempting to call the | 607 response code can inform the caller to stop attempting to call the | |||
user. Moreover, if a legitimate caller believes the user is rejecting | user. Moreover, if a legitimate caller believes the user is rejecting | |||
their calls in error, they can use other channels to contact the user. | their calls in error, they can use other channels to contact the user. | |||
For example, if a pharmacy calls a user to let them know their | For example, if a pharmacy calls a user to let them know their | |||
prescription is available for pickup and the user mistakenly thinks the | prescription is available for pickup and the user mistakenly thinks the | |||
call is unwanted and issues a 607 response code, the pharmacy, having an | call is unwanted and issues a 607 response code, the pharmacy, having an | |||
existing relationship with the customer, can send the user an email or | existing relationship with the customer, can send the user an email or | |||
skipping to change at line 227 ¶ | skipping to change at line 195 ¶ | |||
<t>Many systems that allow the user to mark the call unwanted (e.g., | <t>Many systems that allow the user to mark the call unwanted (e.g., | |||
with the 607 response code) also allow the user to change their mind and | with the 607 response code) also allow the user to change their mind and | |||
unmark such calls. This mechanism is relatively easy to implement as the | unmark such calls. This mechanism is relatively easy to implement as the | |||
user usually has a direct relationship with the service provider that is | user usually has a direct relationship with the service provider that is | |||
blocking calls.</t> | blocking calls.</t> | |||
<t>However, things become more complicated if an intermediary, such as a | <t>However, things become more complicated if an intermediary, such as a | |||
third-party provider of call management services that classifies calls | third-party provider of call management services that classifies calls | |||
based on the relative likelihood that the call is unwanted, | based on the relative likelihood that the call is unwanted, | |||
misidentifies the call as unwanted. <xref target="cae_reject"/> shows | misidentifies the call as unwanted. <xref format="default" | |||
this case. Note that the UAS typically does not receive an INVITE since | target="cae_reject"/> shows this case. Note that the UAS typically does | |||
the called party proxy rejects the call on behalf of the user. In this | not receive an INVITE since the called party proxy rejects the call on | |||
situation, it would be beneficial for the caller to learn who rejected | behalf of the user. In this situation, it would be beneficial for the | |||
the call, so they can correct the misidentification.</t> | caller to learn who rejected the call so they can correct the | |||
misidentification.</t> | ||||
<figure anchor="reject_ladder" title="Unwanted (607) Ladder Diagram"> | <figure anchor="reject_ladder"> | |||
<artwork><![CDATA[ | <name>Unwanted (607) Ladder Diagram</name> | |||
+--------+ +-----------+ | ||||
| Called | | Call | | ||||
+-----+ | Party | | Analytics | +-----+ | ||||
| UAC | | Proxy | | Engine | | UAS | | ||||
+-----+ +--------+ +-----------+ +-----+ | ||||
| INVITE | | | | ||||
| --------------> | Is call OK? | | | ||||
| |------------------->| | | ||||
| | | | | ||||
| | Yes | | | ||||
| |<-------------------| | | ||||
| | | | | ||||
| | INVITE | | | ||||
| | ------------------------------> | | ||||
| | | | | ||||
| | | 607 | | ||||
| | <------------------------------ | | ||||
| | | | | ||||
| | Unwanted call | | | ||||
| 607 | -----------------> | | | ||||
| <-------------- | indicators | | | ||||
| | | | | ||||
<artwork align="center" alt="" name="" type="call-flow"><![CDATA[ | ||||
+--------+ +-----------+ | ||||
| Called | | Call | | ||||
+-----+ | Party | | Analytics | +-----+ | ||||
| UAC | | Proxy | | Engine | | UAS | | ||||
+-----+ +--------+ +-----------+ +-----+ | ||||
| INVITE | | | | ||||
| --------------> | Is call OK? | | | ||||
| |------------------->| | | ||||
| | | | | ||||
| | Yes | | | ||||
| |<-------------------| | | ||||
| | | | | ||||
| | INVITE | | | ||||
| | ------------------------------> | | ||||
| | | | | ||||
| | | 607 | | ||||
| | <------------------------------ | | ||||
| | | | | ||||
| | Unwanted call | | | ||||
| 607 | -----------------> | | | ||||
| <-------------- | indicators | | | ||||
| | | | | ||||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<figure anchor="cae_reject" title="Rejected (608) Call Flow"> | <figure anchor="cae_reject"> | |||
<artwork><![CDATA[ | <name>Rejected (608) Call Flow</name> | |||
<artwork align="center" alt="" name="" type="ascii-art"><![CDATA[ | ||||
+-----------+ | +-----------+ | |||
| Call | | | Call | | |||
| Analytics | | | Analytics | | |||
| Engine | | | Engine | | |||
+-----------+ | +-----------+ | |||
^ | (likely not SIP) | ^ | (likely not SIP) | |||
| v | | v | |||
+-----------+ | +-----------+ | |||
+-----+ 608 | Called | +-----+ | +-----+ 608 | Called | +-----+ | |||
| UAC | <--------- | Party | | UAS | | | UAC | <--------- | Party | | UAS | | |||
+-----+ | Proxy | +-----+ | +-----+ | Proxy | +-----+ | |||
+-----------+ | +-----------+ | |||
]]></artwork> | ||||
]]></artwork> | ||||
</figure> | </figure> | |||
<t>In this situation, one might consider to have the intermediary use | <t>In this situation, one might consider having the intermediary use the | |||
the 607 response code. 607 indicates to the caller the subscriber does | 607 response code. 607 indicates to the caller that the subscriber does | |||
not want the call. However, <xref target="RFC8197"/> specifies that one | not want the call. However, <xref format="default" target="RFC8197"/> | |||
of the uses of 607 is to inform analytics engines that a user (human) | specifies that one of the uses of 607 is to inform analytics engines | |||
has rejected a call. The problem here is that network elements | that a user (human) has rejected a call. The problem here is that | |||
downstream from the intermediary might interpret the 607 as coming from | network elements downstream from the intermediary might interpret the | |||
a user (human) who has marked the call as unwanted, as opposed to coming | 607 as coming from a user (human) who has marked the call as unwanted, | |||
from an algorithm using statistics or machine learning to reject the | as opposed to coming from an algorithm using statistics or machine | |||
call. An algorithm can be vulnerable to the <xref target="BaseRate">base | learning to reject the call. An algorithm can be vulnerable to the | |||
rate fallacy</xref> rejecting the call. In other words, those downstream | base-rate fallacy <xref format="default" target="BaseRate"/> rejecting | |||
entities should not rely on another entity 'deciding' the call is | the call. In other words, those downstream entities should not rely on | |||
unwanted. By distinguishing between a (human) user rejection and an | another entity "deciding" the call is unwanted. By distinguishing | |||
intermediary engine's statistical rejection, a downstream network | between a (human) user rejection and an intermediary engine's | |||
element that sees a 607 response code can weigh it as a human rejection | statistical rejection, a downstream network element that sees a 607 | |||
in its call analytics, versus deciding whether to consider a 608 at all, | response code can weigh it as a human rejection in its call analytics, | |||
and if so, weighing it appropriately.</t> | versus deciding whether to consider a 608 at all, and if so, weighing it | |||
appropriately.</t> | ||||
<t>It is useful for blocked callers to have a redress mechanism. One can | <t>It is useful for blocked callers to have a redress mechanism. One can | |||
imagine that some jurisdictions will require it. However, we must be | imagine that some jurisdictions will require it. However, we must be | |||
mindful that most of the calls that intermediaries block will, in fact, | mindful that most of the calls that intermediaries block will, in fact, | |||
be illegal and eligible for blocking. Thus, providing alternate contact | be illegal and eligible for blocking. Thus, providing alternate contact | |||
information for a user would be counterproductive to protecting that | information for a user would be counterproductive to protecting that | |||
user from illegal communications. This is another reason we do not | user from illegal communications. This is another reason we do not | |||
propose to simply allow alternate contact information in a 607 response | propose to simply allow alternate contact information in a 607 response | |||
message.</t> | message.</t> | |||
<t>Why do we not use the same mechanism an analytics service provider | <t>Why do we not use the same mechanism an analytics service provider | |||
offers their customers? Specifically, why not have the analytics service | offers their customers? Specifically, why not have the analytics service | |||
provider allow the called party to correct a call blocked in error? The | provider allow the called party to correct a call blocked in error? The | |||
reason is while there is an existing relationship between the customer | reason is that while there is an existing relationship between the | |||
(called party) and the analytics service provider, it is unlikely there | customer (called party) and the analytics service provider, it is | |||
is a relationship between the caller and the analytics service provider. | unlikely there is a relationship between the caller and the analytics | |||
Moreover, there are numerous call blocking providers in the ecosystem. | service provider. Moreover, there are numerous call blocking providers | |||
Therefore, we need a mechanism for indicating an intermediary rejected a | in the ecosystem. Therefore, we need a mechanism for indicating an | |||
call that also provides contact information for the operator of that | intermediary rejected a call that also provides contact information for | |||
intermediary, without exposing the target user's contact | the operator of that intermediary without exposing the target user's | |||
information.</t> | contact information.</t> | |||
<t>The protocol described in this document uses existing SIP protocol | <t>The protocol described in this document uses existing SIP protocol | |||
mechanisms for specifying the redress mechanism. In the Call-Info header | mechanisms for specifying the redress mechanism. In the Call-Info header | |||
passed back to the UAC, we send additional information specifying a | field passed back to the UAC, we send additional information specifying | |||
redress address. We choose to encode the redress address using <xref | a redress address. We choose to encode the redress address using <xref | |||
target="RFC7095">jCard</xref>. As we will see later in this document, | format="default" target="RFC7095">jCard</xref>. As we will see later in | |||
this information needs to have its own, application-layer integrity | this document, this information needs to have its own application-layer | |||
protection. Thus, we use jCard rather than <xref | integrity protection. Thus, we use jCard rather than <xref | |||
target="RFC6350">vCard</xref> as we have a marshaling mechanism for | format="default" target="RFC6350">vCard</xref>, as we have a marshaling | |||
creating a JavaScript Object Notation <xref | mechanism for creating a JavaScript Object Notation <xref | |||
target="RFC8259">(JSON)</xref> object, such as a jCard, and a standard | format="default" target="RFC8259">(JSON)</xref> object, such as a jCard, | |||
integrity format for such an object, namely JSON Web Signature <xref | and a standard integrity format for such an object, namely, JSON Web | |||
target="RFC7515">(JWS)</xref>. The SIP community is familiar with this | Signature <xref format="default" target="RFC7515">(JWS)</xref>. The SIP | |||
concept as it is the mechanism used by <xref | community is familiar with this concept as it is the mechanism used by | |||
target="RFC8224">STIR</xref>.</t> | <xref format="default" target="RFC8224">STIR</xref>.</t> | |||
<t>Integrity protecting the jCard with a cryptographic signature might | <t>Integrity protecting the jCard with a cryptographic signature might | |||
seem unnecessary at first, but it is essential to preventing potential | seem unnecessary at first, but it is essential to preventing potential | |||
network attacks. <xref target="Security"/> describes the attack and why | network attacks. <xref format="default" target="Security"/> describes | |||
we sign the jCard in more detail.</t> | the attack and why we sign the jCard in more detail.</t> | |||
</section> | ||||
<section title="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"/> when, and only when, | ||||
they appear in all capitals, as shown here.</t> | ||||
</section> | </section> | |||
<section title="Protocol Operation"> | <section numbered="true" toc="default"> | |||
<t>This section uses the term 'intermediary' to mean the entity that | <name>Terminology</name> | |||
acts as a SIP User Agent Server (UAS) on behalf of the user in the | ||||
network, as opposed to the user's UAS (usually, but not necessarily, | ||||
their phone). The intermediary could be a back-to-back user agent | ||||
(B2BUA) or a SIP Proxy.</t> | ||||
<t><xref target="cae_ladder"/> shows an overview of the call flow for a | <t> The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
rejected call.</t> | "<bcp14>REQUIRED</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> | ||||
<figure anchor="cae_ladder" title="Rejected (608) Ladder Diagram"> | <section numbered="true" toc="default"> | |||
<artwork><![CDATA[ | <name>Protocol Operation</name> | |||
+--------+ +-----------+ | ||||
| Called | | Call | | ||||
+-----+ | Party | | Analytics | +-----+ | ||||
| UAC | | Proxy | | Engine | | UAS | | ||||
+-----+ +--------+ +-----------+ +-----+ | ||||
| INVITE | | | | ||||
| --------------> | Information from | | | ||||
| | -----------------> | | | ||||
| | INVITE | | | ||||
| | Reject | | | ||||
| 608 | <----------------- | | | ||||
| <-------------- | call | | | ||||
| | | | | ||||
]]></artwork> | <t>This section uses the term "intermediary" to mean the entity that | |||
acts as a SIP UAS on behalf of the user in the network as opposed to the | ||||
user's UAS (usually, but not necessarily, their phone). The intermediary | ||||
could be a back-to-back user agent (B2BUA) or a SIP Proxy.</t> | ||||
<t><xref format="default" target="cae_ladder"/> shows an overview of the | ||||
call flow for a rejected call.</t> | ||||
<figure anchor="cae_ladder"> | ||||
<name>Rejected (608) Ladder Diagram</name> | ||||
<artwork align="center" alt="" name="" type="call-flow"><![CDATA[ | ||||
+--------+ +-----------+ | ||||
| Called | | Call | | ||||
+-----+ | Party | | Analytics | +-----+ | ||||
| UAC | | Proxy | | Engine | | UAS | | ||||
+-----+ +--------+ +-----------+ +-----+ | ||||
| INVITE | | | | ||||
| --------------> | Is call OK? | | | ||||
| |------------------->| | | ||||
| | | | | ||||
| | Yes | | | ||||
| |<-------------------| | | ||||
| | | | | ||||
| | INVITE | | | ||||
| | ------------------------------> | | ||||
| | | | | ||||
| | | 607 | | ||||
| | <------------------------------ | | ||||
| | | | | ||||
| | Unwanted call | | | ||||
| 607 | -----------------> | | | ||||
| <-------------- | indicators | | | ||||
| | | | | ||||
]]></artwork> | ||||
</figure> | </figure> | |||
<section numbered="true" toc="default"> | ||||
<section title="Intermediary Operation"> | <name>Intermediary Operation</name> | |||
<t>An intermediary MAY issue the 608 response code in a failure | <t>An intermediary <bcp14>MAY</bcp14> issue the 608 response code in a | |||
response for an INVITE, MESSAGE, SUBSCRIBE, or other out-of-dialog | failure response for an INVITE, MESSAGE, SUBSCRIBE, or other | |||
<xref target="RFC3261">SIP</xref> request to indicate that an | out-of-dialog <xref format="default" target="RFC3261">SIP</xref> | |||
intermediary rejected the offered communication as unwanted by the | request to indicate that an intermediary rejected the offered | |||
user. An intermediary MAY issue the 608 as the value of the "cause" | communication as unwanted by the user. An intermediary | |||
parameter of a SIP reason-value in a Reason header field <xref | <bcp14>MAY</bcp14> issue the 608 as the value of the "cause" parameter | |||
of a SIP reason-value in a Reason header field <xref format="default" | ||||
target="RFC3326"/>.</t> | target="RFC3326"/>.</t> | |||
<t>If an intermediary issues a 608 code and there are no indicators | <t>If an intermediary issues a 608 code and there are no indicators | |||
the calling party will use the contents of the Call-Info header field | the calling party will use the contents of the Call-Info header field | |||
for malicious purposes (see <xref target="Security"/>), the | for malicious purposes (see <xref format="default" | |||
intermediary MUST include a Call-Info header field in the | target="Security"/>), the intermediary <bcp14>MUST</bcp14> include a | |||
response.</t> | Call-Info header field in the response.</t> | |||
<t>If there is a Call-Info header field, it MUST have the 'purpose' | <t>If there is a Call-Info header field, it <bcp14>MUST</bcp14> have | |||
parameter of 'jwscard'. The value of the Call-Info header field MUST | the "purpose" parameter of "jwscard". The value of the Call-Info | |||
refer to a valid JSON Web Signature (<xref | header field <bcp14>MUST</bcp14> refer to a valid JSON Web Signature | |||
target="RFC7515">JWS</xref>) encoding of a <xref | (JWS) <xref format="default" target="RFC7515"/> encoding of a <xref | |||
target="RFC7095">jCard</xref> object. The following section describes | format="default" target="RFC7095">jCard</xref> object. The following | |||
the construction of the JWS.</t> | section describes the construction of the JWS.</t> | |||
<t>Proxies need to be mindful that a downstream intermediary may | <t>Proxies need to be mindful that a downstream intermediary may | |||
reject the attempt with a 608 while other paths may still be in | reject the attempt with a 608 while other paths may still be in | |||
progress. In this situation, the requirements stated in Section 16.7 | progress. In this situation, the requirements stated in <xref | |||
of <xref target="RFC3261"/> apply. Specifically, the proxy should | section="16.7" sectionFormat="of" target="RFC3261"/> apply. | |||
cancel pending transactions and must not create any new branches. Note | Specifically, the proxy should cancel pending transactions and must | |||
this is not a new requirement but simply pointing out the existing 6xx | not create any new branches. Note this is not a new requirement but | |||
protocol mechanism in SIP.</t> | simply pointing out the existing 6xx protocol mechanism in SIP.</t> | |||
</section> | </section> | |||
<section title="JWS Construction"> | <section numbered="true" toc="default"> | |||
<name>JWS Construction</name> | ||||
<t>The intermediary constructs the JWS of the jCard as follows.</t> | <t>The intermediary constructs the JWS of the jCard as follows.</t> | |||
<section title="JOSE Header"> | <section numbered="true" toc="default"> | |||
<t>The Javascript Object Signing and Encryption (JOSE) header MUST | <name>JOSE Header</name> | |||
include the typ, alg, and x5u parameters from <xref | ||||
target="RFC7515">JWS</xref>. The typ parameter MUST have the value | <t>The Javascript Object Signing and Encryption (JOSE) header | |||
"vcard+json". Implementations MUST support ES256 as JSON Web | <bcp14>MUST</bcp14> include the typ, alg, and x5u parameters from | |||
Algorithms (<xref target="RFC7518">JWA</xref>) defines it, and MAY | <xref format="default" target="RFC7515">JWS</xref>. The typ | |||
support other registered signature algorithms. Finally, the x5u | parameter <bcp14>MUST</bcp14> have the value "vcard+json". | |||
parameter MUST be a URI that resolves to the public key certificate | Implementations <bcp14>MUST</bcp14> support ES256 as JSON Web | |||
corresponding to the key used to digitally sign the JWS.</t> | Algorithms (JWA) <xref format="default" target="RFC7518"/> defines | |||
it and <bcp14>MAY</bcp14> support other registered signature | ||||
algorithms. Finally, the x5u parameter <bcp14>MUST</bcp14> be a URI | ||||
that resolves to the public key certificate corresponding to the key | ||||
used to digitally sign the JWS.</t> | ||||
</section> | </section> | |||
<section anchor="JWT" title="JWT Payload"> | <section anchor="JWT" numbered="true" toc="default"> | |||
<name>JWT Payload</name> | ||||
<t>The payload contains two JSON values. The first JSON Web Token | <t>The payload contains two JSON values. The first JSON Web Token | |||
(JWT) claim that MUST be present is the <xref target="RFC7519">iat | (JWT) claim that <bcp14>MUST</bcp14> be present is the <xref | |||
(issued at) claim</xref>. The "iat" MUST be set to the date and time | format="default" target="RFC7519">"iat" (issued at) claim</xref>. | |||
of the issuance of the 608 response. This mandatory component | The "iat" <bcp14>MUST</bcp14> be set to the date and time of the | |||
protects the response from replay attacks.</t> | issuance of the 608 response. This mandatory component protects the | |||
response from replay attacks.</t> | ||||
<t>The second JWT claim that MUST be present is the "jcard" claim. | <t>The second JWT claim that <bcp14>MUST</bcp14> be present is the | |||
The value of the <xref target="RFC7095">jcard</xref> claim is a JSON | "jcard" claim. The value of the <xref format="default" | |||
array conforming to the JSON jCard data format defined in RFC7095 | target="RFC7095">jcard</xref> claim is a JSON array conforming to | |||
<xref target="JWT-IANA"/> describes the registration. In the | the JSON jCard data format defined in <xref target="RFC7095"/>. <xref | |||
construction of the jcard claim, the "jcard" MUST include at least | format="default" target="JWT-IANA"/> describes the registration. In | |||
one of the URL, EMAIL, TEL, or ADR properties. UACs supporting this | the construction of the jcard claim, the "jcard" <bcp14>MUST</bcp14> | |||
specification MUST be prepared to receive a full jCard. Call | include at least one of the URL, EMAIL, TEL, or ADR properties. UACs | |||
originators (at the UAC) can use the information returned by the | supporting this specification <bcp14>MUST</bcp14> be prepared to | |||
jCard to contact the intermediary that rejected the call to appeal | receive a full jCard. Call originators (at the UAC) can use the | |||
the intermediary's blocking of the call attempt. What the | information returned by the jCard to contact the intermediary that | |||
intermediary does if the blocked caller contacts the intermediary is | rejected the call to appeal the intermediary's blocking of the call | |||
outside the scope of this document.</t> | attempt. What the intermediary does if the blocked caller contacts | |||
the intermediary is outside the scope of this document.</t> | ||||
</section> | </section> | |||
<section anchor="s.JWS" title="JWS Signature"> | <section anchor="s.JWS" numbered="true" toc="default"> | |||
<t><xref target="RFC7515">JWS</xref> specifies the procedure for | <name>JWS Signature</name> | |||
calculating the signature over the jCard JWT. <xref | ||||
target="EXAMPLES"/> of this document has a detailed example on | <t><xref format="default" target="RFC7515">JWS</xref> specifies the | |||
constructing the JWS, including the signature.</t> | procedure for calculating the signature over the jCard JWT. <xref | |||
format="default" target="EXAMPLES"/> of this document has a detailed | ||||
example on constructing the JWS, including the signature.</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section title="UAC Operation"> | <section numbered="true" toc="default"> | |||
<t>A UAC conforming to this specification MUST include the sip.608 | <name>UAC Operation</name> | |||
feature capability indicator in the Feature-Caps header field of the | ||||
INVITE request.</t> | <t>A UAC conforming to this specification <bcp14>MUST</bcp14> include | |||
the sip.608 feature-capability indicator in the Feature-Caps header | ||||
field of the INVITE request.</t> | ||||
<t>Upon receiving a 608 response, UACs perform normal SIP processing | <t>Upon receiving a 608 response, UACs perform normal SIP processing | |||
for 6xx responses.</t> | for 6xx responses.</t> | |||
<t>As for the disposition of the jCard itself, the UAC MUST check the | <t>As for the disposition of the jCard itself, the UAC | |||
"iat" claim in the JWT. As noted in <xref target="s.JWS"/>, we are | <bcp14>MUST</bcp14> check the "iat" claim in the JWT. As noted in | |||
concerned about replay attacks. Therefore, the UAC MUST reject jCards | <xref format="default" target="JWT"/>, we are concerned about replay | |||
that come with an expired "iat". The definition of "expired" is a | attacks. Therefore, the UAC <bcp14>MUST</bcp14> reject jCards that | |||
matter of local policy. A reasonable value would be on the order of a | come with an expired "iat". The definition of "expired" is a matter of | |||
minute due to clock drift and the possibility of the playing of an | local policy. A reasonable value would be on the order of a minute due | |||
audio announcement before the delivery of the 608 response.</t> | to clock drift and the possibility of the playing of an audio | |||
announcement before the delivery of the 608 response.</t> | ||||
</section> | </section> | |||
<section title="Legacy Interoperation"> | <section numbered="true" toc="default"> | |||
<name>Legacy Interoperation</name> | ||||
<t>If the UAC indicates support for 608 and the intermediary issues a | <t>If the UAC indicates support for 608 and the intermediary issues a | |||
608, life is good, as the UAC will receive all the information it | 608, life is good, as the UAC will receive all the information it | |||
needs to remediate an erroneous block by an intermediary. However, | needs to remediate an erroneous block by an intermediary. However, | |||
what if the UAC does not understand 608? For example, how can we | what if the UAC does not understand 608? For example, how can we | |||
support callers from a legacy, non-SIP public switched network | support callers from a legacy, non-SIP, public-switched network | |||
connecting to the SIP network via a media gateway?</t> | connecting to the SIP network via a media gateway?</t> | |||
<t>We address this situation by having the first network element that | <t>We address this situation by having the first network element that | |||
conforms with this specification play an announcement in the media. | conforms with this specification play an announcement. See <xref | |||
See <xref target="announcement"/> for requirements on the | format="default" target="announcement"/> for requirements on the | |||
announcement. The simple rule is a network element that inserts the | announcement. The simple rule is a network element that inserts the | |||
sip.608 feature capability MUST be able to convey at a minimum how to | sip.608 feature capability <bcp14>MUST</bcp14> be able to convey at a | |||
contact the operator of the intermediary that rejected the call | minimum how to contact the operator of the intermediary that rejected | |||
attempt.</t> | the call attempt.</t> | |||
<t>The degenerate case is the intermediary is the only element that | <t>The degenerate case is the intermediary is the only element that | |||
understands the semantics of the 608 response code. Obviously, any SIP | understands the semantics of the 608 response code. Obviously, any SIP | |||
device will understand that a 608 response code is a 6xx error. | device will understand that a 608 response code is a 6xx error. | |||
However, there are no other elements in the call path that understand | However, there are no other elements in the call path that understand | |||
the meaning of the value of the Call-Info header field. The | the meaning of the value of the Call-Info header field. The | |||
intermediary knows this is the case as the INVITE request will not | intermediary knows this is the case as the INVITE request will not | |||
have the sip.608 feature capability. In this case, one can consider | have the sip.608 feature capability. In this case, one can consider | |||
the intermediary to be the element 'inserting' a virtual sip.608 | the intermediary to be the element "inserting" a virtual sip.608 | |||
feature capability. If the caveats described in <xref | feature capability. If the caveats described in Sections <xref | |||
target="announcement"/> and <xref target="Security"/> do not hold, the | format="counter" target="announcement"/> and <xref format="counter" | |||
intermediary MUST play the announcement.</t> | target="Security"/> do not hold, the intermediary <bcp14>MUST</bcp14> | |||
play the announcement.</t> | ||||
<t>Now we take the case where a network element that understands the | <t>Now we take the case where a network element that understands the | |||
608 response code receives an INVITE for further processing. A network | 608 response code receives an INVITE for further processing. A network | |||
element conforming with this specification MUST insert the sip.608 | element conforming with this specification <bcp14>MUST</bcp14> insert | |||
feature capability, per the behaviors described in Section 4.2 of | the sip.608 feature capability per the behaviors described in <xref | |||
<xref target="RFC6809"/>.</t> | section="4.2" sectionFormat="of" target="RFC6809"/>.</t> | |||
<t>Do note that even if a network element plays an announcement | <t>Do note that even if a network element plays an announcement | |||
describing the contents of the 608 response message, the network | describing the contents of the 608 response message, the network | |||
element MUST forward the 608 response code message as the final | element <bcp14>MUST</bcp14> forward the 608 response code message as | |||
response to the INVITE.</t> | the final response to the INVITE.</t> | |||
<t>One aspect of using a feature capability is that only the network | <t>One aspect of using a feature capability is that only the network | |||
elements that will either consume (UAC) or play an announcement (media | elements that will either consume (UAC) or play an announcement (media | |||
gateway, session border controller (<xref | gateway, session border controller (SBC) <xref format="default" | |||
target="RFC7092">SBC</xref>), or proxy) need to understand the sip.608 | target="RFC7092"/>, or proxy) need to understand the sip.608 feature | |||
feature capability. If the other network elements conform to Section | capability. If the other network elements conform to <xref | |||
16.6 of <xref target="RFC3261"/>, they will pass header fields such as | section="16.6" sectionFormat="of" target="RFC3261"/>, they will pass | |||
"Feature-Caps: *;+sip.608" unmodified and without need for | header fields such as "Feature-Caps: *;+sip.608" unmodified and | |||
upgrade.</t> | without need for upgrade.</t> | |||
<t>Because the ultimate disposition of the call attempt will be a | <t>Because the ultimate disposition of the call attempt will be a | |||
600-class response, the network element conveying the announcement in | 600-class response, the network element conveying the announcement in | |||
the legacy direction MUST use the 183 Session Progress response to | the legacy direction <bcp14>MUST</bcp14> use the 183 Session Progress | |||
establish the media session. Because of the small chance the UAC is an | response to establish the media session. Because of the small chance | |||
extremely old legacy device and is using UDP, the UAC MUST include | the UAC is an extremely old legacy device and is using UDP, the UAC | |||
support for <xref target="RFC3262">100Rel</xref> in its INVITE and the | <bcp14>MUST</bcp14> include support for <xref format="default" | |||
network element conveying the announcement MUST Require 100Rel in the | target="RFC3262">100rel</xref> in its INVITE, the network element | |||
183 and the UAC MUST issue a PRACK to which the network element MUST | conveying the announcement <bcp14>MUST</bcp14> Require 100rel in the | |||
respond 200 OK PRACK.</t> | 183, and the UAC <bcp14>MUST</bcp14> issue a Provisional Response | |||
ACKnowledgement (PRACK) to which the network element | ||||
<bcp14>MUST</bcp14> respond 200 OK PRACK.</t> | ||||
</section> | </section> | |||
<section anchor="announcement" title="Announcement Requirements"> | <section anchor="announcement" numbered="true" toc="default"> | |||
<name>Announcement Requirements</name> | ||||
<t>There are a few requirements on the element that handles the | <t>There are a few requirements on the element that handles the | |||
announcement for legacy interoperation.</t> | announcement for legacy interoperation.</t> | |||
<t>As noted above, the element that inserts the sip.608 feature | <t>As noted above, the element that inserts the sip.608 feature | |||
capability is responsible for conveying the information referenced by | capability is responsible for conveying the information referenced by | |||
the Call-Info header field in the 608 response message. However, this | the Call-Info header field in the 608 response message. However, this | |||
specification does not mandate how to convey that information.</t> | specification does not mandate how to convey that information.</t> | |||
<t>Let us take the case where a telecommunications service provider | <t>Let us take the case where a telecommunications service provider | |||
controls the element inserting the sip.608 feature capability. It | controls the element inserting the sip.608 feature capability. It | |||
would be reasonable to expect the service provider would play an | would be reasonable to expect the service provider would play an | |||
announcement in the media path towards the UAC (caller). It is | announcement in the media path towards the UAC (caller). It is | |||
important to note the network element should be mindful of the media | important to note the network element should be mindful of the media | |||
type requested by the UAC as it formulates the announcement. For | type requested by the UAC as it formulates the announcement. For | |||
example, it would make sense for an INVITE that only indicated audio | example, it would make sense for an INVITE that only indicated audio | |||
codecs in the Session Description Protocol <xref | codecs in the <xref format="default" target="RFC4566">Session | |||
target="RFC4566">(SDP)</xref> to result in an audio announcement. | Description Protocol (SDP)</xref> to result in an audio announcement. | |||
Likewise, if the INVITE only indicated a <xref | Likewise, if the INVITE only indicated <xref format="default" | |||
target="RFC4103">real-time text codec</xref> and the network element | target="RFC4103">real-time text</xref> and the network element can | |||
can render the information in the requested media format, the network | render the information in the requested media format, the network | |||
element should send the information in a text format.</t> | element should send the information in a text format.</t> | |||
<t>It is also possible for the network element inserting the sip.608 | <t>It is also possible for the network element inserting the sip.608 | |||
feature capability to be under the control of the same entity that | feature capability to be under the control of the same entity that | |||
controls the UAC. For example, a large call center might have legacy | controls the UAC. For example, a large call center might have legacy | |||
UACs, but have a modern outbound calling proxy that understands the | UACs, but have a modern outbound calling proxy that understands the | |||
full semantics of the 608 response code. In this case, it is enough | full semantics of the 608 response code. In this case, it is enough | |||
for the outbound calling proxy to digest the Call-Info information and | for the outbound calling proxy to digest the Call-Info information and | |||
handle the information digitally, rather than 'transcoding' the | handle the information digitally rather than "transcoding" the | |||
Call-Info information for presentation to the caller.</t> | Call-Info information for presentation to the caller.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="EXAMPLES" title="Examples"> | <section anchor="EXAMPLES" numbered="true" toc="default"> | |||
<name>Examples</name> | ||||
<t>These examples are not normative, do not include all protocol | <t>These examples are not normative, do not include all protocol | |||
elements, and may have errors. Review the protocol documents for actual | elements, and may have errors. Review the protocol documents for actual | |||
syntax and semantics of the protocol elements.</t> | syntax and semantics of the protocol elements.</t> | |||
<section title="Full Exchange"> | <section numbered="true" toc="default"> | |||
<t>Given an INVITE, shamelessly taken from <xref target="SHAKEN"/>, | <name>Full Exchange</name> | |||
with the line breaks in the Identity header field for display purposes | ||||
only:</t> | ||||
<figure> | <t>Given an INVITE, shamelessly taken from <xref format="default" | |||
<artwork><![CDATA[ | target="SHAKEN"/>, with the line breaks in the Identity header field | |||
for display purposes only:</t> | ||||
<sourcecode name="" type=""><![CDATA[ | ||||
INVITE sip:+12155550113@tel.one.example.net SIP/2.0 | INVITE sip:+12155550113@tel.one.example.net SIP/2.0 | |||
Max-Forwards: 69 | Max-Forwards: 69 | |||
Contact: <sip:+12155550112@[2001:db8::12]:50207;rinstance=9da3088f3> | Contact: <sip:+12155550112@[2001:db8::12]:50207;rinstance=9da3088f3> | |||
To: <sip:+12155550113@tel.one.example.net> | To: <sip:+12155550113@tel.one.example.net> | |||
From: "Alice" <sip:+12155550112@tel.two.example.net>;tag=614bdb40 | From: "Alice" <sip:+12155550112@tel.two.example.net>;tag=614bdb40 | |||
Call-ID: 79048YzkxNDA5NTI1MzA0OWFjOTFkMmFlODhiNTI2OWQ1ZTI | Call-ID: 79048YzkxNDA5NTI1MzA0OWFjOTFkMmFlODhiNTI2OWQ1ZTI | |||
P-Asserted-Identity: "Alice"<sip:+12155550112@tel.two.example.net>, | P-Asserted-Identity: "Alice"<sip:+12155550112@tel.two.example.net>, | |||
<tel:+12155550112> | <tel:+12155550112> | |||
CSeq: 2 INVITE | CSeq: 2 INVITE | |||
Allow: SUBSCRIBE, NOTIFY, INVITE, ACK, CANCEL, BYE, REFER, INFO, | Allow: SUBSCRIBE, NOTIFY, INVITE, ACK, CANCEL, BYE, REFER, INFO, | |||
MESSAGE, OPTIONS | MESSAGE, OPTIONS | |||
Content-Type: application/sdp | Content-Type: application/sdp | |||
Date: Tue, 16 Aug 2016 19:23:38 GMT | Date: Tue, 16 Aug 2016 19:23:38 GMT | |||
Feature-Caps: *;+sip.608 | Feature-Caps: *;+sip.608 | |||
Identity: eyJhbGciOiJFUzI1NiIsInR5cCI6InBhc3Nwb3J0IiwicHB0Ijoic2hha2V | Identity: eyJhbGciOiJFUzI1NiIsInR5cCI6InBhc3Nwb3J0IiwicHB0Ijoic2hha2V | |||
uIiwieDV1IjoiaHR0cDovL2NlcnQuZXhhbXBsZTIubmV0L2V4YW1wbGUuY2VydCJ9.eyJ | uIiwieDV1IjoiaHR0cDovL2NlcnQuZXhhbXBsZTIubmV0L2V4YW1wbGUuY2VydCJ9.eyJ | |||
hdHRlc3QiOiJBIiwiZGVzdCI6eyJ0biI6IisxMjE1NTU1MDExMyJ9LCJpYXQiOiIxNDcx | hdHRlc3QiOiJBIiwiZGVzdCI6eyJ0biI6IisxMjE1NTU1MDExMyJ9LCJpYXQiOiIxNDcx | |||
Mzc1NDE4Iiwib3JpZyI6eyJ0biI6IisxMjE1NTU1MDExMiJ9LCJvcmlnaWQiOiIxMjNlN | Mzc1NDE4Iiwib3JpZyI6eyJ0biI6IisxMjE1NTU1MDExMiJ9LCJvcmlnaWQiOiIxMjNlN | |||
DU2Ny1lODliLTEyZDMtYTQ1Ni00MjY2NTU0NDAwMCJ9.QAht_eFqQlaoVrnEV56Qly-OU | DU2Ny1lODliLTEyZDMtYTQ1Ni00MjY2NTU0NDAwMCJ9.QAht_eFqQlaoVrnEV56Qly-OU | |||
tsDGifyCcpYjWcaR661Cz1hutFH2BzIlDswTahO7ujjqsWjeoOb4h97whTQJg;info= | tsDGifyCcpYjWcaR661Cz1hutFH2BzIlDswTahO7ujjqsWjeoOb4h97whTQJg;info= | |||
<http://cert.example2.net/example.cert>;alg=ES256 | <http://cert.example2.net/example.cert>;alg=ES256 | |||
Content-Length: 153 | Content-Length: 153 | |||
v=0 | v=0 | |||
o=- 13103070023943130 1 IN IP6 2001:db8::177 | o=- 13103070023943130 1 IN IP6 2001:db8::177 | |||
c=IN IP6 2001:db8::177 | c=IN IP6 2001:db8::177 | |||
t=0 0 | t=0 0 | |||
m=audio 54242 RTP/AVP 0 | m=audio 54242 RTP/AVP 0 | |||
a=sendrecv | a=sendrecv | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | ||||
<t>An intermediary could reply:</t> | <t>An intermediary could reply:</t> | |||
<figure> | <sourcecode name="" type=""><![CDATA[ | |||
<artwork><![CDATA[ | ||||
SIP/2.0 608 Rejected | SIP/2.0 608 Rejected | |||
Via: SIP/2.0/UDP [2001:db8::177]:60012;branch=z9hG4bK-524287-1 | Via: SIP/2.0/UDP [2001:db8::177]:60012;branch=z9hG4bK-524287-1 | |||
From: "Alice" <sip:+12155550112@tel.two.example.net>;tag=614bdb40 | From: "Alice" <sip:+12155550112@tel.two.example.net>;tag=614bdb40 | |||
To: <sip:+12155550113@tel.one.example.net> | To: <sip:+12155550113@tel.one.example.net> | |||
Call-ID: 79048YzkxNDA5NTI1MzA0OWFjOTFkMmFlODhiNTI2OWQ1ZTI | Call-ID: 79048YzkxNDA5NTI1MzA0OWFjOTFkMmFlODhiNTI2OWQ1ZTI | |||
CSeq: 2 INVITE | CSeq: 2 INVITE | |||
Call-Info: <https://block.example.net/complaint-jws>;purpose=jwscard | Call-Info: <https://block.example.net/complaint-jws>;purpose=jwscard | |||
]]></artwork> | ]]></sourcecode> | |||
</figure> | ||||
<t>The location https://block.example.net/complaint-jws resolves to a | <t>The location https://block.example.net/complaint-jws resolves to a | |||
JWS. One would construct the JWS as follows.</t> | JWS. One would construct the JWS as follows.</t> | |||
<t>The JWS header of this example jCard could be:</t> | <t>The JWS header of this example jCard could be:</t> | |||
<figure> | <sourcecode name="" type="json"> | |||
<artwork><![CDATA[{ "alg":"ES256", | { "alg":"ES256", | |||
"typ":"vcard+json", | "typ":"vcard+json", | |||
"x5u":"https://certs.example.net/reject_key.cer" | "x5u":"https://certs.example.net/reject_key.cer" | |||
} | } | |||
</sourcecode> | ||||
]]></artwork> | ||||
</figure> | ||||
<t>Now, let us construct a minimal jCard. For this example, the jCard | <t>Now, let us construct a minimal jCard. For this example, the jCard | |||
refers the caller to an email address, | refers the caller to an email address, | |||
remediation@blocker.example.net:</t> | remediation@blocker.example.net:</t> | |||
<figure> | <sourcecode name="" type="json"> | |||
<artwork><![CDATA[["vcard", | ["vcard", | |||
[ | [ | |||
["version", {}, "text", "4.0"], | ["version", {}, "text", "4.0"], | |||
["fn", {}, "text", "Robocall Adjudication"], | ["fn", {}, "text", "Robocall Adjudication"], | |||
["email", {"type":"work"}, | ["email", {"type":"work"}, "text", | |||
"text", "remediation@blocker.example.net"] | "remediation@blocker.example.net"] | |||
] | ] | |||
] | ] | |||
</sourcecode> | ||||
]]></artwork> | ||||
</figure> | ||||
<t>With this jCard, we can now construct the JWT:</t> | <t>With this jCard, we can now construct the JWT:</t> | |||
<figure> | <sourcecode name="" type="json">{ | |||
<artwork><![CDATA[{ | ||||
"iat":1546008698, | "iat":1546008698, | |||
"jcard":["vcard", | "jcard":["vcard", | |||
[ | [ | |||
["version", {}, "text", "4.0"], | ["version", {}, "text", "4.0"], | |||
["fn", {}, "text", "Robocall Adjudication"], | ["fn", {}, "text", "Robocall Adjudication"], | |||
["email", {"type":"work"}, | ["email", {"type":"work"}, | |||
"text", "remediation@blocker.example.net"] | "text", "remediation@blocker.example.net"] | |||
] | ] | |||
] | ] | |||
} | } </sourcecode> | |||
]]></artwork> | ||||
</figure> | ||||
<t>To calculate the signature, we need to encode the JSON Object | <t>To calculate the signature, we need to encode the JSON Object | |||
Signing and Encryption (JOSE) header and JWT into base64url. As an | Signing and Encryption (JOSE) header and JWT into base64url. As an | |||
implementation note, one can trim whitespace in the JSON objects to | implementation note, one can trim whitespace in the JSON objects to | |||
save a few bytes. UACs MUST be prepared to receive pretty-printed, | save a few bytes. UACs <bcp14>MUST</bcp14> be prepared to receive | |||
compact, or bizarrely formatted JSON. For the purposes of this | pretty-printed, compact, or bizarrely formatted JSON. For the purposes | |||
example, we leave the objects with pretty whitespace. Speaking of | of this example, we leave the objects with pretty whitespace. Speaking | |||
pretty vs. machine formatting, these examples have line breaks in the | of pretty vs. machine formatting, these examples have line breaks in | |||
base64url encodings for ease of publication in the RFC format. The | the base64url encodings for ease of publication in the RFC format. The | |||
specification of base64url allows for these line breaks and the | specification of base64url allows for these line breaks, and the | |||
decoded text works just fine. However, those extra line break octets | decoded text works just fine. However, those extra line-break octets | |||
would affect the calculation of the signature. Implementations MUST | would affect the calculation of the signature. Implementations | |||
NOT insert line breaks into the base64url encodings of the JOSE header | <bcp14>MUST NOT</bcp14> insert line breaks into the base64url | |||
or JWT. This also means UACs MUST be prepared to receive arbitrarily | encodings of the JOSE header or JWT. This also means UACs | |||
long octet streams from the URI referenced by the Call-Info SIP | <bcp14>MUST</bcp14> be prepared to receive arbitrarily long octet | |||
header.</t> | streams from the URI referenced by the Call-Info header field.</t> | |||
<figure> | <t>base64url of JOSE header:</t> | |||
<artwork><![CDATA[base64url of JOSE header: | ||||
<artwork align="left" alt="" name="" type="hex-dump"><![CDATA[ | ||||
eyJhbGciOiJFUzI1NiIsInR5cCI6InZjYXJkK2pzb24iLCJ4NXUiOiJodHRwczov | eyJhbGciOiJFUzI1NiIsInR5cCI6InZjYXJkK2pzb24iLCJ4NXUiOiJodHRwczov | |||
L2NlcnRzLmV4YW1wbGUubmV0L3JlamVjdF9rZXkuY2VyIn0= | L2NlcnRzLmV4YW1wbGUubmV0L3JlamVjdF9rZXkuY2VyIn0= | |||
]]></artwork> | ||||
base64url of JWT: | <t>base64url of JWT:</t> | |||
<artwork align="left" alt="" name="" type="hex-dump"><![CDATA[ | ||||
eyJpYXQiOjE1NDYwMDg2OTgsImpjYXJkIjpbInZjYXJkIixbWyJ2ZXJzaW9uIix7 | eyJpYXQiOjE1NDYwMDg2OTgsImpjYXJkIjpbInZjYXJkIixbWyJ2ZXJzaW9uIix7 | |||
fSwidGV4dCIsIjQuMCJdLFsiZm4iLHt9LCJ0ZXh0IiwiUm9ib2NhbGwgQWRqdWRp | fSwidGV4dCIsIjQuMCJdLFsiZm4iLHt9LCJ0ZXh0IiwiUm9ib2NhbGwgQWRqdWRp | |||
Y2F0aW9uIl0sWyJlbWFpbCIseyJ0eXBlIjoid29yayJ9LCJ0ZXh0IiwicmVtZWRp | Y2F0aW9uIl0sWyJlbWFpbCIseyJ0eXBlIjoid29yayJ9LCJ0ZXh0IiwicmVtZWRp | |||
YXRpb25AYmxvY2tlci5leGFtcGxlLm5ldCJdXV19 | YXRpb25AYmxvY2tlci5leGFtcGxlLm5ldCJdXV19 | |||
]]></artwork> | ]]></artwork> | |||
</figure> | ||||
<t>In this case, the object to sign (remembering this is just a | <t>In this case, the object to sign (remembering this is just a single | |||
single, long line; the line breaks are for ease of review but do not | long line; the line breaks are for ease of review but do not appear in | |||
appear in the actual object) is as follows:</t> | the actual object) is as follows:</t> | |||
<figure> | <artwork align="left" alt="" name="" type="hex-dump"><![CDATA[ | |||
<artwork><![CDATA[eyJhbGciOiJFUzI1NiIsInR5cCI6InZjYXJk | eyJhbGciOiJFUzI1NiIsInR5cCI6InZjYXJk | |||
K2pzb24iLCJ4NXUiOiJodHRwczovL2NlcnRzLmV4YW1wbGUubmV0L3JlamVjdF9r | K2pzb24iLCJ4NXUiOiJodHRwczovL2NlcnRzLmV4YW1wbGUubmV0L3JlamVjdF9r | |||
ZXkuY2VyIn0.eyJpYXQiOjE1NDYwMDg2OTgsImpjYXJkIjpbInZjYXJkIixbWyJ2 | ZXkuY2VyIn0.eyJpYXQiOjE1NDYwMDg2OTgsImpjYXJkIjpbInZjYXJkIixbWyJ2 | |||
ZXJzaW9uIix7fSwidGV4dCIsIjQuMCJdLFsiZm4iLHt9LCJ0ZXh0IiwiUm9ib2Nh | ZXJzaW9uIix7fSwidGV4dCIsIjQuMCJdLFsiZm4iLHt9LCJ0ZXh0IiwiUm9ib2Nh | |||
bGwgQWRqdWRpY2F0aW9uIl0sWyJlbWFpbCIseyJ0eXBlIjoid29yayJ9LCJ0ZXh0 | bGwgQWRqdWRpY2F0aW9uIl0sWyJlbWFpbCIseyJ0eXBlIjoid29yayJ9LCJ0ZXh0 | |||
IiwicmVtZWRpYXRpb25AYmxvY2tlci5leGFtcGxlLm5ldCJdXV19 | IiwicmVtZWRpYXRpb25AYmxvY2tlci5leGFtcGxlLm5ldCJdXV19 | |||
]]></artwork> | ]]></artwork> | |||
</figure> | ||||
<t>We use the following X.509 PKCS #8-encoded ECDSA key, also | <t>We use the following X.509 PKCS #8-encoded Elliptic Curve Digital | |||
shamelessly taken from <xref target="SHAKEN"/>), as an example key for | Signature Algorithm (ECDSA) key, also shamelessly taken from <xref | |||
signing the hash of the above text. Do NOT use this key in real life! | format="default" target="SHAKEN"/>, as an example key for signing the | |||
It is for example purposes only. At the very least, we would strongly | hash of the above text. Do NOT use this key in real life! It is for | |||
recommend encrypting the key at rest.</t> | example purposes only. At the very least, we would strongly recommend | |||
encrypting the key at rest.</t> | ||||
<figure> | <artwork align="left" alt="" name="" type=""><![CDATA[ | |||
<artwork><![CDATA[-----BEGIN PRIVATE KEY----- | -----BEGIN PRIVATE KEY----- | |||
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgi7q2TZvN9VDFg8Vy | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgi7q2TZvN9VDFg8Vy | |||
qCP06bETrR2v8MRvr89rn4i+UAahRANCAAQWfaj1HUETpoNCrOtp9KA8o0V79IuW | qCP06bETrR2v8MRvr89rn4i+UAahRANCAAQWfaj1HUETpoNCrOtp9KA8o0V79IuW | |||
ARKt9C1cFPkyd3FBP4SeiNZxQhDrD0tdBHls3/wFe8++K2FrPyQF9vuh | ARKt9C1cFPkyd3FBP4SeiNZxQhDrD0tdBHls3/wFe8++K2FrPyQF9vuh | |||
-----END PRIVATE KEY----- | -----END PRIVATE KEY----- | |||
-----BEGIN PUBLIC KEY----- | -----BEGIN PUBLIC KEY----- | |||
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE8HNbQd/TmvCKwPKHkMF9fScavGeH | MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE8HNbQd/TmvCKwPKHkMF9fScavGeH | |||
78YTU8qLS8I5HLHSSmlATLcslQMhNC/OhlWBYC626nIlo7XeebYS7Sb37g== | 78YTU8qLS8I5HLHSSmlATLcslQMhNC/OhlWBYC626nIlo7XeebYS7Sb37g== | |||
-----END PUBLIC KEY----- | -----END PUBLIC KEY----- | |||
]]></artwork> | ]]></artwork> | |||
</figure> | ||||
<t>The resulting JWS, using the above key on the above object, renders | <t>The resulting JWS, using the above key on the above object, renders | |||
the following ECDSA P-256 SHA-256 digital signature.</t> | the following ECDSA P-256 SHA-256 digital signature.</t> | |||
<figure> | <artwork align="left" alt="" name="hex-dump" type=""><![CDATA[ | |||
<artwork><![CDATA[7uz2SADRvPFOQOO_UgF2ZTUjPlDTegtPrYB04UHBMwBD6g9AmL | 7uz2SADRvPFOQOO_UgF2ZTUjPlDTegtPrYB04UHBMwBD6g9AmL | |||
5harLJdTKDSTtH-LOV1jwJaGRUOUJiwP27ag | 5harLJdTKDSTtH-LOV1jwJaGRUOUJiwP27ag | |||
]]></artwork> | ]]></artwork> | |||
</figure> | ||||
<t>Thus, the JWS stored at https://blocker.example.net/complaints-jws, | <t>Thus, the JWS stored at https://blocker.example.net/complaints-jws | |||
would contain:</t> | would contain:</t> | |||
<figure> | <artwork align="left" alt="" name="hex-dump" type=""><![CDATA[ | |||
<artwork><![CDATA[ | ||||
eyJhbGciOiJFUzI1NiIsInR5cCI6InZjYXJkK2pzb24iLCJ4NXUiOiJodHRwczovL | eyJhbGciOiJFUzI1NiIsInR5cCI6InZjYXJkK2pzb24iLCJ4NXUiOiJodHRwczovL | |||
2NlcnRzLmV4YW1wbGUubmV0L3JlamVjdF9rZXkuY2VyIn0.eyJpYXQiOjE1NDYwMD | 2NlcnRzLmV4YW1wbGUubmV0L3JlamVjdF9rZXkuY2VyIn0.eyJpYXQiOjE1NDYwMD | |||
g2OTgsImpjYXJkIjpbInZjYXJkIixbWyJ2ZXJzaW9uIix7fSwidGV4dCIsIjQuMCJ | g2OTgsImpjYXJkIjpbInZjYXJkIixbWyJ2ZXJzaW9uIix7fSwidGV4dCIsIjQuMCJ | |||
dLFsiZm4iLHt9LCJ0ZXh0IiwiUm9ib2NhbGwgQWRqdWRpY2F0aW9uIl0sWyJlbWFp | dLFsiZm4iLHt9LCJ0ZXh0IiwiUm9ib2NhbGwgQWRqdWRpY2F0aW9uIl0sWyJlbWFp | |||
bCIseyJ0eXBlIjoid29yayJ9LCJ0ZXh0IiwicmVtZWRpYXRpb25AYmxvY2tlci5le | bCIseyJ0eXBlIjoid29yayJ9LCJ0ZXh0IiwicmVtZWRpYXRpb25AYmxvY2tlci5le | |||
GFtcGxlLm5ldCJdXV19.7uz2SADRvPFOQOO_UgF2ZTUjPlDTegtPrYB04UHBMwBD6 | GFtcGxlLm5ldCJdXV19.7uz2SADRvPFOQOO_UgF2ZTUjPlDTegtPrYB04UHBMwBD6 | |||
g9AmL5harLJdTKDSTtH-LOV1jwJaGRUOUJiwP27ag | g9AmL5harLJdTKDSTtH-LOV1jwJaGRUOUJiwP27ag | |||
]]></artwork> | ]]></artwork> | |||
</figure> | ||||
</section> | </section> | |||
<section title="Web Site jCard"> | <section numbered="true" toc="default"> | |||
<name>Web Site jCard</name> | ||||
<t>For an intermediary that provides a Web site for adjudication, the | <t>For an intermediary that provides a Web site for adjudication, the | |||
jCard could contain the following. Note we do not show the calculation | jCard could contain the following. Note that we do not show the | |||
of the JWS; the URI reference in the Call-Info header field would be | calculation of the JWS; the URI reference in the Call-Info header | |||
to the JWS of the signed jCard.</t> | field would be to the JWS of the signed jCard.</t> | |||
<figure> | <sourcecode name="" type="json"> | |||
<artwork><![CDATA[["vcard", | ["vcard", | |||
[ | [ | |||
["version", {}, "text", "4.0"], | ["version", {}, "text", "4.0"], | |||
["fn", {}, "text", "Robocall Adjudication"], | ["fn", {}, "text", "Robocall Adjudication"], | |||
["url", {"type":"work"}, | ["url", {"type":"work"}, | |||
"text", "https://blocker.example.net/adjudication-form"] | "text", "https://blocker.example.net/adjudication-form"] | |||
] | ] | |||
] ]]></artwork> | ] </sourcecode> | |||
</figure> | ||||
</section> | </section> | |||
<section title="Multi-modal jCard"> | <section numbered="true" toc="default"> | |||
<name>Multi-modal jCard</name> | ||||
<t>For an intermediary that provides a telephone number and a postal | <t>For an intermediary that provides a telephone number and a postal | |||
address, the jCard could contain the following. Note we do not show | address, the jCard could contain the following. Note that we do not | |||
the calculation of the JWS; the URI reference in the Call-Info header | show the calculation of the JWS; the URI reference in the Call-Info | |||
field would be to the JWS of the signed jCard.</t> | header field would be to the JWS of the signed jCard.</t> | |||
<figure> | <sourcecode name="" type="json">["vcard", | |||
<artwork><![CDATA[["vcard", | ||||
[ | [ | |||
["version", {}, "text", "4.0"], | ["version", {}, "text", "4.0"], | |||
["fn", {}, "text", "Robocall Adjudication"], | ["fn", {}, "text", "Robocall Adjudication"], | |||
["adr", {"type":"work"}, "text", | ["adr", {"type":"work"}, "text", | |||
["Argument Clinic", | ["Argument Clinic", | |||
"12 Main St","Anytown","AP","000000","Somecountry"] | "12 Main St","Anytown","AP","000000","Somecountry"] | |||
] | ] | |||
["tel", {"type":"work"}, "uri", "tel:+1-555-555-0112"] | ["tel", {"type":"work"}, "uri", "tel:+1-555-555-0112"] | |||
] | ] | |||
] ]]></artwork> | ]</sourcecode> | |||
</figure> | ||||
<t>Note that it is up to the UAC to decide which jCard contact | <t>Note that it is up to the UAC to decide which jCard contact | |||
modality, if any, it will use.</t> | modality, if any, it will use.</t> | |||
</section> | </section> | |||
<section title="Legacy Interoperability"> | <section numbered="true" toc="default"> | |||
<t><xref target="legacy_ladder"/> depicts a call flow illustrating | <name>Legacy Interoperability</name> | |||
legacy interoperability. In this non-normative example, we see a UAC | ||||
that does not support the full semantics for 608. However, there is an | ||||
SBC that does support 608. Per <xref target="RFC6809"/>, the SBC can | ||||
insert "*;+sip.608" into the Feature-Caps header field for the INVITE. | ||||
When the intermediary, labeled "Called Party Proxy" in the figure, | ||||
rejects the call, it knows it can simply perform the processing | ||||
described in this document. Since the intermediary saw the sip.608 | ||||
feature capability, it knows it does not need to send any media | ||||
describing whom to contact in the event of an erroneous rejection. For | ||||
illustrative purposes, the figure shows generic SIP Proxies in the | ||||
flow. Their presence or absence or the number of proxies is not | ||||
relevant to the operation of the protocol. They are in the figure to | ||||
show that proxies that do not understand the sip.608 feature | ||||
capability can still participate in a network offering 608 | ||||
services.</t> | ||||
<figure anchor="legacy_ladder" title="Legacy Operation"> | <t><xref format="default" target="legacy_ladder"/> depicts a call flow | |||
<artwork><![CDATA[ | illustrating legacy interoperability. In this non-normative example, | |||
+---------+ | we see a UAC that does not support the full semantics for 608. | |||
| Call | | However, there is an SBC that does support 608. Per <xref | |||
|Analytics| | format="default" target="RFC6809"/>, the SBC can insert "*;+sip.608" | |||
| Engine | | into the Feature-Caps header field for the INVITE. When the | |||
+--+--+---+ | intermediary, labeled "Called Party Proxy" in the figure, rejects the | |||
^ | | call, it knows it can simply perform the processing described in this | |||
| | | document. Since the intermediary saw the sip.608 feature capability, | |||
| v | it knows it does not need to send any media describing whom to contact | |||
+-+--+-+ | in the event of an erroneous rejection. For illustrative purposes, the | |||
+---+ +-----+ +---+ +-----+ +-----+ |Called| | figure shows generic SIP Proxies in the flow. Their presence or | |||
|UAC+----+Proxy+----+SBC+----+Proxy+----+Proxy+----+Party | | absence or the number of proxies is not relevant to the operation of | |||
+---+ +-----+ +---+ +-----+ +-----+ |Proxy | | the protocol. They are in the figure to show that proxies that do not | |||
| | +------+ | understand the sip.608 feature capability can still participate in a | |||
| INVITE | | | network offering 608 services.</t> | |||
|------------------>| | | ||||
| | INVITE | | <figure anchor="legacy_ladder"> | |||
| |------------------------------>| | <name>Legacy Operation</name> | |||
| | Feature-Caps: *;+sip.608 | | ||||
| | | | ||||
| | 608 Rejected | | ||||
| |<------------------------------| | ||||
| 183 | Call-Info: <...> | | ||||
|<------------------| [path for Call-Info elided | | ||||
| SDP for media | for illustration purposes]| | ||||
| | | | ||||
| PRACK | | | ||||
|------------------>| | | ||||
| | | | ||||
| 200 OK PRACK | | | ||||
|<------------------| | | ||||
| | | | ||||
|<== Announcement ==| | | ||||
| | | | ||||
| 608 Rejected | | | ||||
|<------------------| | | ||||
| Call-Info: <...> | | | ||||
| | | | ||||
<artwork align="center" alt="" name="" type="ascii-art"><![CDATA[ | ||||
+---------+ | ||||
| Call | | ||||
|Analytics| | ||||
| Engine | | ||||
+--+--+---+ | ||||
^ | | ||||
| | | ||||
| v | ||||
+-+--+-+ | ||||
+---+ +-----+ +---+ +-----+ +-----+ |Called| | ||||
|UAC+----+Proxy+----+SBC+----+Proxy+----+Proxy+----+Party | | ||||
+---+ +-----+ +---+ +-----+ +-----+ |Proxy | | ||||
| | +------+ | ||||
| INVITE | | | ||||
|------------------>| | | ||||
| | INVITE | | ||||
| |------------------------------>| | ||||
| | Feature-Caps: *;+sip.608 | | ||||
| | | | ||||
| | 608 Rejected | | ||||
| |<------------------------------| | ||||
| 183 | Call-Info: <...> | | ||||
|<------------------| [path for Call-Info elided | | ||||
| SDP for media | for illustration purposes]| | ||||
| | | | ||||
| PRACK | | | ||||
|------------------>| | | ||||
| | | | ||||
| 200 OK PRACK | | | ||||
|<------------------| | | ||||
| | | | ||||
|<== Announcement ==| | | ||||
| | | | ||||
| 608 Rejected | | | ||||
|<------------------| | | ||||
| Call-Info: <...> | | | ||||
| | | | ||||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<t>When the SBC receives the 608 response code, it correlates that | <t>When the SBC receives the 608 response code, it correlates that | |||
with the original INVITE from the UAC. The SBC remembers that it | with the original INVITE from the UAC. The SBC remembers that it | |||
inserted the sip.608 feature capability, which means it is responsible | inserted the sip.608 feature capability, which means it is responsible | |||
for somehow alerting the UAC the call failed and whom to contact. At | for somehow alerting the UAC the call failed and disclosing whom to | |||
this point the SBC can play a prompt, either natively or through a | contact. At this point, the SBC can play a prompt, either natively or | |||
mechanism such as <xref target="RFC4240">NETANN</xref>, that sends the | through a mechanism such as <xref format="default" | |||
relevant information in the appropriate media to the UAC. Since this | target="RFC4240">NETANN</xref>, that sends the relevant information in | |||
is a potentially long transaction and there is a chance the UAC is | the appropriate media to the UAC. Since this is a potentially long | |||
using an unreliable transport protocol, the UAC will have indicated | transaction and there is a chance the UAC is using an unreliable | |||
support for provisional responses, the SBC will indicate it requires a | transport protocol, the UAC will have indicated support for | |||
PRACK from the UAC in the 183 response, the UAC will provide the | provisional responses, the SBC will indicate it requires a PRACK from | |||
PRACK, and the SBC will acknowledge receipt of the PRACK before | the UAC in the 183 response, the UAC will provide the PRACK, and the | |||
playing the announcement.</t> | SBC will acknowledge receipt of the PRACK before playing the | |||
announcement.</t> | ||||
<t>As an example, the SBC could extract the FN and TEL jCard fields | <t>As an example, the SBC could extract the FN and TEL jCard fields | |||
and play something like a special information tone (see Telcordia | and play something like a special information tone (see Section | |||
<xref target="SR-2275">SR-2275</xref> section 6.21.2.1 or <xref | 6.21.2.1 of Telcordia <xref format="default" | |||
target="ITU.E.180.1998">ITU-T E.180</xref> section 7), followed by | target="SR-2275">SR-2275</xref> or Section 7 of <xref format="default" | |||
"Your call has been rejected by ...", followed by a text-to-speech | target="ITU.E.180.1998">ITU-T E.180</xref>), followed by "Your call | |||
translation of the FN text, followed by "You can reach them on", | has been rejected by...", followed by a text-to-speech translation of | |||
followed by a text-to-speech translation of the telephone number in | the FN text, followed by "You can reach them on...", followed by a | |||
the TEL field.</t> | text-to-speech translation of the telephone number in the TEL | |||
field.</t> | ||||
<t>Note the SBC also still sends the full 608 response code, including | <t>Note that the SBC also still sends the full 608 response code, | |||
the Call-Info header, towards the UAC.</t> | including the Call-Info header field, towards the UAC.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section title="IANA Considerations"> | <section numbered="true" toc="default"> | |||
<section title="SIP Response Code"> | <name>IANA Considerations</name> | |||
<t>This document defines a new SIP response code, 608 in the "Response | ||||
Codes" subregistry of the "Session Initiation Protocol (SIP) | ||||
Parameters" registry defined in <xref target="RFC3261"/>.<list | ||||
style="hanging"> | ||||
<t hangText="Response code:">608</t> | ||||
<t hangText="Description:">Rejected</t> | <section numbered="true" toc="default"> | |||
<name>SIP Response Code</name> | ||||
<t hangText="Reference:">[RFCXXXX]</t> | <t>This document defines a new SIP response code, 608, in the | |||
</list></t> | "Response Codes" subregistry of the "Session Initiation Protocol (SIP) | |||
Parameters" registry defined in <xref format="default" | ||||
target="RFC3261"/>.</t> | ||||
<dl indent="18" newline="false" spacing="compact"> | ||||
<dt>Response code:</dt> | ||||
<dd>608</dd> | ||||
<dt>Description:</dt> | ||||
<dd>Rejected</dd> | ||||
<dt>Reference:</dt> | ||||
<dd>RFC 8688</dd> | ||||
</dl> | ||||
</section> | </section> | |||
<section title="SIP Feature-Capability Indicator"> | <section numbered="true" toc="default"> | |||
<t>This document defines the feature capability sip.608 in the "SIP | <name>SIP Feature-Capability Indicator</name> | |||
<t>This document defines the feature capability, sip.608, in the "SIP | ||||
Feature-Capability Indicator Registration Tree" registry defined in | Feature-Capability Indicator Registration Tree" registry defined in | |||
<xref target="RFC6809"/>.<list style="hanging"> | <xref format="default" target="RFC6809"/>.</t> | |||
<t hangText="Name:">sip.608</t> | ||||
<t hangText="Description:">This feature capability indicator, when | <dl indent="14" newline="false" spacing="compact"> | |||
included in a Feature-Caps header field of an INVITE request, | <dt>Name:</dt> | |||
indicates that the entity associated with the indicator will be | ||||
responsible for indicating to the caller any information contained | ||||
in the 608 SIP response code, specifically the value referenced by | ||||
the Call-Info header.</t> | ||||
<t hangText="Reference:">[RFCXXXX]</t> | <dd>sip.608</dd> | |||
</list></t> | ||||
<dt>Description:</dt> | ||||
<dd>This feature-capability indicator, when included in a | ||||
Feature-Caps header field of an INVITE request, indicates that the | ||||
entity associated with the indicator will be responsible for | ||||
indicating to the caller any information contained in the 608 SIP | ||||
response code, specifically, the value referenced by the Call-Info | ||||
header field.</dd> | ||||
<dt>Reference:</dt> | ||||
<dd>RFC 8688</dd> | ||||
</dl> | ||||
</section> | </section> | |||
<section anchor="JWT-IANA" title="JSON Web Token Claim"> | <section anchor="JWT-IANA" numbered="true" toc="default"> | |||
<name>JSON Web Token Claim</name> | ||||
<t>This document defines the new JSON Web Token claim in the "JSON Web | <t>This document defines the new JSON Web Token claim in the "JSON Web | |||
Token Claims" sub-registry created by <xref target="RFC7519"/>. <xref | Token Claims" subregistry created by <xref format="default" | |||
target="JWT"/> defines the syntax. The required information is:<list | target="RFC7519"/>. <xref format="default" target="JWT"/> defines the | |||
style="hanging"> | syntax. The required information is:</t> | |||
<t hangText="Claim Name:">jcard</t> | ||||
<t hangText="Claim Description:">jCard data</t> | <dl indent="20" newline="false" spacing="compact"> | |||
<dt>Claim Name:</dt> | ||||
<t hangText="Change Controller:">IESG</t> | <dd>jcard</dd> | |||
<t hangText="Reference:">[RFCXXXX], <xref target="RFC7095"/></t> | <dt>Claim Description:</dt> | |||
</list></t> | ||||
<dd>jCard data</dd> | ||||
<dt>Change Controller:</dt> | ||||
<dd>IESG</dd> | ||||
<dt>Reference:</dt> | ||||
<dd>RFC 8688, <xref format="default" target="RFC7095"/></dd> | ||||
</dl> | ||||
</section> | </section> | |||
<section title="Call-Info Purpose"> | <section numbered="true" toc="default"> | |||
<name>Call-Info Purpose</name> | ||||
<t>This document defines the new predefined value "jwscard" for the | <t>This document defines the new predefined value "jwscard" for the | |||
"purpose" header field parameter of the Call-Info header field. This | "purpose" header field parameter of the Call-Info header field. This | |||
modifies the "Header Field Parameters and Parameter Values" | modifies the "Header Field Parameters and Parameter Values" | |||
subregistry of the "Session Initiation Protocol (SIP) Parameters" | subregistry of the "Session Initiation Protocol (SIP) Parameters" | |||
registry by adding this RFC as a reference to the line for the header | registry by adding this RFC as a reference to the line for the header | |||
field "Call-Info" and parameter name "purpose":<list style="hanging"> | field "Call-Info" and parameter name "purpose":</t> | |||
<t hangText="Header Field:">Call-Info</t> | ||||
<t hangText="Parameter Name:">purpose</t> | <dl indent="20" newline="false" spacing="compact"> | |||
<dt>Header Field:</dt> | ||||
<t hangText="Predefined Values:">Yes</t> | <dd>Call-Info</dd> | |||
<t hangText="Reference:">[RFCXXXX]</t> | <dt>Parameter Name:</dt> | |||
</list></t> | ||||
<dd>purpose</dd> | ||||
<dt>Predefined Values:</dt> | ||||
<dd>Yes</dd> | ||||
<dt>Reference:</dt> | ||||
<dd>RFC 8688</dd> | ||||
</dl> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="Security" title="Security Considerations"> | <section anchor="Security" numbered="true" toc="default"> | |||
<name>Security Considerations</name> | ||||
<t>Intermediary operators need to be mindful to whom they are sending | <t>Intermediary operators need to be mindful to whom they are sending | |||
the 608 response. The intermediary could be rejecting a truly malicious | the 608 response. The intermediary could be rejecting a truly malicious | |||
caller. This raises two issues. The first is the caller, now alerted an | caller. This raises two issues. The first is the caller, now alerted | |||
intermediary is automatically rejecting their call attempts, may change | that an intermediary is automatically rejecting their call attempts, may | |||
their call behavior to defeat call blocking systems. The second, and | change their call behavior to defeat call-blocking systems. The second, | |||
more significant risk, is that by providing a contact in the Call-Info | and more significant risk, is that by providing a contact in the | |||
header field, the intermediary may be giving the malicious caller a | Call-Info header field, the intermediary may be giving the malicious | |||
vector for attack. In other words, the intermediary will be publishing | caller a vector for attack. In other words, the intermediary will be | |||
an address that a malicious actor may use to launch an attack on the | publishing an address that a malicious actor may use to launch an attack | |||
intermediary. Because of this, intermediary operators may wish to | on the intermediary. Because of this, intermediary operators may wish to | |||
configure their response to only include a Call-Info header field for | configure their response to only include a Call-Info header field for | |||
INVITE or other signed initiating methods and that pass validation by | INVITE, or other signed initiating methods, that pass validation by | |||
<xref target="RFC8224">STIR</xref>.</t> | <xref format="default" target="RFC8224">STIR</xref>.</t> | |||
<t>Another risk is as follows. Consider an attacker that floods a proxy | <t>Another risk is as follows. Consider an attacker that floods a proxy | |||
that supports the sip.608 feature. However, the SDP in the INVITE | that supports the sip.608 feature. However, the SDP in the INVITE | |||
request refers to a victim device. Moreover, the attacker somehow knows | request refers to a victim device. Moreover, the attacker somehow knows | |||
there is a 608-aware gateway connecting to the victim who is on a | there is a 608-aware gateway connecting to the victim who is on a | |||
segment that lacks the sip.608 feature capability. Because the mechanism | segment that lacks the sip.608 feature capability. Because the mechanism | |||
described here can result in sending an audio file to the target of the | described here can result in sending an audio file to the target of the | |||
SDP, an attacker could use the mechanism described by this document as | SDP, an attacker could use the mechanism described by this document as | |||
an amplification attack, given a SIP INVITE can be under 1 kilobyte and | an amplification attack, given a SIP INVITE can be under 1 kilobyte and | |||
an audio file can be hundreds of kilobytes. One remediation for this is | an audio file can be hundreds of kilobytes. One remediation for this is | |||
for devices that insert a sip.608 feature capability to only transmit | for devices that insert a sip.608 feature capability to only transmit | |||
media to what is highly likely to be the actual source of the call | media to what is highly likely to be the actual source of the call | |||
attempt. A method for this is to only play media in response to a | attempt. A method for this is to only play media in response to a | |||
STIR-signed INVITE that passes validation. Beyond requiring a valid STIR | STIR-signed INVITE that passes validation. Beyond requiring a valid STIR | |||
signature on the INVITE, the intermediary can also use remediation | signature on the INVITE, the intermediary can also use remediation | |||
procedures such as doing the connectivity checks specified by <xref | procedures such as doing the connectivity checks specified by <xref | |||
target="RFC8445">Interactive Connectivity Establishment</xref>. If the | format="default" target="RFC8445">Interactive Connectivity | |||
target did not request the media, the check will fail.</t> | Establishment</xref>. If the target did not request the media, the check | |||
will fail.</t> | ||||
<t>Yet another risk is a malicious intermediary that generates a | <t>Yet another risk is a malicious intermediary that generates a | |||
malicious 608 response with a jCard referring to a malicious agent. For | malicious 608 response with a jCard referring to a malicious agent. For | |||
example, the recipient of a 608 may receive a TEL URI in the vCard. When | example, the recipient of a 608 may receive a TEL URI in the vCard. When | |||
the recipient calls that address, the malicious agent could ask for | the recipient calls that address, the malicious agent could ask for | |||
personally identifying information. However, instead of using that | personally identifying information. However, instead of using that | |||
information to verify the recipient's identity, they are phishing the | information to verify the recipient's identity, they are phishing the | |||
information for nefarious ends. A similar scenario can unfold if the | information for nefarious ends. A similar scenario can unfold if the | |||
malicious agent inserts a URI that points to a phishing or other site. | malicious agent inserts a URI that points to a phishing or other site. | |||
As such, we strongly recommend the recipient validates to whom they are | As such, we strongly recommend the recipient validates to whom they are | |||
communicating with if asking to adjudicate an erroneously rejected call | communicating with if asking to adjudicate an erroneously rejected call | |||
attempt. Since we may also be concerned about intermediate nodes | attempt. Since we may also be concerned about intermediate nodes | |||
modifying contact information, we can address both issues with a single | modifying contact information, we can address both issues with a single | |||
solution. The remediation is to require the intermediary to sign the | solution. The remediation is to require the intermediary to sign the | |||
jCard. Signing the jCard provides integrity protection. In addition, one | jCard. Signing the jCard provides integrity protection. In addition, one | |||
can imagine mechanisms such as used by <xref | can imagine mechanisms such as used by <xref format="default" | |||
target="SHAKEN">SHAKEN</xref>.</t> | target="SHAKEN">SHAKEN</xref>.</t> | |||
<t>Similarly, one can imagine an adverse agent that maliciously spoofs a | <t>Similarly, one can imagine an adverse agent that maliciously spoofs a | |||
608 response with a victim's contact address to many active callers, who | 608 response with a victim's contact address to many active callers who | |||
may then all send redress requests to the specified address (the basis | may then all send redress requests to the specified address (the basis | |||
for a denial-of-service attack). The process would occur as follows: (1) | for a denial-of-service attack). The process would occur as follows: (1) | |||
a malicious agent senses INVITE requests from a variety of UACs and (2) | a malicious agent senses INVITE requests from a variety of UACs and (2) | |||
spoofs 608 responses with an unsigned redress address before the | spoofs 608 responses with an unsigned redress address before the | |||
intended receivers can respond, causing (3) the UACs to all contact the | intended receivers can respond, causing (3) the UACs to all contact the | |||
redress address at once. The jCard encoding allows the UAC to verify the | redress address at once. The jCard encoding allows the UAC to verify the | |||
blocking intermediary's identity before contacting the redress address. | blocking intermediary's identity before contacting the redress address. | |||
Specifically, because the sender signs the jCard, we can | Specifically, because the sender signs the jCard, we can | |||
cryptographically trace the sender of the jCard. Given the protocol | cryptographically trace the sender of the jCard. Given the protocol | |||
machinery of having a signature, one can apply local policy to decide | machinery of having a signature, one can apply local policy to decide | |||
whether to believe the sender of the jCard represents the owner of the | whether to believe that the sender of the jCard represents the owner of | |||
contact information found in the jCard. This guards against a malicious | the contact information found in the jCard. This guards against a | |||
agent spoofing 608 responses.</t> | malicious agent spoofing 608 responses.</t> | |||
<t>Specifically, one could use policies around signing certificate | <t>Specifically, one could use policies around signing certificate | |||
issuance as a mechanism for traceback to the entity issuing the jCard. | issuance as a mechanism for traceback to the entity issuing the jCard. | |||
One check could be verifying the identity of the subject of the | One check could be verifying that the identity of the subject of the | |||
certificate relates to the To header field of the initial SIP request, | certificate relates to the To header field of the initial SIP request, | |||
similar to validating the intermediary was vouching for the From header | similar to validating that the intermediary was vouching for the From | |||
field of a SIP request with that identity. Note that we are only | header field of a SIP request with that identity. Note that we are only | |||
protecting against a malicious intermediary and not a hidden | protecting against a malicious intermediary and not a hidden | |||
intermediary attack (formerly known as a "man in the middle attack"). | intermediary attack (formerly known as a "man-in-the-middle attack"). | |||
Thus, we only need to ensure the signature is fresh, which is why we | Thus, we only need to ensure the signature is fresh, which is why we | |||
include "iat". For most implementations, we assume that the intermediary | include "iat". For most implementations, we assume that the intermediary | |||
has a single set of contact points and will generate the jCard on | has a single set of contact points and will generate the jCard on | |||
demand. As such, there is no need to directly correlate HTTPS fetches to | demand. As such, there is no need to directly correlate HTTPS fetches to | |||
specific calls. However, since the intermediary is in control of the | specific calls. However, since the intermediary is in control of the | |||
jCard and Call-Info response, an intermediary may choose to encode | jCard and Call-Info response, an intermediary may choose to encode | |||
per-call information in the URI returned in a given 608 response. | per-call information in the URI returned in a given 608 response. | |||
However, if the intermediary does go that route, the intermediary MUST | However, if the intermediary does go that route, the intermediary | |||
use a non-deterministic URI reference mechanism and be prepared to | <bcp14>MUST</bcp14> use a non-deterministic URI reference mechanism and | |||
return dummy responses to URI requests referencing calls that do not | be prepared to return dummy responses to URI requests referencing calls | |||
exist so that attackers attempting to glean call metadata by guessing | that do not exist so that attackers attempting to glean call metadata by | |||
URI's (and thus calls) will not get any actionable information from the | guessing URIs (and thus calls) will not get any actionable information | |||
HTTPS GET.</t> | from the HTTPS GET.</t> | |||
<t>Since the decision of whether to include Call-Info in the 608 | <t>Since the decision of whether to include Call-Info in the 608 | |||
response is a matter of policy, one thing to consider is whether a | response is a matter of policy, one thing to consider is whether a | |||
legitimate caller can ascertain whom to contact without including such | legitimate caller can ascertain whom to contact without including such | |||
information in the 608. For example, in some jurisdictions, if only the | information in the 608. For example, in some jurisdictions, if only the | |||
terminating service provider can be the intermediary, the caller can | terminating service provider can be the intermediary, the caller can | |||
look up who the terminating service provider is based on the routing | look up who the terminating service provider is based on the routing | |||
information for the dialed number. Thus, the Call-Info jCard could be | information for the dialed number. Thus, the Call-Info jCard could be | |||
redundant information. However, the factors going into a particular | redundant information. However, the factors going into a particular | |||
service provider's or jurisdiction's choice of whether to include | service provider's or jurisdiction's choice of whether to include | |||
Call-Info is outside the scope of this document.</t> | Call-Info is outside the scope of this document.</t> | |||
</section> | </section> | |||
</middle> | ||||
<section anchor="Acknowledgements" title="Acknowledgements"> | <back> | |||
<t>This document liberally lifts from <xref target="RFC8197"/> in its | <references> | |||
text and structure. However, the mechanism and purpose of 608 is quite | <name>References</name> | |||
different than 607. Any errors are the current editor's and not the | ||||
editor of RFC8197. Thanks also go to Ken Carlberg of the FCC, Russ | ||||
Housley, Paul Kyzivat, and Tolga Asveren for their suggestions on | ||||
improving the draft. Tolga's suggestion to provide a mechanism for | ||||
legacy interoperability served to expand the draft by 50%. In addition, | ||||
Tolga came up with the jCard attack. Finally, Christer Holmberg as | ||||
always provided a close reading and fixed a SIP feature capability bug | ||||
found by Yehoshua Gev.</t> | ||||
<t>Of course, we appreciated the close read and five pages of comments | ||||
from our estimable Area Director, Adam Roach. In addition, we received | ||||
valuable comments during IETF Last Call and JWT review from Ines Robles, | ||||
Mike Jones, and Brian Campbell and IESG review from Alissa Cooper, | ||||
Éric Vyncke, Alexey Melnikov, Benjamin Kaduk, Barry Leiba, and | ||||
with most glee, Warren Kumari.</t> | ||||
<t>Finally, Bhavik Nagda provided clarifying edits as well and more | <references> | |||
especially wrote and tested an implementation of the 608 response code | <name>Normative References</name> | |||
in Kamailio. Code is available at <eref | ||||
target="https://github.com/nagdab/608_Implementation"/>. Grace Chuan | ||||
from MIT regenerated and verified the JWT while working at the FCC.</t> | ||||
</section> | ||||
</middle> | ||||
<!-- *****BACK MATTER ***** --> | <xi:include | |||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
2119.xml"/> | ||||
<back> | <xi:include | |||
<references title="Normative References"> | href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | |||
&RFC2119; | 3261.xml"/> | |||
&RFC3261; | <xi:include | |||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
3262.xml"/> | ||||
&RFC3262; | <xi:include | |||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
3326.xml"/> | ||||
&RFC3326; | <xi:include | |||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
6809.xml"/> | ||||
&RFC6809; | <xi:include | |||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
7095.xml"/> | ||||
&RFC7095; | <xi:include | |||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
7515.xml"/> | ||||
&RFC7515; | <xi:include | |||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
7518.xml"/> | ||||
&RFC7518; | <xi:include | |||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
7519.xml"/> | ||||
&RFC7519; | <xi:include | |||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
8174.xml"/> | ||||
</references> | ||||
&RFC8174; | <references> | |||
</references> | <name>Informative References</name> | |||
<references title="Informative References"> | <xi:include | |||
&RFC4103; | href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | |||
4103.xml"/> | ||||
&RFC4240; | <xi:include | |||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
4240.xml"/> | ||||
&RFC4566; | <xi:include | |||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
4566.xml"/> | ||||
&RFC5039; | <xi:include | |||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
5039.xml"/> | ||||
&RFC6350; | <xi:include | |||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
6350.xml"/> | ||||
&RFC7092; | <xi:include | |||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
7092.xml"/> | ||||
&RFC7340; | <xi:include | |||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
7340.xml"/> | ||||
&RFC8197; | <xi:include | |||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
8197.xml"/> | ||||
&RFC8224; | <xi:include | |||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
8224.xml"/> | ||||
&RFC8259; | <xi:include | |||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
8259.xml"/> | ||||
&RFC8445; | <xi:include | |||
href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | ||||
8445.xml"/> | ||||
<!-- [rfced] [SHAKEN] This URL is correct --> | <reference anchor="SHAKEN" | |||
target="https://www.sipforum.org/download/sip-forum-twg-10-si | ||||
gnature-based-handling-of-asserted-information-using-tokens-shaken-pdf/?wpdmdl=2 | ||||
813"> | ||||
<front> | ||||
<title>Signature-based Handling of Asserted information using | ||||
toKENs (SHAKEN)</title> | ||||
<reference anchor="SHAKEN" | <seriesInfo name="ATIS" value="1000074"/> | |||
target="https://www.sipforum.org/download/sip-forum-twg-10-sign | ||||
ature-based-handling-of-asserted-information-using-tokens-shaken-pdf/?wpdmdl=281 | ||||
3"> | ||||
<front> | ||||
<title>Signature-based Handling of Asserted information using toKENs | ||||
(SHAKEN)</title> | ||||
<author> | <author> | |||
<organization>Alliance for Telecommunications Industry Solutions | <organization>ATIS/SIP Forum IP-INNI Task Group</organization> | |||
(ATIS) and the SIP Forum</organization> | </author> | |||
</author> | ||||
<date day="5" month="1" year="2017"/> | <date month="January" year="2017"/> | |||
</front> | </front> | |||
</reference> | ||||
<seriesInfo name="ATIS" value="1000074"/> | <reference anchor="BaseRate" | |||
</reference> | target="https://apps.dtic.mil/docs/citations/ADA045772"> | |||
<front> | ||||
<title>The Base-Rate Fallacy in Probability Judgements</title> | ||||
<!-- [rfced] [BaseRate] This URL is correct --> | <author fullname="Maya Bar-Hillel" initials="M." | |||
surname="Bar-Hillel"> | ||||
<organization>Hebrew University</organization> | ||||
</author> | ||||
<reference anchor="BaseRate" | <date month="April" year="1977"/> | |||
target=" https://apps.dtic.mil/docs/citations/ADA045772"> | </front> | |||
<front> | </reference> | |||
<title>The Base-Rate Fallacy in Probability Judgements</title> | ||||
<author fullname="Maya Bar-Hillel" initials="M." | <reference anchor="ITU.E.180.1998"> | |||
surname="Bar-Hillel"> | <front> | |||
<organization>Hebrew University</organization> | <title>Technical characteristics of tones for the telephone | |||
</author> | service</title> | |||
<date month="4" year="1977"/> | <seriesInfo name="ITU-T Recommendation" value="E.180/Q.35"/> | |||
</front> | ||||
</reference> | ||||
<!-- [rfced] [ITU.E.180.1998] URL: https://www.google.com/url?sa=t&rct=j&q=&esrc | <author> | |||
=s&source=web&cd=1&ved=2ahUKEwiJxOvUh-3jAhVCIjQIHXg1CdIQFjAAegQIARAC&url=https%3 | <organization>ITU-T</organization> | |||
A%2F%2Fwww.itu.int%2Frec%2Fdologin_pub.asp%3Flang%3De%26id%3DT-REC-E.180-199803- | </author> | |||
I!!PDF-E%26type%3Ditems&usg=AOvVaw3P1BYFbmmEKIXIcpA1ifj6 --> | ||||
<reference anchor="ITU.E.180.1998"> | <date month="March" year="1998"/> | |||
<front> | </front> | |||
<title>Technical characteristics of tones for the telephone | </reference> | |||
service</title> | ||||
<author> | <reference anchor="SR-2275"> | |||
<organization>International Telecommunications | <front> | |||
Union</organization> | <title>Telcordia Notes on the Networks</title> | |||
</author> | ||||
<date month="March" year="1998"/> | <seriesInfo name="Telcordia" value="SR-2275"/> | |||
</front> | ||||
<seriesInfo name="ITU" value="Recommendation E.180/Q.35"/> | <author> | |||
</reference> | <organization>Telcordia</organization> | |||
</author> | ||||
<!-- [rfced] [SR-2275] Found this URL but it is dated 1997 http://www.wedophones | <date month="October" year="2000"/> | |||
.com/Manuals/BellCore/BellCore%20Notes%20On%20The%20Network.PDF --> | </front> | |||
</reference> | ||||
</references> | ||||
</references> | ||||
<reference anchor="SR-2275"> | <section anchor="Acknowledgements" numbered="false" toc="default"> | |||
<front> | <name>Acknowledgements</name> | |||
<title>Bellcore Notes on the Networks</title> | ||||
<author> | <t>This document liberally lifts from <xref format="default" | |||
<organization>Telcordia</organization> | target="RFC8197"/> in its text and structure. However, the mechanism and | |||
</author> | purpose of 608 is quite different than 607. Any errors are the current | |||
editor's and not the editor of RFC 8197. Thanks also go to Ken Carlberg | ||||
of the FCC, Russ Housley, Paul Kyzivat, and Tolga Asveren for their | ||||
suggestions on improving the document. Tolga's suggestion to provide a | ||||
mechanism for legacy interoperability served to expand the document by | ||||
50%. In addition, Tolga came up with the jCard attack. Finally, Christer | ||||
Holmberg, as always, provided a close reading and fixed a SIP | ||||
feature-capability bug found by Yehoshua Gev.</t> | ||||
<date month="October" year="2000"/> | <t>Of course, we appreciated the close read and five pages of comments | |||
</front> | from our estimable Area Director, Adam Roach. In addition, we received | |||
valuable comments during IETF Last Call and JWT review from Ines Robles, | ||||
Mike Jones, and Brian Campbell, and IESG review from Alissa Cooper, Eric | ||||
Vyncke, Alexey Melnikov, Benjamin Kaduk, Barry Leiba, and with most | ||||
glee, Warren Kumari.</t> | ||||
<seriesInfo name="Telcordia" value="SR-2275"/> | <t>Finally, Bhavik Nagda provided clarifying edits as well and, more | |||
</reference> | especially, wrote and tested an implementation of the 608 response code | |||
</references> | in Kamailio. Code is available at <eref | |||
target="https://github.com/nagdab/608_Implementation"/>. Grace Chuan | ||||
from MIT regenerated and verified the JWT while working at the FCC.</t> | ||||
</section> | ||||
</back> | </back> | |||
</rfc> | </rfc> | |||
End of changes. 179 change blocks. | ||||
685 lines changed or deleted | 743 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/ |