<?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' ?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     category="std"
     docName="draft-vandemeent-iddrop-00"
     ipr="trust200902"
     submissionType="IETF"
     consensus="true"
     version="3">

  <front>
    <title abbrev="IDDrop">IDDrop: Identity Drop and Acceptance Protocol</title>
    <seriesInfo name="Internet-Draft"
                value="draft-vandemeent-iddrop-00"/>

    <author fullname="Jasper van de Meent" initials="J."
            surname="van de Meent">
      <organization>Humotica</organization>
      <address>
        <postal><country>Netherlands</country></postal>
        <email>info@humotica.com</email>
        <uri>https://humotica.com/</uri>
      </address>
    </author>
    <date year="2026" month="May" day="17"/>
    <area>Security</area>
    <workgroup>Internet Engineering Task Force</workgroup>

    <keyword>identity transfer</keyword>
    <keyword>iddrop</keyword>
    <keyword>ains</keyword>
    <keyword>jis</keyword>
    <keyword>causal binding</keyword>
    <keyword>receiver-bound carrier</keyword>

    <abstract>
      <t>This document specifies IDDrop, an identity-transfer protocol
      for moving identity claims, actor claims, and receiver-bound claim
      bundles across human-facing and machine-facing environments.</t>
      <t>IDDrop defines two complementary operating modes: offer-first,
      intended for proximity and human-in-the-loop workflows, and
      request-first, intended for autonomous systems, daemon-to-daemon
      exchange, and policy-driven machine identity transfer.</t>
      <t>IDDrop does not treat filenames or user-visible extensions as
      identity truth. Instead, it binds identity transfer to sealed
      carrier truth, semantic classification, actor provenance,
      receiver targeting, and causal validation. This document profiles
      the generic TIBET TAT handoff model for trustworthy identity
      transfer.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Identity transfer in distributed systems is frequently
      underspecified. Systems often know how to transport bytes, but not
      how to safely transfer the meaning of an identity claim.</t>
      <t>Existing encrypted transport systems provide confidentiality
      and integrity for byte carriage, but they do not by themselves
      answer whether the transferred object is an identity claim at all,
      whether the claim was expected or solicited, whether the visible
      name matches sealed semantics, whether the claim is bound to a
      known actor registry, or whether the response belongs to a known
      causal request chain.</t>
      <t>IDDrop fills this gap by defining a protocol for identity drop,
      acceptance, and validation across both human and system lanes.</t>
      <t>This document is intended as an identity-transfer profile over
      the more general TIBET TAT transfer substrate and within the
      broader Continuity Envelope Protocol (CEP) model.</t>
      <t>The key design principle is simple: identity MUST NOT arrive as
      a surprise commitment.</t>
    </section>

    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL",
      "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT
      RECOMMENDED", "MAY", and "OPTIONAL" 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>
      <dl>
        <dt>IDDrop</dt>
        <dd>The protocol specified in this document for identity offer,
        request, response, validation, and acceptance.</dd>
        <dt>Offer</dt>
        <dd>A temporary, visible, non-binding identity availability
        signal.</dd>
        <dt>Request</dt>
        <dd>An explicit solicitation by a receiver for a specific claim
        or identity response.</dd>
        <dt>Response</dt>
        <dd>A sealed and receiver-bound identity-carrying answer to
        either an accepted offer or a request.</dd>
        <dt>Acceptance</dt>
        <dd>An explicit receiver-side act indicating consent to proceed
        from discovery into sealed identity transfer.</dd>
        <dt>Materialization</dt>
        <dd>The act of committing a validated identity claim into a
        receiver runtime, registry, or operator-visible state.</dd>
        <dt>Carrier Truth</dt>
        <dd>The byte-level truth established by sealed carrier
        properties such as magic bytes, authenticated encryption,
        signatures, and receiver binding.</dd>
        <dt>Semantic Class</dt>
        <dd>The declared object class of a transfer unit, such as
        identity, code, document, command, or receipt.</dd>
        <dt>Causal Binding</dt>
        <dd>The linkage between a request, offer acceptance, and later
        response, such that the receiver can verify that the identity
        answer belongs to a known prior step.</dd>
      </dl>
    </section>

    <section anchor="overview">
      <name>Protocol Overview</name>
      <t>IDDrop operates across three conceptual planes: Discovery
      Plane, Sealed Transfer Plane, and Commitment Plane. Systems
      implementing IDDrop MUST NOT collapse these planes into a single
      implicit step.</t>
      <t>IDDrop defines two operating modes:</t>
      <ul>
        <li>offer-first, for human, proximity, NFC, QR, and local
        discovery workflows</li>
        <li>request-first, for daemon, automation, cap-bus, and
        machine-to-machine workflows</li>
      </ul>
    </section>

    <section anchor="offer-first">
      <name>Offer-First Mode</name>
      <t>Offer-first mode is intended for NFC handoff, QR handoff,
      local discovery, AirDrop-like experiences, and home-agent or
      human-supervised device exchange.</t>
      <t>The offer-first flow is:</t>
      <ol>
        <li>sender enables a temporary offer</li>
        <li>receiver discovers offer metadata</li>
        <li>receiver chooses accept, challenge, or reject</li>
        <li>if accepted, sender performs sealed transfer to receiver</li>
        <li>receiver validates the claim</li>
        <li>receiver MAY materialize the claim</li>
      </ol>
      <t>An offer SHOULD contain at least `offer_id`, `expires_at`,
      `sender_pubkey`, `claimed_aint`, `claim_class`,
      `semantic_type`, `display_name`, `preview_hash`, and
      `ssm_class`.</t>
      <t>Offer metadata MUST NOT be treated as commitment truth.</t>
    </section>

    <section anchor="request-first">
      <name>Request-First Mode</name>
      <t>Request-first mode is intended for daemon-to-daemon exchange,
      cap-bus identity requests, relay and automation lanes, and
      policy-driven system exchange.</t>
      <t>The request-first flow is:</t>
      <ol>
        <li>receiver emits a request</li>
        <li>request carries `request_id` and `challenge_nonce`</li>
        <li>sender creates a receiver-bound response</li>
        <li>receiver validates request/response linkage</li>
        <li>receiver MAY materialize the claim</li>
      </ol>
      <t>A request SHOULD contain at least `request_id`,
      `challenge_nonce`, `requested_claim_type`, `receiver_pubkey`,
      `requested_aint`, `causal_parent`, and `expires_at`.</t>
    </section>

    <section anchor="validation">
      <name>Validation Rules</name>
      <t>The following six validation rules are REQUIRED.</t>
      <ol>
        <li>
          <t><strong>Carrier Truth</strong>: the receiver MUST verify carrier
          truth before trusting object bytes.</t>
        </li>
        <li>
          <t><strong>Semantic Class</strong>: the receiver MUST determine the
          semantic class of the object before commitment. Byte validity
          alone is insufficient.</t>
        </li>
        <li>
          <t><strong>Receiver Binding</strong>: the receiver MUST verify that the
          response is bound to the intended receiver. A response not
          addressed to the receiver MUST be rejected.</t>
        </li>
        <li>
          <t><strong>Claim Provenance</strong>: the receiver MUST validate the
          claim against a provenance source such as AINS, JIS, or an
          equivalent actor registry.</t>
        </li>
        <li>
          <t><strong>Causal Binding</strong>: in request-first mode, the receiver
          MUST validate that the response belongs to the prior request
          by checking `request_id`, `challenge_nonce`, and any causal
          parent references. In offer-first mode, the receiver MUST
          validate that acceptance and later transfer belong to the same
          offer session.</t>
        </li>
        <li>
          <t><strong>Commitment Discipline</strong>: the receiver MUST NOT
          materialize or register an identity claim before Rules 1
          through 5 have succeeded.</t>
        </li>
      </ol>
    </section>

    <section anchor="semantic-classification">
      <name>Semantic Classification</name>
      <t>Implementations SHOULD distinguish at least the following
      semantic classes: identity, code, document, command, and
      receipt.</t>
      <t>Implementations MUST NOT use filename extension alone as
      semantic truth.</t>
    </section>

    <section anchor="security">
      <name>Security Considerations</name>
      <t>IDDrop forbids surprise identity commitment. Offer-first mode
      is safe only if offers remain temporary and non-binding until
      explicit acceptance and later validation. Request-first mode
      establishes intent and causal context, but the receiver MUST
      still validate the response and its provenance.</t>
      <t>Implementations MUST treat user-visible names and extensions as
      advisory surfaces only. A man-in-the-middle or misleading sender
      MAY present a visually similar claim name. Provenance validation
      and receiver binding are REQUIRED to defeat such confusion.</t>
      <t>Offers and requests SHOULD carry expiries. Responses SHOULD be
      bound to active requests or active acceptances to limit replay.</t>
    </section>

    <section anchor="transport">
      <name>Transport and Carrier Bindings</name>
      <t>IDDrop is transport-agnostic. It MAY be carried over NFC,
      QR-assisted local handoff, local network discovery, message
      relay, and cap-bus or command-substrate lanes.</t>
      <t>When a sealed carrier is used, implementations SHOULD use a
      receiver-bound confidential carrier format rather than raw opaque
      payload carriage.</t>
      <section anchor="relationship-to-cep-and-tat">
        <name>Relationship to CEP and TAT</name>
        <t>IDDrop is not intended to redefine generic handoff
        mechanics.</t>
        <t>CEP defines the umbrella continuity messaging model, TAT
        defines the generic consent-bound handoff and transfer flow,
        and IDDrop defines the identity-transfer profile over that
        flow.</t>
        <t>When a TAT implementation is available, IDDrop SHOULD use it
        as the preferred transfer and anchoring substrate.</t>
      </section>
    </section>

    <section anchor="examples">
      <name>Examples</name>
      <section anchor="human-nfc-offer">
        <name>Human NFC Offer</name>
        <t>A user enables identity offer mode for 60 seconds on a
        device. Another device taps via NFC, sees the claim metadata
        and sender fingerprint, and explicitly accepts. The sender then
        transfers a receiver-bound sealed response, which the receiver
        validates against AINS/JIS before materialization.</t>
      </section>
      <section anchor="system-request">
        <name>System Request</name>
        <t>A daemon requests an identity claim for a specific actor and
        embeds a nonce and request identifier. The sender responds with
        a sealed, receiver-bound response referencing the original
        request. The receiver validates the request linkage and
        provenance before continuing the workflow.</t>
      </section>
    </section>
  </middle>

  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author initials="S." surname="Bradner" fullname="Scott Bradner"/>
          <date month="March" year="1997"/>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
      </reference>
      <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author initials="B." surname="Leiba" fullname="Barry Leiba"/>
          <date month="May" year="2017"/>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
      </reference>
    </references>

    <references>
      <name>Informative References</name>
      <reference anchor="AINS">
        <front>
          <title>AINS Discovery</title>
          <author initials="J." surname="van de Meent" fullname="Jasper van de Meent"/>
          <date year="2026"/>
        </front>
      </reference>
      <reference anchor="JIS">
        <front>
          <title>JIS Identity</title>
          <author initials="J." surname="van de Meent" fullname="Jasper van de Meent"/>
          <date year="2026"/>
        </front>
      </reference>
      <reference anchor="SSM">
        <front>
          <title>TIBET Semantic Surface Manifest</title>
          <author initials="J." surname="van de Meent" fullname="Jasper van de Meent"/>
          <date year="2026"/>
        </front>
      </reference>
      <reference anchor="CEP">
        <front>
          <title>Continuity Envelope Protocol</title>
          <author initials="J." surname="van de Meent" fullname="Jasper van de Meent"/>
          <date year="2026"/>
        </front>
      </reference>
      <reference anchor="TAT">
        <front>
          <title>TIBET TAT: Touch-and-Transfer Protocol</title>
          <author initials="J." surname="van de Meent" fullname="Jasper van de Meent"/>
          <date year="2026"/>
        </front>
      </reference>
      <reference anchor="UPIP">
        <front>
          <title>UPIP: Universal Process Integrity Protocol</title>
          <author initials="J." surname="van de Meent" fullname="Jasper van de Meent"/>
          <date year="2026"/>
        </front>
      </reference>
    </references>

    <section anchor="appendix-json">
      <name>Minimal JSON Shapes</name>
      <sourcecode type="json"><![CDATA[
{
  "offer": {
    "offer_id": "offer-123",
    "expires_at": "2026-05-17T10:00:00Z",
    "sender_pubkey": "hex...",
    "claimed_aint": "jasper.aint",
    "semantic_type": "identity"
  },
  "request": {
    "request_id": "req-456",
    "challenge_nonce": "nonce-789",
    "receiver_pubkey": "hex...",
    "requested_claim_type": "identity"
  },
  "response": {
    "request_id": "req-456",
    "sender_pubkey": "hex...",
    "receiver_pubkey": "hex...",
    "claimed_aint": "jasper.aint",
    "semantic_type": "identity",
    "provenance_ref": "ains:..."
  }
}
]]></sourcecode>
    </section>
  </back>
</rfc>
