<?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.7.39 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-holmgren-at-repository-02" category="std" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="AT Repo">Authenticated Transfer: Repository</title>
    <seriesInfo name="Internet-Draft" value="draft-holmgren-at-repository-02"/>
    <author fullname="Daniel Holmgren">
      <organization>Bluesky Social</organization>
      <address>
        <email>daniel@blueskyweb.xyz</email>
      </address>
    </author>
    <author fullname="Bryan Newbold">
      <organization>Bluesky Social</organization>
      <address>
        <email>bryan@blueskyweb.xyz</email>
      </address>
    </author>
    <date year="2026" month="June" day="04"/>
    <area>Applications and Real-Time Area</area>
    <workgroup>Authenticated Transfer</workgroup>
    <abstract>
      <?line 90?>

<t>This document specifies a repository data structure for storage and transfer of public user data records as part of the Authenticated Transfer Protocol (ATP). It describes encoding formats for both individual data records and entire repositories. The repository data structure is content-addressable and cryptographically authenticated.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-holmgren-at-repository/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Authenticated Transfer Working Group mailing list (<eref target="mailto:atp@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/atp/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/atp/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-atp/drafts"/>.</t>
    </note>
  </front>
  <middle>
    <?line 94?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The Authenticated Transfer Protocol (ATP) enables the creation of decentralized networks for publication of self-certifying data. An introduction to the overall protocol architecture is given in <xref target="AT-ARCH"/>.</t>
      <t>User accounts publish structured data records to the network by including them in their public repository. Records within a repository are identified by a unique path and current content version (hash). Records can be created, updated, and deleted at any time. Repositories contain the complete set of current records for the account, and do not include or reveal the existence of previous content.</t>
      <t>The repository structure includes the account's persistent identifier, and the overall repository structure is cryptographically signed. The authenticity of the entire repository can be verified by resolving the account identifier to the current public key. Data records are not signed individually. Details of account identifier systems and their resolution process are out of scope for this document.</t>
      <t>Large binary data such as images and media files are not stored directly within repositories. Instead, such data is stored externally and referenced in records by a hash link.</t>
      <t>Mechanisms for synchronizing repositories between parties over the public network are described in <xref target="AT-SYNC"/>.</t>
      <t>This document describes version <tt>3</tt> of the repository format.</t>
    </section>
    <section anchor="repo-semantics">
      <name>Repository Semantics</name>
      <t>Records within a repository are discrete units of structured data, identified by a unique path and versioned by content hash. Records conform to a generic data model, but the content, schema, and semantics of record is varied and application-specific. Records are grouped by type under "collections".</t>
      <t>The current state of a repository is summarized in a signed "commit". Any change to the contents of the repository updates the current commit. Commits for an individual account's repository are serialized using a monotonically-increasing "revision" identifier.</t>
      <t>Updates to repositories may include operations on multiple records in a batch mutation that results in a single signed commit. Implementations should apply practical limits on batch sizes to support efficient processing and distribution of repository changes.</t>
      <section anchor="account-ids">
        <name>Account Identifiers</name>
        <t>Repository commit objects (<xref target="commits"/>) contain a persistent account identifier, which indicates the publisher of the repository. This account identifier can be resolved to obtain the current cryptographic public keys for the account, and those keys can be used to verify the authenticity of the repository and the records it contains.</t>
        <t>The keys associated with an account may be rotated over time. The most recent commit must always be verifiable using the currently resolvable signing key. When rotating signing keys, a new repository commit must be created, even if the contents and structure of the repository remain unchanged.</t>
        <t>This document does not include details or recommendations on account identifier systems.</t>
      </section>
      <section anchor="revs">
        <name>Revisions</name>
        <t>Repository commits include a revision field (<tt>rev</tt>) which acts as a logical clock for updates to the repository over time. The revision string is a Timestamp Identifier (TID) as described in <xref target="tid"/>.</t>
        <t>Revisions may be used when comparing two versions of a repository to determine which is more recent. This is particularly relevant when synchronizing repositories indirectly, or from multiple sources over time.</t>
        <t>If a commit TID value corresponds to a timestamp in the future (beyond a short period to accommodate clock drift) the commit SHOULD be ignored. This is to ensure that a newly published commit (with a TID corresponding to the current time) will reliably be accepted as current by the entire network.</t>
      </section>
    </section>
    <section anchor="repo-structure">
      <name>Repository Structure</name>
      <t>Repositories are structured as a Merkle Search Tree (<xref target="mst"/>) with a cryptographically signed commit object referencing the tree root.</t>
      <t>The MST structure provides several fundamental properties for repository operations. As a content-addressed structure, it enables efficient verification of data. The MST maintains lexicographic key ordering, enabling structural sharing of intermediate tree nodes for related records. It is probabilistically self-balancing, offering consistent performance characteristics. Additionally the MST exhibits unicity, meaning that any given set of keys and values will always produce the same tree structure and root hash regardless of insertion order.</t>
      <t>Repository contents are encoded using deterministic CBOR serialization and organized as a directed acyclic graph where data objects reference each other through content hashes. These hash-identified data objects, referred to as "blocks," include three distinct types: commit objects, MST internal nodes, and data records.</t>
      <section anchor="repo-path">
        <name>Record Paths</name>
        <t>Records within a repository are identified by a non-empty case-sensitive ASCII string called the "path". Records are stored sorted lexicographically by path, and the efficiency of some repository operations is impacted by sort order.</t>
        <t>A path string is the combination of a collection type name and a record key, joined by a single forward slash character: <tt>&lt;collection&gt;/&lt;record-key&gt;</tt>. A path MUST consist of exactly two segments separated by <tt>/</tt>, with no leading or trailing slash.</t>
        <t>Collection names use the Namespaced Identifier (NSID) syntax described in <xref target="nsid"/>. They have a prefix-ordered namespace structure, which means that records of the same collection are stored adjacently, and that collections under the same authority are grouped together.</t>
        <t>Record keys uniquely identify records within a collection. Record keys are case-sensitive and MUST satisfy the following syntax:</t>
        <ul spacing="normal">
          <li>
            <t>Allowed characters are ASCII alphanumerics (<tt>A-Z</tt>, <tt>a-z</tt>, <tt>0-9</tt>), period (<tt>.</tt>), hyphen (<tt>-</tt>), underscore (<tt>_</tt>), colon (<tt>:</tt>), and tilde (<tt>~</tt>)</t>
          </li>
          <li>
            <t>Length between 1 and 512 characters (inclusive)</t>
          </li>
          <li>
            <t>The literal values <tt>.</tt> and <tt>..</tt> are prohibited</t>
          </li>
        </ul>
        <t>The syntax of record keys may be constrained further on a per-collection basis at the application layer. A common choice is to use the Timestamp Identifier <xref target="tid"/> syntax, which results in lexicographic sorting by time within a collection. This means that "new" records are all grouped together within a given collection.</t>
        <t>Note that both the NSID and record key string syntaxes are valid path components as defined in Section 3.3 of <xref target="RFC3986"/>. It is important to maintain this property.</t>
      </section>
      <section anchor="commits">
        <name>Commit Objects</name>
        <t>Commit objects serve as the authoritative root of each repository, establishing cryptographic ownership and providing a verifiable reference to the state of a repository at a particular point in time. Each commit is digitally signed by the repository account owner and contains metadata necessary for verification.</t>
        <t>A commit object contains the following data fields:</t>
        <ul spacing="normal">
          <li>
            <t><strong><tt>did</tt></strong> (string, required): The resolvable account identifier associated with the repository as described in <xref target="account-ids"/></t>
          </li>
          <li>
            <t><strong><tt>version</tt></strong> (integer, required): Repository format version, fixed value of <strong><tt>3</tt></strong> for the current specification</t>
          </li>
          <li>
            <t><strong><tt>data</tt></strong> (cid-link, required): Hash pointer to the root of the repository’s MST structure</t>
          </li>
          <li>
            <t><strong><tt>rev</tt></strong> (string, required): Repository revision identifier that functions as a logical clock and must increase monotonically (see <xref target="revs"/>). Syntax MUST match <xref target="tid"/>.</t>
          </li>
          <li>
            <t><strong><tt>prev</tt></strong> (cid-link, nullable): Optional pointer to the previous commit object in the repository's history chain. While included for backward compatibility with version 2 repositories, this field is typically <tt>null</tt> in version 3 implementations</t>
          </li>
          <li>
            <t><strong><tt>sig</tt></strong> (byte array, required): Cryptographic signature over the commit contents.</t>
          </li>
        </ul>
        <t>Commit objects are signed by the key declared by the repository owner’s resolvable identifier. Neither the signature nor the signed commit object contains information about the curve type or specific public key used for signing. This information must be obtained by resolving the account identifier as described in <xref target="account-ids"/>.</t>
        <t>The procedure for signing commit objects:</t>
        <ol spacing="normal" type="1"><li>
            <t>Encode the unsigned commit object (with <tt>sig</tt> field entirely absent) as CBOR</t>
          </li>
          <li>
            <t>Sign the encoded bytes as described in <xref target="crypto"/></t>
          </li>
          <li>
            <t>Include the signature bytes in the <tt>sig</tt> field</t>
          </li>
        </ol>
        <t>To verify the signature, remove the <tt>sig</tt> field and encode the unsigned commit object as CBOR. Then verify the signature against those encoded bytes.</t>
      </section>
      <section anchor="records">
        <name>Records</name>
        <t>Records stored within a repository are always objects (or "maps") encoded as CBOR, following the data model and encoding rules described in <xref target="data-model"/>. Each record must include a top-level field named <tt>$type</tt> with a string value matching the collection type name (NSID) of the path that the record is stored at.</t>
        <t>Invalid or corrupt data in individual records should not impact processing of the overall repository data structure, or the processing of other valid records in the same repository.</t>
      </section>
    </section>
    <section anchor="mst">
      <name>Merkle Search Tree</name>
      <t>The Merkle Search Tree (MST) structure is deterministically reproducible from any given key-value mapping, where keys are non-empty byte strings (corresponding to a path) and values are hash link references to records. This deterministic construction ensures that identical input sets always produce the same root hash regardless of insertion order.</t>
      <t>The tree's structural organization depends solely on the keys present, not on the record values they reference. When a record value changes, the new content hash propagates up through the tree nodes to the root, but the tree's shape and node organization remain unchanged.</t>
      <t>The MST data structure was first published in <xref target="MSTPAPER"/>.</t>
      <section anchor="mst-structure">
        <name>Tree Structure</name>
        <t>Each MST node contains a list of key-value entries and references to child subtrees. Entries and subtree links are maintained in lexicographic order, with all keys in a linked subtree falling within the range corresponding to that link's position. The ordering proceeds from left (lexicographically first) to right (lexicographically last).</t>
        <t>Keys are assigned to tree levels based on a layer value computed from the key itself. Nodes at each level contain all keys with the corresponding layer value, while subtree links point to nodes containing keys that fall within specific lexicographic ranges but have lower layer values. Adjacent keys may appear within the same node, but adjacent subtrees must be separated by at least one key entry to prevent structural ambiguity.</t>
      </section>
      <section anchor="mst-layer">
        <name>Layer Calculation</name>
        <t>The layer for a given key is calculated using SHA-256 with a 2-bit grouping scheme that provides an average fanout of 4:</t>
        <ol spacing="normal" type="1"><li>
            <t>Compute the SHA-256 hash of the key (byte string) with binary output</t>
          </li>
          <li>
            <t>Count the number of leading binary zeros in the hash</t>
          </li>
          <li>
            <t>Divide by 2, rounding down to the nearest integer</t>
          </li>
        </ol>
        <t>Examples of layer calculation:</t>
        <ul spacing="normal">
          <li>
            <t><tt>key1</tt>: SHA-256 begins <tt>100000010111...</tt> → layer 0</t>
          </li>
          <li>
            <t><tt>key7</tt>: SHA-256 begins <tt>000111100011...</tt> → layer 1</t>
          </li>
          <li>
            <t><tt>key515</tt>: SHA-256 begins <tt>000000000111...</tt> → layer 4</t>
          </li>
        </ul>
        <t>When processing the MST structure, implementations must verify the layer assignment and ordering of keys. While this verification is most essential for untrusted inputs, implementations should perform these checks consistently regardless of data source. Additional validation of node size limits and other structural parameters is required to prevent resource exhaustion attacks, as detailed in Security Considerations (<xref target="security"/>).</t>
      </section>
      <section anchor="mst-example">
        <name>MST Construction Example</name>
        <t>The following is a Merkle Search Tree containing 9 records with keys A-I. Each key would include a pointer to some record hash, though that hash is irrelevant to the construction of the tree. Each asterisk (<tt>*</tt>) represents a hash pointer to the subtree under it.</t>
        <t>For the sake of illustration assume the following layer calculations:</t>
        <ul spacing="normal">
          <li>
            <t><tt>layer(D) = 2</tt></t>
          </li>
          <li>
            <t><tt>layer(A|E|I) = 1</tt></t>
          </li>
          <li>
            <t><tt>layer(B|C|F|G|H) = 0</tt></t>
          </li>
        </ul>
        <figure anchor="f-mst-example">
          <name>Example MST Structure</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="240" width="168" viewBox="0 0 168 240" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 24,80 L 24,120" fill="none" stroke="black"/>
                <path d="M 40,144 L 40,184" fill="none" stroke="black"/>
                <path d="M 80,32 L 80,56" fill="none" stroke="black"/>
                <path d="M 136,80 L 136,120" fill="none" stroke="black"/>
                <path d="M 136,136 L 136,184" fill="none" stroke="black"/>
                <path d="M 32,64 L 128,64" fill="none" stroke="black"/>
                <path d="M 16,128 L 32,128" fill="none" stroke="black"/>
                <path d="M 120,128 L 152,128" fill="none" stroke="black"/>
                <path d="M 32,192 L 48,192" fill="none" stroke="black"/>
                <path d="M 120,192 L 152,192" fill="none" stroke="black"/>
                <circle cx="24" cy="96" r="6" class="closeddot" fill="black"/>
                <circle cx="40" cy="160" r="6" class="closeddot" fill="black"/>
                <circle cx="80" cy="32" r="6" class="closeddot" fill="black"/>
                <circle cx="136" cy="96" r="6" class="closeddot" fill="black"/>
                <circle cx="136" cy="160" r="6" class="closeddot" fill="black"/>
                <g class="text">
                  <text x="80" y="84">|</text>
                  <text x="80" y="100">D</text>
                  <text x="8" y="148">|</text>
                  <text x="112" y="148">|</text>
                  <text x="160" y="148">|</text>
                  <text x="8" y="164">A</text>
                  <text x="112" y="164">E</text>
                  <text x="160" y="164">I</text>
                  <text x="24" y="212">|</text>
                  <text x="56" y="212">|</text>
                  <text x="112" y="212">|</text>
                  <text x="136" y="212">|</text>
                  <text x="160" y="212">|</text>
                  <text x="24" y="228">B</text>
                  <text x="56" y="228">C</text>
                  <text x="112" y="228">F</text>
                  <text x="136" y="228">G</text>
                  <text x="160" y="228">H</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
         *
         |
   -------------
  |      |      |
  *      D      *
  |             |
 ---          -----
|   |        |  |  |
A   *        E  *  I
    |           |
   ---        -----
  |   |      |  |  |
  B   C      F  G  H
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="mst-empty-nodes">
        <name>Empty Nodes</name>
        <t>An empty repository containing no records is represented as a single MST node with no entries. This is the only case where a node without entries is permitted.</t>
        <t>Nodes that contain no key entries but do contain subtree links are allowed at intermediate positions, provided those subtrees eventually contain key entries. However, such nodes MUST NOT appear at the root position — the root MUST either contain key entries or be the special case of a completely empty repository. Similarly, nodes without key entries MUST NOT appear at leaf positions except for the empty repository case.</t>
        <t>This structure ensures that nodes lacking key-value entries are pruned from the top and bottom of the tree while preserving intermediate nodes that maintain proper height relationships and prevent subtree links from skipping layers.</t>
      </section>
      <section anchor="mst-nodes">
        <name>MST Node Schema</name>
        <t>Given their prevalence through the repository structure, MST nodes require a compact binary representation for storage efficiency. Keys within each node use prefix compression, where each entry specifies the number of bytes it shares with the preceding key in the array. The first entry in each node contains the complete key with a prefix length of zero. This compression applies only within individual nodes and does not extend across node boundaries. The compression scheme is mandatory to ensure deterministic MST structure across all implementations.</t>
        <t>MST nodes contain the following fields:</t>
        <ul spacing="normal">
          <li>
            <t><tt>l</tt> (hash link, nullable): Reference to a subtree node at a lower layer containing keys that sort lexicographically before all keys in the current node</t>
          </li>
          <li>
            <t><tt>e</tt> (array, required): Ordered array of entry objects, each containing:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>p</tt> (integer, required): Number of bytes shared with the previous entry in this node</t>
              </li>
              <li>
                <t><tt>k</tt> (byte string, required): Key suffix remaining after removing the shared prefix bytes</t>
              </li>
              <li>
                <t><tt>v</tt> (hash link, required): Reference to the record data for this entry</t>
              </li>
              <li>
                <t><tt>t</tt> (hash link, nullable): Reference to a subtree node at a lower layer containing keys that sort after this entry's key but before the next entry's key in the current node</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Hash references appearing within an MST node — the <tt>l</tt> and <tt>t</tt> subtree links, and the <tt>v</tt> record link — MUST use the constrained content-hash format defined in <xref target="cbor-encoding"/>.</t>
      </section>
      <section anchor="mst-node-example">
        <name>MST Node example</name>
        <t>The following example shows an MST node at layer 1 containing two subtree pointers and two key-value entries. The node contents in order are:</t>
        <ul spacing="normal">
          <li>
            <t>Left subtree: hash link <tt>0x01711220643b9326...</tt></t>
          </li>
          <li>
            <t>Entry: <tt>key7</tt> → record hash link <tt>0x017112202d9aa87e...</tt></t>
          </li>
          <li>
            <t>Right subtree: hash link <tt>0x0171122047e2886f...</tt></t>
          </li>
          <li>
            <t>Entry: <tt>key10</tt> → record hash link <tt>0x0171122010b6da2c...</tt></t>
          </li>
        </ul>
        <t>This node would be encoded as follows:</t>
        <artwork><![CDATA[
{
  l: 0x01711220643b9326...
  e: [
    {
      p: 0,
      k: "key7",
      v: 0x017112202d9aa87e...
      t: 0x0171122047e2886f...
    },
    {
      p: 3,
      k: "10",
      v: 0x0171122010b6da2c...
      t: null
    }
  ]
}
]]></artwork>
      </section>
    </section>
    <section anchor="serialization">
      <name>Repository Serialization Format</name>
      <t>Repositories are serialized for transmission and storage as a concatenated sequence of block data, where blocks represent the CBOR-encoded records, MST nodes, and commit objects that comprise the repository structure. The serialization is prefixed with a header that identifies the root block, typically the repository's commit object.</t>
      <t>Serialized repositories may contain partial repository state, such as when transmitting cryptographic proofs for specific records. In these situations, they may not include unrelated MST nodes or records outside the proof path.</t>
      <t>The block-and-header layout described here is compatible with Content-Addressable archive (CAR) formats such as <xref target="DASL-CAR"/>.</t>
      <section anchor="serialization-header">
        <name>Header Format</name>
        <t>The header is constructed by CBOR-encoding an object with the following fields:</t>
        <ul spacing="normal">
          <li>
            <t><tt>version</tt> (integer, required): Fixed value of <tt>1</tt></t>
          </li>
          <li>
            <t><tt>roots</tt> (array, required): Single-element array containing the hash link of the commit block</t>
          </li>
        </ul>
        <t>The CBOR-encoded header is prefixed with its byte length encoded as an unsigned LEB128 integer as described in Section 5.2.2 of <xref target="WEBASSEMBLY"/>.</t>
      </section>
      <section anchor="serialization-blocks">
        <name>Block Format</name>
        <t>Following the header, each repository block is serialized by concatenating:</t>
        <ol spacing="normal" type="1"><li>
            <t>The combined byte length of the following two components, encoded as an unsigned LEB128 integer</t>
          </li>
          <li>
            <t>The block's content hash, prefixed with <tt>0x01711220</tt> as specified in <xref target="cbor-encoding"/></t>
          </li>
          <li>
            <t>The CBOR-encoded block data</t>
          </li>
        </ol>
        <figure anchor="f-serialization">
          <name>Repo Serialization Layout</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="64" width="600" viewBox="0 0 600 64" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 16,32 L 64,32" fill="none" stroke="black"/>
                <path d="M 136,32 L 184,32" fill="none" stroke="black"/>
                <path d="M 216,32 L 376,32" fill="none" stroke="black"/>
                <path d="M 432,32 L 584,32" fill="none" stroke="black"/>
                <g class="text">
                  <text x="8" y="36">|</text>
                  <text x="100" y="36">Header</text>
                  <text x="192" y="36">|</text>
                  <text x="208" y="36">|</text>
                  <text x="404" y="36">Data</text>
                  <text x="592" y="36">|</text>
                  <text x="16" y="52">[</text>
                  <text x="40" y="52">int</text>
                  <text x="64" y="52">|</text>
                  <text x="100" y="52">header</text>
                  <text x="152" y="52">block</text>
                  <text x="184" y="52">]</text>
                  <text x="216" y="52">[</text>
                  <text x="240" y="52">int</text>
                  <text x="264" y="52">|</text>
                  <text x="292" y="52">hash</text>
                  <text x="320" y="52">|</text>
                  <text x="352" y="52">block</text>
                  <text x="384" y="52">]</text>
                  <text x="400" y="52">[</text>
                  <text x="424" y="52">int</text>
                  <text x="448" y="52">|</text>
                  <text x="476" y="52">hash</text>
                  <text x="504" y="52">|</text>
                  <text x="536" y="52">block</text>
                  <text x="568" y="52">]</text>
                  <text x="584" y="52">…</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
|------- Header -------| |--------------------- Data --------------------|
 [ int | header block ]   [ int | hash | block ] [ int | hash | block ] …
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="serialization-ordering">
        <name>Block Ordering</name>
        <t>Producers SHOULD emit blocks in pre-order traversal of the included repository portion: header, commit object, root MST node, then a recursive depth-first interleaving of subtree nodes and the records they reference.</t>
        <t>Preorder traversal enables streaming verification of repositories, allowing parsers to walk the MST structure and output key-to-record mappings while maintaining minimal MST state in memory. This approach supports efficient stream processing of large repositories without requiring complete buffering of the serialized data.</t>
        <t>Parsers MUST tolerate other block orderings, duplicate occurrences of the same block, and additional unrelated blocks. Specifically:</t>
        <ul spacing="normal">
          <li>
            <t>Duplicate blocks SHOULD be deduplicated rather than treated as an error.</t>
          </li>
          <li>
            <t>Dangling references — for example, hash links pointing to records or blobs that are not present in the serialized data — MAY be present and unresolvable; this is not an error in itself.</t>
          </li>
          <li>
            <t>Unrelated blocks not referenced by the repository structure SHOULD be ignored. Excessive quantities of such blocks MAY be treated as a form of resource abuse; see <xref target="security"/>.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>Repositories constitute untrusted input as account holders have complete control over repository contents and repository hosts control binary encoding. Implementations must handle potential denial of service vectors from both malicious actors and accidental conditions such as corrupted data or implementation bugs.</t>
      <section anchor="security-cbor">
        <name>CBOR Processing limits</name>
        <t>Generic precautions must be followed when processing CBOR data, including enforcement of maximum serialized object size, maximum recursion depth for nested structures, and memory budget limits for deserialized data. While some CBOR implementations include these protections by default, implementations should verify and configure appropriate limits regardless of library defaults.</t>
      </section>
      <section anchor="security-mst">
        <name>MST Structure Attacks</name>
        <t>The efficiency of MST data structures depends on a uniform distribution of key hashes. Since account holders control record keys, they can perform key mining to generate sets of keys with specific layer assignments and sorting characteristics, resulting in inefficient tree structures. Such attacks can cause excessive storage overhead and network amplification during repository transmission.</t>
        <t>To mitigate these attacks, implementations should:</t>
        <ul spacing="normal">
          <li>
            <t>Limit the number of entries per MST node to a statistically reasonable maximum</t>
          </li>
          <li>
            <t>Impose limits on overall repository height</t>
          </li>
          <li>
            <t>Monitor and restrict other structural parameters that could be exploited through sophisticated key mining</t>
          </li>
        </ul>
      </section>
      <section anchor="security-import">
        <name>Repository Import Validation</name>
        <t>When importing repositories, implementations should verify the completeness and integrity of the repository structure. Serialized repositories may contain additional unrelated blocks beyond those required for the repository structure. Care should be taken during storage to avoid resource waste on unreferenced blocks and to prevent potential storage exhaustion attacks.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="CBOR">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC7049">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="October" year="2013"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7049"/>
          <seriesInfo name="DOI" value="10.17487/RFC7049"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="WEBASSEMBLY" target="https://www.w3.org/TR/wasm-core-2">
          <front>
            <title>WebAssembly Core Specification</title>
            <author fullname="Andreas Rossberg">
              <organization/>
            </author>
            <date year="2026" month="March"/>
          </front>
        </reference>
        <reference anchor="SEC2" target="https://www.secg.org/sec2-v2.pdf">
          <front>
            <title>SEC 2: Recommended Elliptic Curve Domain Parameters</title>
            <author>
              <organization>Standards for Efficient Cryptography Group</organization>
            </author>
            <date year="2010" month="January"/>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="MSTPAPER" target="https://inria.hal.science/hal-02303490/document">
          <front>
            <title>Merkle Search Trees: Efficient State-Based CRDTs in Open Networks</title>
            <author fullname="Alex Auvolat">
              <organization/>
            </author>
            <author fullname="François Taïani">
              <organization/>
            </author>
            <date year="2019" month="October"/>
          </front>
        </reference>
        <reference anchor="AT-ARCH">
          <front>
            <title>Authenticated Transfer: Architecture Overview</title>
            <author fullname="Bryan Newbold">
              <organization>Bluesky Social</organization>
            </author>
            <author fullname="Daniel Holmgren">
              <organization>Bluesky Social</organization>
            </author>
            <date year="2026" month="June"/>
          </front>
        </reference>
        <reference anchor="AT-SYNC">
          <front>
            <title>Authenticated Transfer Protocol: Synchronization</title>
            <author fullname="Daniel Holmgren">
              <organization>Bluesky Social</organization>
            </author>
            <author fullname="Bryan Newbold">
              <organization>Bluesky Social</organization>
            </author>
            <date year="2026" month="June"/>
          </front>
        </reference>
        <reference anchor="DASL-CAR" target="https://dasl.ing/car.html">
          <front>
            <title>DASL: Content Addressable aRchives (CAR)</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="DRISL" target="https://dasl.ing/drisl.html">
          <front>
            <title>DRISL — Deterministic Representation for Interoperable Structures &amp; Links</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 369?>

<section anchor="data-model">
      <name>Data Model</name>
      <t>All components of the repository data structure conform to a limited data model and defined encoding rules. CBOR encoding (following the rules in <xref target="cbor-encoding"/>) is used for consistent hashing of data. A JSON encoding is also defined for record data, with lossless mapping between the CBOR and JSON encodings.</t>
      <t>The data model includes the following types:</t>
      <ul spacing="normal">
        <li>
          <t><strong>null values</strong>: represented as 'null' in JSON, and the null special value (major 7) in CBOR</t>
        </li>
        <li>
          <t><strong>boolean values</strong>: represented as 'true' / 'false' in JSON, and special values (major 7) in CBOR</t>
        </li>
        <li>
          <t><strong>integer values</strong>: with signed 64-bit precision. Represented as numbers in JSON, and Integers (majors 0,1) in CBOR</t>
        </li>
        <li>
          <t><strong>string values</strong>: represented as strings in JSON, and UTF-8 Strings (major 3) in CBOR</t>
        </li>
        <li>
          <t><strong>byte string values</strong>: represented with a special object type in JSON (see <xref target="json-encoding"/>) and as a Byte String (major 2) in CBOR</t>
        </li>
        <li>
          <t><strong>content hash links</strong>: as described in <xref target="cid-link"/>, represented as a special object type in JSON, and as a tag 42 byte string in CBOR</t>
        </li>
        <li>
          <t><strong>arrays</strong>: represented as arrays in JSON, and Arrays (major 4) in CBOR</t>
        </li>
        <li>
          <t><strong>objects</strong>: represented as objects in JSON, and Maps (major 5) in CBOR. Object keys must always be strings.</t>
        </li>
      </ul>
      <t>As a best practice to ensure compatibility with programming languages which represent all numbers in floating point by default, integer values should be limited to 53 bits of precision when possible.</t>
      <section anchor="cid-link">
        <name>Content Identifier (CID) Hashes</name>
        <t>References to data objects by hash occur throughout the repository data structure. They also occur between records at the application layer. A consistent way of computing and encoding these hash links, named Content Identifier (CID), is described here. In addition to "CID Links" between objects, it is possible to represent CIDs as regular hash strings (without the "link" data model semantics). It is also possible to represent the hash of arbitrary binary data as a CID.</t>
        <t>Data objects to be referenced are first encoded as CBOR. The encoded bytes are hashed using SHA-256, resulting in a 32-byte binary hash value. The hash bytes are prefixed with the 4-byte prefix value <tt>0x01711220</tt>, resulting in a 36-byte binary CID.</t>
        <t>This fixed prefix value is used for historical reasons, and indicates that the referenced data is CBOR encoded. If using a CID to reference arbitrary binary data, use the fixed 4-byte value <tt>0x01551220</tt> instead.</t>
        <t>When representing a CID link in CBOR, the binary CID value has an additional null byte (0x00) prepended, then the 37 bytes are stored as a byte string using the IANA-registered CBOR Tag 42.</t>
        <t>When representing a CID value as a string, the 36-byte binary CID value is encoded using <xref target="RFC4648"/> lower-case base32, and then the ASCII character 'b' (lower-case B) is prefixed. This results in a 59 character lower-case ASCII string.</t>
        <t>When referencing a CID link in JSON, first compute the string representation as described above. The link is then represented as a JSON object with a single key (<tt>$link</tt>) and the value being the string value. For example:</t>
        <sourcecode type="json"><![CDATA[
{
  "$link": "bafyreidfayvfuwqa7qlnopdjiqrxzs6blmoeu4rujcjtnci5beludirz2a"
}
]]></sourcecode>
      </section>
      <section anchor="cbor-encoding">
        <name>CBOR Encoding</name>
        <t>Repository content requires consistent binary representation across all implementations to ensure identical content hashes and verifiable integrity. All records, MST nodes, and commits must be encoded using Deterministically Encoded CBOR as specified in <xref section="4.2" sectionFormat="of" target="CBOR"/>, with map key ordering following the original specification in <xref section="3.9" sectionFormat="of" target="RFC7049"/> for historical compatibility.</t>
        <t>The encoding rules that apply in this document are:</t>
        <ul spacing="normal">
          <li>
            <t>Integers are encoded in their shortest form</t>
          </li>
          <li>
            <t>All arrays, maps, and strings are encoded with explicit lengths; CBOR's indefinite-length encoding is not used</t>
          </li>
          <li>
            <t>Floating-point values are not used; this includes NaN and infinity values</t>
          </li>
          <li>
            <t>Map keys are sorted using the legacy length-first ordering of <xref section="3.9" sectionFormat="of" target="RFC7049"/></t>
          </li>
          <li>
            <t>Maps MUST NOT contain duplicate keys</t>
          </li>
        </ul>
        <t>The encoding rules described here are compatible with similar deterministic-CBOR profiles such as <xref target="DRISL"/>.</t>
      </section>
      <section anchor="json-encoding">
        <name>JSON Encoding</name>
        <t>The JSON representation of records or other repository data objects does not need to have a deterministic binary encoding.</t>
        <t>Byte strings are represented in JSON using a special object type. The binary data is first string encoded in base64, as described in <xref target="RFC4648"/> Section 4. This variant is not URL-safe, and <tt>=</tt> padding is optional. The special JSON object has a single string key <tt>$bytes</tt>, and the value is the base64 encoded data. For example:</t>
        <sourcecode type="json"><![CDATA[
{
  "$bytes": "nFERjvLLiw9qm45JrqH9QTzyC2Lu1Xb4ne6+sBrCzI0"
}
]]></sourcecode>
        <t>Content hash links (CID links) are represented as special objects as described in <xref target="cid-link"/>.</t>
      </section>
    </section>
    <section anchor="crypto">
      <name>Cryptography</name>
      <t>AT implementations must support both of the following elliptic curves and signature algorithms:</t>
      <ul spacing="normal">
        <li>
          <t>NIST P-256 (also known as secp256r1 or p256) <xref target="SEC2"/></t>
        </li>
        <li>
          <t>secp256k1 (also known as k256) <xref target="SEC2"/></t>
        </li>
      </ul>
      <section anchor="crypto-malleable">
        <name>Signature Malleability</name>
        <t>ECDSA signatures exhibit malleability, allowing transformation into distinct but equally valid signatures without access to the private key or original data. While the security impact is limited, signature malleability could enable broadcast of multiple valid versions of the same repository commit with different hashes, potentially causing consumer confusion.</t>
        <t>To prevent such scenarios, AT requires all ECDSA signatures to be canonicalized in low-S form. Specifically, the <tt>s</tt> component of the signature must satisfy <tt>s ≤ n/2</tt>, where <tt>n</tt> is the order of the curve's base point.</t>
      </section>
      <section anchor="crypto-sig">
        <name>Signature Generation</name>
        <t>To compute a signature over CBOR-encoded bytes in the context of AT:</t>
        <ol spacing="normal" type="1"><li>
            <t>Compute the SHA-256 hash of the encoded bytes. Do not encode the resulting hash bytes.</t>
          </li>
          <li>
            <t>Sign the hash bytes using the current signing key associated with the account</t>
          </li>
          <li>
            <t>Format the signature bytes as a concatenation of the 32-byte <tt>r</tt> and 32-byte <tt>s</tt> values</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="tid">
      <name>Timestamp Identifier (TID)</name>
      <t>Timestamped Identifiers (TIDs) are compact string encodings of 64-bit integers, which can be used as logical clocks or locally-unique sorted identifiers. They are not expected to be globally unique.</t>
      <t>They have the following structure:</t>
      <ul spacing="normal">
        <li>
          <t>64-bit integer with big-endian byte ordering</t>
        </li>
        <li>
          <t>Base32-sortable encoding using characters <tt>234567abcdefghijklmnopqrstuvwxyz</tt></t>
        </li>
        <li>
          <t>Fixed 13-character length with no padding (integer zero encodes as <tt>2222222222222</tt>)</t>
        </li>
      </ul>
      <t>The layout of the 64-bit integer is:</t>
      <ul spacing="normal">
        <li>
          <t>The top bit is always 0</t>
        </li>
        <li>
          <t>The next 53 bits represent microseconds since the UNIX epoch. 53 bits is chosen as the maximum safe integer precision in a 64-bit floating point number, as used by Javascript.</t>
        </li>
        <li>
          <t>The final 10 bits are an arbitrary "clock identifier."</t>
        </li>
      </ul>
      <t>When generating a sequence of TIDs in the same context (eg, for an individual account), care should be taken to ensure that the TID value always increments. If the system clock rolls backwards, or multiple TIDs are generated in the same microsecond, the microsecond component should be incremented past the previous generated value.</t>
    </section>
    <section anchor="nsid">
      <name>Namespaced Identifier (NSID) Syntax</name>
      <t>Collections are identified by a Namespaced Identifier (NSID): an ASCII string in reverse domain-name order followed by an additional name segment. The portion preceding the final segment is the <strong>domain authority</strong>; the final segment is the <strong>name</strong>.</t>
      <t>NSIDs MUST conform to the following syntax:</t>
      <ul spacing="normal">
        <li>
          <t>Overall:
          </t>
          <ul spacing="normal">
            <li>
              <t>MUST contain only ASCII characters</t>
            </li>
            <li>
              <t>MUST separate the domain authority and the name by an ASCII period (<tt>.</tt>)</t>
            </li>
            <li>
              <t>MUST contain at least three segments</t>
            </li>
            <li>
              <t>MUST be at most 317 characters in total length</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Domain authority:
          </t>
          <ul spacing="normal">
            <li>
              <t>Composed of segments separated by ASCII periods (<tt>.</tt>)</t>
            </li>
            <li>
              <t>At most 253 characters in total (including periods), and at least two segments</t>
            </li>
            <li>
              <t>Each segment MUST contain at least 1 and at most 63 characters</t>
            </li>
            <li>
              <t>The allowed characters are ASCII letters (<tt>A-Z</tt>, <tt>a-z</tt>), digits (<tt>0-9</tt>), and hyphens (<tt>-</tt>)</t>
            </li>
            <li>
              <t>Segments MUST NOT start or end with a hyphen</t>
            </li>
            <li>
              <t>The first segment (the top-level domain) MUST NOT start with a digit</t>
            </li>
            <li>
              <t>The domain authority is not case-sensitive and SHOULD be normalized to lowercase</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Name:
          </t>
          <ul spacing="normal">
            <li>
              <t>MUST contain at least 1 and at most 63 characters</t>
            </li>
            <li>
              <t>The allowed characters are ASCII letters and digits only (<tt>A-Z</tt>, <tt>a-z</tt>, <tt>0-9</tt>)</t>
            </li>
            <li>
              <t>Hyphens are not allowed</t>
            </li>
            <li>
              <t>MUST NOT start with a digit</t>
            </li>
            <li>
              <t>Case-sensitive; implementations MUST NOT normalize case</t>
            </li>
          </ul>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAPL2IWoAA7V923IbSZbYO76iApqwSBmAeJPUYu9sLEVRLc7o0hbZnh1v
bBiJqgRQYqEKqqwiCVGamKeN8KvDL37bB4f96H/Y/ZP+Ep9b3gpFtexYKyam
SaAq8+TJc79xPB4Pmrwp9HEyPGmbpS6bPFWNzpLLWpVmruvj5INeVyZvqnoz
HKjZrNbX+PAlfT4c4NML+O44MU02GGRVWqoVLJfVat6Ml1WxWtS6HKtmXLt1
xnt7A9POVrkxeVU2mzU8f352+WpQtqsZbDlo1xksa44H+J/jQVqVRpemhQ9g
772BqrVCGNbrAqGFNUyiygwgUsX4Ml/p5ASeGA5uqvpqUVft+t7TDQdXegOP
ZbCyLlvYK0l+640kYYiHf4Ll83KR/IQv4OcrlRfwuWrWf5frZj6p6gV+vMib
ZTuDL/DD8c0CkLF+TPgxw8FAwTYVnDkZw6NJMm+LgjH4UpW5LpLXgkL6FlaE
Tz/TmY+TF0WrzdUmuajSXBX0gGYYMnr372b8wI2eTW43n7e3eFFvVJm80zez
qsj+rzaY4Zvd9QdlVa/g1WvC4+mL9x+Ael6d/vD86Dn8Dj892zt6fmx/4I8O
n//w9Nj+wB8dPT364dj+AB/96ezFycXF2dsXb/58TDAIxf5Jz06M0atZsUlO
q1onF2ud5nMhCXqS6Cd5q+p0mRzsHTzl11W90M1xsmyatTl+/Pjm5mZyc4i3
9fjyw+MbZVbjFJYbH9DT7n7o31j+G2LxpMyA3EzyoTIGyHcBj1ycnR5EsA7h
k+QAmSmtVitdZkBSZ0WRr4G+ktO2vtbJywpQWyY/qxpWbXRthsER/qDKVtUb
OMT+3r2HMDpd0DHgh4Px9cFknc2/eYb4ti8aYCJVZyaZV3VyNgdM5sAAyWm9
WTfVolbr5YaJfTDIy3l4128vLn8++fnsQ3zmt7q+KuBaNOH/stbA0sG6sF+j
xy+UAVycfnh5aRI4/vu1RopskHcjDLxPmwqwixh43ouBvKxzNVmqYmJw/VQ/
hp/HeweHe4dHz/ceg2RqAfHN915qoW+Tk/a6KlTzjcdegVj41/9V5Sa5VP/6
vwGZ8MzJ5fjkw+nrGBf3SdcTQE3e6LRpgYDfX+v6Otc34blZkJbMoyhHVfDG
dx5mm8+/i9f7F+uTS9+xHGDl4s/vTr8HK8nPddVUaQVy5mJTpsu6sutuIybU
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
IKj/D0KBaGEHegAA

-->

</rfc>
