<?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-rfc2629 version 1.5.17 -->
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ssmith-said-01" category="info" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.11.1 -->
  <front>
    <title abbrev="SAID">Self-Addressing IDentifier (SAID)</title>
    <seriesInfo name="Internet-Draft" value="draft-ssmith-said-01"/>
    <author initials="S." surname="Smith" fullname="S. Smith">
      <organization>ProSapien LLC</organization>
      <address>
        <email>sam@prosapien.com</email>
      </address>
    </author>
    <date year="2021" month="November" day="28"/>
    <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" format="default"/> 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" format="default"/> 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" numbered="true" toc="default">
      <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 authenticatible serialization. These serializations may also embed references to other self-referential identifiers to other serializations. The purpose of a self-referential identifier is 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 that one identifer 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 a 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. cannot be self-referential nor self-containe. 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 only verify if and only if its encompassing serialization has not been mutated (i.e. is immutable). <tt>SAIDs</tt> used as references to serializations in other serialization 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" numbered="true" toc="default">
      <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" format="default"/> 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" format="default"/> derivation code of the copied <tt>SAID</tt>.</li>
        <li>Encode the computed digest with CESR <xref target="CESR" format="default"/> 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" numbered="true" toc="default">
        <name>Example Computation</name>
        <t>The <tt>CESR</tt> <xref target="CESR" format="default"/> 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 name="" type="" align="left" alt=""><![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 name="" type="" align="left" alt=""><![CDATA[
field0______############################################field2______
]]></artwork>
        <t>The Blake2-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 name="" type="" align="left" alt=""><![CDATA[
E8wYuBjhslETYaLZcxMkWrhVbMcA8RS1pKYl7nJ77ntA
]]></artwork>
        <t>The dummy string is then replaced with the <tt>SAID</tt> above to generated the final serialization with embedded <tt>SAID</tt> as follows:</t>
        <artwork name="" type="" align="left" alt=""><![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" numbered="true" toc="default">
        <name>Serialization Generation</name>
        <section anchor="order-preserving-data-structures" numbered="true" toc="default">
          <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 given 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-serializaion-with-said" numbered="true" toc="default">
        <name>Example Python dict to JSON Serializaion 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 Blake-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 name="" type="" align="left" alt=""><![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" numbered="true" toc="default">
        <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 name="" type="" align="left" alt=""><![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" numbered="true" toc="default">
        <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="conventions-and-definitions" numbered="true" toc="default">
      <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" format="default"/> <xref target="RFC8174" format="default"/> when, and only when, they
appear in all capitals, as shown here.</t>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <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" toc="default">
      <name>Acknowledgments</name>
      <t>Members of the keripy development team and the ToIP ACDC WG.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
