RFC 8226
Secure Telephone Identity Credentials: Certificates
RFC 8226: Secure Telephone Identity Credentials: Certificates โจ
This is RFC 8226, written by J. Peterson of Neustar and S. Turner of sn3rd, and dated February 2018. It's a Standards Track document (the ISSN is 2070-1721). It doesn't obsolete or update any other RFCs, since its title block doesn't list any. ๐
Abstract ๐
To stop people from impersonating phone numbers on the Internet, we need some kind of credential system that cryptographically proves who has authority over a telephone number. This doc describes using certificates to set up that authority, as one piece of a bigger architecture for managing telephone numbers as identities in protocols like SIP. ๐
Status of This Memo ๐ธ
This is an Internet Standards Track document.
This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.
Info about the current status of this document, any errata, and how to give feedback on it lives at https://www.rfc-editor.org/info/rfc8226. ๐
Copyright Notice โ๏ธ
Copyright (c) 2018 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, since they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions, and they're provided without warranty as described in the Simplified BSD License. ๐
Table of Contents ๐๏ธ
1. Introduction ....................................................2
2. Terminology .....................................................3
3. Authority for Telephone Numbers in Certificates .................4
4. Certificate Usage with STIR .....................................5
5. Enrollment and Authorization Using the TN Authorization List ....6
5.1. Constraints on Signing PASSporTs ...........................8
5.2. Certificate Extension Scope and Structure ..................8
6. Provisioning Private Keying Material ............................9
7. Acquiring Credentials to Verify Signatures ......................9
8. JWT Claim Constraints Syntax ...................................10
9. TN Authorization List Syntax ...................................12
10. Certificate Freshness and Revocation ..........................14
10.1. Acquiring the TN List by Reference .......................15
11. IANA Considerations ...........................................16
11.1. ASN.1 Registrations ......................................16
11.2. Media Type Registrations .................................16
12. Security Considerations .......................................17
13. References ....................................................18
13.1. Normative References .....................................18
13.2. Informative References ...................................20
Appendix A. ASN.1 Module ..........................................21
Acknowledgments ...................................................24
Authors' Addresses ................................................24
1. Introduction ๐
Okay so the Secure Telephone Identity Revisited (STIR) problem statement [RFC7340] calls out the main enabler of robocalling, vishing (voicemail hacking), swatting, and related attacks: being able to impersonate a calling party number. ๐ The starkest examples are when automated callees on the Public Switched Telephone Network (PSTN) use the calling number as a security measure, like to get into a voicemail system. ๐ญ
Robocallers use impersonation to hide who they are. On the ordinary PSTN they can block (that is, withhold) their caller identity, but callees are less likely to pick up calls from blocked identities, so appearing to call from some number, any number, is better for them. And since robocallers don't want to call from a number that can trace back to them, they impersonate numbers that aren't assigned to them. Not it. ๐
One of the most important parts of a system to prevent impersonation is credentials that identify the parties who control telephone numbers ๐. With these credentials, parties can assert that they're actually authorized to use telephony numbers (TNs), so they stand out from impersonators who can't present them. That's why the STIR threat model [RFC7375] says "The design of the credential system envisioned as a solution to these threats must, for example, limit the scope of the credentials issued to carriers or national authorities to those numbers that fall under their purview."
This document describes credential systems for telephone numbers based on [X.509] version 3 certificates, in accordance with [RFC5280]. Telephone numbers have been part of X.509 for ages (X.509 supports arbitrary naming attributes, and the telephoneNumber attribute was defined in the 1988 [X.520] specification). But this document gives ways to determine authority that line up better with telephone network requirements. That includes extending X.509 with a Telephony Number Authorization List certificate extension, which binds certificates to asserted authority for particular telephone numbers or, potentially, telephone number blocks or ranges. ๐ฆ
In the STIR in-band architecture specified in [RFC8224], two basic types of entities need access to these credentials: authentication services and verification services (or verifiers). An authentication service must be operated by an entity enrolled with the certification authority (CA) (see Section 5), whereas a verifier need only trust the trust anchor of the authority and also have a means to access and validate the public keys associated with these certificates. Even though this guidance is written with the STIR in-band architecture in mind, the credential system described here could be useful for other protocols that want to use certificates to assert authority over telephone numbers on the Internet. ๐
This document specifies only the credential syntax and semantics needed to support this architecture. It doesn't assume any particular CA or deployment environment. The authors anticipate that some deployment experience will be necessary to determine optimal operational models. ๐ง
2. Terminology ๐
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 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here. โจ
3. Authority for Telephone Numbers in Certificates ๐
At a high level, this specification details two non-exclusive approaches that can be used to determine authority over telephone numbers with certificates. ๐
The first approach is to use the existing subject of the certificate to check that the holder is authorized to claim authority over a telephone number. The subject might be represented as a domain name in the subjectAltName, such as "example.net", where that domain is known to relying parties as a carrier. Or it might be represented with other identifiers tied to the operation of the telephone network, including Service Provider Codes (SPCs) such as Operating Company Numbers (OCNs) or Service Provider Identifiers (SPIDs), via the TN Authorization List specified in this document. A relying party could then employ an external data set or service that determines whether a specific telephone number is under the authority of the carrier identified as the subject of the certificate, and use that to decide whether the carrier should have authority over the number. Potentially, a certificate extension could convey the URI of such an information service trusted by the issuer of the certificate (though this specification doesn't propose one). Alternatively, some relying parties could form bilateral or multilateral trust relationships with peer carriers, trusting one another's assertions, just like telephone carriers in the Signaling System 7 (SS7) network today rely on transitive trust when displaying the calling party telephone number received through SS7 signaling. ๐ค
The second approach is to extend the syntax of certificates to include a new attribute, defined here as the TN Authorization List, which contains a list of telephone numbers defining the scope of authority of the certificate. Relying parties, if they trust the issuer of the certificate as a source of authoritative information on telephone numbers, can use the TN Authorization List instead of the subject of the certificate to decide whether the signer has authority over a particular telephone number. The TN Authorization List could be provided in one of two ways: as a literal value in the certificate, or as a network service that lets relying parties query in real time to determine whether a telephone number is in the scope of a certificate. Using the TN Authorization List rather than the certificate subject makes sense when, for example, the certificate owner would prefer not to be identified for privacy reasons, or when the holder of the certificate doesn't participate in the traditional carrier infrastructure that the first approach assumes. ๐
The first approach requires little change to existing Public Key Infrastructure (PKI) certificates. For the second approach, we must define an appropriate enrollment and authorization process. For the purposes of STIR, the over-the-wire format specified in [RFC8224] accommodates either approach: the methods for canonicalizing, for signing, for identifying and accessing the certificate, and so on remain the same. It's only the verifier behavior and authorization decision that change, depending on the approach to telephone number authority taken by the certificate. ๐ฆ
For that reason, the two approaches aren't mutually exclusive. In fact, a certificate issued to a traditional telephone network service provider could contain a TN Authorization List or not, if the CA issuing the credential supports it. Regardless of which approach is used, certificates that assert authority over telephone numbers are subject to the ordinary operational procedures that govern certificate use per [RFC5280]. This means verification services must be mindful of the need to trust the trust anchor that issued the certificate, and they must have some means to determine the freshness of the certificate (see Section 10). ๐ธ
4. Certificate Usage with STIR โจ
Okay so, [RFC8224], Section 7.4 says every credential system STIR uses has to explain how it handles the requirements listed below. Here's how certificates in this doc handle them ๐
- The URI [RFC3986] schemes allowed in the SIP Identity header
infoparameter, plus any special steps needed to dereference those URIs ๐. Normative text is in Section 7, but this mechanism lets the HTTP [RFC7230], CID (Content-ID) [RFC2392], and SIP URI schemes show up in theinfoparameter. - Procedures for pulling keying material out of the resources the URI points to. Implementations don't do anything special here beyond dereferencing the
infoURI ๐ซถ. See Section 7. - Procedures the verification service uses to figure out the scope of a credential ๐. This spec basically proposes two methods, both outlined in Section 3. In the first, the subject (or, more properly, the subjectAltName) of the certificate shows the scope of authority through a domain name, and relying parties either trust the subject completely or have some direct way of checking whether a number falls under that subject's authority. In the second, an extension to the certificate, described in Section 9, identifies the scope of authority of the certificate ๐ฆ.
- The cryptographic algorithms needed to validate the credentials ๐. For this spec, that means the signature algorithms used to sign certificates. This specification REQUIRES that implementations support both the Elliptic Curve Digital Signature Algorithm (ECDSA) with the P-256 curve (see [DSS]) and RSA PKCS #1 v1.5 ("PKCS" stands for "Public-Key Cryptography Standards") (see [RFC8017], Section 8.2) for certificate signatures. Implementers are advised that the RSA option is only meant as a transitional mechanism, because it's everywhere in existing PKIs, but we expect it will eventually be deprecated ๐ฅ.
- Last but not least, note that all certificates compliant with this specification:
- MUST provide cryptographic keying material sufficient to generate the ECDSA using P-256 and SHA-256 signatures necessary to support the ES256 hashed signatures required by PASSporT [RFC8225], which in turn follows the JSON Web Token (JWT) [RFC7519] โจ.
- MUST support both ECDSA with P-256 and RSA PKCS #1 v1.5 for certificate signature verification ๐.
This document also includes some extra certificate-related requirements ๐:
- See Section 5.1 for requirements related to the JWT Claim Constraints certificate extension.
- See Section 7 for requirements related to relying parties acquiring credentials.
- See Sections 10 and 10.1 for requirements related to certificate freshness and the Authority Information Access (AIA) certificate extension.
5. Enrollment and Authorization Using the TN Authorization List ๐ธ
This document covers three models for enrollment when you're using the TN Authorization List extension ๐.
The first enrollment model is one where the CA teams up with national numbering authorities to issue credentials to the people who are assigned numbers ๐ค. In the United States, for example, telephone number blocks go to Local Exchange Carriers (LECs) from the North American Numbering Plan Administration (NANPA), who get their direction from the national regulator ๐บ๐ธ. LECs can also get numbers in smaller allocations through number pooling, or through an individual assignment via number portability. LECs then assign numbers to customers, who might be private individuals or organizations, and organizations take responsibility for assigning numbers inside their own enterprise ๐ข. This model needs top-down adoption from regulators all the way down to carriers. Assignees of E.164 numbering resources taking part in this enrollment model should take appropriate steps to establish trust anchors โ.
The second enrollment model is bottom-up ๐ฑ. A CA requires that an entity prove control through some kind of test, which, just like certification authorities for the web PKI, might be either (1) automated or (2) a manual administrative process. As an example of an automated process, an authority might send a text message to a telephone number containing a URL (which the recipient might dereference) to verify that a user controls a terminal for that number ๐ฑ. Checks like this are used all the time in commercial systems today to validate telephone numbers users give them. It's comparable to existing enrollment systems some certificate authorities use to issue S/MIME credentials for email, where they verify that the party applying for a credential actually receives mail at that email address ๐ง.
The third enrollment model is delegation ๐ง. The holder of a certificate (assigned by either of the two methods above) might delegate some or all of their authority to another party. In some cases, multiple levels of delegation could happen. For instance, a LEC might delegate authority to a customer organization for a block of 100 numbers used by an IP PBX, and that organization might then delegate authority for one particular number to an individual employee ๐ฉโ๐ป. This is analogous to how delegation of organizational identities works in traditional hierarchical PKIs that use the name constraints extension [RFC5280]. The root CA delegates names in sales to the sales department CA, names in development to the development CA, and so on ๐ณ. Lengthy certificate delegation chains are brittle, though, and can slow down the verification process, so this document considers optimizations to cut down the complexity of verification โก.
Future work might explore partial delegation, where certificate holders delegate only part of their authority ๐ฎ. For example, individual assignees might want to delegate to a service authority for text messages tied to their telephone number, but not for other functions ๐ฌ.
5.1. Constraints on Signing PASSporTs ๐๏ธ
The public key in the certificate is used to validate the signature on a JWT [RFC7519] that follows the conventions specified in PASSporT [RFC8225]. This specification supports constraints on the JWT claims, which lets the CA hand out different permissions to certificate holders. For example, someone enrolled through proof-of-possession can get different permissions than someone enrolled through delegation ๐. A Certificate Policy (CP) and a Certification Practice Statement (CPS) [RFC3647] are produced as part of the normal PKI bootstrapping process. That means the CP gets written first, and then the CA explains in the CPS how it conforms to the CP ๐. A CA that wants to place constraints on the JWT claims MUST include the JWT Claim Constraints certificate extension in the certificates it issues ๐ง. See Section 8 for information about that certificate extension.
5.2. Certificate Extension Scope and Structure ๐งฉ
This specification puts no limits on how many telephone numbers can be associated with a given certificate ๐ข. Some service providers might be assigned millions of numbers and may want one certificate that works for signing for any one of those numbers. Others may want to split up their authority over subsets of the numbers they control ๐๏ธ.
Service providers might also want multiple certificates with the same scope of authority ๐ฏ. For example, a service provider with several regional gateway systems may want each system to be able to sign for each of their numbers, but not want every system sharing the same private key ๐.
The set of telephone numbers a particular certificate is valid for is expressed in the certificate through a certificate extension. The certificate's extensibility mechanism is defined in [RFC5280], but the TN Authorization List extension is specified in this document ๐.
The subjects of certificates containing the TN Authorization List extension are typically the administrative entities that numbers are assigned or delegated to. For example, a LEC might hold a certificate for a range of telephone numbers ๐. Sometimes the organization or individual who got such a certificate doesn't want to be associated with it. For example, a private individual with a certificate for a single telephone number might not want to publish that certificate if every verifier immediately knew their name ๐. The certification authorities issuing certificates with the TN Authorization List extension may, in line with their policies, obscure the identity of the subject. The mechanisms for doing that are outside the scope of this document ๐ซฃ.
6. Provisioning Private Keying Material ๐๏ธ
To sign calls using the procedures described in [RFC8224], authentication services have to hold a private key that matches a certificate with authority over the calling number ๐ฒ. [RFC8224] doesn't require any particular entity in a SIP deployment architecture to sign requests. It only requires that the signer be an entity with an appropriate private key, so the authentication service role can be filled by any entity in a SIP network ๐. For a certificate that only grants authority over one particular number, issued to an end user, an end-user device might hold the private key and generate the signature ๐ฑ. For a service provider with authority over large blocks of numbers, an intermediary might hold the private key and sign calls ๐๏ธ.
The specification RECOMMENDS distributing private keys through PKCS #8 objects signed by a trusted entity ๐. One example is the Cryptographic Message Syntax (CMS) package specified in [RFC5958] ๐.
7. Acquiring Credentials to Verify Signatures โจ
okay so this section is about how a verifier actually gets its hands on the credentials it needs to check a request ๐ The spec doesn't force one single method, because a certificate's validity doesn't depend on how it was acquired. Iconic flexibility, honestly ๐ Anyone following [RFC8224] already speaks SIP, so SIP itself can be a way to deliver certificates ๐
[RFC8224] gives you an "info" parameter on the Identity header. It holds a URI pointing at the credential that was used to make the Identity header ๐ [RFC8224] also says that any doc defining a credential system has to list which URI schemes can show up in that "info" parameter. For anything compliant with this spec, three URI schemes are REQUIRED: the CID URI, the SIP URI, and the HTTP URI ๐
The easiest vibe is when the certificate just rides along in the same SIP request as the signature ๐ฆ For example, the certificate could live in a multipart MIME body [RFC2046], and the URI in the Identity header "info" parameter could point to that body with a CID URI [RFC2392]. Ngl though, a lot of environments can't do this because of message size limits or because they don't support multipart MIME at all ๐ญ
The "info" parameter in a SIP request can also hold a URI that the verifier goes and dereferences ๐ Implementations of this specification are REQUIRED to support SIP for this job (through the SUBSCRIBE/NOTIFY mechanism), and HTTP and HTTPS too. Full coverage, no notes ๐
Now, the optimization bit ๐ง A verifier might have a service, a cache, or some other local store that hands over certificates for a specific telephone number. Cute! BUT there can be multiple valid certificates that could sign a call setup request for the same telephone number, so the signer needs some kind of discriminator to say which credentials it's using ๐ค The Identity header "info" parameter can do that job, as long as implementations use it as the key when they look up certificates in caches or other sources ๐
Main character reminder: if you're caching, the "info" parameter is your key. Don't skip it ๐ซถ
8. JWT Claim Constraints Syntax ๐ง
So here's the deal: certificate subjects can be limited to specific values for PASSporT claims using the JWT Claim Constraints certificate extension ๐ If an issuer doesn't want any restrictions, it just leaves the extension out of the certificate's extension field [RFC5280]. The extension is non-critical, only applies to end-entity certificates, and it's defined with ASN.1 [X.680] [X.681] [X.682] [X.683], which you'll see later in this section. The claim syntax itself comes from PASSporT, and if you want to add new claims, you follow the procedures in [RFC8225], Section 8.3 ๐ธ
This extension is optional. But if it's there, it puts limits on which claims an authentication service can put in the PASSporT objects it signs ๐ Issuers apply the constraints, and verifiers enforce them when they validate PASSporT claims, like this:
- mustInclude is for claims that MUST show up in the PASSporT on top of iat, orig, and dest. The baseline PASSporT claims ("iat", "orig", and "dest") are already permitted by default and SHOULD NOT be included. If mustInclude is missing, then iat, orig, and dest MUST appear in the PASSporT ๐
- permittedValues means that if a claim name is present, the claim MUST contain one of the listed values ๐ฆ
Let's look at two examples with a PASSporT claim called "confidence", which has the values "low", "medium", and "high" โจ
- If a CA issues an authentication service a certificate that has the mustInclude JWTClaimName "confidence", then that authentication service MUST include the "confidence" claim in every PASSporT it generates. A verification service will treat any PASSporT it gets as invalid if it doesn't include the "confidence" claim ๐
- If a CA issues an authentication service a certificate that has the permittedValues JWTClaimName "confidence" with a permitted "high" value, then that authentication service will treat any PASSporT it receives as invalid if the "confidence" claim is missing or doesn't have a "high" value ๐ฅ
The JWT Claim Constraints certificate extension is identified by the object identifier (OID) below. It's defined under the id-pe OID arc from [RFC5280] and it's managed by IANA (see Section 11) ๐
id-pe-JWTClaimConstraints OBJECT IDENTIFIER ::= { id-pe 27 }
Here's the syntax for the JWT Claim Constraints certificate extension ๐
JWTClaimConstraints ::= SEQUENCE {
mustInclude [0] JWTClaimNames OPTIONAL,
-- The listed claim names MUST appear in the PASSporT
-- in addition to iat, orig, and dest. If absent, iat, orig,
-- and dest MUST appear in the PASSporT.
permittedValues [1] JWTClaimPermittedValuesList OPTIONAL }
-- If the claim name is present, the claim MUST contain one of
-- the listed values.
( WITH COMPONENTS { ..., mustInclude PRESENT } |
WITH COMPONENTS { ..., permittedValues PRESENT } )
JWTClaimPermittedValuesList ::= SEQUENCE SIZE (1..MAX) OF
JWTClaimPermittedValues
JWTClaimPermittedValues ::= SEQUENCE {
claim JWTClaimName,
permitted SEQUENCE SIZE (1..MAX) OF UTF8String }
JWTClaimNames ::= SEQUENCE SIZE (1..MAX) OF JWTClaimName
JWTClaimName ::= IA5String
9. TN Authorization List Syntax ๐๐
Okay, so the subjects of certificates with the TN Authorization List extension are the administrative entities that numbers are assigned or delegated to ๐ท When a verifier is checking a caller's identity, local policy always decides when a particular subject can be trusted. The point of this extension, though, is to let a verifier figure out when the CA has said that a subject has authority over a specific telephone number or range of numbers ๐ฑ The non-critical TN Authorization List certificate extension goes in the certificate's extension field [RFC5280]. It's defined with ASN.1 [X.680] [X.681] [X.682] [X.683], and here's how the syntax and semantics work ๐ฆ
Once again (yes, it's repeated in the original, we love a callback ๐ ): the subjects of certificates containing the TN Authorization List extension are the administrative entities to whom numbers are assigned or delegated. In an end-entity certificate, the TN Authorization List says which TNs it has authorized. In a CA certificate, the TN Authorization List limits the set of TNs for certification paths that include that certificate ๐
The TN Authorization List certificate extension is identified by the OID below. It's defined under the id-pe OID arc from [RFC5280] and managed by IANA (see Section 11) ๐
id-pe-TNAuthList OBJECT IDENTIFIER ::= { id-pe 26 }
The TN Authorization List extension has this syntax ๐ง
TNAuthorizationList ::= SEQUENCE SIZE (1..MAX) OF TNEntry
TNEntry ::= CHOICE {
spc [0] ServiceProviderCode,
range [1] TelephoneNumberRange,
one [2] TelephoneNumber
}
ServiceProviderCode ::= IA5String
-- SPCs may be OCNs, various SPIDs, or other SP identifiers
-- from the telephone network.
TelephoneNumberRange ::= SEQUENCE {
start TelephoneNumber,
count INTEGER (2..MAX),
...
}
TelephoneNumber ::= IA5String (SIZE (1..15)) (FROM ("0123456789#*"))
The TN Authorization List extension tells you which phone numbers the call setup signer is allowed to use ๐ It points to one or more blocks of telephone number entries that have been authorized for the signer. There are three ways to identify a block ๐ธ
- SPCs are the generic term for the identifiers that telephone networks use today to designate service providers. In the North American context, these include OCNs as specified in [ATIS-0300251], related SPIDs, or other similar service provider identifiers. An SPC can be used to indirectly name all of the telephone numbers tied to that service provider identifier ๐
- Telephone numbers can be listed as a range (in the TelephoneNumberRange format). A range is a starting telephone number plus an integer count of numbers inside the range. The valid boundaries of ranges can vary according to national policies ๐ The count field only applies to start values that don't include "" or "#" (so, a TelephoneNumber without "" or "#"). count MUST NOT make the number increase in length. For example, a TelephoneNumberRange with TelephoneNumber=10 and count=91 is invalid. Formally, given the inputs count and TelephoneNumber of length D, TelephoneNumber + count MUST be less than 10^D ๐ โโ๏ธ
- A single telephone number can be listed (as a TelephoneNumber) ๐
Ngl, big service providers might want to link a ton of numbers, like possibly millions, to one certificate ๐ญ So optimizations are needed for those cases, otherwise the certificate size gets out of hand ๐ซ In those situations, the TN Authorization List can be given by reference instead of by value. That happens through a separate certificate extension that lets verifiers either (1) securely download the list of numbers tied to a certificate, or (2) verify that a single number falls under that certificate's authority. For more on this optimization, see Section 10.1 ๐ฆ
10. Certificate Freshness and Revocation โจ
Okay bestie, no matter which of the approaches in Section 3 you pick for using certificates, you still need a certificate verification mechanism ๐ . But the classic "is this cert still fresh?" question gets a plot twist when you use the TN Authorization List extension with telephone numbers or number ranges (instead of SPCs) ๐ญ. Verifiers have to check two things: the cert is still valid, and its scope actually includes the telephone number they're validating. Number portability can change who holds a number, so even if you have a valid cached cert for a TN (or for a range that contains it), you still need to confirm that the entity who made the PASSporT (the one with the digital signature) is still a proper authority for that number ๐.
To check the status of one of these certs, the verifier grabs the cert if it needs to (using the methods from Section 7), and then they can either:
- a. Rely on short-lived certificates and skip checking the certificate's status, or
- b. Rely on status information from the authority (e.g., the Online Certificate Status Protocol (OCSP)).
The trade-off is this: short-lived certs put the work on the front end (enrollment), while status info puts it on the back end (verification) ๐. Both hit call setup time ๐, but some ways of making short-lived certs, like needing a brand new one for every single call, would cost way more to run than just fetching status info ๐ธ. This document doesn't make a particular recommendation for how to handle certificate freshness in STIR, because that needs more study and real implementation experience ๐งช. Also, online status info for certs has the potential to leak private info [RFC7258] if you don't take precautions ๐ซฃ. Future specs that define freshness mechanisms for STIR MUST note any such risks and provide countermeasures where possible ๐ก๏ธ.
10.1. Acquiring the TN List by Reference
One alternative to checking cert status for a particular telephone number is to just acquire the TN Authorization List by reference ๐. That means dereferencing a URL in the certificate, instead of stuffing the value of the TN Authorization List into the certificate itself.
Getting a list of the telephone numbers tied to a cert or its subject is basically an application-layer query/response thing, separate from cert status, and it can be kicked off by a separate URI included in the certificate ๐. The AIA extension (see [RFC5280]) supports this: it uses an OID to identify the accessMethod, plus an accessLocation, which will most likely be a URI. The verifier follows the URI to figure out whether the TNs in the list are authorized for the caller. Just like the certificate extension from Section 9, a URI dereferenced from an end-entity certificate tells you which TNs the caller has been authorized for. Verifiers MUST support the AIA extension, and the dereferenced URI from a CA certificate limits the set of TNs for any certification paths that include that certificate ๐.
HTTPS is the most obvious protocol for fetching the list of telephone numbers associated with a particular certificate ๐. This document defines a new AIA accessMethod called "id-ad-stirTNList", which uses this AIA OID:
id-ad-stirTNList OBJECT IDENTIFIER ::= { id-ad 14 }
When the "id-ad-stirTNList" accessMethod is used, the accessLocation MUST be an HTTPS URI. Dereferencing that URI returns the complete DER-encoded TN Authorization List (see Section 9) for the certificate, with a Content-Type of application/tnauthlist (see Section 11.2) ๐.
Heads up: delivering the entire list of telephone numbers for a certificate tells STIR verifiers about numbers other than the one tied to the call they're checking ๐. In environments where verifiers handle a huge volume of calls, keeping an up-to-date, complete cache for the numbers of crucial certificate holders could give performance a serious boost ๐.
11. IANA Considerations ๐ธ
11.1. ASN.1 Registrations
This document uses object identifiers for the TN certificate extension defined in Section 9, the "TN List by reference" AIA access descriptor defined in Section 10.1, and the ASN.1 module identifier defined in Appendix A ๐งฉ. So, per this document, IANA made the following assignments, as shown on <https://www.iana.org/assignments/smi-numbers>:
- TN Authorization List certificate extension in the "SMI Security for PKIX Certificate Extension" (1.3.6.1.5.5.7.1) registry:
26 id-pe-TNAuthList
- JWT Claim Constraints certificate extension in the "SMI Security for PKIX Certificate Extension" (1.3.6.1.5.5.7.1) registry:
27 id-pe-JWTClaimConstraints
- TN List by reference access descriptor in the "SMI Security for PKIX Access Descriptor" (1.3.6.1.5.5.7.48) registry:
14 id-ad-stirTNList
- The TN ASN.1 module in the "SMI Security for PKIX Module Identifier" (1.3.6.1.5.5.7.0) registry:
89 id-mod-tn-module
11.2. Media Type Registrations
Type name: application
Subtype name: tnauthlist
Required parameters: None
Optional parameters: None
Encoding considerations: Binary
Security considerations: See Section 12 of RFC 8226
Interoperability considerations:
The TN Authorization List inside this media type MUST be
DER-encoded TNAuthorizationList.
Published specification: RFC 8226
Applications that use this media type:
Issuers and relying parties of secure telephone identity
certificates, to limit the subject's authority to a
particular telephone number or telephone number range.
Fragment identifier considerations: None
Additional information:
Deprecated alias names for this type: None
Magic number(s): None
File extension(s): None
Macintosh File Type Code(s): None
Person & email address to contact for further information:
Jon Peterson <jon.peterson@team.neustar>
Intended usage: COMMON
Restrictions on usage: None
Author: Sean Turner <sean@sn3rd.com>
Change controller: The IESG <iesg@ietf.org>
12. Security Considerations ๐
This document is entirely about security ๐ค. For more on certificate security and practices, check out [RFC5280], especially its Security Considerations section ๐.
If a certification authority issues a certificate attesting authority over many telephone numbers, the TNAuthList element can spill extraneous telephone numbers tied to the certificate to relying parties, even ones with zero bearing on the call in progress ๐ฌ. The privacy risk can get worse when AIA is used (as described in Section 10.1) to link thousands of numbers to a single certificate ๐. Even an SPC in a certificate can link that cert to a particular carrier and, with access to industry databases, potentially to the set of numbers attached to that SPC ๐ต๏ธ. Now, these practices might not be a big deal in some environments, but in other scenarios, alternative approaches could minimize the data revealed to relying parties ๐. For example, a service provider with authority over a big block of numbers could generate short-lived certificates for individual TNs that aren't so easily linked to the service provider or to any other numbers it controls ๐ฆ. Optimizations to make acquiring short-lived certificates easier are a potential area of future work for STIR ๐ฎ.
The TN Authorization List returned through a dereferenced URI is served over HTTPS, so it's protected in transit ๐. But the TN Authorization List served is not a signed object, which means the server is trusted to faithfully return the TN Authorization List that the list generator gave it ๐ซก. Trust issues, bestie, iykyk ๐.
13. References ๐
13.1. Normative References ๐
Okay bestie, this is the squad of docs the spec literally can't function without ๐ Every single one is needed to build this stuff, so no skipping ๐ซถ
[ATIS-0300251]
ATIS Recommendation 0300251, "Codes for Identification of
Service Providers for Information Exchange", 2007.
[DSS] National Institute of Standards and Technology, U.S.
Department of Commerce, "Digital Signature Standard
(DSS)", NIST FIPS PUB 186-4, DOI 10.6028/NIST.FIPS.186-4,
July 2013, <http://nvlpubs.nist.gov/nistpubs/FIPS/
NIST.FIPS.186-4.pdf>.
[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>.
[RFC2392] Levinson, E., "Content-ID and Message-ID Uniform Resource
Locators", RFC 2392, DOI 10.17487/RFC2392, August 1998,
<https://www.rfc-editor.org/info/rfc2392>.
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
Resource Identifier (URI): Generic Syntax", STD 66,
RFC 3986, DOI 10.17487/RFC3986, January 2005,
<https://www.rfc-editor.org/info/rfc3986>.
[RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S.,
Housley, R., and W. Polk, "Internet X.509 Public Key
Infrastructure Certificate and Certificate Revocation List
(CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008,
<https://www.rfc-editor.org/info/rfc5280>.
[RFC5912] Hoffman, P. and J. Schaad, "New ASN.1 Modules for the
Public Key Infrastructure Using X.509 (PKIX)", RFC 5912,
DOI 10.17487/RFC5912, June 2010,
<https://www.rfc-editor.org/info/rfc5912>.
[RFC5958] Turner, S., "Asymmetric Key Packages", RFC 5958,
DOI 10.17487/RFC5958, August 2010,
<https://www.rfc-editor.org/info/rfc5958>.
[RFC7230] Fielding, R., Ed., and J. Reschke, Ed., "Hypertext
Transfer Protocol (HTTP/1.1): Message Syntax and Routing",
RFC 7230, DOI 10.17487/RFC7230, June 2014,
<https://www.rfc-editor.org/info/rfc7230>.
[RFC7258] Farrell, S. and H. Tschofenig, "Pervasive Monitoring Is an
Attack", BCP 188, RFC 7258, DOI 10.17487/RFC7258,
May 2014, <https://www.rfc-editor.org/info/rfc7258>.
[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>.
[RFC8017] Moriarty, K., Ed., Kaliski, B., Jonsson, J., and A. Rusch,
"PKCS #1: RSA Cryptography Specifications Version 2.2",
RFC 8017, DOI 10.17487/RFC8017, November 2016,
<https://www.rfc-editor.org/info/rfc8017>.
[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>.
[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>.
[X.509] International Telecommunication Union, "Information
technology - Open Systems Interconnection - The Directory:
Public-key and attribute certificate frameworks", ITU-T
Recommendation X.509, ISO/IEC 9594-8, October 2016,
<https://www.itu.int/rec/T-REC-X.509>.
[X.680] International Telecommunication Union, "Information
Technology - Abstract Syntax Notation One (ASN.1):
Specification of basic notation", ITU-T Recommendation
X.680, ISO/IEC 8824-1, August 2015,
<https://www.itu.int/rec/T-REC-X.680>.
[X.681] International Telecommunication Union, "Information
Technology - Abstract Syntax Notation One (ASN.1):
Information object specification", ITU-T Recommendation
X.681, ISO/IEC 8824-2, August 2015,
<https://www.itu.int/rec/T-REC-X.681>.
[X.682] International Telecommunication Union, "Information
Technology - Abstract Syntax Notation One (ASN.1):
Constraint specification", ITU-T Recommendation
X.682, ISO/IEC 8824-3, August 2015,
<https://www.itu.int/rec/T-REC-X.682>.
[X.683] International Telecommunication Union, "Information
Technology - Abstract Syntax Notation One (ASN.1):
Parameterization of ASN.1 specifications", ITU-T
Recommendation X.683, ISO/IEC 8824-4, August 2015,
<https://www.itu.int/rec/T-REC-X.683>.
13.2. Informative References ๐ธ
These are the extra-credit reads, so they're helpful but not required to get the vibe ๐ง
[RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
Extensions (MIME) Part Two: Media Types", RFC 2046,
DOI 10.17487/RFC2046, November 1996,
<https://www.rfc-editor.org/info/rfc2046>.
[RFC3647] Chokhani, S., Ford, W., Sabett, R., Merrill, C., and S.
Wu, "Internet X.509 Public Key Infrastructure Certificate
Policy and Certification Practices Framework", RFC 3647,
DOI 10.17487/RFC3647, November 2003,
<https://www.rfc-editor.org/info/rfc3647>.
[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>.
[RFC7375] Peterson, J., "Secure Telephone Identity Threat Model",
RFC 7375, DOI 10.17487/RFC7375, October 2014,
<https://www.rfc-editor.org/info/rfc7375>.
[X.520] International Telecommunication Union, "Information
technology - Open Systems Interconnection - The Directory:
Selected attribute types", ITU-T Recommendation
X.520, ISO/IEC 9594-6, October 2016,
<https://www.itu.int/rec/T-REC-X.520>.
Appendix A. ASN.1 Module ๐ง
This appendix is where the actual ASN.1 [X.680] definitions live, the official blueprint for every structure in this spec. It's written in ASN.1 as defined in [X.680], [X.681], [X.682], and [X.683], so it's the one place to look when you want the exact shape of things โจ
The modules here are compatible with the most current ASN.1 specifications published in 2015 (see [X.680], [X.681], [X.682], and [X.683]). None of the newly defined tokens in the 2008 ASN.1 (DATE, DATE-TIME, DURATION, NOT-A-NUMBER, OID-IRI, RELATIVE-OID-IRI, TIME, TIME-OF-DAY) are currently used in any of the ASN.1 specifications referred to here. Lowkey a relief, honestly ๐
This ASN.1 module imports ASN.1 from [RFC5912] ๐
TN-Module-2016
{ iso(1) identified-organization(3) dod(6) internet(1) security(5)
mechanisms(5) pkix(7) id-mod(0) id-mod-tn-module(89) }
DEFINITIONS EXPLICIT TAGS ::= BEGIN
IMPORTS
id-ad, id-pe
FROM PKIX1Explicit-2009 -- From RFC 5912
{ iso(1) identified-organization(3) dod(6) internet(1) security(5)
mechanisms(5) pkix(7) id-mod(0) id-mod-pkix1-explicit-02(51) }
EXTENSION
FROM PKIX-CommonTypes-2009 -- From RFC 5912
{ iso(1) identified-organization(3) dod(6) internet(1) security(5)
mechanisms(5) pkix(7) id-mod(0) id-mod-pkixCommon-02(57) }
;
--
-- JWT Claim Constraints Certificate Extension
--
ext-jwtClaimConstraints EXTENSION ::= {
SYNTAX JWTClaimConstraints IDENTIFIED BY id-pe-JWTClaimConstraints
}
id-pe-JWTClaimConstraints OBJECT IDENTIFIER ::= { id-pe 27 }
JWTClaimConstraints ::= SEQUENCE {
mustInclude [0] JWTClaimNames OPTIONAL,
-- The listed claim names MUST appear in the PASSporT
-- in addition to iat, orig, and dest. If absent, iat, orig,
-- and dest MUST appear in the PASSporT.
permittedValues [1] JWTClaimPermittedValuesList OPTIONAL }
-- If the claim name is present, the claim MUST contain one of
-- the listed values.
( WITH COMPONENTS { ..., mustInclude PRESENT } |
WITH COMPONENTS { ..., permittedValues PRESENT } )
JWTClaimPermittedValuesList ::= SEQUENCE SIZE (1..MAX) Of
JWTClaimPermittedValues
JWTClaimPermittedValues ::= SEQUENCE {
claim JWTClaimName,
permitted SEQUENCE SIZE (1..MAX) OF UTF8String }
JWTClaimNames ::= SEQUENCE SIZE (1..MAX) OF JWTClaimName
JWTClaimName ::= IA5String
--
-- Telephony Number Authorization List Certificate Extension
--
ext-tnAuthList EXTENSION ::= {
SYNTAX TNAuthorizationList IDENTIFIED BY id-pe-TNAuthList
}
id-pe-TNAuthList OBJECT IDENTIFIER ::= { id-pe 26 }
TNAuthorizationList ::= SEQUENCE SIZE (1..MAX) OF TNEntry
TNEntry ::= CHOICE {
spc [0] ServiceProviderCode,
range [1] TelephoneNumberRange,
one [2] TelephoneNumber
}
ServiceProviderCode ::= IA5String
-- SPCs may be OCNs, various SPIDs, or other SP identifiers
-- from the telephone network.
TelephoneNumberRange ::= SEQUENCE {
start TelephoneNumber,
count INTEGER (2..MAX),
...
}
TelephoneNumber ::= IA5String (SIZE (1..15)) (FROM ("0123456789#*"))
-- TN Access Descriptor
id-ad-stirTNList OBJECT IDENTIFIER ::= { id-ad 14 }
END
Acknowledgments ๐ซถ
Huge thank-yous to Anders Kristensen, Russ Housley, Brian Rosen, Cullen Jennings, Dave Crocker, Tony Rutkowski, John Braunberger, Eric Rescorla, and Martin Thomson, who all provided key input to the discussions that led to this document ๐ Russ Housley also gave some direct assistance and wrote the text around the ASN.1 module, so he gets extra flowers ๐ท
Authors' Addresses ๐
Jon Peterson Neustar, Inc.
Email: jon.peterson@neustar.biz
Sean Turner sn3rd
Email: sean@sn3rd.com
๐ฆ where this page comes from
- ietf: rfc8226 2018-02
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms