Network Working Group C. Wendt
Internet-Draft Somos Inc.
Intended status: Standards Track J. Peterson
Expires: 26 October 2022 Neustar Inc.
24 April 2022
PASSporT Extension for Rich Call Data
draft-ietf-stir-passport-rcd-17
Abstract
This document extends PASSporT, a token for conveying
cryptographically-signed call information about personal
communications, to include rich meta-data about a call and caller
that can be signed and integrity protected, transmitted, and
subsequently rendered to the called party. This framework is
intended to include and extend caller and call specific information
beyond human-readable display name comparable to the "Caller ID"
function common on the telephone network. The JSON element defined
for this purpose, Rich Call Data (RCD), is an extensible object
defined to either be used as part of STIR or with SIP Call-Info to
include related information about calls that helps people decide
whether to answer an incoming set of communications from another
party. This signing of the RCD information is also enhanced with a
integrity mechanism that is designed to protect the authoring and
transport of this information between authoritative and non-
authoritative parties generating and signing the Rich Call Data for
support of different usage and content policies.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on 26 October 2022.
Wendt & Peterson Expires 26 October 2022 [Page 1]
Internet-Draft RCD April 2022
Copyright Notice
Copyright (c) 2022 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components
extracted from this document must include Revised BSD License text as
described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Revised BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4
3. Overview of the use of the Rich Call Data PASSporT
extension . . . . . . . . . . . . . . . . . . . . . . . . 4
4. Overview of Rich Call Data Integrity . . . . . . . . . . . . 5
5. PASSporT Claim "rcd" Definition and Usage . . . . . . . . . . 7
5.1. PASSporT "rcd" Claim . . . . . . . . . . . . . . . . . . 7
5.1.1. "nam" key . . . . . . . . . . . . . . . . . . . . . . 7
5.1.2. "apn" key . . . . . . . . . . . . . . . . . . . . . . 7
5.1.3. "icn" key . . . . . . . . . . . . . . . . . . . . . . 8
5.1.4. "jcd" key . . . . . . . . . . . . . . . . . . . . . . 9
5.1.5. "jcl" key . . . . . . . . . . . . . . . . . . . . . . 9
6. "rcdi" RCD Integrity Claim Definition and Usage . . . . . . . 10
6.1. Creation of the "rcd" element digests . . . . . . . . . . 11
6.1.1. "nam" and "apn" elements . . . . . . . . . . . . . . 12
6.1.2. "icn" elements . . . . . . . . . . . . . . . . . . . 12
6.1.3. "jcd" elements . . . . . . . . . . . . . . . . . . . 12
6.1.4. "jcl" elements . . . . . . . . . . . . . . . . . . . 14
6.2. JWT Claim Constraints for "rcd" claims only . . . . . . . 15
7. JWT Claim Constraints usage for "rcd" and "rcdi" claims . . . 15
8. PASSporT "crn" claim - Call Reason Definition and Usage . . . 16
8.1. JWT Constraint for "crn" claim . . . . . . . . . . . . . 16
9. Rich Call Data Claims Usage Rules . . . . . . . . . . . . . . 17
9.1. "rcd" PASSporT Verification . . . . . . . . . . . . . . . 17
9.2. "rcdi" Integrity Verification . . . . . . . . . . . . . . 18
9.3. Example "rcd" PASSporTs . . . . . . . . . . . . . . . . . 18
10. Compact form of "rcd" PASSporT . . . . . . . . . . . . . . . 20
10.1. Compact form of the "rcd" PASSporT claim . . . . . . . . 20
10.2. Compact form of the "rcdi" PASSporT claim . . . . . . . 21
10.3. Compact form of the "crn" PASSporT claim . . . . . . . . 21
11. Further Information Associated with Callers . . . . . . . . . 21
12. Third-Party Uses . . . . . . . . . . . . . . . . . . . . . . 22
Wendt & Peterson Expires 26 October 2022 [Page 2]
Internet-Draft RCD April 2022
12.1. Signing as a Third Party . . . . . . . . . . . . . . . . 23
13. Levels of Assurance . . . . . . . . . . . . . . . . . . . . . 24
14. Using "rcd" in SIP . . . . . . . . . . . . . . . . . . . . . 24
14.1. Authentication Service Behavior . . . . . . . . . . . . 24
14.2. Verification Service Behavior . . . . . . . . . . . . . 25
15. Using "rcd" and "rcdi" as additional claims to other PASSporT
extensions . . . . . . . . . . . . . . . . . . . . . . . 26
15.1. Procedures for applying "rcd" as claims only . . . . . . 27
15.2. Example for applying "rcd" as claims only . . . . . . . 27
16. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 28
17. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 28
17.1. JSON Web Token Claim . . . . . . . . . . . . . . . . . . 28
17.2. PASSporT Types . . . . . . . . . . . . . . . . . . . . . 29
17.3. PASSporT RCD Types . . . . . . . . . . . . . . . . . . . 29
18. Security Considerations . . . . . . . . . . . . . . . . . . . 29
18.1. The use of JWT Claim Constraints in delegate certificates
to exclude unauthorized claims . . . . . . . . . . . . . 30
19. References . . . . . . . . . . . . . . . . . . . . . . . . . 30
19.1. Normative References . . . . . . . . . . . . . . . . . . 30
19.2. Informative References . . . . . . . . . . . . . . . . . 32
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 32
1. Introduction
PASSporT [RFC8225] is a token format based on JWT [RFC7519] for
conveying cryptographically-signed information about the parties
involved in personal communications; it is used to convey a signed
assertion of the identity of the participants in real-time
communications established via a protocol like SIP [RFC8224]. The
STIR problem statement [RFC7340] declared securing the display name
of callers outside of STIR's initial scope, so baseline STIR provides
no features for caller name. This specification documents an
optional mechanism for PASSporT and the associated STIR procedures
which extend PASSporT objects to protect additional elements
conveying richer information: information that is intended to be
rendered to assist a called party in determining whether to accept or
trust incoming communications. This includes the name of the person
or entity on one side of a communications session, the traditional
"Caller ID" of the telephone network, along with related display
information that would be rendered to the called party during
alerting, or potentially used by an automaton to determine whether
and how to alert a called party.
Traditional telephone network signaling protocols have long supported
delivering a 'calling name' from the originating side, though in
practice, the terminating side is often left to derive a name from
the calling party number by consulting a local address book or an
external database. SIP similarly can carry this information in a
Wendt & Peterson Expires 26 October 2022 [Page 3]
Internet-Draft RCD April 2022
'display-name' in the From header field value from the originating to
terminating side, or alternatively in the Call-Info header field.
However, both are unsecured fields that really cannot be trusted in
most interconnected SIP deployments, and therefore is a good starting
point for a framework that utilizes STIR techniques and procedures
for protecting call related information including but not limited to
calling name.
As such, the baseline use-case for this document extends PASSporT to
provide cryptographic protection for the "display-name" field of SIP
requests as well as further "rich call data" (RCD) about the caller,
which includes the contents of the Call-Info header field or other
data structures that can be added to the PASSporT. This document
furthermore specifies a third-party profile that would allow external
authorities to convey rich information associated with a calling
number via a new type of PASSporT. Finally, this document describes
how to preserve the integrity of the RCD in scenarios where there may
be non-authoritative users initiating and signing RCD and therefore a
constraint on the RCD data that a PASSporT can attest via
certificate-level controls.
2. Terminology
The keywords "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 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here.
3. Overview of the use of the Rich Call Data PASSporT extension
The main intended use of the signing of Rich Call Data (RCD) using
STIR within SIP [RFC8224] or more generally as a PASSporT extension
[RFC8225] is for the entity that originates a call, either directly
the caller themselves, if they are authoritative, or a service
provider or third-party service that may be authoritative over the
rich call data on behalf of the caller.
Wendt & Peterson Expires 26 October 2022 [Page 4]
Internet-Draft RCD April 2022
The RCD associated with the identity of the calling party described
in this document is of two main categories. The first data is a more
traditional set of info about a caller associated with "display-name"
in SIP [RFC3261], typically a textual description of the caller, or
alternate presentation numbers often used in From Header field
[RFC3261] or P-Asserted-ID [RFC3325]. The second category is a set
of RCD that is defined as part of the jCard definitions or extensions
to that data. [I-D.ietf-sipcore-callinfo-rcd] describes the optional
use of jCard in Call-Info header field as RCD with the "jcard" Call-
Info purpose token. Either or both of these two types of data can be
incorporated into an "rcd" claim defined in this document.
Additionally, in relation to the description of the specific
communications event itself (versus the identity description in
previous paragraph), [I-D.ietf-sipcore-callinfo-rcd] also describes a
"call-reason" parameter intended for description of the intent or
reason for a particular call. A new PASSporT claim "crn", or call
reason, can contain the string or object that describes the intent of
the call. This claim is intentionally kept separate from the "rcd"
claim because it is envisioned that call reason is not the same as
information associated with the caller and may change on a more
frequent, per call, type of basis.
4. Overview of Rich Call Data Integrity
When incorporating call data that represents a user, even in
traditional calling name services today, often there is policy and
restrictions around what data is allowed to be used. Whether
preventing offensive language or icons or enforcing uniqueness,
potential trademark or copyright violations or other policy
enforcement, there might be the desire to pre-certify or "vet" the
specific use of rich call data. This document defines a mechanism
that allows for a direct or indirect party that controls the policy
to approve or certify the content, create a cryptographic digest that
can be used to validate that data and applies a constraint in the
certificate to allow the recipient and verifier to validate that the
specific content of the RCD is as intended at its creation and
approval or certification.
There are two mechanisms that are defined to accomplish that for two
distinct categories of purposes. The first of the mechanisms include
the definition of an integrity claim. The RCD integrity mechanism is
a process of generating a sufficiently strong cryptographic digest
for each resource referenced by a URI within a claim value (e.g., an
image file referenced by "jcd" or a jCard referenced by "jcl"). This
mechanism is inspired by and based on the W3C Subresource Integrity
specification (http://www.w3.org/TR/SRI/). The second of the
mechanisms uses the capability called JWT Claim Constraints, defined
Wendt & Peterson Expires 26 October 2022 [Page 5]
Internet-Draft RCD April 2022
in [RFC8226] and extended in [RFC9118]. The JWT Claim Constraints
specifically guide the verifier within the certificate used to sign
the PASSporT for the inclusion (or exclusion) of specific claims and
their values, so that the content intended by the signer can be
verified to be accurate.
Both of these mechanisms, integrity digests and JWT Claims
Constraints, can be used together or separately depending on the
intended purpose. The first category of purpose is whether the rich
call data conveyed by the RCD passport is pass-by-value or passed-by-
reference; i.e., is the information contained in the passport claims
and therefore integrity protected by the passport signature, or is
the information contained in an external resource referenced by a URI
in the RCD PASSporT. The second category of purpose is whether the
signer is authoritative or has responsibility for the accuracy of the
RCD based on the policies of the eco-system the RCD PASSporTs are
being used.
The following table provides an overview of the framework for how
integrity should be used with RCD. (Auth represents authoritative in
this table)
+----------+---------------------+--------------------------------+
| Modes | No external URIs | Includes URI refs |
+----------+---------------------+--------------------------------+
| Auth | 1: No integrity req | 2: RDC Integrity |
+----------+---------------------+--------------------------------+
| Non-Auth | 3: JWT Claim Const. | 4: RCD Integ./JWT Claim Const. |
+----------+---------------------+--------------------------------+
The first and simplest mode is exclusively for when all RCD content
is directly included as part of the claims (i.e. no external
reference URIs are included in the content) and when the signer is
authoritative over the content. In this mode, integrity protection
is not required and the set of claims is simply protected by the
signature of the standard PASSporT [RFC8225] and SIP identity header
[RFC8224] procedures. The second mode is an extension of the first
where the signer is authoritative and an "rcd" claim contents include
a URI identifying external resources. In this mode, an RCD Integrity
or "rcdi" claim MUST be included. This integrity claim is defined
later in this document and provides a digest of the "rcd" claim
content so that, particularly for the case where there are URI
references in the RCD, the content of that RCD can be comprehensively
validated that it was received as intended by the signer of the
PASSporT.
Wendt & Peterson Expires 26 October 2022 [Page 6]
Internet-Draft RCD April 2022
The third and fourth mode cover cases where there is a different
authoritative entity responsible for the content of the RCD, separate
from the signer of the PASSporT itself, allowing the ability to have
forward control at the time of the creation of the certificate of the
allowed or vetted content included in or referenced by the RCD claim
contents. The primary framework for allowing the separation of
authority and the signing of PASSporTs by non-authorized entities is
detailed in [RFC9060] although other cases may apply. As with the
first and second modes, the third and fourth modes differ with the
absence or inclusion of externally referenced content using URIs.
5. PASSporT Claim "rcd" Definition and Usage
5.1. PASSporT "rcd" Claim
This specification defines a new JSON Web Token claim for "rcd", Rich
Call Data, the value of which is a JSON object that can contain one
or more key value pairs. This document defines a default set of key
values.
5.1.1. "nam" key
The "nam" key value is a display name, associated with the originator
of personal communications, which may for example derive from the
display-name component of the From header field value of a SIP
request or alternatively from the P-Asserted-Identity header field
value, or a similar field in other PASSporT using protocols. This
key MUST be included once as part of the "rcd" claim value JSON
object. If there is no string associated with a display name, the
claim value MUST then be an empty string.
5.1.2. "apn" key
The "apn" key value is an optional alternate presentation number
associated with the originator of personal communications, which may
for example derive from the user component of the From header field
value of a SIP request (in cases where a network number is carried in
the P-Asserted-Identity [RFC3325]), or alternatively from the
Additional-Identity header field value [3GPP TS 24.229 v16.7.0], or a
similar field in other PASSporT using protocols. Its intended
semantics are to convey a number that the originating user is
authorized to show to called parties in lieu of their default number,
such as cases where a remote call agent uses the main number of a
call center instead of their personal telephone number. The "apn"
key value is a canonicalized telephone number per [RFC8224]
Section 8.3. If present, this key MUST be included once as part of
the "rcd" claim value JSON object.
Wendt & Peterson Expires 26 October 2022 [Page 7]
Internet-Draft RCD April 2022
The use of the optional "apn" key is intended for cases where the
signer of an rcd PASSporT authorizes the use of an alternate
presentation number by the user. How the signer determines that a
user is authorized to present the number in question is a policy
decision outside the scope of this document, however, the vetting of
the alternate presentation number should follow the same level of
vetting as telephone identities or any other information contained in
an RCD PASSporT. This usage is intended as an alternative to
conveying the presentation number in the "tel" key value of a jCard,
in situations where no other rich jCard data needs to be conveyed
with the call. Only one "apn" key may be present. "apn" MUST be used
when it is the intent of the caller or signer to display the
alternate presentation number even if "jcd" or "jcl" keys are present
in a PASSporT with a "tel" key value.
5.1.3. "icn" key
The "icn" key value is an optional URI reference to an image that can
be used to pictorially represent the originator of personal
communications. This icon key value should be used as a base or
default method of associating an image with a calling party.
When being used for SIP [RFC3261] this claim key value used to
protect the call-info header field with a purpose parameter value of
"icon" as described in Section 20.9 [RFC3261]. Example as follows:
Call-Info: <http://wwww.example.com/alice/photo.jpg>;
purpose=icon
Note that [I-D.ietf-sipcore-callinfo-rcd] extends the specific usage
of "icon" in SIP in the context of the larger rich call data
framework with specific guidance on referencing images and image
types, sizes and formats.
It should be also noted that with jCard, as described in the
following "jcd" and "jcl" key value sections and in
[I-D.ietf-sipcore-callinfo-rcd], there are alternative ways of
including photos and logos as URI references. The "icn" key should
be then considered a base or default image and jCard usage should be
considered for profiles and extensions that provide more direct
guidance on the usage of specific defined usage of what each image
type represents for the proper rendering to end users.
Wendt & Peterson Expires 26 October 2022 [Page 8]
Internet-Draft RCD April 2022
5.1.4. "jcd" key
The "jcd" key value is defined to contain a jCard [RFC7095] JSON
object. This jCard object is intended to represent and derives from
the Call-Info header field value defined in
[I-D.ietf-sipcore-callinfo-rcd] with a type of "jcard". As also
defined in [I-D.ietf-sipcore-callinfo-rcd], format of the jCard and
properties used should follow the normative usage and formatting
rules and procedures. It is an extensible object where the calling
party can provide both the standard types of information defined in
jCard or can use the built-in extensibility of the jCard
specification to add additional information. The "jcd" key is
optional. If included, this key MUST only be included once in the
"rcd" JSON object and MUST NOT be included if there is a "jcl" key
included. The use of "jcd" and "jcl" keys are mutually exclusive.
The jCard object value for "jcd" MUST only have referenced content
for URI values that do not further reference URIs. Future
specifications may extend this capability, but as stated in
[I-D.ietf-sipcore-callinfo-rcd] it constrains the security properties
of RCD information and the integrity of the content referenced by
URIs.
Note: even though we refer to [I-D.ietf-sipcore-callinfo-rcd] as the
definition of the jcard properties for usage in an "rcd" PASSporT,
other future specifications and protocols are encouraged to be
adapted for use of "jcd" (or similarly "jcl" below) key beyond SIP
and Call-Info.
5.1.5. "jcl" key
The "jcl" key value is defined to contain a URI that refers the
recipient to a jCard [RFC7095] JSON object hosted on a HTTPS enabled
web server. The web server MUST use the MIME media type for JSON
text as application/json with a default encoding of UTF-8 [RFC4627].
This link may derive from the Call-Info header field value defined in
[I-D.ietf-sipcore-callinfo-rcd] with a type of "jcard". As also
defined in [I-D.ietf-sipcore-callinfo-rcd], format of the jCard and
properties used should follow the normative usage and formatting
rules and procedures. The "jcl" key is optional. If included, this
key MUST only be included once in the "rcd" JSON object and MUST NOT
be included if there is a "jcd" key included. The use of "jcd" and
"jcl" keys are mutually exclusive.
Wendt & Peterson Expires 26 October 2022 [Page 9]
Internet-Draft RCD April 2022
The jCard object referenced by the URI value for "jcl" MUST only have
referenced content for URI values that do not further reference URIs.
Future specifications may extend this capability, but as stated in
[I-D.ietf-sipcore-callinfo-rcd] it constrains the security properties
of RCD information and the integrity of the content referenced by
URIs.
6. "rcdi" RCD Integrity Claim Definition and Usage
The "rcdi" claim is included for the second and fourth modes
described in the integrity overview Section 4 of this document. If
this claim is present it MUST be included only once with the
corresponding single "rcd" claim. The value of the "rcdi" claim is a
JSON object that is defined as follows.
The claim value of "rcdi" claim key is a JSON object with a set of
JSON key/value pairs. These objects correspond to each of the
elements of the "rcd" claim object that require integrity protection
with an associated digest over the content referenced by the key
string. The individual digest of different elements of the "rcd"
claim data and external URI referenced content is kept specifically
separate to allow the ability to verify the integrity of only the
elements that are ultimately retrieved or downloaded or rendered to
the end-user.
The key value references a specific object within the "rcd" claim
value using a JSON pointer defined in [RFC6901] with a minor
additional rule to support external URI references that include JSON
objects themselves, for the specific case of the use of "jcl". JSON
pointer syntax is the key value that specifies exactly the part of
JSON that is used to generate the digest which produce the resulting
string that makes up the value for the corresponding key. Detailed
procedures are provided below, but an example "rcdi" is provided
here:
"rcdi" : {
"/jcl": "sha256-7kdCBZqH0nqMSPsmABvsKlHPhZEStgjojhdSJGRr3rk",
"/jcl/1/2/3": "sha256-jL4f47fF82LuwcrOrSyckA4SWrlElfARHkW6kYo1JdI"
}
The values of each key/value pair consists of a digest across either
the direct values or indirectly referenced resources, combined with a
string that defines the crypto algorithm used to generate the digest.
RCD implementations MUST support the following hash algorithms,
"SHA256", "SHA384", and "SHA512". The SHA-256, SHA-384, and SHA-512
are part of the SHA-2 set of cryptographic hash functions defined by
the National Institute of Standards and Technologies (NIST).
Implementations MAY support additional algorithms, but MUST NOT
Wendt & Peterson Expires 26 October 2022 [Page 10]
Internet-Draft RCD April 2022
support known weak algorithms such as MD5 or SHA-1. In the future,
the list of algorithms may be re-evaluated based on security best
practices. The algorithms are represented in the text by "sha256",
"sha384", or "sha512". The character following the algorithm string
MUST be a minus character, "-". The subsequent characters are the
base64 encoded [RFC4648] digest of a canonicalized and concatenated
string or binary data based on the JSON pointer referenced elements
of "rcd" claim or the URI referenced content contained in the claim.
The details of the determination of the input string used to
determine the digest are defined in the next section.
6.1. Creation of the "rcd" element digests
"rcd" claim objects can contain "nam", "apn", "icn", "jcd", or "jcl"
keys as part of the "rcd" JSON object claim value. This
specification defines the use of JSON pointer [RFC6901] as a
mechanism to reference specific "rcd" claim elements.
In order to facilitate proper verification of the digests and whether
the "rcd" elements or content referenced by URIs were modified, the
input to the digest must be completely deterministic at three points
in the process. First, at the certification point where the content
is evaluated to conform to the application policy and the JWT Claim
Constraints is applied to the certificate containing the digest.
Second, when the call is signed at the Authentication Service, there
may be a local policy to verify that the provided "rcd" claim
corresponds to each digest. Third, when the "rcd" data is verified
at the Verification Service, the verification is performed for each
digest by constructing the input digest string for the element being
verified and referenced by the JSON pointer string.
The procedure for the creation of each "rcd" element digest string
corresponding to a JSON pointer string key is as follows.
1. The JSON pointer either refers to a value that is a part or the
whole of a JSON object or to a string that is a URI referencing
an external resource.
2. For a JSON value, serialize the JSON to remove all white space
and line breaks. The procedures of this deterministic JSON
serialization are defined in [RFC8225], Section 9. The resulting
string is the input for the hash function.
3. For any URI referenced content, the bytes of the body of the HTTP
response is the input for the hash function.
Wendt & Peterson Expires 26 October 2022 [Page 11]
Internet-Draft RCD April 2022
6.1.1. "nam" and "apn" elements
In the case of "nam" and "apn", the only allowed value is a string.
For both of these key values an "rcdi" JSON pointer or integrity
digest is optional because the direct value is protected by the
signature and can be constrained directly with JWTClaimConstraints.
If used, the JSON key value referenced by the JSON pointer is the
string includes the quotes, so quotes MUST be included to compute the
digest.
6.1.2. "icn" elements
In the case of "icn", the only allowed value is a URI value that
references an image file. If the URI references externally linked
content there would need to be a JSON pointer and digest entry for
the content in that linked resource. In order to reference the "icn"
value for a digest, the JSON pointer string would be "/icn" and the
digest string would be created using the image file data following
the rules of JSON pointer. Even though this is probably not the
typical case, an "rcdi" JSON pointer or integrity digest is optional
if the image value is directly included via a data URI. However,
even though the direct value can be protected by the signature and
can be constrained directly with JWTClaimConstraints, since the
length of the image data is likely much larger than the integrity
digest, this specification would recommend the use of the "rcdi" JSON
pointer and integrity digest as the constraint value in
JWTClaimConstraints over the image data.
6.1.3. "jcd" elements
In the case of "jcd", the value associated is a jCard JSON object,
which happens to be a JSON array with sub-arrays. JSON pointer
notation uses numeric indexes into elements of arrays, including when
those elements are arrays themselves.
As example, for the following "rcd" claim:
Wendt & Peterson Expires 26 October 2022 [Page 12]
Internet-Draft RCD April 2022
"rcd": {
"jcd": ["vcard",
[ ["version",{},"text","4.0"],
[“fn",{},"text","Q Branch"],
[“org",{},"text","MI6;Q Branch Spy Gadgets"],
["photo",{},"uri",
"https://example.com/photos/quartermaster-256x256.png"],
["logo",{},"uri",
"https://example.com/logos/mi6-256x256.jpg"],
["logo",{},"uri",
"https://example.com/logos/mi6-64x64.jpg"]
]
],
"nam": "Q Branch Spy Gadgets"
}
In order to use JSON pointer to refer to the URIs, the following
example "rcdi" claim includes a digest for the entire "jcd" array
string as well as three additional digests for the URIs, where, as
defined in [RFC6901] zero-based array indexes are used to reference
the URI strings.
"rcdi": {
"/jcd": "sha256-tbxXX9mRY2dtss3vNdNkNkt9hrV9N1LqGST2hDlw97I",
"/jcd/1/3/3": "sha256-RojgWwU6xUtI4q82+kHPyHm1JKbm7+663bMvzymhkl4",
"/jcd/1/4/3": "sha256-jL4f47fF82LuwcrOrSyckA4SWrlElfARHkW6kYo1JdI",
"/jcd/1/5/3": "sha256-GKNxxqlLRarbyBNh7hc/4lbZAdK6B0kMRf1AMRWPkSo"
}
}
The use of a JSON pointer and integrity digest for the "jcd" claim
key and value is optional. The "jcd" value is the directly included
jCard array and can be protected by the signature and can be
constrained directly with JWTClaimConstraints. However, for data
length reasons (as with "icn" above) or more importantly for
potential privacy and/or security considerations with a publically
accessible certificate this specification would recommend the use of
the "rcdi" JSON pointer and integrity digest as the contraint value
in JWTClaimConstraints over the jCard data.
It is important to remember the array indexes for JSON Pointer are
dependent on the order of the elements in the jCard. The use of
digest for the "/jcd" corresponding to the entire jCard array string
can be included as a redundant mechanism to avoid any possibility of
substitution, insertion attacks, or other potential techniques that
may be possible to avoid integrity detection.
Wendt & Peterson Expires 26 October 2022 [Page 13]
Internet-Draft RCD April 2022
Each URI referenced in the jCard array string MUST have a
corresponding JSON pointer string key and digest value.
6.1.4. "jcl" elements
In the case of the use of a "jcl" URI reference to an external jCard,
the procedures are similar to "jcd" with the exception and the minor
modification to JSON pointer, where "/jcl" is used to refer to the
external jCard array string and any following numeric array indexes
added to the "jcl" (e.g., "/jcl/1/2/3") are treated as if the
externally referenced jCard was directly part of the overall "rcd"
claim JSON object. The following example illustrates a "jcl" version
of the above "jcd" example.
"rcd": {
"jcl": "https://example.com/qbranch.json",
"nam": "Q Branch Spy Gadgets"
},
"rcdi": {
"/jcl": "sha256-Gb0lOkj7Z9+plqbOkN32H+YX0Yav3fbioSk7DxQdGZU",
"/jcl/1/3/3": "sha256-RojgWwU6xUtI4q82+kHPyHm1JKbm7+663bMvzymhkl4",
"/jcl/1/4/3": "sha256-jL4f47fF82LuwcrOrSyckA4SWrlElfARHkW6kYo1JdI",
"/jcl/1/5/3": "sha256-GKNxxqlLRarbyBNh7hc/4lbZAdK6B0kMRf1AMRWPkSo"
}
The following is the example contents of resource pointed to by
https://example.com/qbranch.json used to calculate the above digest
for "/jcl"
["vcard",
[ ["version",{},"text","4.0"],
[“fn",{},"text","Q Branch"],
[“org",{},"text","MI6;Q Branch Spy Gadgets"]
["photo",{},"uri",
"https://example.com/photos/quartermaster-256x256.png"]
["logo",{},"uri",
"https://example.com/logos/mi6-256x256.jpg"]
["logo",{},"uri",
"https://example.com/logos/mi6-64x64.jpg"]
]
]
Wendt & Peterson Expires 26 October 2022 [Page 14]
Internet-Draft RCD April 2022
6.2. JWT Claim Constraints for "rcd" claims only
For the third mode described in the integrity overview Section 4 of
this document, where only JWT Claim Constraints for "rcd" claims
without an "rcdi" claim is required, the procedure when creating the
certificate with the intent to always include an "rcd" claim, to
include a JWT Claim Constraints on inclusion of an "rcd" claim with
the intended values required to be constrained by the certificate
used to sign the PASSporT.
The "permittedValues" for the "rcd" claim may optionally contain
multiple entries, to support the case where the certificate holder is
authorized to use different sets of rich call data.
Only including "permittedValues" for "rcd" (with no "mustInclude")
provides the ability to either have no "rcd" claim or only the set of
constrained "permittedValues" values for an included "rcd" claim.
7. JWT Claim Constraints usage for "rcd" and "rcdi" claims
The integrity overview Section 4 of this document describes a fourth
mode where both "rcdi" and JWT Claim Constraints is used. The use of
this mode implies the signing of an "rcdi" claim is required to be
protected by the authoritative certificate creator using JWT Claims
Constraints in the certificate. The objective of the use of both of
these mechanisms is to constrain the signer to construct the "rcd"
and "rcdi" claims with the "rcd" jCard object including reference
external content via URI. Once both the contents of the "rcd" claim
and any linked content is certified by the party that is
authoritative for the certificate being created and the construction
of the "rcdi" claim is complete, the "rcdi" claim is linked to the
STIR certificate associated with the signature in the PASSporT via
JWT Claim Constraints extension as defined in [RFC8226] Section 8.
It should be recognized that the "rcdi" set of digests is intended to
be unique for only a specific combination of "rcd" content and URI
referenced external content, and therefore provides a robust
integrity mechanism for an authentication service being performed by
a non-authoritative party. This would often be associated with the
use of delegate certificates [RFC9060] for the signing of calls by
the calling party directly as an example, even though the "authorized
party" is not necessarily the subject of a STIR certificate.
For the case that there should always be both "rcd" and "rcdi" values
included in the "rcd" PASSporT, the certificate JWT Claims Constraint
extension MUST include both of the following:
* a "mustInclude" for the "rcd" claim, which simply constrains the
fact that an "rcd" must be included
Wendt & Peterson Expires 26 October 2022 [Page 15]
Internet-Draft RCD April 2022
* a "mustInclude" for the "rcdi" claim and a "permittedValues" equal
to the created "rcdi" claim value string.
Note that optionally the "rcd" claims may be included in the
"permittedValues" however it is recognized that this may be redundant
with the "rcdi" permittedValues because the "rcdi" digest will imply
the content of the "rcd" claims themselves.
The "permittedValues" for the "rcdi" claims (or "rcd" claims more
generally) may contain multiple entries, to support the case where
the certificate holder is authorized to use different sets of rich
call data.
8. PASSporT "crn" claim - Call Reason Definition and Usage
This specification defines a new JSON Web Token claim for "crn", Call
Reason, the value of which is a single string or object that can
contains information as defined in [I-D.ietf-sipcore-callinfo-rcd]
corresponding to the "call-reason" parameter for the Call-Info
header. This claim is optional.
Example "crn" claim with "rcd":
"crn" : "For your ears only",
"rcd": { "nam": "James Bond",
"jcl": "https://example.org/james_bond.json"}
As also noted in [I-D.ietf-sipcore-callinfo-rcd] this claim is
included as corresponding to "call-reason" Call-Info parameter, but
there is an alternative suggested way to include call-reason which is
to use the "cif" claim with a "call-reason" key value, as defined
below in this document.
8.1. JWT Constraint for "crn" claim
The integrity of the "crn" claim can optionally be protected by the
authoritative certificate creator using JWT Constraints in the
certificate. If the intent of the issuer of the certificate is to
always including a call reason, a "mustInclude" for the "crn" claim
indicates that a "crn" claim must be present. If the issuer of the
certificate wants to constrain the contents of "crn", then it may set
"permittedValues" for "crn" in the certificate.
Wendt & Peterson Expires 26 October 2022 [Page 16]
Internet-Draft RCD April 2022
9. Rich Call Data Claims Usage Rules
Either or both the "rcd" or "crn" claims may appear in any PASSporT
claims object as optional elements. The creator of a PASSporT MAY
also add a "ppt" value of "rcd" to the header of a PASSporT as well,
in which case the PASSporT claims MUST contain either an "rcd" or
"crn" claim, and any entities verifying the PASSporT object are
required to understand the "ppt" extension in order to process the
PASSporT in question. An example PASSporT header with the "ppt"
included is shown as follows:
{ "typ":"passport",
"ppt":"rcd",
"alg":"ES256",
"x5u":"https://www.example.com/cert.cer" }
The PASSporT claims object contains the "rcd" key with its
corresponding value. The value of "rcd" is an array of JSON objects,
of which one, the "nam" object, is mandatory. The key syntax of
"nam" follows the display-name ABNF given in [RFC3261].
After the header and claims PASSporT objects have been constructed,
their signature is generated normally per the guidance in [RFC8225].
9.1. "rcd" PASSporT Verification
An "rcd" PASSporT that uses claims defined in this specification, in
order to have a successful verification outcome, MUST conform to the
following:
* have a valid signature
* abide by all rules set forth in the proper construction of the
claims
* abide by JWT Claims Constraint rules defined in [RFC8226]
Section 8 or extended in [RFC9118] if present in the certificate
used to sign the PASSporT
Consistent with the verification rules of PASSporTs more generally
[RFC8225], if any of the above criteria is not met, relying parties
MUST NOT use any of the claims in the PASSporT.
Wendt & Peterson Expires 26 October 2022 [Page 17]
Internet-Draft RCD April 2022
9.2. "rcdi" Integrity Verification
If the "rcdi" claim exists, any party that dereferences a URI (i.e.
downloading content for display to users) from the "rcd" claim MUST
perform integrity validation of the content against the corresponding
digest. Consequently, if URIs with contents covered by integrity
digests are passed to another entity, the corresponding integrity
digest MUST also be included, for example by passing the PASSporT.
Entities that pass on the content without the URI do not have to pass
on the corresponding integrity digest. An entity that does not
otherwise need to dereference a URI from the "rcd" claim would be
discouraged from unnecessarily dereferencing the URI solely to
perform integrity verification.
If there is any issue with completing the integrity verification
procedures for externally referenced content, including HTTP or HTTPS
errors, the referenced content MUST be considered not verified. This
SHOULD NOT however impact the result of base PASSporT verification
for claims content that is directly included in the claims of the
PASSporT.
9.3. Example "rcd" PASSporTs
An example of a "nam" only PASSporT claims object is shown next (with
line breaks for readability only).
{ "orig":{"tn":"12025551000"},
"dest":{"tn":["12025551001"]},
"iat":1443208345,
"rcd":{"nam":"James Bond"} }
An example of a "nam" and "apn" only PASSporT claims object is shown
next (with line breaks for readability only).
{ "orig":{"tn":"12025551000"},
"dest":{"tn":["12155551001"]},
"iat":1443208345,
"rcd":{
"apn":"12025559990",
"nam":"Her Majesty's Secret Service" } }
An example of an "rcd" claims object that includes the "jcd" and also
contains URI references to content which requires the inclusion of an
"rcdi" claim and corresponding digests.
Wendt & Peterson Expires 26 October 2022 [Page 18]
Internet-Draft RCD April 2022
{
"crn": "Rendezvous for Little Nellie",
"orig": { "tn": "12025551000"},
"dest": { "tn": ["12155551001"]},
"iat": 1443208345,
"rcd": {
"jcd": ["vcard",
[ ["version",{},"text","4.0"],
["fn",{},"text","Q Branch"],
["org",{},"text","MI6;Q Branch Spy Gadgets"],
["photo",{},"uri","https://example.com/photos/q-256x256.png"],
["logo",{},"uri","https://example.com/logos/mi6-256x256.jpg"],
["logo",{},"uri","https://example.com/logos/mi6-64x64.jpg"]
] ],
"nam": "Q Branch Spy Gadgets"
},
"rcdi": {
"/jcd/1/3/3": "sha256-RojgWwU6xUtI4q82+kHPyHm1JKbm7+663bMvzymhkl4",
"/jcd/1/4/3": "sha256-jL4f47fF82LuwcrOrSyckA4SWrlElfARHkW6kYo1JdI",
"/jcd/1/5/3": "sha256-GKNxxqlLRarbyBNh7hc/4lbZAdK6B0kMRf1AMRWPkSo"
}
}
In an example PASSporT, where a jCard is linked via HTTPS URL using
"jcl", a jCard file served at a particular URL.
An example jCard JSON file hosted at the example web address of
https://example.com/qbranch.json is shown as follows:
["vcard",
[ ["version",{},"text","4.0"],
["fn",{},"text","Q Branch"],
["org",{},"text","MI6;Q Branch Spy Gadgets"],
["photo",{},"uri","https://example.com/photos/q-256x256.png"],
["logo",{},"uri","https://example.com/logos/mi6-256x256.jpg"],
["logo",{},"uri","https://example.com/logos/mi6-64x64.jpg"]
]
]
For the above referenced jCard, the corresponding PASSporT claims
object would be as follows:
Wendt & Peterson Expires 26 October 2022 [Page 19]
Internet-Draft RCD April 2022
{
"crn": "Rendezvous for Little Nellie",
"orig": {"tn": "12025551000"},
"dest": {"tn": ["12155551001"]},
"iat": 1443208345,
"rcd": {
"nam": "Q Branch Spy Gadgets",
"jcl": "https://example.com/qbranch.json"
},
"rcdi": {
"/jcl": "sha256-qCn4pEH6BJu7zXndLFuAP6DwlTv5fRmJ1AFkqftwnCs",
"/jcl/1/3/3": "sha256-RojgWwU6xUtI4q82+kHPyHm1JKbm7+663bMvzymhkl4",
"/jcl/1/4/3": "sha256-jL4f47fF82LuwcrOrSyckA4SWrlElfARHkW6kYo1JdI",
"/jcl/1/5/3": "sha256-GKNxxqlLRarbyBNh7hc/4lbZAdK6B0kMRf1AMRWPkSo"
}
}
An example "rcd" PASSporT that uses "nam" and "icn" keys with "rcdi"
for calling name and referenced icon image content:
{
"crn": "Rendezvous for Little Nellie",
"orig": {"tn": "12025551000"},
"dest": {"tn": ["12155551001"]},
"iat": 1443208345,
"rcd": {
"nam": "Q Branch Spy Gadgets",
"icn": "https://example.com/photos/q-256x256.png"
},
"rcdi": {
"/nam": "sha256-sM275lTgzCte+LHOKHtU4SxG8shlOo6OS4ot8IJQImY",
"/icn": "sha256-RojgWwU6xUtI4q82+kHPyHm1JKbm7+663bMvzymhkl4"
}
}
10. Compact form of "rcd" PASSporT
10.1. Compact form of the "rcd" PASSporT claim
Compact form of an "rcd" PASSporT claim has some restrictions that
will be enumerated below, but mainly follows standard PASSporT
compact form procedures. For re-construction of the "nam" claim the
string for the display-name in the From header field. "jcl" and "jcd"
MAY NOT be used with compact form due to integrity rules and URI
reference rules in this specification leading to too restrictive of a
set of constraints. Future specifications may revisit this to
propose a consisent and comprehensive way of addressing integrity and
security of information.
Wendt & Peterson Expires 26 October 2022 [Page 20]
Internet-Draft RCD April 2022
10.2. Compact form of the "rcdi" PASSporT claim
Compact form of an "rcdi" PASSporT claim is not supported, so if
"rcdi" is required compact form MUST NOT be used.
10.3. Compact form of the "crn" PASSporT claim
Compact form of a "crn" PASSporT claim shall be re-constructed using
the "call-reason" parameter of a Call-Info header as defined by
[I-D.ietf-sipcore-callinfo-rcd].
11. Further Information Associated with Callers
Beyond naming information and the information that can be contained
in a jCard [RFC7095] object, there may be additional human-readable
information about the calling party that should be rendered to the
end user in order to help the called party decide whether or not to
pick up the phone. This is not limited to information about the
caller, but includes information about the call itself, which may
derive from analytics that determine based on call patterns or
similar data if the call is likely to be one the called party wants
to receive. Such data could include:
* information related to the location of the caller, or
* any organizations or institutions that the caller is associated
with, or even categories of institutions (is this a government
agency, or a bank, or what have you), or
* hyperlinks to images, such as logos or pictures of faces, or to
similar external profile information, or
* information processed by an application before rendering it to a
user, like social networking data that shows that an unknown
caller is a friend-of-a-friend, or reputation scores derived from
crowdsourcing, or confidence scores based on broader analytics
about the caller and callee.
All of these data elements would benefit from the secure attestations
provided by the STIR and PASSporT frameworks. A new IANA registry
has been defined to hold potential values of the "rcd" array; see
Section 17.3. Specific extensions to the "rcd" PASSporT claim are
left for future specification.
There is a few ways RCD can be extended in the future, jCard is an
extensible object and the key/values in the RCD claim object can also
be extended. General guidance for future extensibility that were
followed by the authors is that jCard generally should refer to data
Wendt & Peterson Expires 26 October 2022 [Page 21]
Internet-Draft RCD April 2022
that references the caller as an individual or entity, where other
claims, such as "crn" refer to data regarding the specific call.
There may be other considerations discovered in the future, but this
logical grouping of data to the extent possible should be followed
for future extensibility.
12. Third-Party Uses
While rich data about the call can be provided by an originating
authentication service, an intermediary in the call path could also
acquire rich call data by querying a third-party service. Such a
service effectively acts as a STIR Authentication Service, generating
its own PASSporT, and that PASSporT could be attached to a SIP call
by either the originating or terminating side. This third-party
PASSporT attests information about the calling number, rather than
the call or caller itself, and as such its RCD MUST NOT be used when
a call lacks a first-party PASSporT that assures verification
services that the calling party number is not spoofed. It is
intended to be used in cases when the originating side does not
supply a display-name for the caller, so instead some entity in the
call path invokes a third-party service to provide rich caller data
for a call.
In telephone operations today, a third-party information service is
commonly queried with the calling party's number in order to learn
the name of the calling party, and potentially other helpful
information could also be passed over that interface. The value of
using a PASSporT to convey this information from third parties lies
largely in the preservation of the third party's signature over the
data, and the potential for the PASSporT to be conveyed from
intermediaries to endpoint devices. Effectively, these use cases
form a sub-case of out-of-band [RFC8816] use cases. The manner in
which third-party services are discovered is outside the scope of
this document.
An intermediary use case might look as follows: a SIP INVITE carries
a display name in its From header field value and an initial PASSporT
object without the "rcd" claim. When a terminating verification
service implemented at a SIP proxy server receives this request, and
determines that the signature is valid, it might query a third-party
service that maps telephone numbers to calling party names. Upon
receiving the PASSport in a response from that third-party service,
the terminating side could add a new Identity header field to the
request for the "rcd" PASSporT object provided by the third-party
service. It would then forward the INVITE to the terminating user
agent. If the display name in the "rcd" PASSporT object matches the
display name in the INVITE, then the name would presumably be
rendered to the end user by the terminating user agent.
Wendt & Peterson Expires 26 October 2022 [Page 22]
Internet-Draft RCD April 2022
A very similar flow could be followed by an intermediary closer to
the origination of the call. Presumably such a service could be
implemented at an originating network in order to decouple the
systems that sign for calling party numbers from the systems that
provide rich data about calls.
In an alternative use case, the terminating user agent might query a
third-party service. In this case, no new Identity header field
would be generated, though the terminating user agent might receive a
PASSporT object in return from the third-party service, and use the
"rcd" field in the object as a calling name to render to users while
alerting.
While in the traditional telephone network, the business relationship
between calling customers and their telephone service providers is
the ultimate root of information about a calling party's name, some
other forms of data like crowdsourced reputation scores might derive
from third parties. When those elements are present, they MUST be in
a third-party "rcd" PASSporT using "iss" claim described in the next
section.
12.1. Signing as a Third Party
A third-party PASSporT contains an "iss" element to distinguish its
PASSporTs from first-party PASSporTs. Third-party "rcd" PASSporTs
are signed with credentials that do not have authority over the
identity that appears in the "orig" element of the PASSporT claims.
The presence of "iss" signifies that a different category of
credential is being used to sign a PASSporT than the [RFC8226]
certificates used to sign STIR calls; it is instead a certificate
that identifies the source of the "rcd" data. How those credentials
are issued and managed is outside the scope of this specification;
the value of "iss" however MUST reflect the Subject of the
certificate used to sign a third-party PASSporT. The explicit
mechanism for reflecting the subject field of the certificate is out
of scope of this document and left to the certificate governance
policies that define how to map the "iss" value in the PASSporT to
the subject field in the certificate. Relying parties in STIR have
always been left to make their own authorization decisions about
whether to trust the signers of PASSporTs, and in the third-party
case, where an entity has explicitly queried a service to acquire the
PASSporT object, it may be some external trust or business
relationship that induces the relying party to trust a PASSporT.
An example of a Third Party issued PASSporT claims object is as
follows.
Wendt & Peterson Expires 26 October 2022 [Page 23]
Internet-Draft RCD April 2022
{ "orig":{"tn":"12025551000"},
"dest":{"tn":["12025551001"]},
"iat":1443208345,
"iss":"Zorin Industries",
"rcd":{"nam":"James St. John Smythe"} }
13. Levels of Assurance
As "rcd" can be provided by either first or third parties, relying
parties could benefit from an additional claim that indicates the
relationship of the attesting party to the caller. Even in first
party cases, this admits of some complexity: the Communications
Service Provider (CSP) to which a number was assigned might in turn
delegate the number to a reseller, who would then sell the number to
an enterprise, in which case the CSP might have little insight into
the caller's name. In third party cases, a caller's name could
derive from any number of data sources, on a spectrum between public
data scraped from web searches to a direct business relationship to
the caller. As multiple PASSporTs can be associated with the same
call, potentially a verification service could receive attestations
of the caller name from multiple sources, which have different levels
of granularity or accuracy. Therefore, third-party PASSporTs that
carry "rcd" data MUST also carry an indication of the relationship of
the generator of the PASSporT to the caller in the form of the "iss"
claim. As stated in the previous section, the use of "iss" MUST
reflect the subject field of the certificate used to sign a third-
party PASSporT to represent that relationship.
14. Using "rcd" in SIP
This section specifies SIP-specific usage for the "rcd" claim in
PASSporT, and in the SIP Identity header field value. Other using
protocols of PASSporT may define their own usages for the "rcd"
claim.
14.1. Authentication Service Behavior
An authentication service creating a PASSporT containing an "rcd"
claim MAY include a "ppt" for "rcd" or not. Third-party
authentication services following the behavior in Section 12.1 MUST
include a "ppt" of "rcd". If "ppt" does contain an "rcd", then any
SIP authentication services MUST add a "ppt" parameter to the
Identity header containing that PASSporT with a value of "rcd". The
resulting Identity header might look as follows:
Wendt & Peterson Expires 26 October 2022 [Page 24]
Internet-Draft RCD April 2022
Identity: sv5CTo05KqpSmtHt3dcEiO/1CWTSZtnG3iV+1nmurLXV/HmtyNS7Ltrg9
dlxkWzoeU7d7OV8HweTTDobV3itTmgPwCFjaEmMyEI3d7SyN21yNDo2ER/Ovgt
w0Lu5csIppPqOg1uXndzHbG7mR6Rl9BnUhHufVRbp51Mn3w0gfUs=;
info=<https://biloxi.example.org/biloxi.cer>;alg=ES256;
ppt="rcd"
This specification assumes that by default, a SIP authentication
service derives the value of "rcd", specifically only for the "nam"
key value, from the display-name component of the From header field
value of the request, alternatively for some calls this may come from
the P-Asserted-ID header. It is however a matter of authentication
service policy to decide how it populates the value of "nam" key,
which MAY also derive from other fields in the request, from customer
profile data, or from access to external services. If the
authentication service generates an "rcd" claim containing "nam" with
a value that is not equivalent to the From header field display-name
value, it MUST use the full form of the PASSporT object in SIP.
14.2. Verification Service Behavior
[RFC8224] Section 6.2 Step 5 requires that specifications defining
"ppt" values describe any additional verifier behavior. The behavior
specified for the "ppt" values of "rcd" is as follows. If the
PASSporT is in compact form, then the verification service SHOULD
extract the display-name from the From header field value, if any,
and use that as the value for the "nam" key when it recomputes the
header and claims of the PASSporT object. Additionally, if there
exists a Call-Info header field as defined in
[I-D.ietf-sipcore-callinfo-rcd], the "jcard" value can be derived to
determine the "jcd" key when it recomputes the header and claims of
the PASSporT object. If the signature validates over the recomputed
object, then the verification should be considered successful.
However, if the PASSport is in full form with a "ppt" value of "rcd",
then the verification service MUST extract the value associated with
the "rcd" "nam" key in the object. If the signature validates, then
the verification service can use the value of the "rcd" "nam" key as
the display name of calling party, which would in turn be rendered to
alerted users or otherwise leveraged in accordance with local policy.
This allows SIP networks that convey the display name through a field
other than the From header field to interoperate with this
specification. Similarly, the "jcd" or linked "jcl" jcard
information and "crn" can be optionally, based on local policy for
devices that support it, used to populate a Call-Info header field
following the format of [I-D.ietf-sipcore-callinfo-rcd].
Wendt & Peterson Expires 26 October 2022 [Page 25]
Internet-Draft RCD April 2022
The third-party "rcd" PASSporT cases presents some new challenges, as
an attacker could attempt to cut-and-paste such a third-party
PASSporT into a SIP request in an effort to get the terminating user
agent to render the display name or confidence values it contains to
a call that should have no such assurance. A third-party "rcd"
PASSporT provides no assurance that the calling party number has not
been spoofed: if it is carried in a SIP request, for example, then
some other PASSporT in another Identity header field value would have
to carry a PASSporT attesting that. A verification service MUST
determine that the calling party number shown in the "orig" of the
"rcd" PASSporT corresponds to the calling party number of the call it
has received, and that the "iat" field of the "rcd" PASSporT is
within the date interval that the verification service would
ordinarily accept for a PASSporT.
Verification services may alter their authorization policies for the
credentials accepted to sign PASSporTs when third parties generate
PASSporT objects, per Section 12.1. This may include accepting a
valid signature over a PASSporT even if it is signed with a
credential that does not attest authority over the identity in the
"orig" claim of the PASSporT, provided that the verification service
has some other reason to trust the signer. No further guidance on
verification service authorization policy is given here.
The behavior of a SIP UAS upon receiving an INVITE containing a
PASSporT object with an "rcd" claim largely remains a matter of
implementation policy. In most cases, implementations would render
this calling party name information to the user while alerting. Any
user interface additions to express confidence in the veracity of
this information are outside the scope of this specification.
15. Using "rcd" and "rcdi" as additional claims to other PASSporT
extensions
Rich Call Data, including calling name information, as a common
example, is often data that is additive to the personal
communications information defined in the core PASSporT data required
to support the security properties defined in [RFC8225]. For cases
where the entity originating the personal communications is
supporting the authentication service for the calling identity and is
the authority of the Rich Call Data, rather than creating multiple
Identity header fields cooresponding to multiple PASSporT extensions,
the authentication service can alternatively directly add the "rcd"
claim to a PASSporT that authenticates the calling identity.
Note: There is one very important caveat to this capability, because
generally if there is URI referenced content in an "rcd" PASSporT
there is often the requirement to use "rcdi" and JWT Claims
Wendt & Peterson Expires 26 October 2022 [Page 26]
Internet-Draft RCD April 2022
Constraints. So, it is important for the user of this specification
to recognize that the certificates used should include the necessary
JWT Claims Constraints for proper integrity and security of the
values in the "rcd" claim incorporated into PASSporTs that are not
"rcd".
15.1. Procedures for applying "rcd" as claims only
For a given PASSporT using some other extension than "rcd", the
Authentication Service MAY additionally include the "rcd" claim as
defined in this document. This would result in a set of claims that
correspond to the original intended extension with the addition of
the "rcd" claim.
The Verification service that receives the PASSporT, if it supports
this specification and chooses to, should interpret the "rcd" claim
as simply just an additional claim intended to deliver and/or
validate delivered Rich Call Data.
15.2. Example for applying "rcd" as claims only
In the case of [RFC8588] which is the PASSporT extension supporting
the SHAKEN specification [ATIS-1000074.v002], a common case for an
Authentication service to co-exist in a CSP network along with the
authority over the calling name used for the call. Rather than
require two identity headers, the CSP Authentication Service can
apply both the SHAKEN PASSporT claims and extension and simply add
the "rcd" required claims defined in this document.
For example, the PASSporT claims for the "shaken" PASSporT with "rcd"
claims would be as follows:
Protected Header
{
"alg":"ES256",
"typ":"passport",
“ppt”:”shaken”,
"x5u":"https://cert.example.org/passport.cer"
}
Payload
{
“attest”:”A”,
"dest":{“tn”:["12025551001"]},
"iat":1443208345,
"orig":{“tn”:"12025551000"},
“origid”:”123e4567-e89b-12d3-a456-426655440000”,
"rcd":{"nam":"James Bond"}
}
Wendt & Peterson Expires 26 October 2022 [Page 27]
Internet-Draft RCD April 2022
A Verification Service that supports "rcd" and "shaken" PASSporT
extensions is able to receive the above PASSporT and interpret both
the "shaken" claims as well as the "rcd" defined claim.
If the Verification Service only understands the "shaken" PASSporT
extension claims and doesn't support "rcd" PASSporT extension, then
the "rcd" claim is used during PASSporT signature validation but is
otherwise ignored and disregarded.
16. Acknowledgements
We would like to thank David Hancock, Robert Sparks, Russ Housley,
Eric Burger, Alec Fenichel, Ben Campbell, Jack Rickard, Jordan
Simpson for helpful suggestions, review, and comments.
17. IANA Considerations
17.1. JSON Web Token Claim
This specification requests that the IANA add three new claims to the
JSON Web Token Claims registry as defined in [RFC7519].
Claim Name: "rcd"
Claim Description: Rich Call Data Information
Change Controller: IESG
Specification Document(s): [RFCThis]
Claim Name: "rcdi"
Claim Description: Rich Call Data Integrity Information
Change Controller: IESG
Specification Document(s): [RFCThis]
Claim Name: "crn"
Claim Description: Call Reason
Change Controller: IESG
Specification Document(s): [RFCThis]
Wendt & Peterson Expires 26 October 2022 [Page 28]
Internet-Draft RCD April 2022
17.2. PASSporT Types
This specification requests that the IANA add a new entry to the
PASSporT Types registry for the type "rcd" which is specified in
[RFCThis].
17.3. PASSporT RCD Types
This document requests that the IANA create a new registry for
PASSporT RCD types. Registration of new PASSporT RCD types shall be
under the Specification Required policy.
This registry is to be initially populated with four values, "nam",
"apn", "jcd", and "jcl", which are specified in [RFCThis].
18. Security Considerations
Whether its identities, alternate identities, images, logos, physical
addresses, all of the information contained in a RCD PASSporT must
follow some form of vetting in which the authoritative entity or user
of the information being signed MUST follow an applicable policy of
the eco-system using RCD. This can be of many forms, depending on
the setup and constraints of the eco-system so is therefore out-of-
scope of this document. However, the general chain of trust that
signers of RCD PASSporT are either directly authoritative or have
been delegated authority through certificates using JWT Claim
Constraints and integrity mechanisms defined in this and related
documents is critical to maintain the integrity of the eco-system
utilizing this and other STIR related specifications.
Revealing information such as the name, location, and affiliation of
a person necessarily entails certain privacy risks. Baseline
PASSporT has no particular confidentiality requirement, as the
information it signs over in a using protocol like SIP is all
information that SIP carries in the clear anyway. Transport-level
security can hide those SIP fields from eavesdroppers, and the same
confidentiality mechanisms would protect any PASSporT(s) carried in
SIP.
The use of JWTClaimConstraints, a mechanism defined in [RFC8226] and
extended in [RFC9118] to constrain any of the RCD information in the
public certificate by including that information in the certificate,
depending on the availbility in the deployment of the PKI system, may
present a privacy issue. The use of "rcdi" claim and digests for
representing JWT claim contents may be a recommended way of
preventing the exposure of that information through the certificates
which are often publically accessible and available.
Wendt & Peterson Expires 26 October 2022 [Page 29]
Internet-Draft RCD April 2022
Since computation of "rcdi" digests for URIs requires the loading of
referenced content, it would be best practice to validate that
content at the creation of the "rcdi" or corresponding JWT claim
constraint value by checking for content that may cause issues for
verification services or that doesn't follow the behavior defined in
this document, e.g., unreasonably sized data, the inclusion of
recursive URI references, etc. Along the same lines, the
verification service should also use precautionary best practices to
avoid attacks when accessing URI linked content.
18.1. The use of JWT Claim Constraints in delegate certificates to
exclude unauthorized claims
While this can apply to any PASSporT that is signed with a STIR
Delegate Certificates [RFC9060], it is important to note that when
constraining PASSporTs to include specific claims or contents of
claims, it is also important to consider potential attacks by non-
authorized signers that may include other potential PASSporT claims
that weren't originally vetted by the authorized entity providing the
delegate certificate. The use of JWT claims constraints as defined
in [RFC9118] for preventing the ability to include claims beyond the
claims defined in this document may need to be considered.
Certificate issuers SHOULD NOT include an entry in mustExclude for
the "rcdi" claim for a certificate that will be used with the
PASSporT Extension for Rich Call Data defined in this document.
Excluding this claim would prevent the integrity protection mechanism
from working properly.
19. References
19.1. Normative References
[I-D.ietf-sipcore-callinfo-rcd]
Wendt, C. and J. Peterson, "SIP Call-Info Parameters for
Rich Call Data", Work in Progress, Internet-Draft, draft-
ietf-sipcore-callinfo-rcd-04, 7 March 2022,
<https://www.ietf.org/archive/id/draft-ietf-sipcore-
callinfo-rcd-04.txt>.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>.
Wendt & Peterson Expires 26 October 2022 [Page 30]
Internet-Draft RCD April 2022
[RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston,
A., Peterson, J., Sparks, R., Handley, M., and E.
Schooler, "SIP: Session Initiation Protocol", RFC 3261,
DOI 10.17487/RFC3261, June 2002,
<https://www.rfc-editor.org/info/rfc3261>.
[RFC3325] Jennings, C., Peterson, J., and M. Watson, "Private
Extensions to the Session Initiation Protocol (SIP) for
Asserted Identity within Trusted Networks", RFC 3325,
DOI 10.17487/RFC3325, November 2002,
<https://www.rfc-editor.org/info/rfc3325>.
[RFC4627] Crockford, D., "The application/json Media Type for
JavaScript Object Notation (JSON)", RFC 4627,
DOI 10.17487/RFC4627, July 2006,
<https://www.rfc-editor.org/info/rfc4627>.
[RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data
Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006,
<https://www.rfc-editor.org/info/rfc4648>.
[RFC6901] Bryan, P., Ed., Zyp, K., and M. Nottingham, Ed.,
"JavaScript Object Notation (JSON) Pointer", RFC 6901,
DOI 10.17487/RFC6901, April 2013,
<https://www.rfc-editor.org/info/rfc6901>.
[RFC7095] Kewisch, P., "jCard: The JSON Format for vCard", RFC 7095,
DOI 10.17487/RFC7095, January 2014,
<https://www.rfc-editor.org/info/rfc7095>.
[RFC7340] Peterson, J., Schulzrinne, H., and H. Tschofenig, "Secure
Telephone Identity Problem Statement and Requirements",
RFC 7340, DOI 10.17487/RFC7340, September 2014,
<https://www.rfc-editor.org/info/rfc7340>.
[RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token
(JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015,
<https://www.rfc-editor.org/info/rfc7519>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>.
[RFC8224] Peterson, J., Jennings, C., Rescorla, E., and C. Wendt,
"Authenticated Identity Management in the Session
Initiation Protocol (SIP)", RFC 8224,
DOI 10.17487/RFC8224, February 2018,
<https://www.rfc-editor.org/info/rfc8224>.
Wendt & Peterson Expires 26 October 2022 [Page 31]
Internet-Draft RCD April 2022
[RFC8225] Wendt, C. and J. Peterson, "PASSporT: Personal Assertion
Token", RFC 8225, DOI 10.17487/RFC8225, February 2018,
<https://www.rfc-editor.org/info/rfc8225>.
[RFC8226] Peterson, J. and S. Turner, "Secure Telephone Identity
Credentials: Certificates", RFC 8226,
DOI 10.17487/RFC8226, February 2018,
<https://www.rfc-editor.org/info/rfc8226>.
[RFC8588] Wendt, C. and M. Barnes, "Personal Assertion Token
(PaSSporT) Extension for Signature-based Handling of
Asserted information using toKENs (SHAKEN)", RFC 8588,
DOI 10.17487/RFC8588, May 2019,
<https://www.rfc-editor.org/info/rfc8588>.
[RFC9060] Peterson, J., "Secure Telephone Identity Revisited (STIR)
Certificate Delegation", RFC 9060, DOI 10.17487/RFC9060,
September 2021, <https://www.rfc-editor.org/info/rfc9060>.
[RFC9118] Housley, R., "Enhanced JSON Web Token (JWT) Claim
Constraints for Secure Telephone Identity Revisited (STIR)
Certificates", RFC 9118, DOI 10.17487/RFC9118, August
2021, <https://www.rfc-editor.org/info/rfc9118>.
19.2. Informative References
[ATIS-1000074.v002]
ATIS/SIP Forum NNI Task Group, "Signature-based Handling
of Asserted information using toKENs (SHAKEN)
<https://access.atis.org/apps/group_public/
download.php/62391/ATIS-1000074.v002.pdf>", November 2021.
[RFC8816] Rescorla, E. and J. Peterson, "Secure Telephone Identity
Revisited (STIR) Out-of-Band Architecture and Use Cases",
RFC 8816, DOI 10.17487/RFC8816, February 2021,
<https://www.rfc-editor.org/info/rfc8816>.
Authors' Addresses
Chris Wendt
Somos Inc.
Email: chris-ietf@chriswendt.net
Jon Peterson
Neustar Inc.
Email: jon.peterson@neustar.biz
Wendt & Peterson Expires 26 October 2022 [Page 32]