<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.39 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ssmith-said-03" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <front>
    <title abbrev="SAID">Self-Addressing IDentifier (SAID)</title>
    <seriesInfo name="Internet-Draft" value="draft-ssmith-said-03"/>
    <author initials="S." surname="Smith" fullname="S. Smith">
      <organization>ProSapien LLC</organization>
      <address>
        <email>sam@prosapien.com</email>
      </address>
    </author>
    <date year="2023" month="July" day="27"/>
    <area>TODO</area>
    <workgroup>TODO Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 47?>

<t>A <tt>SAID</tt> (Self-Addressing IDentifier) is a special type of content-addressable identifier based on encoded cryptographic digest that is self-referential. The <tt>SAID</tt> derivation protocol defined herein enables verification that a given <tt>SAID</tt> is uniquely cryptographically bound to a serialization that includes the <tt>SAID</tt> as a field in that serialization. Embedding a <tt>SAID</tt> as a field in the associated serialization indicates a preferred content-addressable identifier for that serialization that facilitates greater interoperability, reduced ambiguity, and enhanced security when reasoning about the serialization. Moreover, given sufficient cryptographic strength, a cryptographic commitment such as a signature, digest, or another <tt>SAID</tt>, to a given <tt>SAID</tt> is essentially equivalent to a commitment to its associated serialization. Any change to the serialization invalidates its <tt>SAID</tt> thereby ensuring secure immutability evident reasoning with <tt>SAIDs</tt> about serializations or equivalently their <tt>SAIDs</tt>. Thus <tt>SAIDs</tt> better facilitate immutably referenced data serializations for applications such as Verifiable Credentials or Ricardian Contracts.</t>
      <t><tt>SAIDs</tt> are encoded with <tt>CESR</tt> (Composable Event Streaming Representation) <xref target="CESR"/> which includes a pre-pended derivation code that encodes the cryptographic suite or algorithm used to generate the digest. A <tt>CESR</tt> primitive's primary expression (alone or in combination ) is textual using Base64 URL-safe characters. <tt>CESR</tt> primitives may be round-tripped (alone or in combination) to a compact binary representation without loss. The <tt>CESR</tt> derivation code enables cryptographic digest algorithm agility in systems that use <tt>SAIDs</tt> as content addresses. Each serialization may use a different cryptographic digest algorithm as indicated by its derivation code. This provides interoperable future proofing. <tt>CESR</tt> was developed for the <xref target="KERI"/> protocol.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/trustoverip/tswg-said-specification"/>.</t>
    </note>
  </front>
  <middle>
    <?line 55?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The primary advantage of a content-addressable identifier is that it is cryptographically bound to the content (expressed as a serialization), thus providing a secure root-of-trust for reasoning about that content. Any sufficiently strong cryptographic commitment to a content-addressable identifier is functionally equivalent to a cryptographic commitment to the content itself.</t>
      <t>A <tt>self-addressing identifier (SAID)</tt> is a special class of content-addressable identifier that is also self-referential. This requires a special derivation protocol that generates the <tt>SAID</tt> and embeds it in the serialized content.  The reason for a special derivation protocol is that a naive cryptographic content-addressable identifier must not be self-referential, i.e. the identifier must not appear within the content that it is identifying. This is because the naive cryptographic derivation process of a content-addressable identifier is a cryptographic digest of the serialized content. Changing one bit of the serialization content will result in a different digest. Therefore, self-referential content-addressable identifiers require a special derivation protocol.</t>
      <t>To elaborate, this approach of deriving self-referential identifiers from the contents they identify, is called <tt>self-addressing</tt>. It allows any validator to verify or re-derive the <tt>self-referential, self-addressing identifier</tt> given the contents it identifies. To clarify, a <tt>SAID</tt> is different from a standard content address or content-addressable identifier in that a standard content-addressable identifier may not be included inside the contents it addresses. Moreover, a standard content-addressable identifier is computed on the finished immutable contents, and therefore is not self-referential. In addition, a <tt>self-addressing identifier (SAID)</tt> includes a pre-pended derivation code that specifies the cryptographic algorithm used to generate the digest.</t>
      <t>An authenticatable data serialization is defined to be a serialization that is digitally signed with a non-repudiable asymmetric key-pair based signing scheme. A verifier, given the public key, may verify the signature on the serialization and thereby securely attribute the serialization to the signer. Many use cases of authenticatable data serializations or statements include a self-referential identifier embedded in the authenticatable serialization. These serializations may also embed references to other self-referential identifiers to other serializations. The purpose of a self-referential identifier is to enable reasoning in software or otherwise about that serialization.  Typically, these self-referential identifiers are not cryptographically bound to their encompassing serializations such as would be the case for a content-addressable identifier of that serialization. This poses a security problem because there now may be more than one identifier for the same content. The first is self-referential, included in the serialization, but not cryptographically bound to its encompassing serialization and the second is cryptographically bound but not self-referential, not included in the serialization.</t>
      <t>When reasoning about a given content serialization, the existence of a non-cryptographically bound but self-referential identifier is a security vulnerability. Certainly, this identifier cannot be used by itself to securely reason about the content because it is not bound to the content. Anyone can place such an identifier inside some other serialization and claim that the other serialization is the correct serialization for that self-referential identifier.  Unfortunately, a standard content-addressable identifier for a serialization which is bound to the serialization can not be included in the serialization itself, i.e. can be neither self-referential nor self-contained; it must be tracked independently. In contrast, a <tt>self-addressing identifier</tt> is included in the serialization to which it is cryptographically bound making it self-referential and self-contained. Reasoning about <tt>self-addressing identifiers (SAIDs)</tt> is secure because a <tt>SAID</tt> will verify if and only if its encompassing serialization has not been mutated, which makes the content immutable. <tt>SAIDs</tt> used as references to serializations in other serializations enable tamper-evident reasoning about the referenced serializations. This enables a more compact representation of an authenticatable data serialization that includes other serializations by reference to their <tt>SAIDs</tt> instead of by embedded containment.</t>
    </section>
    <section anchor="generation-and-verification-protocols">
      <name>Generation and Verification Protocols</name>
      <t>The <em>self-addressing identifier</em> (<tt>SAID</tt>) verification protocol is as follows:</t>
      <ul spacing="normal">
        <li>Make a copy of the embedded <tt>CESR</tt> <xref target="CESR"/> encoded <tt>SAID</tt> string included in the serialization.</li>
        <li>replace the <tt>SAID</tt> field value in the serialization with a dummy string of the same length. The dummy character is <tt>#</tt>, that is, ASCII 35 decimal (23 hex).</li>
        <li>Compute the digest of the serialization that includes the dummy value for the <tt>SAID</tt> field. Use the digest algorithm specified by the <tt>CESR</tt> <xref target="CESR"/> derivation code of the copied <tt>SAID</tt>.</li>
        <li>Encode the computed digest with CESR <xref target="CESR"/> to create the final derived and encoded SAID of the same total length as the dummy string and the copied embedded <tt>SAID</tt>.</li>
        <li>Compare the copied <tt>SAID</tt> with the recomputed <tt>SAID</tt>. If they are identical then the verification is successful; otherwise unsuccessful.</li>
      </ul>
      <section anchor="example-computation">
        <name>Example Computation</name>
        <t>The <tt>CESR</tt> <xref target="CESR"/> encoding of a Blake3-256 (32 byte) binary digest has 44 Base-64 URL-safe characters. The first character is <tt>E</tt> which represents Blake3-256. Therefore, a serialization of a fixed field data structure with a SAID generated by a Blake3-256 digest must reserve a field of length 44 characters. Suppose the initial value of the fixed field serialization is the following string:</t>
        <artwork><![CDATA[
field0______field1______________________________________field2______
]]></artwork>
        <t>In the string, <tt>field1</tt> is of length 44 characters. The first step to generating the <tt>SAID</tt> for this serialization is to replace the contents of <tt>field1</tt> with a dummy string of <tt>#</tt> characters of length 44 as follows:</t>
        <artwork><![CDATA[
field0______############################################field2______
]]></artwork>
        <t>The Blake3-256 digest is then computed on the above string and encoded in <tt>CESR</tt> format. This gives the following <tt>SAID</tt>:</t>
        <artwork><![CDATA[
E8wYuBjhslETYaLZcxMkWrhVbMcA8RS1pKYl7nJ77ntA
]]></artwork>
        <t>The dummy string is then replaced with the <tt>SAID</tt> above to produce the final serialization with embedded <tt>SAID</tt> as follows:</t>
        <artwork><![CDATA[
field0______E8wYuBjhslETYaLZcxMkWrhVbMcA8RS1pKYl7nJ77ntA______
]]></artwork>
        <t>To verify the embedded <tt>SAID</tt> with respect to its encompassing serialization above, just reverse the generation steps.</t>
      </section>
      <section anchor="serialization-generation">
        <name>Serialization Generation</name>
        <section anchor="order-preserving-data-structures">
          <name>Order-Preserving Data Structures</name>
          <t>The crucial consideration in <tt>SAID</tt> generation is reproducibility. This requires the ordering and sizing of fields in the serialization to be fixed. Data structures in most computer languages have fixed fields. The example above is such an example.</t>
          <t>A very useful type of serialization especially in some languages like Python or JavaScript is of self-describing data structures that are mappings of (key, value) or (label, value) pairs. These are often also called dictionaries or hash tables. The essential feature needed for reproducible serialization of such mappings is that mapping preserve the ordering of its fields on any round trip to/from a serialization. In other words the mapping is ordered with respect to serialization. Another way to describe a predefined order preserving serialization is canonicalization or canonical ordering. This is often referred to as the mapping canonicalization problem.</t>
          <t>The <em>natural</em> canonical ordering for such mappings is <em>insertion order</em> or sometimes called <em>field creation order</em>. Natural order allows the fields to appear in a preset order independent of the lexicographic ordering of the labels. This enables functional or logical ordering of the fields. Logical ordering also allows the absence or presence of a field to have meaning. Fields may have a priority given by their relative order of appearance. Fields may be grouped in logical sequence for better usability and labels may use words that best reflect their function independent of their relative lexicographic ordering. The most popular serialization format for mappings is <em>JSON</em>. Other popular serializations for mappings are CBOR and MsgPack.</t>
          <t>In contrast, from a functional perspective, lexicographic ordering appears un-natural. In lexicographic ordering the fields are sorted by label prior to serialization.  The problem with lexicographic ordering is that the relative order of appearance of the fields is determined by the labels themselves not some logical or functional purpose of the fields themselves. This often results in oddly-labeled fields that are so named merely to ensure that the lexicographic ordering matches a given logical ordering.</t>
          <t>Originally mappings in most if not all computer languages were not insertion order preserving. The reason is that most mappings used hash tables under the hood. Early hash tables were highly efficient but by nature did not include any mechanism for preserving field creation or field insertion order for serialization. Fortunately, this is no longer true in general. Most if not all computer languages that support dictionaries or mappings as first-class data structures now support variations that are insertion order preserving.</t>
          <t>For example, since version 3.6 the default <tt>dict</tt> object in Python is insertion order preserving. Before that, Python 3.1 introduced the <tt>OrderedDict</tt> class which is insertion order preserving, and before that, custom classes existed in the wild for order preserving variants of a Python <tt>dict</tt>. Since version 1.9 the Ruby version of a <tt>dict</tt>, the <tt>Hash</tt> class, is insertion order preserving. Javascript is a relative latecomer but since ECMAScript <tt>ES6</tt> the insertion ordering of JavaScript objects was preserved in <tt>Reflect.ownPropertyKeys()</tt>. Using custom <tt>replacer</tt> and <tt>reviver</tt> functions in <tt>.stringify</tt> and <tt>.parse</tt> allows one to serialize and de-serialize JavaScript objects in insertion order. Moreover, since ES11 the native <tt>.stringify</tt> uses insertion order all text string labeled fields in Javascript objects. It is an uncommon use case to have non-text string labels in a mapping serialization. A list is usually a better structure in those cases. Nonetheless, since ES6 the new Javascript <tt>Map</tt> object preserves insertion order for all fields for all label types. Custom <tt>replacer</tt> and <tt>reviver</tt> functions for <tt>.stringify</tt> and <tt>.parse</tt> allows one to serialize and de-serialize Map objects to/from JSON in natural order preserving fashion. Consequently, there is no need for any canonical serialization but natural insertion order preserving because one can always use lexicographic ordering to create the insertion order.</t>
        </section>
      </section>
      <section anchor="example-python-dict-to-json-serialization-with-said">
        <name>Example Python dict to JSON Serialization with SAID</name>
        <t>Suppose the initial value of a Python <tt>dict</tt> is as follows:</t>
        <sourcecode type="python"><![CDATA[
{
    "said": "",
    "first": "Sue",
    "last": "Smith",
    "role": "Founder"
}
]]></sourcecode>
        <t>As before the <tt>SAID</tt> will be a 44 character CESR encoded Blake3-256 digest. The serialization will be <em>JSON</em>. The <tt>said</tt> field value in the <tt>dict</tt> is to be populated with the resulting <tt>SAID</tt>. First the value of the <tt>said</tt> field is replaced with a 44 character dummy string as follows:</t>
        <sourcecode type="python"><![CDATA[
{
    "said": "############################################",
    "first": "Sue",
    "last": "Smith",
    "role": "Founder"
}
]]></sourcecode>
        <t>The <tt>dict</tt> is then serialized into JSON with no extra whitespace. The serialization is the following string:</t>
        <sourcecode type="json"><![CDATA[
{"said":"############################################","first":"Sue","last":"Smith","role":"Founder"}
]]></sourcecode>
        <t>The Blake3-256 digest is then computed on that serialization above and encoded in <tt>CESR</tt> to provide the <tt>SAID</tt> as follows:</t>
        <artwork><![CDATA[
EnKa0ALimLL8eQdZGzglJG_SxvncxkmvwFDhIyLFchUk
]]></artwork>
        <t>The value of the <tt>said</tt> field is now replaced with the computed and encoded <tt>SAID</tt> to produce the final serialization with embedded <tt>SAID</tt> as follows:</t>
        <sourcecode type="json"><![CDATA[
{"said":"EnKa0ALimLL8eQdZGzglJG_SxvncxkmvwFDhIyLFchUk","first":"Sue","last":"Smith","role":"Founder"}
]]></sourcecode>
        <t>The final serialization may be converted to a python <tt>dict</tt> by deserializing the JSON to produce:</t>
        <sourcecode type="python"><![CDATA[
{
    "said": "EnKa0ALimLL8eQdZGzglJG_SxvncxkmvwFDhIyLFchUk",
    "first": "Sue",
    "last": "Smith",
    "role": "Founder"
}
]]></sourcecode>
        <t>The generation steps may be reversed to verify the embedded <tt>SAID</tt>. The <tt>SAID</tt> generation and verification protocol for mappings assumes that the fields in a mapping serialization such as JSON are ordered in stable, round-trippable, reproducible order, i.e., canonical. The natural canonical ordering is called <tt>field insertion order</tt>.</t>
      </section>
      <section anchor="example-schema-immutability-using-json-schema-with-saids">
        <name>Example Schema Immutability using JSON Schema with SAIDs</name>
        <t><tt>SAIDs</tt> make <eref target="https://json-schema.org/draft/2020-12/json-schema-core.html">JSON Schema</eref> fully self-contained with self-referential, unambiguously cryptographically bound, and verifiable content-addressable identifiers. We apply the <tt>SAID</tt> derivation protocol defined above to generate the <tt>$id</tt> field.</t>
        <t>First, replace the value of the <tt>$id</tt> field with a string filled with dummy characters of the same length as the eventual derived value for <tt>$id</tt>.</t>
        <sourcecode type="json"><![CDATA[
    {
        "$id": "############################################",
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "properties": {
            "full_name": {
            "type": "string"
        }
    }
]]></sourcecode>
        <t>Second, make a digest of the serialized schema contents that include the dummy value for the <tt>$id</tt>.</t>
        <artwork><![CDATA[
EZT9Idj7zLA0Ek6o8oevixdX20607CljNg4zrf_NQINY
]]></artwork>
        <t>Third, replace the dummy identifier value with the derived identifier value in the schema contents.</t>
        <sourcecode type="json"><![CDATA[
    {
        "$id": "EZT9Idj7zLA0Ek6o8oevixdX20607CljNg4zrf_NQINY",
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "properties": {
            "full_name": {
            "type": "string"
        }
    }
]]></sourcecode>
        <t>Usages of <tt>SAIDs</tt> within authentic data containers as demonstrated here are referred to as <tt>self-addressing data (SAD)</tt>.</t>
      </section>
      <section anchor="discussion">
        <name>Discussion</name>
        <t>As long as any verifier recognizes the derivation code of a <tt>SAID</tt>, the <tt>SAID</tt> is a cryptographically secure commitment to the contents in which it is embedded; it is a cryptographically verifiable, self-referential, content-addressable identifier. Because a <tt>SAID</tt> is both self-referential and cryptographically bound to the contents it identifies, anyone can validate this binding if they follow the <em>derivation protocol</em> outlined above.</t>
        <t>To elaborate, this approach of deriving self-referential identifiers from the contents they identify, is called <tt>self-addressing</tt>. It allows any validator to verify or re-derive the self-referential, self-addressing identifier given the contents it identifies. To clarify, a <tt>SAID</tt> is different from a standard content address or content-addressable identifier in that a standard content-addressable identifier may not be included inside the contents it addresses. Moreover, a standard content-addressable identifier is computed on the finished immutable contents, and therefore is not self-referential.</t>
      </section>
    </section>
    <section anchor="appendix-embedding-saids-in-urls">
      <name>Appendix: Embedding SAIDs in URLs</name>
      <t>ToDo. Provide normative protocol for embedding a SAID in a URL to replace a
bare SAID in a data structure (field map). The purpose is to ease the transition
from web 2.0 URL centric infrastructure to zero-trust infrastructure. This is
a caveated adoption vector because it mixes discovery (URL) with integrity (SAID)
layers. The OOBI protocol is an example of using embedded SAIDs inside URLs merely for
verifiable discovery while using the bare SAID in the discovered data item.</t>
    </section>
    <section anchor="appendix-json-schema-with-saids">
      <name>Appendix: JSON Schema with SAIDs</name>
      <t>ToDo. Provide normative rules for using SAIDs to lock-down JSON Schema (immutable) to prevent schema malleability attacks.</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="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="CESR" target="https://datatracker.ietf.org/doc/draft-ssmith-cesr/">
          <front>
            <title>Composable Event Streaming Representation (CESR)</title>
            <author initials="S." surname="Smith" fullname="Samuel M. Smith">
              <organization>ProSapien LLC</organization>
            </author>
            <date year="2021"/>
          </front>
        </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>
      <references>
        <name>Informative References</name>
        <reference anchor="KERI" target="https://arxiv.org/abs/1907.02143">
          <front>
            <title>Key Event Receipt Infrastructure (KERI)</title>
            <author initials="S." surname="Smith" fullname="Samuel M. Smith">
              <organization>ProSapien LLC</organization>
            </author>
            <date year="2021"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 272?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Members of the keripy development team and the ToIP ACDC WG.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
KZnU55yvstN39EeSxI9vRsH/AmiiBF59TAAA

-->

</rfc>
