<?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.10 (Ruby 3.0.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ssmith-said-02" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.7 -->
  <front>
    <title abbrev="SAID">Self-Addressing IDentifier (SAID)</title>
    <seriesInfo name="Internet-Draft" value="draft-ssmith-said-02"/>
    <author initials="S." surname="Smith" fullname="S. Smith">
      <organization>ProSapien LLC</organization>
      <address>
        <email>sam@prosapien.com</email>
      </address>
    </author>
    <date year="2022" month="May" day="31"/>
    <area>TODO</area>
    <workgroup>TODO Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <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/WebOfTrust/ietf-said"/>.</t>
    </note>
  </front>
  <middle>
    <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>
    </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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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>
    <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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
ZhL8Ly21WXRwTAAA

-->

</rfc>
