<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" consensus="true" docName="draft-ietf-stir-enhance-rfc8226-05" indexInclude="true" ipr="trust200902" number="9118" prepTime="2021-08-23T22:30:07" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="3" tocInclude="true" updates="8226" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-stir-enhance-rfc8226-05" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9118" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="EnhancedJWTClaimConstraints">Enhanced JSON Web Token (JWT) Claim Constraints for Secure Telephone Identity Revisited (STIR) Certificates</title>
    <seriesInfo name="RFC" value="9118" stream="IETF"/>
    <author initials="R." surname="Housley" fullname="Russ Housley">
      <organization abbrev="Vigil Security" showOnFrontPage="true">Vigil Security, LLC</organization>
      <address>
        <postal>
          <street>516 Dranesville Road</street>
          <city>Herndon</city>
          <region>VA</region>
          <code>20170</code>
          <country>United States of America</country>
        </postal>
        <email>housley@vigilsec.com</email>
      </address>
    </author>
    <date month="08" year="2021"/>
    <area>ART</area>
    <workgroup>STIR</workgroup>
    <keyword>X.509 Certificate Extension</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">RFC 8226 specifies the use of certificates for Secure Telephone Identity
Credentials; these certificates are often called "Secure Telephone Identity 
Revisited (STIR) Certificates".
RFC 8226 provides a certificate extension to constrain the JSON Web Token
(JWT) claims that can be included in the Personal Assertion Token (PASSporT),
as defined in RFC 8225.  If the PASSporT signer includes a JWT claim outside
the constraint boundaries, then the PASSporT recipient will reject the entire
PASSporT. This document updates RFC 8226; it provides all of the capabilities
available in the original certificate extension as well as an additional way
to constrain the allowable JWT claims.  The enhanced extension can also
provide a list of claims that are not allowed to be included in the PASSporT.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            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.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9118" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2021 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) 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 Simplified BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Simplified BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-terminology">Terminology</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-enhanced-jwt-claim-constrai">Enhanced JWT Claim Constraints Syntax</xref></t>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-usage-examples">Usage Examples</xref></t>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-certificate-extension-examp">Certificate Extension Example</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-guidance-to-certification-a">Guidance to Certification Authorities</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" format="counter" sectionFormat="of" target="section-9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.9.2">
              <li pn="section-toc.1-1.9.2.1">
                <t indent="0" pn="section-toc.1-1.9.2.1.1"><xref derivedContent="9.1" format="counter" sectionFormat="of" target="section-9.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.9.2.2">
                <t indent="0" pn="section-toc.1-1.9.2.2.1"><xref derivedContent="9.2" format="counter" sectionFormat="of" target="section-9.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="Appendix A" format="default" sectionFormat="of" target="section-appendix.a"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-asn1-module">ASN.1 Module</xref></t>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.12">
            <t indent="0" pn="section-toc.1-1.12.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.c"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-address">Author's Address</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="intro" numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">The use of certificates <xref target="RFC5280" format="default" sectionFormat="of" derivedContent="RFC5280"/> in establishing authority over
telephone numbers is described in <xref target="RFC8226" format="default" sectionFormat="of" derivedContent="RFC8226"/>.  These certificates are
often called "STIR Certificates".  STIR certificates are an important
element of the overall system that prevents the impersonation of
telephone numbers on the Internet.</t>
      <t indent="0" pn="section-1-2"><xref target="RFC8226" sectionFormat="of" section="8" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8226#section-8" derivedContent="RFC8226"/> provides a certificate extension to constrain
the JSON Web Token (JWT) claims that can be included in the Personal
Assertion Token (PASSporT) <xref target="RFC8225" format="default" sectionFormat="of" derivedContent="RFC8225"/>.  If the PASSporT signer includes
a JWT claim outside the constraint boundaries, then the PASSporT recipient
will reject the entire PASSporT.</t>
      <t indent="0" pn="section-1-3">This document defines an enhanced JWTClaimConstraints certificate extension,
which provides all of the capabilities available in the original certificate
extension as well as an additional way to constrain the allowable JWT
claims.  That is, the enhanced extension can provide a list of claims that
are not allowed to be included in the PASSporT.</t>
      <t indent="0" pn="section-1-4">The Enhanced JWT Claim Constraints certificate extension is needed to limit
the authority when a parent STIR certificate delegates to a subordinate STIR
certificate.  For example, <xref target="RFC9060" format="default" sectionFormat="of" derivedContent="RFC9060"/> describes the
situation where service providers issue a STIR certificate to enterprises or
other customers to sign PASSporTs, and the Enhanced JWT Claim Constraints
certificate extension can be used to prevent specific claims from being
included in PASSporTs and accepted as valid by the PASSporT recipient.</t>
      <t indent="0" pn="section-1-5">The JWT Claim Constraints certificate extension defined in <xref target="RFC8226" format="default" sectionFormat="of" derivedContent="RFC8226"/>
provides a list of claims that must be included in a valid PASSporT as well
as a list of permitted values for selected claims.  The Enhanced JWT Claim
Constraints certificate extension defined in this document includes those
capabilities and adds a list of claims that must not be included in a
valid PASSporT.</t>
    </section>
    <section anchor="terms" numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-terminology">Terminology</name>
      <t indent="0" pn="section-2-1">
    The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
    "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
    described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here.
      </t>
    </section>
    <section anchor="syntax" numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-enhanced-jwt-claim-constrai">Enhanced JWT Claim Constraints Syntax</name>
      <t indent="0" pn="section-3-1">The Enhanced JWT Claim Constraints certificate extension is non-critical,
applicable only to end-entity certificates, and defined with
ASN.1 <xref target="X.680" format="default" sectionFormat="of" derivedContent="X.680"/>.  The syntax of the JWT claims in a PASSporT is
specified in <xref target="RFC8225" format="default" sectionFormat="of" derivedContent="RFC8225"/>.</t>
      <t indent="0" pn="section-3-2">The Enhanced JWT Claim Constraints certificate extension is optional, but,
when present, it constrains the JWT claims that authentication services may
include in the PASSporT objects they sign.  Constraints are applied by
certificate issuers and enforced by recipients when validating PASSporT
claims as follows:</t>
      <ol spacing="normal" type="1" indent="adaptive" start="1" pn="section-3-3">
	<li pn="section-3-3.1" derivedCounter="1.">mustInclude indicates JWT claims that <bcp14>MUST</bcp14> appear in the PASSporT
	in addition to the iat, orig, and dest claims.  The baseline PASSporT
	claims ("iat", "orig", and "dest") are considered to be required by
	<xref target="RFC8225" format="default" sectionFormat="of" derivedContent="RFC8225"/>, and these claims <bcp14>SHOULD NOT</bcp14>
	be part of the mustInclude
	list.  If mustInclude is absent, the iat, orig, and dest claims <bcp14>MUST</bcp14>
	appear in the PASSporT.</li>
        <li pn="section-3-3.2" derivedCounter="2.">permittedValues indicates that, if the claim name is present, the
	claim <bcp14>MUST</bcp14> exactly match one of the listed values.</li>
        <li pn="section-3-3.3" derivedCounter="3.">mustExclude indicates JWT claims that <bcp14>MUST NOT</bcp14> appear in the
	PASSporT. The baseline PASSporT claims ("iat", "orig", and "dest") are always
	permitted, and these claims <bcp14>MUST NOT</bcp14> be part of the mustExclude list. 
	If one of these baseline PASSporT claims appears in the mustExclude list, then the
	certificate <bcp14>MUST</bcp14> be treated as if the extension was not present.</li>
      </ol>
      <t indent="0" pn="section-3-4">Following the precedent in <xref target="RFC8226" format="default" sectionFormat="of" derivedContent="RFC8226"/>, JWT Claim Names <bcp14>MUST</bcp14> be ASCII strings,
which are also known as strings using the International Alphabet No. 5 <xref target="ISO646" format="default" sectionFormat="of" derivedContent="ISO646"/>.</t>
      <t indent="0" pn="section-3-5">The Enhanced JWT Claim Constraints certificate extension is identified by the
      following object identifier (OID):</t>
      <sourcecode type="asn.1" markers="false" pn="section-3-6">
    id-pe-eJWTClaimConstraints OBJECT IDENTIFIER ::= { id-pe 33 }
</sourcecode>
      <t indent="0" pn="section-3-7">The Enhanced JWT Claim Constraints certificate extension has the following syntax:</t>
      <sourcecode type="asn.1" markers="false" pn="section-3-8">
    EnhancedJWTClaimConstraints ::= 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] JWTClaimValuesList OPTIONAL,
        -- If the claim name is present, the claim MUST contain one
        -- of the listed values.
      mustExclude [2] JWTClaimNames OPTIONAL }
        -- The listed claim names MUST NOT appear in the PASSporT.
    ( WITH COMPONENTS { ..., mustInclude PRESENT } |
      WITH COMPONENTS { ..., permittedValues PRESENT } |
      WITH COMPONENTS { ..., mustExclude PRESENT } )

    JWTClaimValuesList ::= SEQUENCE SIZE (1..MAX) OF JWTClaimValues

    JWTClaimValues ::= SEQUENCE {
      claim JWTClaimName,
      values SEQUENCE SIZE (1..MAX) OF UTF8String }

    JWTClaimNames ::= SEQUENCE SIZE (1..MAX) OF JWTClaimName

    JWTClaimName ::= IA5String
</sourcecode>
    </section>
    <section anchor="usage-examples" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-usage-examples">Usage Examples</name>
      <t indent="0" pn="section-4-1">Consider these usage examples with a PASSporT claim called "confidence" with
values "low", "medium", and "high".  These examples illustrate the constraints
that are imposed by mustInclude, permittedValues, and mustExclude:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4-2">
        <li pn="section-4-2.1">If a certification authority (CA) issues a certificate to an authentication
service that includes
an Enhanced JWT Claim Constraints certificate extension that contains the
mustInclude JWTClaimName "confidence", then an authentication service is
required to include the "confidence" claim in all PASSporTs it generates
and signs.  A verification service will treat any PASSporT it
receives without a "confidence" PASSporT claim as invalid.</li>
        <li pn="section-4-2.2">If a CA issues a certificate to an authentication service that includes
an Enhanced JWT Claim Constraints certificate extension that contains the
permittedValues JWTClaimName "confidence" and a permitted "high" value,
then a verification service will treat any PASSporT
it receives with a PASSporT "confidence" claim with a value other than
"high" as invalid.  However, a verification service will not treat a
PASSporT it receives without a PASSporT "confidence" claim at all as invalid, unless
"confidence" also appears in mustInclude.</li>
        <li pn="section-4-2.3">If a CA issues a certificate to an authentication service that includes
an Enhanced JWT Claim Constraints certificate extension that contains the
mustExclude JWTClaimName "confidence", then a verification service will
treat any PASSporT it receives with a PASSporT "confidence"
claim  as invalid regardless of the claim value.</li>
      </ul>
    </section>
    <section anchor="certificate-extension-example" numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-certificate-extension-examp">Certificate Extension Example</name>
      <t indent="0" pn="section-5-1">A certificate containing an example of the EnhancedJWTClaimConstraints
certificate extension is provided in <xref target="ex-certificate" format="default" sectionFormat="of" derivedContent="Figure 1"/>.  The certificate is
provided in the format described in <xref target="RFC7468" format="default" sectionFormat="of" derivedContent="RFC7468"/>.  The example of the
EnhancedJWTClaimConstraints extension from the certificate
is shown in <xref target="ex-extension" format="default" sectionFormat="of" derivedContent="Figure 2"/>.  
The example imposes three constraints:</t>
      <ol spacing="normal" type="1" indent="adaptive" start="1" pn="section-5-2">
	<li pn="section-5-2.1" derivedCounter="1.">The "confidence" claim must be present in the PASSporT.</li>
        <li pn="section-5-2.2" derivedCounter="2.">The "confidence" claim must have a value of "high" or "medium".</li>
        <li pn="section-5-2.3" derivedCounter="3.">The "priority" claim must not be present in the PASSporT.</li>
      </ol>
      <figure anchor="ex-certificate" align="left" suppress-title="false" pn="figure-1">
        <name slugifiedName="name-example-certificate">Example Certificate</name>
        <artwork name="" type="" align="left" alt="" pn="section-5-3.1">
-----BEGIN CERTIFICATE-----
MIICpzCCAk2gAwIBAgIUH7Zd3rQ5AsvOlzLnzUHhrVhDSlswCgYIKoZIzj0EAwIw
KTELMAkGA1UEBhMCVVMxGjAYBgNVBAMMEUJPR1VTIFNIQUtFTiBST09UMB4XDTIx
MDcxNTIxNTIxNVoXDTIyMDcxNTIxNTIxNVowbDELMAkGA1UEBhMCVVMxCzAJBgNV
BAgMAlZBMRAwDgYDVQQHDAdIZXJuZG9uMR4wHAYDVQQKDBVCb2d1cyBFeGFtcGxl
IFRlbGVjb20xDTALBgNVBAsMBFZvSVAxDzANBgNVBAMMBlNIQUtFTjBZMBMGByqG
SM49AgEGCCqGSM49AwEHA0IABNR6C6nBWRA/fXTglV03aXkXy8hx9oBttVLhsTZ1
IYVRBao4OZhVf/Xv1a3xLsZ6KfdhuylSeAKuCoSbVGojYDGjggEOMIIBCjAMBgNV
HRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDAdBgNVHQ4EFgQUDlG3dxHyzKL/FZfS
PI7rpuueRbswHwYDVR0jBBgwFoAUlToKtrQeFrwwyXpMj1qu3TQEeoEwQgYJYIZI
AYb4QgENBDUWM1RoaXMgY2VydGlmaWNhdGUgY2Fubm90IGJlIHRydXN0ZWQgZm9y
IGFueSBwdXJwb3NlLjAWBggrBgEFBQcBGgQKMAigBhYEMTIzNDBOBggrBgEFBQcB
IQRCMECgDjAMFgpjb25maWRlbmNloSAwHjAcFgpjb25maWRlbmNlMA4MBGhpZ2gM
Bm1lZGl1baIMMAoWCHByaW9yaXR5MAoGCCqGSM49BAMCA0gAMEUCIQCbNR4QK1um
+0vq2CE1B1/W3avYeREsPi/7RKHffL+5eQIgarHot+X9Rl7SOyNBq5X5JyEMx0SQ
hRLkCY3Zoz2OCNQ=
-----END CERTIFICATE-----
</artwork>
      </figure>
      <figure anchor="ex-extension" align="left" suppress-title="false" pn="figure-2">
        <name slugifiedName="name-example-enhancedjwtclaimcon">Example EnhancedJWTClaimConstraints Extension</name>
        <artwork name="" type="" align="left" alt="" pn="section-5-4.1">
  0  64: SEQUENCE {
  2  14:   [0] {
  4  12:     SEQUENCE {
  6  10:       IA5String 'confidence'
       :       }
       :     }
 18  32:   [1] {
 20  30:     SEQUENCE {
 22  28:       SEQUENCE {
 24  10:         IA5String 'confidence'
 36  14:         SEQUENCE {
 38   4:           UTF8String 'high'
 44   6:           UTF8String 'medium'
       :           }
       :         }
       :       }
       :     }
 52  12:   [2] {
 54  10:     SEQUENCE {
 56   8:       IA5String 'priority'
       :       }
       :     }
       :   }
</artwork>
      </figure>
    </section>
    <section anchor="guidance-to-certification-authorities" numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-guidance-to-certification-a">Guidance to Certification Authorities</name>
      <t indent="0" pn="section-6-1">The EnhancedJWTClaimConstraints extension specified in this document and the 
JWTClaimConstraints extension specified in <xref target="RFC8226" format="default" sectionFormat="of" derivedContent="RFC8226"/> <bcp14>MUST NOT</bcp14> both appear
in the same certificate.</t>
      <t indent="0" pn="section-6-2">If the situation calls for mustExclude constraints, then the
EnhancedJWTClaimConstraints extension is the only extension that
can express the constraints.</t>
      <t indent="0" pn="section-6-3">On the other hand, if the situation does not call for mustExclude constraints,
then either the EnhancedJWTClaimConstraints extension or the JWTClaimConstraints
extension can express the constraints.  Until such time as support for the
EnhancedJWTClaimConstraints extension becomes widely implemented, the use of
the JWTClaimConstraints extension may be more likely to be supported.  This
guess is based on the presumption that the first specified extension will be
implemented more widely in the next few years.</t>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="include" removeInRFC="false" pn="section-7">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-7-1">This document makes use of object identifiers for the Enhanced JWT
Claim Constraints certificate extension defined in <xref target="syntax" format="default" sectionFormat="of" derivedContent="Section 3"/> and the
ASN.1 module identifier defined in <xref target="asn1-module" format="default" sectionFormat="of" derivedContent="Appendix A"/>.  Therefore, IANA has
made the following assignments within the "Structure of Management Information (SMI) Numbers (MIB Module Registrations)" registry.</t>
      <t indent="0" pn="section-7-2">For the Enhanced JWT Claim Constraints certificate extension in the
"SMI Security for PKIX Certificate Extension" (1.3.6.1.5.5.7.1) registry:</t>
      <table align="center" pn="table-1">
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Decimal</th>
            <th align="left" colspan="1" rowspan="1">Description</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">33</td>
            <td align="left" colspan="1" rowspan="1">id-pe-eJWTClaimConstraints</td>
          </tr>
        </tbody>
      </table>
      <t indent="0" pn="section-7-4">For the ASN.1 module identifier in the "SMI Security for PKIX Module
Identifier" (1.3.6.1.5.5.7.0) registry:</t>
      <table align="center" pn="table-2">
        <thead>
          <tr>
            <th align="left" colspan="1" rowspan="1">Decimal</th>
            <th align="left" colspan="1" rowspan="1">Description</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" colspan="1" rowspan="1">101</td>
            <td align="left" colspan="1" rowspan="1">id-mod-eJWTClaimConstraints-2021</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="security-considerations" numbered="true" toc="include" removeInRFC="false" pn="section-8">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-8-1">For further information on certificate security and practices,
see <xref target="RFC5280" format="default" sectionFormat="of" derivedContent="RFC5280"/>, especially the Security Considerations section.</t>
      <t indent="0" pn="section-8-2">Since non-critical certificate extensions are ignored by implementations
that do not recognize the extension object identifier (OID), constraints
on PASSporT validation will only be applied by relying parties
that recognize the EnhancedJWTClaimConstraints extension.</t>
      <t indent="0" pn="section-8-3">The Enhanced JWT Claim Constraints certificate extension can be
used by certificate issuers to provide limits on the acceptable
PASSporTs that can be accepted by verification services. Enforcement
of these limits depends upon proper implementation by the verification
services.  The digital signature on the PASSporT data structure will
be valid even if the limits are violated.</t>
      <t indent="0" pn="section-8-4">Use of the Enhanced JWT Claim Constraints certificate extension
permittedValues constraint is most useful when the claim definition
allows a specified set of values.  In this way, all of the values
that are not listed in the JWTClaimValuesList are prohibited in a
valid PASSporT.</t>
      <t indent="0" pn="section-8-5">Certificate issuers must take care when imposing constraints on the
PASSporT claims and the claim values that can be successfully validated;
some combinations can prevent any PASSporT from being successfully
validated by the certificate.  For example, an entry in mustInclude and
an entry in mustExclude for the same claim will prevent successful
validation on any PASSporT.</t>
      <t indent="0" pn="section-8-6">Certificate issuers <bcp14>SHOULD NOT</bcp14> 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 <xref target="I-D.ietf-stir-passport-rcd" format="default" sectionFormat="of" derivedContent="STIR-PASSPORT-RCD"/>.
Excluding this claim would prevent the integrity protection mechanism
from working properly.</t>
      <t indent="0" pn="section-8-7">Certificate issuers must take care when performing certificate renewal <xref target="RFC4949" format="default" sectionFormat="of" derivedContent="RFC4949"/>
to include exactly the same Enhanced JWT Claim Constraints certificate extension
in the new certificate as the old one.  Renewal usually takes place before the
old certificate expires, so there is a period of time where both the new
certificate and the old certificate are valid.  If different constraints
appear in the two certificates with the same public key, some PASSporTs
might be valid when one certificate is used and invalid when the other
one is used.</t>
    </section>
  </middle>
  <back>
    <displayreference target="I-D.ietf-stir-passport-rcd" to="STIR-PASSPORT-RCD"/>
    <references pn="section-9">
      <name slugifiedName="name-references">References</name>
      <references pn="section-9.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t indent="0">In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC5280" target="https://www.rfc-editor.org/info/rfc5280" quoteTitle="true" derivedAnchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author initials="D." surname="Cooper" fullname="D. Cooper">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Santesson" fullname="S. Santesson">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Farrell" fullname="S. Farrell">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Boeyen" fullname="S. Boeyen">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Housley" fullname="R. Housley">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="W." surname="Polk" fullname="W. Polk">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2008" month="May"/>
            <abstract>
              <t indent="0">This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet.  An overview of this approach and model is provided as an introduction.  The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms.  Standard certificate extensions are described and two Internet-specific extensions are defined.  A set of required certificate extensions is specified.  The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions.  An algorithm for X.509 certification path validation is described.  An ASN.1 module and examples are provided in the appendices.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="RFC5912" target="https://www.rfc-editor.org/info/rfc5912" quoteTitle="true" derivedAnchor="RFC5912">
          <front>
            <title>New ASN.1 Modules for the Public Key Infrastructure Using X.509 (PKIX)</title>
            <author initials="P." surname="Hoffman" fullname="P. Hoffman">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Schaad" fullname="J. Schaad">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2010" month="June"/>
            <abstract>
              <t indent="0">The Public Key Infrastructure using X.509 (PKIX) certificate format, and many associated formats, are expressed using ASN.1.  The current ASN.1 modules conform to the 1988 version of ASN.1.  This document updates those ASN.1 modules to conform to the 2002 version of ASN.1. There are no bits-on-the-wire changes to any of the formats; this is simply a change to the syntax.  This document is not an Internet  Standards Track specification; it is published for informational  purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5912"/>
          <seriesInfo name="DOI" value="10.17487/RFC5912"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t indent="0">RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8225" target="https://www.rfc-editor.org/info/rfc8225" quoteTitle="true" derivedAnchor="RFC8225">
          <front>
            <title>PASSporT: Personal Assertion Token</title>
            <author initials="C." surname="Wendt" fullname="C. Wendt">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Peterson" fullname="J. Peterson">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2018" month="February"/>
            <abstract>
              <t indent="0">This document defines a method for creating and validating a token that cryptographically verifies an originating identity or, more generally, a URI or telephone number representing the originator of personal communications.  The Personal Assertion Token, PASSporT, is cryptographically signed to protect the integrity of the identity of the originator and to verify the assertion of the identity information at the destination.  The cryptographic signature is defined with the intention that it can confidently verify the originating persona even when the signature is sent to the destination party over an insecure channel.  PASSporT is particularly useful for many personal-communications applications over IP networks and other multi-hop interconnection scenarios where the originating and destination parties may not have a direct trusted relationship.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8225"/>
          <seriesInfo name="DOI" value="10.17487/RFC8225"/>
        </reference>
        <reference anchor="RFC8226" target="https://www.rfc-editor.org/info/rfc8226" quoteTitle="true" derivedAnchor="RFC8226">
          <front>
            <title>Secure Telephone Identity Credentials: Certificates</title>
            <author initials="J." surname="Peterson" fullname="J. Peterson">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Turner" fullname="S. Turner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2018" month="February"/>
            <abstract>
              <t indent="0">In order to prevent the impersonation of telephone numbers on the Internet, some kind of credential system needs to exist that cryptographically asserts authority over telephone numbers.  This document describes the use of certificates in establishing authority over telephone numbers, as a component of a broader architecture for managing telephone numbers as identities in protocols like SIP.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8226"/>
          <seriesInfo name="DOI" value="10.17487/RFC8226"/>
        </reference>
        <reference anchor="X.680" quoteTitle="true" derivedAnchor="X.680">
          <front>
            <title>Information technology - Abstract Syntax Notation One (ASN.1): Specification of basic notation</title>
            <author>
              <organization showOnFrontPage="true">ITU-T</organization>
            </author>
            <date year="2021" month="February"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.680"/>
        </reference>
      </references>
      <references pn="section-9.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="ISO646" quoteTitle="true" derivedAnchor="ISO646">
          <front>
            <title>Information technology - ISO 7-bit coded character set for information interchange</title>
            <author>
              <organization showOnFrontPage="true">ISO</organization>
            </author>
            <date year="1991" month="December"/>
          </front>
          <seriesInfo name="ISO/IEC" value="646:1991"/>
        </reference>
        <reference anchor="RFC4949" target="https://www.rfc-editor.org/info/rfc4949" quoteTitle="true" derivedAnchor="RFC4949">
          <front>
            <title>Internet Security Glossary, Version 2</title>
            <author initials="R." surname="Shirey" fullname="R. Shirey">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2007" month="August"/>
            <abstract>
              <t indent="0">This Glossary provides definitions, abbreviations, and explanations of terminology for information system security. The 334 pages of entries offer recommendations to improve the comprehensibility of written material that is generated in the Internet Standards Process (RFC 2026). The recommendations follow the principles that such writing should (a) use the same term or definition whenever the same concept is mentioned; (b) use terms in their plainest, dictionary sense; (c) use terms that are already well-established in open publications; and (d) avoid terms that either favor a particular vendor or favor a particular technology or mechanism over other, competing techniques that already exist or could be developed.  This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="FYI" value="36"/>
          <seriesInfo name="RFC" value="4949"/>
          <seriesInfo name="DOI" value="10.17487/RFC4949"/>
        </reference>
        <reference anchor="RFC7468" target="https://www.rfc-editor.org/info/rfc7468" quoteTitle="true" derivedAnchor="RFC7468">
          <front>
            <title>Textual Encodings of PKIX, PKCS, and CMS Structures</title>
            <author initials="S." surname="Josefsson" fullname="S. Josefsson">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Leonard" fullname="S. Leonard">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2015" month="April"/>
            <abstract>
              <t indent="0">This document describes and discusses the textual encodings of the Public-Key Infrastructure X.509 (PKIX), Public-Key Cryptography Standards (PKCS), and Cryptographic Message Syntax (CMS).  The textual encodings are well-known, are implemented by several applications and libraries, and are widely deployed.  This document articulates the de facto rules by which existing implementations operate and defines them so that future implementations can interoperate.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7468"/>
          <seriesInfo name="DOI" value="10.17487/RFC7468"/>
        </reference>
        <reference anchor="RFC9060" quoteTitle="true" target="https://www.rfc-editor.org/rfc/rfc9060" derivedAnchor="RFC9060">
          <front>
            <title>Secure Telephone Identity Revisited (STIR) Certificate Delegation</title>
            <author initials="J" surname="Peterson" fullname="Jon Peterson">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2021" month="August"/>
          </front>
          <seriesInfo name="RFC" value="9060"/>
          <seriesInfo name="DOI" value="10.17487/RFC9060"/>
        </reference>
        <reference anchor="I-D.ietf-stir-passport-rcd" quoteTitle="true" target="https://datatracker.ietf.org/doc/html/draft-ietf-stir-passport-rcd-12" derivedAnchor="STIR-PASSPORT-RCD">
          <front>
            <title>PASSporT Extension for Rich Call Data</title>
            <author fullname="Chris Wendt">
              <organization showOnFrontPage="true">Comcast</organization>
            </author>
            <author fullname="Jon Peterson">
              <organization showOnFrontPage="true">Neustar Inc.</organization>
            </author>
            <date month="July" day="12" year="2021"/>
            <abstract>
              <t indent="0">   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 intended 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 pick up the phone.  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.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-stir-passport-rcd-12"/>
          <format type="TXT" target="https://www.ietf.org/archive/id/draft-ietf-stir-passport-rcd-12.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
      </references>
    </references>
    <section anchor="asn1-module" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-asn1-module">ASN.1 Module</name>
      <t indent="0" pn="section-appendix.a-1">This appendix provides the ASN.1 <xref target="X.680" format="default" sectionFormat="of" derivedContent="X.680"/> definitions for
the Enhanced JWT Claim Constraints certificate extension.  The module
defined in this appendix is compatible with the ASN.1 specifications
published in 2015.</t>
      <t indent="0" pn="section-appendix.a-2">This ASN.1 module imports ASN.1 from <xref target="RFC5912" format="default" sectionFormat="of" derivedContent="RFC5912"/>.</t>
      <sourcecode type="asn.1" markers="true" pn="section-appendix.a-3">
EnhancedJWTClaimConstraints-2021
  { iso(1) identified-organization(3) dod(6) internet(1)
    security(5) mechanisms(5) pkix(7) id-mod(0)
    id-mod-eJWTClaimConstraints-2021(101) }

DEFINITIONS EXPLICIT TAGS ::= BEGIN

IMPORTS

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) } ;

-- Enhanced JWT Claim Constraints Certificate Extension

ext-eJWTClaimConstraints EXTENSION ::= {
  SYNTAX EnhancedJWTClaimConstraints
  IDENTIFIED BY id-pe-eJWTClaimConstraints }

id-pe-eJWTClaimConstraints OBJECT IDENTIFIER ::= { id-pe 33 }

EnhancedJWTClaimConstraints ::= 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] JWTClaimValuesList OPTIONAL,
    -- If the claim name is present, the claim MUST contain one
    -- of the listed values.
  mustExclude [2] JWTClaimNames OPTIONAL }
    -- The listed claim names MUST NOT appear in the PASSporT.
( WITH COMPONENTS { ..., mustInclude PRESENT } |
  WITH COMPONENTS { ..., permittedValues PRESENT } |
  WITH COMPONENTS { ..., mustExclude PRESENT } )

JWTClaimValuesList ::= SEQUENCE SIZE (1..MAX) OF JWTClaimValues

JWTClaimValues ::= SEQUENCE {
  claim JWTClaimName,
  values SEQUENCE SIZE (1..MAX) OF UTF8String }

JWTClaimNames ::= SEQUENCE SIZE (1..MAX) OF JWTClaimName

JWTClaimName ::= IA5String

END

</sourcecode>
    </section>
    <section anchor="acknowledgements" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.b">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.b-1">Many thanks to <contact fullname="Chris Wendt"/> for his insight into the need for
      the for the Enhanced JWT Claim Constraints certificate extension.</t>
      <t indent="0" pn="section-appendix.b-2">Thanks to
<contact fullname="Ben Campbell"/>,
<contact fullname="Theresa Enghardt"/>,
<contact fullname="Ben Kaduk"/>,
<contact fullname="Erik Kline"/>,
<contact fullname="Éric Vyncke"/>, and
<contact fullname="Rob Wilton"/>
for their thoughtful review and comments.  The document is much
better as a result of their efforts.</t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.c">
      <name slugifiedName="name-authors-address">Author's Address</name>
      <author initials="R." surname="Housley" fullname="Russ Housley">
        <organization abbrev="Vigil Security" showOnFrontPage="true">Vigil Security, LLC</organization>
        <address>
          <postal>
            <street>516 Dranesville Road</street>
            <city>Herndon</city>
            <region>VA</region>
            <code>20170</code>
            <country>United States of America</country>
          </postal>
          <email>housley@vigilsec.com</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
