<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.22 (Ruby 3.4.1) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-wendt-stir-certificate-transparency-05" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="STI CT">STI Certificate Transparency</title>

    <author fullname="Chris Wendt">
      <organization>Somos, Inc.</organization>
      <address>
        <postal>
          <country>US</country>
        </postal>
        <email>chris@appliedbits.com</email>
      </address>
    </author>
    <author fullname="Rob Sliwa">
      <organization>Somos, Inc.</organization>
      <address>
        <postal>
          <country>US</country>
        </postal>
        <email>robjsliwa@gmail.com</email>
      </address>
    </author>
    <author fullname="Alec Fenichel">
      <organization>TransNexus</organization>
      <address>
        <postal>
          <country>US</country>
        </postal>
        <email>alec.fenichel@transnexus.com</email>
      </address>
    </author>
    <author fullname="Vinit Anil Gaikwad">
      <organization>Twilio</organization>
      <address>
        <postal>
          <country>US</country>
        </postal>
        <email>vanilgaikwad@twilio.com</email>
      </address>
    </author>

    <date year="2025" month="March" day="03"/>

    <area>Applications and Real-Time</area>
    <workgroup>Secure Telephone Identity Revisited</workgroup>
    <keyword>stir</keyword> <keyword>certificates</keyword> <keyword>delegate certificates</keyword>

    <abstract>


<?line 59?>

<t>This document describes a framework for the use of the Certificate Transparency (CT) protocol for publicly logging the existence of Secure Telephone Identity (STI) certificates as they are issued or observed. This allows any interested party that is part of the STI eco-system to audit STI certification authority (CA) activity and audit both the issuance of suspect certificates and the certificate logs themselves. The intent is for the establishment of a level of trust in the STI eco-system that depends on the verification of telephone numbers requiring and refusing to honor STI certificates that do not appear in a established log. This effectively establishes the precedent that STI CAs must add all issued certificates to the logs and thus establishes unique association of STI certificates to an authorized provider or assignee of a telephone number resource. The primary role of CT in the STI ecosystem is for verifiable trust in the avoidance of issuance of unauthorized duplicate telephone number level delegate certificates or provider level certificates.  This provides a robust auditable mechanism for the detection of unauthorized creation of certificate credentials for illegitimate spoofing of telephone numbers or service provider codes (SPC).</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        The latest revision of this draft can be found at <eref target="https://appliedbits.github.io/draft-wendt-stir-certificate-transparency/draft-wendt-stir-certificate-transparency.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-wendt-stir-certificate-transparency/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Secure Telephone Identity Revisited Working Group mailing list (<eref target="mailto:stir@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/stir/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/stir/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/appliedbits/draft-wendt-stir-certificate-transparency"/>.</t>
    </note>


  </front>

  <middle>


<?line 63?>

<section anchor="introduction"><name>Introduction</name>

<t>Certificate Transparency (CT) aims to mitigate the problem of mis-issued certificates by providing append-only logs of issued certificates. The logs do not themselves prevent mis-issuance, but ensure that interested parties (particularly those named in legitimate certificates or certificate chains) can detect such mis-issuance. <xref target="RFC6962"/> describes the core protocols and mechanisms for use of CT for the purposes of public TLS server certificates associated with a domain name as part of the public domain name system (DNS). This document describes a conceptually similar framework that directly borrows concepts like transparency receipts in the form of SCTs and how they are used in certificates and its specific use as part of the larger STIR framework for call authentication.  This framework is defined for the specific use with both Secure Telephone Identity (STI) certificates <xref target="RFC8226"/> and delegate certificates <xref target="RFC9060"/>.</t>

<t>Telephone numbers (TNs) and their management and assignment by telephone service providers and Responsible Organizations (RespOrgs) for toll-free numbers share many similarities to the Domain Name System (DNS) where there is a global uniqueness and established association of telephone numbers to regulatory jurisdictions that manage the allocation and assignment of telephone numbers under country codes and a set of numeric digits for routing telephone calls and messages over telephone networks. STI Certificates use a TNAuthList extension defined in <xref target="RFC8226"/> to specifically associate either telephone service providers or telephone numbers to the issuance of STI certificates and certificate change that are intended to represent the authorized right to use a telephone number. This trusted association can be establish via mechanisms such as Authority tokens for TNAuthList defined in <xref target="RFC9448"/>. Certificate transparency and the concept of transparency is generally meant to provide a publicly verifiable and auditable representation of the creation of certificates in order to establish transparency and trust to interested parties as part of a stir related eco-system.</t>

<t>There is three primary actors in the certificate transparency framework. There is the STI Certification Authorities (CAs) that submit all certificates to be issued to one or more transparency append-only log services. The log services are network services that implement the protocol operations for submissions of STI certificates and subsequent queries. They are hosted by interested parties in the STI ecosystem and can accept certificate log submissions from any other CA participant. The second role is the monitors that play the role of monitoring the CT logs to check for potential mis-issuance as well as auditing of the log services. This role can be played by any STI ecosystem participant interested in the trust of the ecosystem or the integrity of the telephone number or provider level certificates produced in the eco-system. CT provides a mechanism of a receipt or Signed Certificate Timestamp (SCT) that is provided as a result of submitting a certificate to the append-only log. The third actor role in the certificate transparency framework is the eco-system participants that can send and receive receipt(s) or SCT(s) to prove and validate that a certificate was submitted to a log(s) and optionally query the log directly for further validation.</t>

<t>The details that follow in this document will detail the specific protocols and framework for Certificate Transparency associated with STI certificates. Most of the details borrow many of the concepts of certificate transparency defined in <xref target="RFC6962"/>}} used in web browser and web PKI environments, but provides a specific framework designed for STI certificates and their specific issuance and usage in a telecommunications and telephone number dependent eco-system.</t>

<t>This general mechanism could also be used for transparently logging other important stir related metadata associations perhaps via JWTClaimConstraints defined in <xref target="RFC8226"/> and <xref target="RFC9118"/> or other ways defined in potential future extensions of this document.</t>

</section>
<section anchor="conventions-and-definitions"><name>Conventions and Definitions</name>

<t>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"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

</section>
<section anchor="the-use-of-certificate-transparency-for-sti-certificates"><name>The Use of Certificate Transparency for STI Certificates</name>

<t>CT log(s) contains certificate chains, which can be submitted by any CA authorized in a STIR eco-system. It is expected that these CAs will contribute all their newly issued certificates to one or more logs.  Note, in <xref target="RFC6962"/> it is possible for certificate holders to directly contribute their own certificate chains or interested third parties, however because in stir eco-systems that generally consist of entities that are authorized to be assigned telephone number resources, this does not seem to be a likely scenario. Generally, many stir eco-systems have a controlled set of CAs that are authorized to participate as valid trust anchors. It is required that each chain ends with a trust anchor that is accepted by the log which would include those authorized trust anchors or a subset of them. When a chain is accepted by a log, a signed timestamp is returned, which is later used to provide evidence to STIR verification services (VS), defined in <xref target="RFC8224"/>, that the chain has been submitted. A VS can thus require that all certificates they accept as valid are accompanied by signed timestamps.</t>

<t>Those concerned about mis-issuance of STIR certificates can monitor the logs, asking them regularly for all new entries, and can thus check whether the service provider codes or telephone numbers for which they are responsible have had certificates issued that they did not expect. What they do with this information, particularly when they find that a mis-issuance has happened, is beyond the scope of this document. However, broadly speaking, because many existing STI ecosystems have a connection to regulated and industry environments that govern the issuance of STI certificates, they can invoke existing mechanisms for dealing with issues such as mis-issued certificates, such as working with the CA to get the certificate revoked or with maintainers of trust anchor lists to get the CA removed.</t>

</section>
<section anchor="terminology"><name>Terminology</name>

<t>This section defines key terms used throughout the STI-CT framework to ensure clarity and consistency.</t>

<section anchor="authentication-service-as"><name>Authentication Service (AS)</name>

<t>A service that signs the identity of a telephone call using Secure Telephone Identity (STI) certificates, ensuring the authenticity of the caller information. It ensures that STI Certificates contain SCTs.</t>

</section>
<section anchor="certificate-transparency-ct"><name>Certificate Transparency (CT)</name>

<t>A framework designed to provide an open and verifiable log of issued certificates. It aims to detect and prevent the misuse or mis-issuance of certificates by maintaining append-only logs that can be audited by any interested party.</t>

</section>
<section anchor="delegate-certificate"><name>Delegate Certificate</name>

<t>A type of STI certificate that associates a specific telephone number or a range of telephone numbers with a particular entity used to delegate the right to use these numbers.</t>

</section>
<section anchor="log"><name>Log</name>

<t>An append-only, cryptographically verifiable structure used in Certificate Transparency to record pre-certificate entries. Logs accept submissions, generate Signed Certificate Timestamps (SCTs), and maintain the integrity of the entries through a Merkle Tree structure.</t>

</section>
<section anchor="merkle-tree"><name>Merkle Tree</name>

<t>A cryptographic data structure used in logs to ensure the integrity and consistency of the entries. It is built by hashing individual log entries and combining them into a single root hash that represents the state of the entire log.</t>

</section>
<section anchor="precertificate"><name>Precertificate</name>

<t>A certificate issued by an CA that is intended to be submitted to a Certificate Transparency log before the final certificate is issued. The pre-certificate includes a special extension (the poison extension) that prevents it from being used as a valid certificate on its own.</t>

</section>
<section anchor="signed-certificate-timestamp-sct"><name>Signed Certificate Timestamp (SCT)</name>

<t>A data structure provided by a Certificate Transparency log in response to a pre-certificate submission. The SCT serves as a promise from the log to include the submitted pre-certificate in the log within a specified time frame (Maximum Merge Delay). It is included in the final certificate to prove that it has been logged.</t>

</section>
<section anchor="sti-certification-authority-sti-ca"><name>STI Certification Authority (STI-CA)</name>

<t>An entity responsible for issuing STI certificates in the Secure Telephone Identity ecosystem. The CA can also issue pre-certificates, which are submitted to CT logs before the final certificate is issued.</t>

</section>
<section anchor="sti-subordinate-certification-authority-sti-sca"><name>STI Subordinate Certification Authority (STI-SCA)</name>

<t>An entity authorized by an CA to issue STI certificates under the authority of the STI-CA. The STI-SCA can also issue pre-certificates for submission to CT logs.</t>

</section>
<section anchor="signed-tree-head-sth"><name>Signed Tree Head (STH)</name>

<t>A cryptographically signed data structure that represents the current state of a Certificate Transparency log. It includes the root hash of the Merkle Tree and the number of entries in the log, allowing auditors to verify the integrity and consistency of the log.</t>

</section>
<section anchor="tbscertificate-to-be-signed-certificate"><name>TBSCertificate (To Be Signed Certificate)</name>

<t>A component of an X.509 certificate that contains all the information about the certificate except the actual digital signature. The TBSCertificate includes fields such as the version, serial number, issuer, validity period, subject, and the subject's public key information. This component is signed by the certificate authority (CA) to create the final certificate. In the context of Certificate Transparency, the TBSCertificate of a pre-certificate is submitted to the log for inclusion.</t>

</section>
<section anchor="verification-service-vs"><name>Verification Service (VS)</name>

<t>A service that verifies the authenticity of a telephone call by checking the validity of the PASSporT token, including verification that certificate contains valid SCTs.</t>

</section>
</section>
<section anchor="sti-certificate-transparency-framework"><name>STI Certificate Transparency Framework</name>

<t>This section describes the format and operational procedures for logs in the STI Certificate Transparency (CT) framework.</t>

<section anchor="log-entries"><name>Log Entries</name>

<t>Logs in the STI CT framework are append-only structures that store entries in a Merkle Tree and use SHA-256 for data hashing. The entries consist of pre-certificates submitted by STI Certification Authorities (STI-CAs) or Subordinate Certification Authorities (STI-SCAs). The log entries help ensure that all issued STI certificates can be audited for legitimacy.</t>

</section>
<section anchor="precertificate-submission"><name>Precertificate Submission</name>

<t>An STI-CA/STI-SCA submits a pre-certificate to a log before the actual STI certificate is issued. The pre-certificate submission must include all necessary intermediate certificates to validate the chain up to an accepted root certificate. The root certificate may be omitted from the submission.</t>

<t>When a pre-certificate is submitted:</t>

<t><list style="symbols">
  <t>The log verifies the chain of the pre-certificate up to a trusted root.</t>
  <t>If valid, the log generates and returns a Signed Certificate Timestamp (SCT) to the submitter.</t>
  <t>The SCT serves as a promise from the log that the pre-certificate will be included in the Merkle Tree within a defined Maximum Merge Delay (MMD).</t>
</list></t>

<t>Logs must publish a list of accepted root certificates, which aligns with those trusted in the STIR ecosystem. The inclusion of SCTs in the actual STI certificates is critical, as Verification Services (STI-VS) will only accept certificates that include valid SCTs.</t>

</section>
<section anchor="log-entry-structure"><name>Log Entry Structure</name>

<t>Each log entry consists of the following components:</t>

<figure><artwork><![CDATA[
struct {
    PrecertChainEntry entry;
} LogEntry;

opaque ASN.1Cert<1..2^24-1>;

struct {
    ASN.1Cert pre_certificate;
    ASN.1Cert precertificate_chain<0..2^24-1>;
} PrecertChainEntry;
]]></artwork></figure>

<t><list style="symbols">
  <t>pre_certificate: The pre-certificate submitted for auditing.</t>
  <t>precertificate_chain: A chain of certificates required to verify the pre-certificate, including intermediate certificates but excluding the root certificate.</t>
</list></t>

<t>Logs may impose a limit on the length of the certificate chain they will accept. The log verifies the validity of the pre-certificate chain up to an accepted root and, upon acceptance, stores the entire chain for future auditing.</t>

</section>
<section anchor="structure-of-the-signed-certificate-timestamp-sct"><name>Structure of the Signed Certificate Timestamp (SCT)</name>

<t>The SCT is a data structure returned by the log when a pre-certificate is accepted. It is structured as follows:</t>

<figure><artwork><![CDATA[
struct {
  Version sct_version;
  LogID id;
  uint64 timestamp;
  digitally-signed struct {
    Version sct_version;
    SignatureType signature_type = certificate_timestamp;
    uint64 timestamp;
    PreCert signed_entry;
    CtExtensions extensions;
  };
} SignedCertificateTimestamp;
]]></artwork></figure>

<t><list style="symbols">
  <t>sct_version: The version of the SCT protocol, set to v1.</t>
  <t>id: The SHA-256 hash of the log's public key.</t>
  <t>timestamp: The timestamp of the SCT issuance.</t>
  <t>signed_entry: Contains the PreCert structure, which includes the issuer's key hash and the TBSCertificate component of the pre-certificate.</t>
  <t>extensions: Placeholder for future extensions.</t>
</list></t>

<t>The SCT is included in the final STI certificate, and VS services will check the presence and validity of SCTs to verify the legitimacy of the certificate.</t>

</section>
<section anchor="merkle-tree-structure"><name>Merkle Tree Structure</name>

<t>Logs use a Merkle Tree structure, with each leaf corresponding to a MerkleTreeLeaf entry. The leaves are hashed to form the tree, which is continuously updated as new entries are added.</t>

<figure><artwork><![CDATA[
struct {
  Version version;
  MerkleLeafType leaf_type;
  TimestampedEntry timestamped_entry;
} MerkleTreeLeaf;

struct {
  uint64 timestamp;
  PreCert signed_entry;
  CtExtensions extensions;
} TimestampedEntry;
]]></artwork></figure>

<t><list style="symbols">
  <t>version: The protocol version, set to v1.</t>
  <t>leaf_type: The type of the leaf, set to timestamped_entry.</t>
  <t>timestamped_entry: Contains the timestamp and the pre-certificate data.</t>
</list></t>

<t>The root hash of the Merkle Tree represents the state of the log at a given time and can be used to verify the inclusion of specific entries.</t>

</section>
<section anchor="signed-tree-head-sth-1"><name>Signed Tree Head (STH)</name>

<t>The log periodically signs the root of the Merkle Tree, producing a Signed Tree Head (STH), which ensures the integrity of the log over time.</t>

<figure><artwork><![CDATA[
digitally-signed struct {
  Version version;
  SignatureType signature_type = tree_hash;
  uint64 timestamp;
  uint64 tree_size;
  opaque sha256_root_hash[32];
} TreeHeadSignature;
]]></artwork></figure>

<t><list style="symbols">
  <t>timestamp: The current time, ensuring it is more recent than the most recent SCT.</t>
  <t>tree_size: The number of entries in the Merkle Tree.</t>
  <t>sha256_root_hash: The root hash of the Merkle Tree.</t>
</list></t>

<t>Logs must produce an STH within the Maximum Merge Delay (MMD) to confirm that all SCTs issued have been incorporated into the Merkle Tree. Auditors and monitors can use the STH to verify that the log is operating correctly and that no entries have been tampered with.</t>

</section>
</section>
<section anchor="sti-ct-apis"><name>STI-CT APIs</name>

<t>This section outlines the API operations that clients of the STI-CT will use to interact with the logs. The APIs are designed to support the submission and verification of pre-certificates (precerts) within the STIR ecosystem. All operations are conducted over HTTPS and utilize JSON for data exchange.</t>

<t>These APIs are based on RFC 6962, which defines the Certificate Transparency protocol. The APIs are designed to be specific for STIR ecosystem certificates.</t>

<section anchor="add-pre-certificate-chain"><name>Add Pre-Certificate Chain</name>

<t>Path:</t>

<figure><artwork><![CDATA[
POST /stict/v1/add-pre-chain
]]></artwork></figure>

<t>Description:
Submits an STI pre-certificate chain for transparency. Logs validate the chain and, if accepted, return an SCT (Signed Certificate Timestamp). This SCT is later embedded in the final issued STI certificate.</t>

<t>Request</t>

<t>Method: POST</t>

<t>Headers:</t>

<t><list style="symbols">
  <t>Content-Type: application/json</t>
</list></t>

<t>Body Fields:</t>

<t>chain (array of strings, required): A base64-encoded DER array of certificates in the chain.</t>

<t><list style="symbols">
  <t>Index 0: The pre-certificate (end-entity).</t>
  <t>Subsequent indices: Intermediate certificates that chain to a root known by the log. The root may be omitted.</t>
</list></t>

<t>Example (Request Body):</t>

<figure><artwork><![CDATA[
{
  "chain": [
    "MIIDeDCCAmCgAwIBAgIUQpvEv/QkS5oJLULvMLKn/PNxZy0wDQYJ...",
    "MIIDbjCCAlagAwIBAgIBATANBgkqhkiG9w0BAQsFADBdMQ...",
    "MIIEczCCAVugAwIBAgIQe3yk7ewH8xs2CH2nDx..."
  ]
}
]]></artwork></figure>

<t>Response</t>

<t>Status Codes:</t>

<t><list style="symbols">
  <t>200 OK: Pre-cert accepted; returns the SCT data.</t>
  <t>4xx or 5xx: Possible errors (invalid chain, untrusted root, or malformed JSON).</t>
</list></t>

<t>Body Fields:</t>

<t><list style="symbols">
  <t>sct_version (integer): Version of the SCT protocol, typically 1.</t>
  <t>id(string): Base64-encoded log identifier (SHA-256 of log’s public key).</t>
  <t>timestamp (string or integer): The SCT issuance timestamp in milliseconds or seconds since epoch.</t>
  <t>extensions (string): Future-use extension data, usually empty string.</t>
  <t>signature (string): Base64-encoded signature over the SCT structure.</t>
</list></t>

<t>Example (Response Body):</t>

<figure><artwork><![CDATA[
{
  "sct_version": 1,
  "id": "XjM0Om+/Zesv9B6lJJp3lhWKJk0=",
  "timestamp": "1694099392000",
  "extensions": "",
  "signature": "MEYCIQDc8Hp1mQEm+kkcG..."
}
]]></artwork></figure>

</section>
<section anchor="get-latest-signed-tree-head"><name>Get Latest Signed Tree Head</name>

<t>Path:</t>

<figure><artwork><![CDATA[
GET /stict/v1/get-sth
]]></artwork></figure>

<t>Description:
Returns the latest Signed Tree Head (STH). Clients use this to see the current log size and root hash. Tools like monitors can track the log’s growth and verify any new entries.</t>

<t>Request</t>

<t>Method: GET</t>

<t>Response</t>

<t>Status Codes:
- 200 OK on success.</t>

<t>Body Fields:</t>

<t><list style="symbols">
  <t>tree_size (integer): Number of leaves in the Merkle Tree.</t>
  <t>timestamp (string or integer): Timestamp of this STH.</t>
  <t>sha256_root_hash (string): Base64-encoded 32-byte root hash.</t>
  <t>tree_head_signature (string): Base64-encoded signature that covers the tree_size, timestamp, and root_hash.</t>
</list></t>

<t>Example (Response Body):</t>

<figure><artwork><![CDATA[
{
  "tree_size": 1500023,
  "timestamp": "1694099500000",
  "sha256_root_hash": "m+NKUoI9g/W8Gm3rSPzTFFOvLsMtZ4qX2Z1puQrT8as=",
  "tree_head_signature": "MEYCIQD9x61YcWkkPn9pZ..."
}
]]></artwork></figure>

</section>
<section anchor="get-consistency-proof"><name>Get Consistency Proof</name>

<t>Path:</t>

<figure><artwork><![CDATA[
GET /stict/v1/get-sth-consistency
]]></artwork></figure>

<t>Description:
Retrieves a consistency proof between two versions (two tree sizes) of the log. This shows that the log is append-only.</t>

<t>Request</t>

<t>Method: GET
Query Parameters:</t>

<t><list style="symbols">
  <t>first (string, required): The earlier** tree_size.</t>
  <t>second (string, required): The <strong>later</strong> tree_size.</t>
</list></t>

<t>Example (Request):</t>

<figure><artwork><![CDATA[
GET /stict/v1/get-sth-consistency?first=100000&second=1500023
]]></artwork></figure>

<t>Response</t>

<t>Body Fields:</t>

<t><list style="symbols">
  <t>consistency (array of strings): A list of base64-encoded Merkle nodes that form the proof.</t>
</list></t>

<t>Example (Response Body):</t>

<figure><artwork><![CDATA[
{
  "consistency": [
    "uB7Jjy7msTCN3qdP9ml7U7JZ5RGr6/qnRrmdTrLL3FA=",
    "qXJk/9zvR3PruN02n6Zt9b/fnEmJyZT4jD5zwJ1AVmA="
  ]
}
]]></artwork></figure>

</section>
<section anchor="get-audit-proof-by-leaf-hash"><name>Get Audit Proof by Leaf Hash</name>

<t>Path:</t>

<figure><artwork><![CDATA[
GET /stict/v1/get-proof-by-hash
]]></artwork></figure>

<t>Description:
Returns an inclusion proof for a leaf identified by its hash. The user also specifies which tree_size they want to prove inclusion against.</t>

<t>Request
Method: GET</t>

<t>Query Parameters:</t>

<t><list style="symbols">
  <t>hash (string, required): Base64 of the leaf's SHA-256 hash.</t>
  <t>tree_size (string, required): The size of the log tree in which you want to confirm the leaf's inclusion.</t>
</list></t>

<t>Example (Request):</t>

<figure><artwork><![CDATA[
GET /stict/v1/get-proof-by-hash?hash=aGVsbG8td29ybGQ=&tree_size=1500023
]]></artwork></figure>

<t>Response</t>

<t>Body Fields:</t>

<t><list style="symbols">
  <t>leaf_index (integer): The numeric index of this leaf in the log.</t>
  <t>audit_path (array of strings): A list of base64-encoded sibling node hashes (the Merkle path).</t>
</list></t>

<t>Example (Response Body):</t>

<figure><artwork><![CDATA[
{
  "leaf_index": 998277,
  "audit_path": [
    "fMhx9W9DcMtt/IGmlOJMGJKR7gWlkapTW/9CRg==",
    "61OjNhDW0p2D6KloU42IJn/8muURpawFZf31SQ=="
  ]
}
]]></artwork></figure>

</section>
<section anchor="get-log-entries"><name>Get Log Entries</name>

<t>Path:</t>

<figure><artwork><![CDATA[
GET /stict/v1/get-entries
]]></artwork></figure>

<t>Description:
Retrieves one or more log entries specified by a start and end index. This allows monitors or auditors to read new portions of the log.</t>

<t>Request</t>

<t>Method: GET</t>

<t>Query Parameters:</t>

<t>start (string, required): The 0-based index of the first entry to retrieve.
end (string, required): The 0-based index of the last entry to retrieve (some implementations treat this as inclusive or exclusive—must be documented by the log).</t>

<t>Example (Request):</t>

<figure><artwork><![CDATA[
GET /stict/v1/get-entries?start=100000&end=100010
]]></artwork></figure>

<t>Response</t>

<t>Body Fields:</t>

<t>entries (array): A list of objects, each representing a log entry. Each object usually has:</t>

<t><list style="symbols">
  <t>leaf_input: A base64-encoded MerkleTreeLeaf structure (per RFC 6962).</t>
  <t>extra_data: A base64-encoded representation of the chain data (in case of a pre-certificate entry).</t>
</list></t>

<t>Example (Response Body):</t>

<figure><artwork><![CDATA[
{
  "entries": [
    {
      "leaf_input": "MIGaMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBg...",
      "extra_data": "MIICXzCCAb2gAwIB..."
    },
    {
      "leaf_input": "MIGcMEIGCSqGSIb3DQEBCjAB...",
      "extra_data": "MIIEfzCCAyegAwIB..."
    }
  ]
}
]]></artwork></figure>

<t>(Truncated for readability.)</t>

</section>
<section anchor="get-accepted-root-certificates"><name>Get Accepted Root Certificates</name>

<t>Path:</t>

<figure><artwork><![CDATA[
GET /stict/v1/get-roots
]]></artwork></figure>

<t>Description:
Returns a list of root certificates that this log currently trusts for chain validation.</t>

<t>Request</t>

<t>Method: GET</t>

<t>Response</t>

<t>Body Fields:
- certificates(array of strings): Each string is a base64-encoded X.509 root certificate.</t>

<t>Example (Response Body):</t>

<figure><artwork><![CDATA[
{
  "certificates": [
    "MIIFmDCCBGCgAwIBAgIQMm8jHAFcq+CTZXQq...",
    "MIICeTCCAhGgAwIBAgIBBDANBgkqhkiG9w0BAQsFAD..."
  ]
}
]]></artwork></figure>

</section>
<section anchor="get-entry-and-proof"><name>Get Entry and Proof</name>

<t>Path:</t>

<figure><artwork><![CDATA[
GET /stict/v1/get-entry-and-proof
]]></artwork></figure>

<t>Description:</t>

<t>Fetches a single log entry (by leaf_index) plus the audit path needed to verify its inclusion up to the specified tree_size. This is useful for direct verification in one step.</t>

<t>Request</t>

<t>Method: GET</t>

<t>Query Parameters:</t>

<t><list style="symbols">
  <t>leaf_index (string, required): Which leaf entry to fetch.</t>
  <t>tree_size (string, required): The size of the tree for which the proof is requested.</t>
</list></t>

<t>Example (Request):</t>

<figure><artwork><![CDATA[
GET /stict/v1/get-entry-and-proof?leaf_index=998277&tree_size=1500023
]]></artwork></figure>

<t>Response</t>

<t>Body Fields:</t>

<t><list style="symbols">
  <t>leaf_input: base64 MerkleTreeLeaf data for that leaf.</t>
  <t>extra_data: The base64-encoded chain or additional info.</t>
  <t>audit_path: An array of base64-encoded Merkle nodes forming the inclusion proof.</t>
</list></t>

<t>Example (Response Body):</t>

<figure><artwork><![CDATA[
{
  "leaf_input": "MIGnMBAGByqGSM49AgEGBSuBBAAiB...",
  "extra_data": "MIIEfzCCAyegAwIBAgIQM0hOVHv1Q1...",
  "audit_path": [
    "X9IAf9Odc1pSdDlwZn0QnQ==",
    "IMaJ/j1krK9p1P8MEqk/FQ=="
  ]
}
]]></artwork></figure>

</section>
</section>
<section anchor="clients"><name>Clients</name>

<t>This section describes various roles clients of STI-CT perform. Any inconsistency detected by clients could serve as evidence that a log has not behaved correctly, and the signatures on the data structures prevent the log from denying any misbehavior.</t>

<section anchor="submitters-sti-casti-sca"><name>Submitters (STI-CA/STI-SCA)</name>

<t>Submitters in the STI-CT framework are typically STI Certification Authorities (STI-CAs) or Subordinate Certification Authorities (STI-SCAs). These entities submit pre-certificates to the log as described in the APIs section. The returned Signed Certificate Timestamp (SCT) can then be used to construct the final STI certificate, which includes one or more SCTs.</t>

</section>
<section anchor="asvs-clients"><name>AS/VS Clients</name>

<t>AS and VS services interact with SCTs and the underlying logs to ensure the authenticity and validity of telephone calls.</t>

<t><list style="symbols">
  <t>AS: The Authentication Service should use valid certificates that contain SCT(s). The SCT(s) can be validated by computing the signature input from the SCT data as well as the certificate and verifying the signature using the corresponding log's public key. AS <bcp14>MUST</bcp14> reject SCTs whose timestamps are in the future.</t>
  <t>VS: The Verification Service receives the signed PASSporT token and verifies that the included SCTs in the certificate used to sign the PASSporT. VS <bcp14>MUST</bcp14> reject Certificates that do not have valid SCT(s) and fail PASSporT validation.</t>
</list></t>

</section>
<section anchor="monitor"><name>Monitor</name>

<t>Monitors in the STI-CT framework play a crucial role in maintaining the integrity and trust of the ecosystem. They ensure that no certificates are mis-issued, particularly concerning the TNAuthList field, which lists the telephone numbers an entity is authorized to use.</t>

<section anchor="monitor-workflow"><name>Monitor Workflow</name>

<t>1) Initialize Monitor:</t>

<t>Set up the Monitor to periodically query the transparency logs for new entries. The Monitor must be configured with the base URL of each log it intends to monitor.</t>

<t>Configure the Monitor with a list of telephone numbers (TNs) and associated entities to track.</t>

<t>2) Retrieve Latest STH:</t>

<t>The Monitor retrieves the latest Signed Tree Head (STH) from each log to determine the current state of the log.</t>

<t>API Call: GET https://&lt;log server&gt;/stict/v1/get-sth</t>

<t>3) Retrieve New Entries from Log:</t>

<t>Using the STH, the Monitor retrieves new entries from the log that have been added since the last known state.</t>

<t>API Call: GET https://&lt;log server&gt;/stict/v1/get-entries?start=last_known_index&amp;end=current_sth_index</t>

<t>4) Decode and Verify Certificates:</t>

<t>Decode each retrieved certificate and verify its validity using the provided certificate chain. Extract the entity name and TNAuthList from the certificate.</t>

<t>5) Check for Mis-issuance:</t>

<t>Compare the TNAuthList and entity name from the newly issued certificate with the Monitor's configured list. Alarm if a certificate is issued in the name of a different entity for the same TNs.</t>

<t>6) Alarm and Reporting:</t>

<t>If a mis-issuance is detected, raise an alarm and log the details for further investigation. Notify relevant stakeholders to rectify any confirmed mis-issuance.</t>

<t>7) Maintain State and Continuity:</t>

<t>Update the Monitor's last known state with the current STH index to ensure continuity in monitoring.</t>

<t>8) STH Verification and Consistency Check:</t>

<t>After retrieving a new STH, verify the STH signature.</t>

<t>If not keeping all log entries, fetch a consistency proof for the new STH with the previous STH (GET https://&lt;log server&gt;/stict/v1/get-sth-consistency) and verify it.</t>

<t>Go to Step 5 and repeat the process.</t>

</section>
</section>
<section anchor="auditor"><name>Auditor</name>

<t>Auditors are responsible for verifying the consistency and correctness of the log, ensuring that the log behaves according to the expected protocol. Auditors can operate as standalone services or as part of another client role, such as a monitor or an VS.</t>

<section anchor="auditor-functions"><name>Auditor Functions</name>

<t>1) STH Verification:</t>

<t>Auditors can fetch STHs periodically and verify their signatures to ensure the log is maintaining its integrity.</t>

<t>API Call: GET https://&lt;log server&gt;/stict/v1/get-sth</t>

<t>2) Consistency Proof Verification:</t>

<t>Auditors verify the consistency of a log over time by requesting a consistency proof between two STHs.</t>

<t>API Call: GET https://&lt;log server&gt;/stict/v1/get-sth-consistency</t>

<t>3) Audit Proof Verification:</t>

<t>A certificate accompanied by an SCT can be verified against any STH dated after the SCT timestamp + the Maximum Merge Delay by requesting a Merkle audit proof.</t>

<t>API Call: GET https://&lt;log server&gt;/stict/v1/get-proof-by-hash</t>

<t>4) Cross-Checking Logs:</t>

<t>Auditors can cross-check entries across different logs by comparing SCTs and verifying that entries are consistently logged across the ecosystem.</t>

<t>5) Error and Inconsistency Detection:</t>

<t>Any discrepancies or failures in verification processes can be logged as evidence of potential log misbehavior, and appropriate actions can be taken based on the findings.</t>

</section>
</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>TODO Security</t>

</section>
<section anchor="IANA"><name>IANA Considerations</name>

<t>None at this time.</t>

</section>


  </middle>

  <back>



    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC6962">
  <front>
    <title>Certificate Transparency</title>
    <author fullname="B. Laurie" initials="B." surname="Laurie"/>
    <author fullname="A. Langley" initials="A." surname="Langley"/>
    <author fullname="E. Kasper" initials="E." surname="Kasper"/>
    <date month="June" year="2013"/>
    <abstract>
      <t>This document describes an experimental protocol for publicly logging the existence of Transport Layer Security (TLS) certificates as they are issued or observed, in a manner that allows anyone to audit certificate authority (CA) activity and notice the issuance of suspect certificates as well as to audit the certificate logs themselves. The intent is that eventually clients would refuse to honor certificates that do not appear in a log, effectively forcing CAs to add all issued certificates to the logs.</t>
      <t>Logs are network services that implement the protocol operations for submissions and queries that are defined in this document.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6962"/>
  <seriesInfo name="DOI" value="10.17487/RFC6962"/>
</reference>
<reference anchor="RFC8224">
  <front>
    <title>Authenticated Identity Management in the Session Initiation Protocol (SIP)</title>
    <author fullname="J. Peterson" initials="J." surname="Peterson"/>
    <author fullname="C. Jennings" initials="C." surname="Jennings"/>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <author fullname="C. Wendt" initials="C." surname="Wendt"/>
    <date month="February" year="2018"/>
    <abstract>
      <t>The baseline security mechanisms in the Session Initiation Protocol (SIP) are inadequate for cryptographically assuring the identity of the end users that originate SIP requests, especially in an interdomain context. This document defines a mechanism for securely identifying originators of SIP requests. It does so by defining a SIP header field for conveying a signature used for validating the identity and for conveying a reference to the credentials of the signer.</t>
      <t>This document obsoletes RFC 4474.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8224"/>
  <seriesInfo name="DOI" value="10.17487/RFC8224"/>
</reference>
<reference anchor="RFC8226">
  <front>
    <title>Secure Telephone Identity Credentials: Certificates</title>
    <author fullname="J. Peterson" initials="J." surname="Peterson"/>
    <author fullname="S. Turner" initials="S." surname="Turner"/>
    <date month="February" year="2018"/>
    <abstract>
      <t>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="RFC9060">
  <front>
    <title>Secure Telephone Identity Revisited (STIR) Certificate Delegation</title>
    <author fullname="J. Peterson" initials="J." surname="Peterson"/>
    <date month="September" year="2021"/>
    <abstract>
      <t>The Secure Telephone Identity Revisited (STIR) certificate profile provides a way to attest authority over telephone numbers and related identifiers for the purpose of preventing telephone number spoofing. This specification details how that authority can be delegated from a parent certificate to a subordinate certificate. This supports a number of use cases, including those where service providers grant credentials to enterprises or other customers capable of signing calls with STIR.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9060"/>
  <seriesInfo name="DOI" value="10.17487/RFC9060"/>
</reference>
<reference anchor="RFC9118">
  <front>
    <title>Enhanced JSON Web Token (JWT) Claim Constraints for Secure Telephone Identity Revisited (STIR) Certificates</title>
    <author fullname="R. Housley" initials="R." surname="Housley"/>
    <date month="August" year="2021"/>
    <abstract>
      <t>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>
  </front>
  <seriesInfo name="RFC" value="9118"/>
  <seriesInfo name="DOI" value="10.17487/RFC9118"/>
</reference>
<reference anchor="RFC9448">
  <front>
    <title>TNAuthList Profile of Automated Certificate Management Environment (ACME) Authority Token</title>
    <author fullname="C. Wendt" initials="C." surname="Wendt"/>
    <author fullname="D. Hancock" initials="D." surname="Hancock"/>
    <author fullname="M. Barnes" initials="M." surname="Barnes"/>
    <author fullname="J. Peterson" initials="J." surname="Peterson"/>
    <date month="September" year="2023"/>
    <abstract>
      <t>This document defines a profile of the Automated Certificate Management Environment (ACME) Authority Token for the automated and authorized creation of certificates for Voice over IP (VoIP) telephone providers to support Secure Telephone Identity (STI) using the TNAuthList defined by STI certificates.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9448"/>
  <seriesInfo name="DOI" value="10.17487/RFC9448"/>
</reference>
<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>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="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>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>



    </references>




<?line 703?>

<section numbered="false" anchor="acknowledgments"><name>Acknowledgments</name>

<t>The authors would like to thank the authors and contributors to the protocols and ideas around Certificate Transparency <xref target="RFC6962"/> which sets the basis for the STI eco-system to adopt in a very straight forward way, providing trust and transparency in the telephone number world.</t>

</section>


  </back>

<!-- ##markdown-source:
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
D+3gGo2ztu/9lfymtfPT00Nx2O/3Zv1J7/b0oDc5fXc1XxwtNq9uBk/T12fv
zhbnZ2+SzcuLu4/LrdvDq19fd7vdtbZpPvoMzWNfNT/oDXsXB5ObL9Ob6GTv
duugd5Uf9w4PwvMrt+FR8Bs0fF+qhlfiyfLmubh99eIu3+m/2kkO77ABvP+3
1teqcMiTwYDOBwCGyhy4BQSZ+GZna8t7+2af5BLprJn8zzoeqVwrxl8db/fu
DuPiT+/uoJmqfBZZhuZiPUpkmQBSru3hSVsTBaVLoGZ+jIAdHqEmwyChy5uO
S4kdAqwRGTDk+/scS8AhEmBJ13KdeRraHbhsTOaKUtnjCERxXXmf0C189Y+/
/4ftdm440NWTnarabJ6XcdRksZVVqZt4M7BAER+3k3c98Mc8wlfFPA2mrnfo
mZkfk1vYQftlHROGbQDC5nyOX8zmxVLKr/J5CSx5KwlgXmF0qKLGVr2PJSOy
3OIeIbG2C0RlG3l2LQrh49ovn8+33s5+2Pwo8sXewbP49ev5k3j64c3rm62X
xNtrmlT4+vazvd2tvb0ne8CUW/y9IQu+wM/0/PHR+dGv/dOrw+DFq/n27Opo
9sPNTXBCklCTArBAJ+CgnKEaKWrAeoUNOjmyTdBE4H1W03uNz7UlNnHzWAzi
u15fYhYGWBE54bkQTt6eTkii3acUgUKToOBSPHRGtzI4YA0vSbpRepC4eZKl
t8XUwBYu47Oc4CYLA+terTeU2kB0kZcBJngaxFjjaFuILzSalq58M5h+SOTc
0A+a1+GrJhC+Wgqe7HRGy8IC6Br6T2GHPn2THMkyggUd9ZBxCFp52yykrTfw
E4/2bUKmu0QRewrysfNkpQDh10qAqgTB12Y/XLx5l57uTTY/vDiZPckGl78N
j4/fLs7y8+Lj7pdfdj5uz8urbPjCz5WY1uliCd/e3bPtX4MPNzeXyd78473C
17dqOy5hUuNvEbuOVRnykAgCXy/UrSd6xDmOCGiguCX34zZVHi4oXfyroEgV
EBkzv2MbTER8HCyveT1WanuVGF3RodRLH1PihcJr4LSBYpC85eAuymf7GaiG
7PvvDSsRd/Op7VWtvv+e0KXbqoZ36gz2ILF/otm+3Ca++meexUvJhauxRlUf
2DtRg54EOFVmsAI8pW5I0lDhPx3xox39VlmyJmKwXXnw/PXn5fNZPuxfPPkS
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

-->

</rfc>

