<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.34 (Ruby 4.0.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-rodriguez-h2h-presence-attestation-00" category="exp" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="P2P Presence Verification">Peer-to-Peer Presence Verification for Relationship-Bound Authorization</title>

    <author fullname="Gamil Rodriguez">
      <organization>Rolab</organization>
      <address>
        <email>gamil@rolabtech.com</email>
      </address>
    </author>

    <date year="2026" month="April" day="16"/>

    
    
    <keyword>peer-to-peer authentication</keyword> <keyword>relationship-bound identity</keyword> <keyword>presence attestation</keyword> <keyword>COSE</keyword> <keyword>CBOR</keyword>

    <abstract>


<?line 98?>

<t>Existing protocols authenticate users to services, negotiate session
keys, or protect message content from eavesdroppers.  None verify
that a remote party is the same individual whose key was accepted
during an earlier in-person exchange and has just now physically
authorized a signature on the device holding that key.  Advances in synthetic media make it increasingly difficult to
trust unauthenticated audio, video, or text for sensitive
authorizations.</t>

<t>This document defines transport-independent CBOR- and COSE-based
objects that chain every remote interaction back to a bilateral
in-person contact exchange -- not a certificate authority, identity
provider, or key server.  The protocol specifies Key Binding Objects,
short-lived Session Credentials, replay-protected Signed Messages, a
Presence Challenge requiring fresh platform-mediated user
verification, and a Relationship Fingerprint for out-of-band key
confirmation.  It does not claim to prove biological humanness, legal
identity, or voluntary action.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        The latest revision of this draft can be found at <eref target="https://github.com/rolabtech/h2h"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-rodriguez-h2h-presence-attestation/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/rolabtech/h2h"/>.</t>
    </note>


  </front>

  <middle>


<?line 118?>

<section anchor="introduction"><name>Introduction</name>

<section anchor="problem-statement"><name>Problem Statement</name>

<t>Existing protocols authenticate users to services (WebAuthn
<xref target="WebAuthn"/>, FIDO2 <xref target="FIDO2"/>), services to users (TLS
<xref target="RFC8446"/>), or protect message content from eavesdroppers
(Signal Protocol <xref target="Signal"/>, MLS <xref target="RFC9420"/>).  However, some
deployments require a narrower but different property: one peer
wishes to verify that the remote party is continuing a relationship
previously anchored by an in-person exchange, and that the remote
party has recently produced a local authorization event on the
device bound to that relationship.</t>

<t>Examples include high-trust messaging, approval workflows, operator
handoffs, and other interactions where account-level authentication
alone is insufficient.</t>

<t>Recent advances in synthetic media and automated impersonation
make unauthenticated audio, video, or text unreliable for
sensitive approvals.  This document does not detect synthetic
media or prove biological humanness.  Instead, it specifies
interoperable signed objects and verification rules that bind
sensitive authorizations to a prior relationship ceremony and to a
fresh, platform-mediated local user-verification event.</t>

</section>
<section anchor="design-goal"><name>Design Goal</name>

<t>This protocol does not prove a universally valid human identity.
It lets a relying peer verify all of the following:</t>

<t><list style="numbers" type="1">
  <t>A public key was previously accepted during an in-person exchange.</t>
  <t>The corresponding private key remains non-exportable and device-
bound according to the local platform's key store semantics.</t>
  <t>The remote device recently produced a signature using that key,
or a key delegated by it, following a local user-verification
event reported by the platform.</t>
</list></t>

</section>
<section anchor="overview"><name>Overview</name>

<t>The protocol operates in four logical phases:</t>

<figure><artwork><![CDATA[
Phase 1         Phase 2         Phase 3         Phase 4
CONTACT         KEY BINDING     SESSION         DATA
EXCHANGE        PRESENTATION    DELEGATION      TRANSFER

+----------+    +----------+    +----------+    +----------+
| Meet in  |    | Connect  |    | IK signs |    | SSK signs|
| person,  |--->| remotely,|--->| ephemeral|--->| app      |
| exchange |    | present  |    | SSK via  |    | units    |
| Contact  |    | Key      |    | Session  |    |          |
| Objects  |    | Binding  |    |Credential|    |          |
+----------+    +----------+    +----------+    +----------+
 [user-verify]   [verify chain]  [user-verify]   [automatic]

At any point: Presence Challenge --> fresh IK signature
]]></artwork></figure>

<t>Phases 1 and 3 require platform-mediated user verification (e.g.,
biometric or PIN) because they use the hardware-bound Identity Key.
Phase 4 is automatic because the SSK is a software key delegated
during Phase 3 -- no user interaction is needed for signing.</t>

<t><list style="numbers" type="1">
  <t><strong>Contact Exchange</strong>: Two peers meet in person and exchange
Contact Objects -- signed structures containing their Identity
Keys, Transport Keys, and addressing information.</t>
  <t><strong>Key Binding Presentation</strong>: When connecting remotely, peers
present Key Binding Objects and verify the trust chain: stored
IK (from the in-person ceremony) = IK in binding = key that
signed TK = TK of the transport peer.</t>
  <t><strong>Session Delegation</strong>: Peers create Session Credentials (IK
signs an ephemeral SSK) for efficient signing without repeated
user-verification prompts.</t>
  <t><strong>Data Transfer</strong>: Peers exchange Signed Messages (SSK signs
application-defined units).  Every signed unit chains back to
the in-person ceremony.</t>
</list></t>

<t>At any point, either peer <bcp14>MAY</bcp14> issue a Presence Challenge requesting
a fresh IK signature that requires a local user-verification event
on the challenged device.</t>

</section>
<section anchor="scope"><name>Scope</name>

<t>This document specifies:</t>

<t><list style="symbols">
  <t>The Contact Object format and verification rules (<xref target="contact-object"/>)</t>
  <t>The Key Binding Object format and verification rules (<xref target="key-binding-object"/>)</t>
  <t>The Session Credential format and verification rules
(<xref target="session-credential"/>)</t>
  <t>The Signed Message format and verification rules
(<xref target="signed-message"/>)</t>
  <t>The Presence Challenge and Presence Response formats
(<xref target="presence-challenge"/>)</t>
  <t>A Relationship Fingerprint computation (<xref target="relationship-fingerprint"/>)</t>
  <t>Transport Key rotation guidance (<xref target="tk-rotation"/>)</t>
  <t>Protocol constants for object types, assurance values, and transport
key algorithms</t>
</list></t>

<t>This document does not specify:</t>

<t><list style="symbols">
  <t>Proof-of-personhood</t>
  <t>Legal, civil, or government identity</t>
  <t>Transport protocol selection or configuration</t>
  <t>End-to-end encryption</t>
  <t>Multi-party relationships</t>
  <t>Revocation or recovery</t>
  <t>Application-layer trust policy</t>
  <t>UX requirements beyond protocol-visible semantics</t>
</list></t>

</section>
<section anchor="reuse-and-interoperability-scope"><name>Reuse and Interoperability Scope</name>

<t>The objects and verification procedures in this document are intended
for reuse across multiple peer-to-peer applications and transports
that require relationship-bound authorization.  This document does not
define a single application protocol or user experience.  Instead, it
standardizes compact object formats and verification rules that can be
embedded into messaging, approval, or rendezvous systems.</t>

</section>
<section anchor="trust-model"><name>Trust Model Summary</name>

<t>This protocol relies on two external trust assumptions.</t>

<t>First, peers are assumed to have completed an earlier in-person
ceremony and to have accepted each other's Contact Objects during
that ceremony.</t>

<t>Second, relying parties trust the local platform's key store and
user-verification semantics.  A valid signature under the stored
identity key indicates only that the platform permitted use of that
key under its configured policy.  It does not, by itself, prove
biological humanness, voluntary action, or legal identity.</t>

</section>
<section anchor="e2e-flow"><name>End-to-End Message Flow</name>

<t>The following ladder diagram shows a complete post-contact session
between two peers, Alice and Bob, who have already exchanged Contact
Objects in person.  Phases 2 through 4 occur each time the peers
reconnect remotely.</t>

<figure><artwork><![CDATA[
 Alice                                               Bob
   |                                                   |
   |  ============ Phase 2: Key Binding ============   |
   |                                                   |
   |  --- KBO(IK_A signs TK_A) ----------------------->|
   |                                                   |
   |<---------------------- KBO(IK_B signs TK_B) ---   |
   |                                                   |
   |  Both sides verify:                               |
   |    - IK in KBO matches stored IK from ceremony    |
   |    - TK in KBO matches transport peer key         |
   |    - KBO signature valid, not expired             |
   |                                                   |
   |  ========= Phase 3: Session Delegation ========   |
   |                                                   |
   |  Alice generates ephemeral SSK_A                  |
   |  IK_A signs Session Credential(SSK_A)             |
   |    [user-verification: biometric/PIN]             |
   |                                                   |
   |  --- SessionCredential(SSK_A_pub) --------------->|
   |                                                   |
   |          Bob generates ephemeral SSK_B            |
   |          IK_B signs Session Credential(SSK_B)     |
   |            [user-verification: biometric/PIN]     |
   |                                                   |
   |<-------------- SessionCredential(SSK_B_pub) ---   |
   |                                                   |
   |  Both sides verify:                               |
   |    - SC signed by stored IK                       |
   |    - peer_ik_hash matches own IK                  |
   |    - SC not expired                               |
   |    - Cache SSK_pub for message verification       |
   |                                                   |
   |  =========== Phase 4: Data Transfer ===========   |
   |                                                   |
   |  --- SignedMessage(id=1, SSK_A signs content) --->|
   |                                                   |
   |      Bob verifies:                                |
   |        - SSK_A signature valid                    |
   |        - message_id > last seen (replay check)    |
   |        - Trust chain: SSK_A -> SC -> IK_A         |
   |                         -> ceremony               |
   |                                                   |
   |<--- SignedMessage(id=1, SSK_B signs content) ---  |
   |                                                   |
   |  --- SignedMessage(id=2, SSK_A signs content) --->|
   |                                                   |
   |<--- SignedMessage(id=2, SSK_B signs content) ---  |
   |                                                   |
   |  ====== Optional: Presence Challenge ==========   |
   |                                                   |
   |  --- PRESENCE_CHALLENGE {nonce} ----------------->|
   |                                                   |
   |          Bob's device prompts biometric/PIN       |
   |          IK_B signs nonce + channel_binding       |
   |                                                   |
   |<--------------- PRESENCE_RESPONSE {nonce, sig} ---|
   |                                                   |
   |  Alice verifies:                                  |
   |    - sig valid against stored IK_B                |
   |    - nonce matches                                |
   |    - assurance >= required                        |
   |                                                   |
   |  ====== Session Credential Renewal ============   |
   |                                                   |
   |  (When SC expires, peer creates a new SC          |
   |   requiring fresh user-verification; old SSK      |
   |   is discarded from memory)                       |
   |                                                   |
]]></artwork></figure>

<t>The diagram above is informative.  Normative requirements for each
object are specified in their respective sections (<xref target="contact-object"/>,
<xref target="key-binding-object"/>, <xref target="session-credential"/>, <xref target="signed-message"/>,
<xref target="presence-challenge"/>).</t>

</section>
</section>
<section anchor="conventions-and-definitions"><name>Conventions and Definitions</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

<section anchor="terminology"><name>Terminology</name>

<dl>
  <dt>Identity Key (IK):</dt>
  <dd>
    <t>A long-term P-256 ECDSA key pair <xref target="FIPS186-5"/> generated in a
platform key store.  The private key is non-exportable.  Use of the
private key requires local user verification according to platform
policy.</t>
  </dd>
  <dt>Transport Key (TK):</dt>
  <dd>
    <t>A transport-facing key pair used by a peer-to-peer transport or
rendezvous mechanism.  The TK is bound to the IK by a Key Binding
Object.  The algorithm is determined by the transport layer and is
not constrained by this document.</t>
  </dd>
  <dt>Session Signing Key (SSK):</dt>
  <dd>
    <t>A short-lived P-256 ECDSA key pair generated in software, delegated
by the IK for signing application-defined units.  The SSK private key <bcp14>MUST</bcp14>
be held in memory only and <bcp14>MUST NOT</bcp14> be persisted to disk.  Not all
application data requires SSK signing; see <xref target="applicability"/> for
guidance on when Signed Messages add value beyond transport
authentication.</t>
  </dd>
  <dt>Platform Key Store:</dt>
  <dd>
    <t>A platform component that generates, stores, and uses cryptographic
keys without exposing private key material to application software.
Examples include secure enclaves, secure elements, TPMs, and
trusted execution environments.</t>
  </dd>
  <dt>Contact Object:</dt>
  <dd>
    <t>A COSE_Sign1 object exchanged during an in-person ceremony that
conveys the sender's Identity Key, Transport Key, and related
metadata.</t>
  </dd>
  <dt>Key Binding Object (KBO):</dt>
  <dd>
    <t>A COSE_Sign1 object that binds a Transport Key to a previously
exchanged Identity Key.</t>
  </dd>
  <dt>Session Credential:</dt>
  <dd>
    <t>A COSE_Sign1 object delegating signing authority from the IK to a
short-lived SSK.  Analogous to TLS Delegated Credentials
<xref target="RFC9345"/>.</t>
  </dd>
  <dt>Signed Message:</dt>
  <dd>
    <t>A COSE_Sign1 object wrapping application content, signed by the
SSK and verifiable via the Session Credential trust chain.</t>
  </dd>
  <dt>Presence Response:</dt>
  <dd>
    <t>A COSE_Sign1 object produced in response to a challenge and bound
to a connection context.</t>
  </dd>
  <dt>Assurance Value:</dt>
  <dd>
    <t>A protocol-visible value reported by the signer describing the type
of local verification event used for a signing operation.  Assurance
values are claims reported by the platform, not independently
verifiable facts.</t>
  </dd>
</dl>

</section>
<section anchor="assurance-values"><name>Assurance Values</name>

<t>This document defines three assurance values.  Higher numeric values
indicate stronger assurance:</t>

<texttable>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c>1</c>
      <c>CREDENTIAL</c>
      <c>The platform reported knowledge-based verification (PIN, password, pattern) for this signing operation.</c>
      <c>2</c>
      <c>BIOMETRIC</c>
      <c>The platform reported biometric verification (face, fingerprint, iris) for this signing operation.</c>
      <c>3</c>
      <c>HARDWARE_VERIFIED</c>
      <c>The signing operation includes hardware attestation evidence from the platform's root of trust, proving the key is hardware-bound and the verification event is genuine.  See <xref target="hardware-attestation"/>.</c>
</texttable>

<t>A response with assurance value N satisfies a requirement for
assurance value M if and only if N &gt;= M.  Values 4 and above are
reserved for future extensions; the N &gt;= M rule ensures forward
compatibility.</t>

<t>Values 1 and 2 are application-reported claims; a compromised
application could misrepresent them.  Value 3 includes
cryptographic evidence from the platform's hardware root of trust
that cannot be forged by a compromised application (see
<xref target="hardware-attestation"/>).  A verifier <bcp14>MUST</bcp14> treat assurance values as local policy inputs;
they do not imply equivalent security across platforms.  Relying parties <bcp14>MUST</bcp14> be informed of the
assurance value and <bcp14>SHOULD</bcp14> make it visible to the user.</t>

</section>
<section anchor="hardware-attestation"><name>Hardware Attestation</name>

<t>When the assurance value is set to 3 (HARDWARE_VERIFIED), the
signed object <bcp14>MUST</bcp14> include hardware attestation evidence in an
additional field (attestation_evidence).  This evidence is a
platform-specific certificate chain or attestation object that
allows the verifier to confirm:</t>

<t><list style="numbers" type="1">
  <t>The Identity Key was generated inside a genuine hardware
security module (Secure Enclave, StrongBox, TPM).</t>
  <t>The Identity Key is non-exportable, as enforced by the
hardware -- not merely claimed by the application.</t>
  <t>The key is configured to require user verification (biometric
or credential) before each signing operation.</t>
</list></t>

<t>Implementations running on platforms that support hardware key
attestation (e.g., Android Key Attestation, Apple Secure Enclave
key attestation) <bcp14>SHOULD</bcp14> include attestation evidence in Contact
Objects exchanged during the in-person ceremony.  This allows the
receiving peer to verify the Identity Key's hardware properties at
the moment of initial trust establishment.</t>

<t>The attestation evidence is opaque to this specification.  Its
format and verification procedure are determined by the platform
vendor.  A verifier that does not recognize or cannot verify the
attestation evidence <bcp14>MUST</bcp14> treat the assurance value as 2
(BIOMETRIC) rather than 3.</t>

<t>Including hardware attestation introduces a trust dependency on the
platform vendor's certificate chain for the specific claim that the
key store properties are genuine.  It does not replace the in-person
ceremony as the trust anchor for identity.</t>

</section>
<section anchor="cbor-and-cose-conventions"><name>CBOR and COSE Conventions</name>

<t>All protocol payloads in this document are encoded as CBOR maps
<xref target="RFC8949"/> with integer keys.  All signed objects are encoded as
COSE_Sign1 <xref target="RFC9052"/> with algorithm ES256 (ECDSA w/ SHA-256
using P-256, COSE algorithm identifier -7).</t>

<t>Implementations <bcp14>MUST</bcp14> use deterministic CBOR encoding as defined in
Section 4.2 of <xref target="RFC8949"/> (Core Deterministic Encoding
Requirements).  This ensures that the same payload always produces
the same byte sequence, which is critical for signature
verification.</t>

<t>Each payload includes a structure_type discriminator at key 0.  A
verifier <bcp14>MUST</bcp14> check this value before processing any other payload
semantics.  This prevents type confusion attacks where a signed
structure of one type is substituted for another.</t>

<t>Identity Key public keys are encoded as COSE_Key structures
<xref target="RFC9053"/> with kty=2 (EC2) and crv=1 (P-256).</t>

</section>
</section>
<section anchor="identity-and-binding-model"><name>Identity and Binding Model</name>

<section anchor="two-key-model"><name>Two-Key Model</name>

<t>The protocol uses a long-term Identity Key and a rotatable Transport
Key per peer.</t>

<figure><artwork><![CDATA[
+--------------------------------------------------+
|  Identity Key (IK)                               |
|  Algorithm: P-256 ECDSA                          |
|  Storage: Platform key store (non-exportable)    |
|  Access: User-verification-gated                 |
|  Lifetime: Permanent (until device loss/reset)   |
|  Purpose: Relationship anchor and trust root     |
+--------------------------------------------------+
         |
         | signs (Key Binding Object)
         v
+--------------------------------------------------+
|  Transport Key (TK)                              |
|  Algorithm: Transport-determined                 |
|  Storage: Software                               |
|  Access: No per-operation user verification      |
|  Lifetime: Rotatable                             |
|  Purpose: Peer-to-peer transport identity        |
+--------------------------------------------------+
]]></artwork></figure>

<t>The Identity Key is the relationship anchor.  It is exchanged during
the in-person ceremony and later used to verify continuity.  Its
private key never leaves the platform key store, and every use
requires a local user-verification event.</t>

<t>The Transport Key identifies the peer at the transport layer.
Transport operations (handshakes, session resumption) require a
key that the transport library can use without per-operation user
verification.  A Key Binding Object (<xref target="key-binding-object"/>) links
the TK to the IK, extending the trust anchor to the transport
layer.</t>

</section>
<section anchor="identity-key-requirements"><name>Identity Key Requirements</name>

<t>An implementation claiming conformance for IK generation <bcp14>MUST</bcp14>
ensure:</t>

<t><list style="numbers" type="1">
  <t>Non-exportable: No interface <bcp14>SHALL</bcp14> allow extraction of the
private key material, including backup, sync, or migration
interfaces.</t>
  <t>User-verification-gated: The platform <bcp14>MUST</bcp14> enforce local user
verification before each IK signing operation, or before each
operation within a bounded and explicitly documented platform
policy window.  The platform <bcp14>MUST NOT</bcp14> cache verification
results indefinitely.</t>
  <t>Enrollment-sensitive: If the device's biometric enrollment data
changes (e.g., a new fingerprint is added), the platform <bcp14>SHOULD</bcp14>
invalidate the Identity Key.  This prevents an attacker who
gains temporary physical access from adding their biometric and
subsequently producing valid BIOMETRIC-level signatures.</t>
  <t>The platform <bcp14>MUST</bcp14> expose sufficient information for the
implementation to label the resulting signature with one of
the defined assurance values.</t>
  <t>Hardware attestation: On platforms that support hardware key
attestation (e.g., Android Key Attestation, Apple Secure Enclave
key attestation), implementations <bcp14>SHOULD</bcp14> obtain attestation
evidence for the Identity Key at generation time and include it
in Contact Objects (see <xref target="hardware-attestation"/>).</t>
</list></t>

<t>This document does not require any specific hardware architecture.
It intentionally abstracts over secure enclaves, secure elements,
TPMs, TEEs, and comparable mechanisms.  However, platforms that can
provide hardware attestation evidence offer a stronger assurance
level (HARDWARE_VERIFIED) that is independently verifiable by the
receiving peer.</t>

</section>
<section anchor="tk-rotation"><name>Transport Key Rotation</name>

<t>The Transport Key <bcp14>MAY</bcp14> be rotated to limit network-level correlation.
Rotation comprises:</t>

<t><list style="numbers" type="1">
  <t>Generate a new Transport Key pair.</t>
  <t>Sign a new Key Binding Object binding the IK to the new TK
(<xref target="key-binding-object"/>).</t>
  <t>Distribute the new KBO to connected peers.</t>
  <t>Discard old TK private material.</t>
</list></t>

<t>Peers that receive a new KBO for a known IK <bcp14>MUST</bcp14> verify the KBO
signature.  If valid, the peer updates its stored TK for that
contact.</t>

<section anchor="offline-rotation"><name>Offline Rotation</name>

<t>When the Transport Key is rotated while a contact is offline, the
contact will be unable to locate the key holder on the network
using the previous Transport Key.  Implementations <bcp14>MUST</bcp14> address
this using one or more of the following mechanisms:</t>

<t><strong>Stable addressing (<bcp14>RECOMMENDED</bcp14>)</strong>: The addressing field in the
Contact Object (<xref target="contact-object"/>, field 8) <bcp14>SHOULD</bcp14> contain
addressing information that survives Transport Key rotation (e.g.,
a relay server address or discovery service endpoint).  When a
contact reconnects using the stable address, the key holder
presents the current KBO containing the new Transport Key.</t>

<t><strong>Mailbox deposit</strong>: If the implementation supports a mailbox or
store-and-forward mechanism, the key holder <bcp14>SHOULD</bcp14> deposit the
new KBO at their mailbox.  Offline contacts retrieve the updated
KBO upon reconnection.</t>

<t><strong>Overlap period</strong>: The key holder <bcp14>MAY</bcp14> continue to accept
connections on the old Transport Key for a limited time after
rotation (<bcp14>RECOMMENDED</bcp14>: no more than 24 hours).  Connections on
the old Transport Key <bcp14>SHOULD</bcp14> be used only to deliver the new KBO
and redirect the contact.  After the overlap period, the old
Transport Key <bcp14>MUST</bcp14> be discarded.</t>

<t>Implementations <bcp14>MUST NOT</bcp14> rotate the Transport Key without a
mechanism for offline contacts to discover the new key.</t>

</section>
</section>
</section>
<section anchor="contact-object"><name>Contact Object</name>

<section anchor="purpose"><name>Purpose</name>

<t>The Contact Object is exchanged during an in-person ceremony and
anchors the long-term relationship.</t>

</section>
<section anchor="format"><name>Format</name>

<t>The Contact Object is a COSE_Sign1 structure:</t>

<figure><artwork><![CDATA[
ContactObject = COSE_Sign1(
  protected: { 1 (alg): -7 (ES256) },
  unprotected: {},
  payload: Contact_payload
)
]]></artwork></figure>

<t>Contact_payload is a CBOR map:</t>

<texttable>
      <ttcol align='right'>Key</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>CBOR Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0</c>
      <c>structure_type</c>
      <c>uint</c>
      <c><bcp14>MUST</bcp14> be 0x02 (CONTACT_OBJECT)</c>
      <c>1</c>
      <c>version</c>
      <c>uint</c>
      <c><bcp14>MUST</bcp14> be 1</c>
      <c>2</c>
      <c>ik_public</c>
      <c>COSE_Key</c>
      <c>Sender Identity Key (P-256)</c>
      <c>3</c>
      <c>tk_public</c>
      <c>bstr</c>
      <c>Sender Transport Key public bytes</c>
      <c>4</c>
      <c>tk_algorithm</c>
      <c>int</c>
      <c>Algorithm identifier for tk_public</c>
      <c>5</c>
      <c>display_name</c>
      <c>tstr</c>
      <c>UTF-8, max 64 bytes</c>
      <c>6</c>
      <c>timestamp</c>
      <c>uint</c>
      <c>Unix time in milliseconds</c>
      <c>7</c>
      <c>nonce</c>
      <c>bstr</c>
      <c>16 bytes, cryptographically random</c>
      <c>8</c>
      <c>addressing</c>
      <c>bstr</c>
      <c>Transport-specific, max 1024 bytes</c>
      <c>9</c>
      <c>assurance</c>
      <c>uint</c>
      <c>Assurance value for signing</c>
      <c>10</c>
      <c>attestation_evidence</c>
      <c>bstr</c>
      <c><bcp14>OPTIONAL</bcp14>. Hardware attestation evidence (platform-specific). Present when assurance is 3 (HARDWARE_VERIFIED).</c>
</texttable>

<t>The tk_public field <bcp14>MUST</bcp14> contain the raw public key bytes in the
canonical encoding for the algorithm identified by tk_algorithm.
See the transport key algorithm table (<xref target="iana"/>) for defined
encodings.</t>

<t>The addressing field is opaque to this specification.  It <bcp14>MUST</bcp14> carry
only the minimum information needed for rendezvous or re-contact in
the embedding application.  Implementations <bcp14>SHOULD</bcp14> prefer
application-scoped or short-lived addressing values where practical
and <bcp14>SHOULD</bcp14> avoid embedding identifiers that are broader or more stable
than operationally required.</t>

</section>
<section anchor="creation"><name>Creation</name>

<t>The sender <bcp14>MUST</bcp14>:</t>

<t><list style="numbers" type="1">
  <t>Generate a 16-byte nonce (field 7) using a cryptographically
secure random number generator (CSPRNG).</t>
  <t>Set timestamp (field 6) to the current time.</t>
  <t>Populate all other fields.</t>
  <t>If the platform supports hardware key attestation,
obtain attestation evidence for the Identity Key and include
it in field 10 (attestation_evidence).  Set assurance (field 9)
to 3 (HARDWARE_VERIFIED).  Otherwise, set assurance (field 9)
to the value the platform will report for the signing event
(1 for CREDENTIAL, 2 for BIOMETRIC).</t>
  <t>Serialize Contact_payload as deterministic CBOR.</t>
  <t>Sign using COSE_Sign1 with the Identity Key.  This operation
triggers a local user-verification event.</t>
</list></t>

</section>
<section anchor="contact-verification"><name>Verification</name>

<t>Upon receiving a Contact Object during the in-person ceremony, the
receiver <bcp14>MUST</bcp14> perform the following checks.  Checks are ordered so
that inexpensive validations precede cryptographic signature
verification:</t>

<t><list style="numbers" type="1">
  <t>Decode the COSE_Sign1 structure.  If decoding fails, reject.</t>
  <t>Extract the Contact_payload.</t>
  <t>Verify that structure_type (field 0) is 0x02 (CONTACT_OBJECT).
If not, reject.</t>
  <t>Verify that version (field 1) is supported.  If unsupported,
reject.</t>
  <t>Verify that timestamp (field 6) is within a 5-minute window of
the receiver's current time: abs(now - timestamp) &lt;= 300000
milliseconds.  If outside the window, reject.</t>
  <t>Verify that nonce (field 7) has not been seen in a previous
Contact Object within the current 5-minute window.  If
duplicate, reject.</t>
  <t>Verify the COSE_Sign1 signature using ik_public (field 2).  If
signature verification fails, reject.</t>
  <t>If attestation_evidence (field 10) is present and assurance
(field 9) is 3 (HARDWARE_VERIFIED), verify the attestation
evidence against the platform vendor's certificate chain.  If
the attestation evidence is present but verification fails,
reject.  If the verifier cannot process the attestation format,
it <bcp14>MUST</bcp14> treat the assurance value as 2 (BIOMETRIC) rather than
3 and <bcp14>MAY</bcp14> accept the Contact Object at the reduced assurance
level.</t>
  <t>If all checks pass and the exchange is bidirectional (the local
device has also transmitted its own Contact Object to this
peer), store the contact: ik_public, tk_public, tk_algorithm,
display_name, addressing, assurance value, attestation evidence
(if present), and the timestamp of the exchange.</t>
</list></t>

<t>A verifier <bcp14>MAY</bcp14> compute and compare a Relationship Fingerprint
(<xref target="relationship-fingerprint"/>) as an additional defense if the
exchange path includes intermediaries.</t>

</section>
<section anchor="ceremony-requirement"><name>Ceremony Requirement</name>

<t>The Contact Object exchange <bcp14>MUST</bcp14> be bidirectional: both parties
<bcp14>MUST</bcp14> exchange and verify Contact Objects before either party stores
the other as a verified contact.  An implementation <bcp14>MUST NOT</bcp14> store
a contact from a unidirectional exchange.</t>

<t>The proximity mechanism <bcp14>MUST</bcp14> satisfy the following requirements:</t>

<t><list style="numbers" type="1">
  <t>Both parties are physically co-present during the exchange.</t>
  <t>The mechanism can transfer at least 512 bytes of binary data.</t>
  <t>The mechanism provides a human-verifiable indication that the
exchange is occurring with the intended party (e.g., visual
confirmation, physical proximity constraint).</t>
  <t>For mechanisms that do not provide visual confirmation of the
peer (e.g., wireless discovery), the implementation <bcp14>MUST</bcp14> require
explicit user confirmation of the peer's display_name before
storing the contact.</t>
</list></t>

<t>The choice of proximity mechanism is an implementation decision.</t>

</section>
<section anchor="size-considerations"><name>Size Considerations</name>

<t>A Contact Object without attestation evidence typically serializes
to 300-500 bytes; with attestation evidence (field 10) it may
reach 1-2 KB.  Implementations <bcp14>SHOULD</bcp14> ensure their proximity
mechanism supports at least 512 bytes, or at least 4,096 bytes
when attestation is included.  Bandwidth-limited mechanisms (e.g.,
QR codes) <bcp14>MAY</bcp14> omit attestation evidence from the initial exchange
and deliver it over the transport connection after rendezvous.</t>

</section>
<section anchor="clock-skew"><name>Clock Skew</name>

<t>The 5-minute timestamp window accommodates reasonable clock skew
between devices.  Implementations <bcp14>SHOULD</bcp14> use network time
synchronization (NTP) when available but <bcp14>MUST NOT</bcp14> reject payloads
solely due to minor clock differences within the window.</t>

</section>
<section anchor="replay-protection"><name>Replay Protection</name>

<t>The nonce field prevents replay of a captured Contact Object within
its validity window.  After the 5-minute window expires, the
timestamp check prevents replay.  Implementations <bcp14>MUST</bcp14> maintain a
set of seen nonces for at least 5 minutes and <bcp14>SHOULD</bcp14> discard them
after 10 minutes.</t>

</section>
</section>
<section anchor="key-binding-object"><name>Key Binding Object</name>

<section anchor="purpose-1"><name>Purpose</name>

<t>The Key Binding Object proves continuity between the stored IK and
the currently offered TK.</t>

</section>
<section anchor="format-1"><name>Format</name>

<t>The Key Binding Object is a COSE_Sign1 structure:</t>

<figure><artwork><![CDATA[
KeyBindingObject = COSE_Sign1(
  protected: { 1 (alg): -7 (ES256) },
  unprotected: {},
  payload: KBO_payload
)
]]></artwork></figure>

<t>KBO_payload is a CBOR map:</t>

<texttable>
      <ttcol align='right'>Key</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>CBOR Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0</c>
      <c>structure_type</c>
      <c>uint</c>
      <c><bcp14>MUST</bcp14> be 0x01 (KEY_BINDING)</c>
      <c>1</c>
      <c>version</c>
      <c>uint</c>
      <c><bcp14>MUST</bcp14> be 1</c>
      <c>2</c>
      <c>ik_public</c>
      <c>COSE_Key</c>
      <c>Identity Key (P-256)</c>
      <c>3</c>
      <c>tk_public</c>
      <c>bstr</c>
      <c>Transport Key public bytes</c>
      <c>4</c>
      <c>tk_algorithm</c>
      <c>int</c>
      <c>Algorithm identifier</c>
      <c>5</c>
      <c>timestamp</c>
      <c>uint</c>
      <c>Unix time in milliseconds</c>
      <c>6</c>
      <c>expiry</c>
      <c>uint</c>
      <c>Unix time in milliseconds</c>
      <c>7</c>
      <c>assurance</c>
      <c>uint</c>
      <c>Assurance value for signing</c>
</texttable>

<t>The tk_public and tk_algorithm fields follow the same encoding
rules as in the Contact Object (<xref target="contact-object"/>).</t>

</section>
<section anchor="creation-1"><name>Creation</name>

<t>The signer <bcp14>MUST</bcp14>:</t>

<t><list style="numbers" type="1">
  <t>Populate all fields of KBO_payload, including assurance
(field 7) based on the key's configured authentication policy.</t>
  <t>Set expiry (field 6) to no more than 30 days (2,592,000,000
milliseconds) after timestamp (field 5).</t>
  <t>Serialize KBO_payload as deterministic CBOR.</t>
  <t>Sign using COSE_Sign1 with the Identity Key.  This operation
triggers a local user-verification event.</t>
</list></t>

</section>
<section anchor="verification"><name>Verification</name>

<t>The verifier <bcp14>MUST</bcp14> perform the following checks.  Checks are ordered
so that inexpensive validations precede cryptographic signature
verification:</t>

<t><list style="numbers" type="1">
  <t>Decode the COSE_Sign1 structure.  If decoding fails, reject.</t>
  <t>Verify that structure_type (field 0) is 0x01 (KEY_BINDING).
If not, reject.</t>
  <t>Verify that version (field 1) is supported.  If unsupported,
reject.</t>
  <t>Verify that the current time is &gt;= timestamp (field 5) and
&lt; expiry (field 6).  If outside the window, reject.</t>
  <t>Verify that expiry (field 6) minus timestamp (field 5) does not
exceed 30 days (2,592,000,000 milliseconds).  If it does, reject.</t>
  <t>Extract ik_public (field 2) from the payload.</t>
  <t>Verify that ik_public matches the expected Identity Key for this
contact (from a prior contact exchange, <xref target="contact-object"/>).
If no match, reject.</t>
  <t>Verify that tk_public (field 3) matches the Transport Key of
the transport peer as observed during the transport handshake.
If no match, reject.</t>
  <t>Verify the COSE_Sign1 signature using ik_public.  If signature
verification fails, reject.</t>
</list></t>

<t>If ANY check fails, the verifier <bcp14>MUST</bcp14> reject the KBO and terminate
the connection.</t>

</section>
<section anchor="renewal"><name>Renewal</name>

<t>Implementations <bcp14>MUST</bcp14> re-sign the KBO before its expiry.  Renewal
requires a fresh user-verification event, providing periodic
evidence of continued platform-authorized use.</t>

</section>
</section>
<section anchor="session-credential"><name>Session Credential</name>

<section anchor="purpose-2"><name>Purpose</name>

<t>The Session Credential allows efficient signing of application-
defined units without requiring a fresh IK operation for each unit.
Not all data types require this signing; embedding applications
determine which content warrants Signed Message protection (see
<xref target="applicability"/>).  The delegation pattern is analogous to TLS
Delegated Credentials
<xref target="RFC9345"/>: a long-term trust anchor (the IK) signs a short-lived
operational credential (the Session Credential), which in turn
authenticates individual operations (messages, file transfers).</t>

<figure><artwork><![CDATA[
Stored IK_public (from in-person ceremony)
  |
  v  verifies
Session Credential (COSE_Sign1 signed by IK)
  |  contains SSK_public
  v  verifies
Signed Message (COSE_Sign1 signed by SSK)
]]></artwork></figure>

</section>
<section anchor="format-2"><name>Format</name>

<t>The Session Credential is a COSE_Sign1 structure:</t>

<figure><artwork><![CDATA[
SessionCredential = COSE_Sign1(
  protected: { 1 (alg): -7 (ES256) },
  unprotected: {},
  payload: SC_payload
)
]]></artwork></figure>

<t>SC_payload is a CBOR map:</t>

<texttable>
      <ttcol align='right'>Key</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>CBOR Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0</c>
      <c>structure_type</c>
      <c>uint</c>
      <c><bcp14>MUST</bcp14> be 0x03 (SESSION_CREDENTIAL)</c>
      <c>1</c>
      <c>version</c>
      <c>uint</c>
      <c><bcp14>MUST</bcp14> be 1</c>
      <c>2</c>
      <c>ssk_public</c>
      <c>COSE_Key</c>
      <c>Ephemeral P-256 public key</c>
      <c>3</c>
      <c>ik_public</c>
      <c>COSE_Key</c>
      <c>Issuing Identity Key (reference)</c>
      <c>4</c>
      <c>peer_ik_hash</c>
      <c>bstr</c>
      <c>SHA-256 of peer's IK_public</c>
      <c>5</c>
      <c>timestamp</c>
      <c>uint</c>
      <c>Unix time in milliseconds</c>
      <c>6</c>
      <c>expiry</c>
      <c>uint</c>
      <c>Unix time in milliseconds</c>
      <c>7</c>
      <c>assurance</c>
      <c>uint</c>
      <c>Assurance value</c>
</texttable>

</section>
<section anchor="creation-2"><name>Creation</name>

<t>The signer <bcp14>MUST</bcp14>:</t>

<t><list style="numbers" type="1">
  <t>Generate an ephemeral P-256 key pair (the Session Signing Key).
The SSK is generated in software; it is not required to reside
in the platform key store.</t>
  <t>Compute peer_ik_hash as SHA-256 of the peer's IK_public encoded
as an uncompressed P-256 point (65 bytes starting with 0x04).
This encoding <bcp14>MUST</bcp14> match the encoding used in the Relationship
Fingerprint computation (<xref target="relationship-fingerprint"/>).</t>
  <t>Set expiry to a value after timestamp.  Implementations <bcp14>MUST</bcp14>
set a finite expiry (unlimited Session Credentials are
prohibited).  A <bcp14>RECOMMENDED</bcp14> default is 1 hour.  Applications
with different risk profiles <bcp14>MAY</bcp14> choose shorter durations
(e.g., 5 minutes for financial transactions) or longer
durations (e.g., 8 hours for a workday session).</t>
  <t>Set assurance (field 7) based on the key's configured
authentication policy.</t>
  <t>Serialize SC_payload as deterministic CBOR.</t>
  <t>Sign using COSE_Sign1 with the Identity Key.  This operation
triggers a local user-verification event.</t>
</list></t>

<t>The SSK private key <bcp14>MUST</bcp14> be held in memory only and <bcp14>MUST NOT</bcp14> be
persisted to disk.  It <bcp14>MUST</bcp14> be discarded when the session expires
or the connection closes.  Implementations <bcp14>SHOULD</bcp14> store the SSK
in a memory region that is not swappable to disk (e.g., mlock on
Linux).</t>

</section>
<section anchor="verification-1"><name>Verification</name>

<t>The verifier <bcp14>MUST</bcp14>:</t>

<t><list style="numbers" type="1">
  <t>Decode the COSE_Sign1 structure.  If decoding fails, reject.</t>
  <t>Verify that structure_type (field 0) is 0x03
(SESSION_CREDENTIAL).  If not, reject.</t>
  <t>Verify that version (field 1) is supported.  If unsupported,
reject.</t>
  <t>Verify that the current time is between timestamp (field 5)
and expiry (field 6).  If outside the window, reject.</t>
  <t>Verify that ik_public (field 3) matches the stored Identity
Key for the peer.  If no match, reject.</t>
  <t>Verify that peer_ik_hash (field 4) matches SHA-256 of the
verifier's own IK_public (confirms the credential is scoped
to this relationship).  If no match, reject.</t>
  <t>Verify the COSE_Sign1 signature using the stored IK_public.
If signature verification fails, reject.</t>
</list></t>

<t>The Session Credential is typically verified once per session
(when first received) and the ssk_public is cached for subsequent
message verifications.</t>

</section>
<section anchor="credential-lifecycle"><name>Credential Lifecycle</name>

<t><list style="symbols">
  <t>A Session Credential <bcp14>SHOULD</bcp14> be created at connection
establishment, immediately after KBO exchange.</t>
  <t>The credential <bcp14>MUST</bcp14> have a finite expiry.  The maximum duration
is application-defined.  <bcp14>RECOMMENDED</bcp14> default: 1 hour.</t>
  <t>When a credential expires, the sender <bcp14>MUST</bcp14> create a new one,
which requires a fresh user-verification event.</t>
  <t>If the connection closes, the SSK private material <bcp14>MUST</bcp14> be
discarded immediately.</t>
  <t>A peer <bcp14>MAY</bcp14> reject an expired Session Credential and request
that the sender re-authenticate by issuing a Presence Challenge
(<xref target="presence-challenge"/>).</t>
</list></t>

</section>
<section anchor="security-note"><name>Security Note</name>

<t>Use of the SSK is weaker than direct use of the IK because the SSK
is a software key.  See <xref target="ssk-compromise"/> for a detailed analysis
of SSK compromise risks and mitigations.  Applications <bcp14>SHOULD</bcp14>
require direct IK-based Presence Responses for high-risk actions
such as key changes or privileged approvals.</t>

</section>
</section>
<section anchor="signed-message"><name>Signed Message</name>

<section anchor="applicability"><name>Applicability</name>

<t>Not all application data requires Signed Message wrapping.  When
peers have exchanged and verified Key Binding Objects
(<xref target="key-binding-object"/>), the transport peer's identity is bound
to the stored IK from the ceremony, and data in transit is
authenticated by the KBO-verified connection.  Signed Messages are useful when content must be verifiable
independent of the transport session -- for example, stored messages, forwarded content, or
operations requiring non-repudiation.  Real-time streams (audio,
video) over an authenticated direct connection typically do not
require per-unit signatures; the KBO-verified transport and
Presence Challenges provide sufficient assurance.</t>

<t>Embedding applications define which data types require Signed
Messages and which rely solely on transport authentication.</t>

<t>When Signed Messages are stored for later verification,
implementations <bcp14>MUST</bcp14> also persist the Session Credential that
authorized the signing key.  The full verification chain -- stored
IK (from the ceremony), Session Credential (IK signed SSK), and
Signed Message (SSK signed the content) -- is required to verify
a message after the transport session has ended.</t>

</section>
<section anchor="format-3"><name>Format</name>

<t>Application-defined units authenticated by a Session Credential are
wrapped in a COSE_Sign1 structure signed by the SSK.  A unit <bcp14>MAY</bcp14> be
a text message, a video keyframe, a file, a batch of events, or any
other application-meaningful boundary.  The signing granularity is
determined by the embedding application's security requirements:</t>

<figure><artwork><![CDATA[
SignedMessage = COSE_Sign1(
  protected: { 1 (alg): -7 (ES256) },
  unprotected: {},
  payload: SM_payload
)
]]></artwork></figure>

<t>SM_payload is a CBOR map:</t>

<texttable>
      <ttcol align='right'>Key</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>CBOR Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0</c>
      <c>structure_type</c>
      <c>uint</c>
      <c><bcp14>MUST</bcp14> be 0x04 (SIGNED_MESSAGE)</c>
      <c>1</c>
      <c>message_id</c>
      <c>uint</c>
      <c>See message ordering below</c>
      <c>2</c>
      <c>timestamp</c>
      <c>uint</c>
      <c>Unix time in milliseconds</c>
      <c>3</c>
      <c>content_type</c>
      <c>uint</c>
      <c>Application-defined (e.g., 1=text)</c>
      <c>4</c>
      <c>content</c>
      <c>bstr/tstr</c>
      <c>Message content</c>
</texttable>

<t>The SSK signing operation does NOT require a user-verification
event (it uses the software-held ephemeral key).  This enables
signing application units without user interaction.</t>

</section>
<section anchor="message-ordering-and-replay-protection"><name>Message Ordering and Replay Protection</name>

<t>The message_id field <bcp14>MUST</bcp14> be unique among all Signed Messages
produced by the same sender within the scope of a single Session
Credential.  The sender <bcp14>MUST</bcp14> assign message_id values as a strictly
increasing sequence starting from 1.</t>

<section anchor="reliable-transports"><name>Reliable Transports</name>

<t>When the underlying transport guarantees in-order delivery (e.g.,
TCP, QUIC streams), the receiver <bcp14>MUST</bcp14> reject any Signed Message
whose message_id is less than or equal to the highest message_id
previously accepted from the same Session Credential.</t>

</section>
<section anchor="unreliable-transports"><name>Unreliable Transports</name>

<t>When the underlying transport does not guarantee ordering (e.g.,
UDP, DTLS, WebRTC data channels in unordered mode), messages <bcp14>MAY</bcp14>
arrive out of order or be lost in transit.  In this case, the
receiver <bcp14>MUST</bcp14> maintain a sliding replay window of at least 64
entries and apply the following rules.  Implementations <bcp14>SHOULD</bcp14>
size the window to accommodate the expected maximum reordering
delay of the transport (e.g., a larger window for high-throughput
video streams than for infrequent text messages):</t>

<t><list style="numbers" type="1">
  <t>If message_id &gt; highest_seen: accept, update highest_seen.</t>
  <t>If message_id &lt; highest_seen - window_size: reject (too old).</t>
  <t>If message_id is within the window and has NOT been seen:
accept, mark as seen.</t>
  <t>If message_id is within the window and HAS been seen:
reject (replay).</t>
</list></t>

<t>This approach follows the anti-replay mechanism defined in
Section 4.5.1 of DTLS 1.3 <xref target="RFC9147"/>.</t>

</section>
</section>
<section anchor="replay-state"><name>Replay State</name>

<t>Verifiers <bcp14>MUST</bcp14> maintain replay state scoped to the validated Session
Credential.  At minimum, a verifier <bcp14>MUST</bcp14> remember the highest
accepted message_id (and, for unreliable transports, the sliding
window bitmap) for each active Session Credential until that
credential expires or is otherwise discarded.</t>

<t>If replay state is lost, the verifier <bcp14>MUST</bcp14> treat subsequently
received Signed Messages under the affected Session Credential as
potentially replayed.  In that case, the verifier <bcp14>MUST</bcp14> either reject
those messages or require a new Session Credential, or a direct
Identity-Key-based re-synchronization step, before accepting further
messages in that session.</t>

</section>
<section anchor="verification-2"><name>Verification</name>

<t>The full trust chain from a signed message back to the in-person
ceremony:</t>

<figure><artwork><![CDATA[
 In-person ceremony
       |
       v
 Stored IK_public -----> verifies Session Credential signature
                                |
                                v
                          SSK_public (extracted from SC)
                                |
                                v
                          verifies Signed Message signature
                                |
                                v
                          Message content is authenticated
                          as originating from the peer whose
                          IK was accepted in person
]]></artwork></figure>

<t>To verify a Signed Message, the verifier <bcp14>MUST</bcp14>:</t>

<t><list style="numbers" type="1">
  <t>Obtain the sender's Session Credential for this connection.</t>
  <t>Verify the Session Credential (see <xref target="session-credential"/>).</t>
  <t>Extract ssk_public (field 2) from the Session Credential.</t>
  <t>Decode the Signed Message COSE_Sign1 structure.  If decoding
fails, reject.</t>
  <t>Verify that structure_type (field 0) is 0x04 (SIGNED_MESSAGE).
If not, reject.</t>
  <t>Verify that timestamp (field 2) is &gt;= the Session Credential's
timestamp and &lt;= the Session Credential's expiry (plus any
locally configured grace period; <bcp14>RECOMMENDED</bcp14>: no more than 60
seconds past expiry).  If outside the window, reject.</t>
  <t>Apply the replay check for message_id (field 1) according to
the transport type: strict monotonic for reliable transports,
or sliding window for unreliable transports (see
<xref target="message-ordering-and-replay-protection"/>).  If the check
fails, reject.</t>
  <t>Verify the COSE_Sign1 signature using ssk_public.  If signature
verification fails, reject.</t>
</list></t>

<t>If any check fails, the verifier <bcp14>MUST</bcp14> reject the message.</t>

</section>
</section>
<section anchor="presence-challenge"><name>Presence Challenge and Presence Response</name>

<section anchor="purpose-3"><name>Purpose</name>

<t>A Presence Challenge requests fresh evidence that the peer can
perform an IK operation on the current connection.</t>

<t>After a connection is established and authenticated via KBO exchange,
either peer <bcp14>MAY</bcp14> issue a Presence Challenge to request on-demand
evidence that the remote device has recently produced a locally
authorized signature.</t>

<figure><artwork><![CDATA[
 Alice (challenger)                        Bob (responder)
   |                                          |
   |  1. Generate 32-byte random nonce        |
   |                                          |
   |  --- PRESENCE_CHALLENGE {nonce, req} --> |
   |                                          |
   |          2. Bob's device prompts         |
   |             local user verification      |
   |                                          |
   |          3. IK signs nonce + binding     |
   |             [user-verification event]    |
   |                                          |
   |  <-- PRESENCE_RESPONSE {nonce, sig} ---  |
   |                                          |
   |  4. Alice verifies:                      |
   |     - sig valid against Bob's IK         |
   |     - nonce matches                      |
   |     - channel_binding matches            |
   |     - assurance >= required              |
   |                                          |
   |  Result: Bob's platform authorized       |
   |  an IK operation on this connection      |
   |                                          |
]]></artwork></figure>

</section>
<section anchor="challenge-format"><name>Challenge Format</name>

<t>The Presence Challenge is an unsigned CBOR map:</t>

<texttable>
      <ttcol align='right'>Key</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>CBOR Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0</c>
      <c>structure_type</c>
      <c>uint</c>
      <c><bcp14>MUST</bcp14> be 0x10 (PRESENCE_CHALLENGE)</c>
      <c>1</c>
      <c>challenge_nonce</c>
      <c>bstr</c>
      <c>32 bytes, cryptographically random</c>
      <c>2</c>
      <c>required_assurance</c>
      <c>uint</c>
      <c>Minimum required assurance value</c>
</texttable>

<t>The challenger <bcp14>MUST</bcp14> generate challenge_nonce using a
cryptographically secure random number generator.</t>

<t>The required_assurance field allows the challenger to demand a
minimum assurance level.  If set to 2 (BIOMETRIC), the responder
<bcp14>MUST</bcp14> authenticate via biometric or equivalent; a CREDENTIAL-level
response to a BIOMETRIC-required challenge <bcp14>MUST</bcp14> be rejected by the
challenger.  If set to 1 (CREDENTIAL), any assurance level is
acceptable.  If set to 3 (HARDWARE_VERIFIED), the response <bcp14>MUST</bcp14>
include hardware attestation evidence (see <xref target="hardware-attestation"/>).</t>

</section>
<section anchor="response-format"><name>Response Format</name>

<t>The Presence Response is a COSE_Sign1 structure:</t>

<figure><artwork><![CDATA[
PresenceResponse = COSE_Sign1(
  protected: { 1 (alg): -7 (ES256) },
  unprotected: {},
  payload: PR_payload
)
]]></artwork></figure>

<t>PR_payload is a CBOR map:</t>

<texttable>
      <ttcol align='right'>Key</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>CBOR Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0</c>
      <c>structure_type</c>
      <c>uint</c>
      <c><bcp14>MUST</bcp14> be 0x11 (PRESENCE_RESPONSE)</c>
      <c>1</c>
      <c>challenge_nonce</c>
      <c>bstr</c>
      <c>Echoed from challenge</c>
      <c>2</c>
      <c>assurance</c>
      <c>uint</c>
      <c>Reported assurance value</c>
      <c>3</c>
      <c>channel_binding</c>
      <c>bstr</c>
      <c>SHA-256 of connection context</c>
      <c>4</c>
      <c>timestamp</c>
      <c>uint</c>
      <c>Unix time in milliseconds</c>
      <c>5</c>
      <c>attestation_evidence</c>
      <c>bstr</c>
      <c><bcp14>OPTIONAL</bcp14>. Hardware attestation evidence. Present when assurance is 3 (HARDWARE_VERIFIED).</c>
</texttable>

<t>The responder signs the response with their Identity Key.  This
signing operation triggers a local user-verification event.</t>

<t>The channel_binding field (key 3) <bcp14>MUST</bcp14> contain the SHA-256 hash of
a connection-specific value agreed upon during the transport
handshake.  This prevents relay attacks where an attacker forwards
a challenge to the victim's device and relays the response to a
different connection.</t>

<t>The mandatory-to-implement channel binding computation is:</t>

<figure><artwork><![CDATA[
cb_input = sort_lexicographic(TK_local, TK_remote)
channel_binding = SHA-256(cb_input[0] || cb_input[1])
]]></artwork></figure>

<t>where TK_local and TK_remote are the raw Transport Key public
bytes (as carried in tk_public fields) and sort_lexicographic
orders them by byte-wise lexicographic comparison.</t>

<t>Transport profiles <bcp14>MAY</bcp14> define alternative channel binding
computations (e.g., a transport-provided session identifier or TLS
Exporter value).  Both peers <bcp14>MUST</bcp14> agree on the computation method
before issuing or responding to challenges.  When no transport
profile is in effect, implementations <bcp14>MUST</bcp14> use the mandatory-to-
implement computation above.</t>

</section>
<section anchor="verification-3"><name>Verification</name>

<t>The challenger <bcp14>MUST</bcp14>:</t>

<t><list style="numbers" type="1">
  <t>Decode the COSE_Sign1 structure.  If decoding fails, reject.</t>
  <t>Verify that structure_type (field 0) is 0x11
(PRESENCE_RESPONSE).  If not, reject.</t>
  <t>Verify that challenge_nonce (field 1) matches the nonce sent.
If no match, reject.</t>
  <t>Verify that timestamp (field 4) is within 60 seconds of the
challenge issuance time.  If outside the window, reject.</t>
  <t>Verify that channel_binding (field 3) matches the expected
SHA-256 hash of the current connection context.  If no match,
reject.</t>
  <t>Verify that assurance (field 2) is &gt;= required_assurance from
the challenge.  If not, reject.</t>
  <t>If assurance is 3 (HARDWARE_VERIFIED), verify the
attestation_evidence (field 5) against the platform vendor's
certificate chain.  If attestation evidence is present but
verification fails, reject.  If the verifier cannot process
the attestation format, it <bcp14>MUST</bcp14> treat the assurance value as 2
(BIOMETRIC) rather than 3.</t>
  <t>Verify the COSE_Sign1 signature using the stored Identity Key
for the peer.  If signature verification fails, reject.</t>
</list></t>

</section>
<section anchor="timing"><name>Timing</name>

<t><list style="symbols">
  <t>Implementations <bcp14>SHOULD NOT</bcp14> issue challenges more frequently than
once per 300 seconds (5 minutes).</t>
  <t>The responder <bcp14>MUST</bcp14> produce a response within 60 seconds.</t>
  <t>If no valid response is received within 60 seconds, the
challenger <bcp14>SHOULD</bcp14> inform the user.</t>
  <t>Failure to respond <bcp14>MUST NOT</bcp14> automatically terminate the
connection.</t>
</list></t>

<t>A successful Presence Response demonstrates only that the peer's
platform authorized an IK operation on the current connection.
See <xref target="trust-model"/> for scope limitations.</t>

</section>
</section>
<section anchor="relationship-fingerprint"><name>Relationship Fingerprint</name>

<section anchor="overview-1"><name>Overview</name>

<t>The Relationship Fingerprint enables two peers to verify out-of-band
that they hold each other's correct Identity Keys, detecting
man-in-the-middle key substitution.</t>

<t>Fingerprint verification is <bcp14>OPTIONAL</bcp14>.  Its necessity depends on the
contact exchange mechanism:</t>

<t><list style="symbols">
  <t>When Contact Objects are exchanged via a physical proximity
mechanism where both parties can visually confirm the exchange,
man-in-the-middle substitution is not feasible and fingerprint
verification <bcp14>MAY</bcp14> be skipped.</t>
  <t>When the exchange mechanism involves an intermediary (e.g., a code
displayed on one device and photographed by another, or a wireless
exchange without visual confirmation of the peer), fingerprint
verification <bcp14>SHOULD</bcp14> be performed even when both parties are
physically co-present.</t>
</list></t>

<t>This specification does not support Contact Object exchange over
channels that do not guarantee physical proximity (e.g., server
relay, email, or messaging application).  Such usage violates the
Ceremony Requirement (<xref target="contact-object"/>) and falls outside this
document's trust model; any security claims in such deployments
derive from the relay channel's own authentication, not from this
protocol.</t>

</section>
<section anchor="computation"><name>Computation</name>

<t>Given two Identity Key public keys, IK_A and IK_B, encoded as
uncompressed P-256 points (65 bytes each, starting with 0x04):</t>

<figure><artwork><![CDATA[
sorted = sort_lexicographic(IK_A, IK_B)
prefix = "H2H-RelationshipFingerprint-v1"
digest = SHA-256(prefix || sorted[0] || sorted[1])
]]></artwork></figure>

<t>SHA-256 is as defined in <xref target="FIPS180-4"/>.</t>

<t>This document defines only the digest computation.  Any human-
readable rendering is application-defined.</t>

<t>Implementations <bcp14>MAY</bcp14> encode the digest for human comparison (e.g.,
as grouped numeric blocks, hexadecimal, base32, or an emoji
sequence mapped from digest bits).  The security of any such
encoding depends on the number of digest bits it exposes.
Renderings that expose fewer than 30 bits of the digest offer only
weak resistance against man-in-the-middle substitution and <bcp14>SHOULD
NOT</bcp14> be used for security-critical comparisons.  See
<xref target="relationship-fingerprint-limitations"/> for analysis.</t>

</section>
<section anchor="properties"><name>Properties</name>

<t><list style="symbols">
  <t>The fingerprint is deterministic: the same pair of Identity Keys
always produces the same fingerprint.</t>
  <t>The fingerprint is symmetric: it is the same regardless of which
party computes it (due to the lexicographic sort).</t>
  <t>The fingerprint changes if and only if either party's Identity
Key changes.</t>
</list></t>

</section>
<section anchor="key-change-notification"><name>Key Change Notification</name>

<t>Implementations <bcp14>SHOULD</bcp14> alert the user when a stored contact's
Identity Key changes (and therefore the fingerprint changes).  This
may indicate a new device (benign) or a man-in-the-middle attack.</t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<section anchor="limitations"><name>Limitations</name>

<t>This protocol does not provide:</t>

<t><list style="symbols">
  <t>proof-of-personhood</t>
  <t>universal identity proof</t>
  <t>protection against coercion</t>
  <t>protection against a compromised platform key store</t>
  <t>protection against a compromised application falsely describing
the platform's assurance event unless the deployment adds
attestation</t>
  <t>unlinkability across contacts that receive the same IK</t>
  <t>revocation or recovery</t>
</list></t>

</section>
<section anchor="platform-trust-compromised-applications-and-device-state"><name>Platform Trust, Compromised Applications, and Device State</name>

<t>All meaningful security properties of this protocol depend on
platform behavior when using the Identity Key.  If the platform
allows the key operation without the expected local verification
event, the protocol cannot detect that failure by itself.</t>

<t>A compromised or malicious application can alter what is being
signed, misrepresent why a signing operation is requested, or
present application-specific content to the user in a misleading
way.  Unless the deployment provides trusted display, platform
attestation, or other out-of-band confirmation of signing intent,
a verifier <bcp14>MUST NOT</bcp14> assume that a valid protocol object implies
that the signer saw or understood the application semantics
associated with that object.  Deployments <bcp14>SHOULD</bcp14> distinguish between
cryptographic authorization of a protocol object and user consent
to higher-level application meaning.</t>

<t>If an attacker obtains control of an unlocked device, or if the
device holder is coerced into satisfying local verification, the
protocol provides no defense against this scenario.  Verifiers <bcp14>MUST</bcp14> treat
successful verification as evidence only that the platform
authorized key use under its current policy (see <xref target="trust-model"/>).</t>

</section>
<section anchor="contact-object-capture"><name>Contact Object Capture</name>

<t>A captured Contact Object (e.g., photographed visual encoding or
intercepted wireless transmission) gives the attacker the victim's
public Identity Key and addressing information but the attacker
cannot:</t>

<t><list style="symbols">
  <t>Sign as the victim (lacks the device-bound private key).</t>
  <t>Replay the payload after 5 minutes (timestamp check).</t>
  <t>Replay within 5 minutes if the nonce was already seen.</t>
</list></t>

<t>The attacker CAN attempt to connect to the victim's transport
address but cannot complete authentication (they lack a KBO for
an Identity Key the victim trusts).</t>

</section>
<section anchor="key-binding-object-expiry"><name>Key Binding Object Expiry</name>

<t>A 30-day KBO expiry limits the window during which a compromised
Transport Key can be used.  Frequent TK rotation (<xref target="tk-rotation"/>)
reduces this window further.</t>

</section>
<section anchor="assurance-semantics-policy-and-application-compromise"><name>Assurance Semantics, Policy, and Application Compromise</name>

<t>The assurance values defined by this document are signer-reported,
platform-mediated claims.  They are intentionally coarse and do not
capture the full variety of operating-system behavior, biometric
modes, passcode fallback rules, trusted-path properties, or reuse
windows.</t>

<t>A compromised application could request CREDENTIAL-level
verification from the platform and then set the assurance field to
BIOMETRIC in the payload before signing.  The HARDWARE_VERIFIED (3)
assurance level mitigates this attack: when hardware attestation
evidence is present, the verifier can confirm the key's properties
directly against the hardware vendor's certificate chain.  A
compromised application cannot forge hardware attestation evidence.</t>

<t>During the Contact Exchange ceremony, a compromised application
could substitute attacker-controlled keys while displaying
correct-looking UI.  Hardware key attestation proves the Identity
Key is hardware-bound but does not prove the application is
legitimate.  Platform app integrity services (<xref target="app-integrity-impl"/>)
can mitigate this additional threat.  Without either form of
attestation, peers <bcp14>SHOULD</bcp14> use out-of-band Relationship Fingerprint
comparison (<xref target="relationship-fingerprint"/>) as a defense against key
substitution.</t>

<t>Deployments that require stronger semantics <bcp14>SHOULD</bcp14> require
HARDWARE_VERIFIED assurance where platform support is available,
and <bcp14>SHOULD</bcp14> define local policy for acceptable platforms, maximum
verification age, session credential lifetimes, and when direct
IK use is required instead of delegated signing.</t>

</section>
<section anchor="relay-attack-on-presence-response"><name>Relay Attack on Presence Response</name>

<t>Without channel binding, an attacker positioned between two peers
could relay a Presence Challenge from Peer A to the victim's device,
collect the signed response, and forward it to Peer A.  The
channel_binding field in the Presence Response (<xref target="presence-challenge"/>)
prevents this by binding the response to the specific connection
context.</t>

</section>
<section anchor="type-confusion"><name>Type Confusion</name>

<t>Without the structure_type discriminator (field 0), an attacker
could potentially substitute a signed Contact Object for a Key
Binding Object or vice versa, since both are COSE_Sign1 structures
signed by the same Identity Key.  The structure_type field prevents
this: verifiers <bcp14>MUST</bcp14> check that the structure_type matches the
expected value before processing any other fields.</t>

</section>
<section anchor="relationship-fingerprint-limitations"><name>Relationship Fingerprint Limitations</name>

<t>The fingerprint is optional and its security depends on the number
of digest bits exposed by the encoding chosen by the application.
A rendering that exposes N bits of the digest offers approximately
N bits of second-preimage resistance against an attacker who
generates candidate Identity Key pairs and searches for one whose
fingerprint matches the target.</t>

<t>Indicative strengths:</t>

<t><list style="symbols">
  <t>A 20-bit rendering (e.g., 6 decimal digits) requires on the
order of 10^6 trial key pairs.  Trivially brute-forceable on
commodity hardware.</t>
  <t>A 26-bit rendering (e.g., 8 decimal digits) requires on the
order of 10^8 trial key pairs.  Feasible on modern GPU
hardware within hours.</t>
  <t>A 60-bit rendering is practically infeasible to brute-force
for realistic attackers.</t>
</list></t>

<t>For applications requiring strong assurance, implementations <bcp14>SHOULD</bcp14>
support machine-readable comparison (for example, a QR code
exchanged over a second authenticated channel) that conveys the
full 256-bit digest without human error.</t>

</section>
<section anchor="privacy-considerations"><name>Privacy Considerations</name>

<section anchor="identity-key-as-a-stable-identifier"><name>Identity Key as a Stable Identifier</name>

<t>The Contact Object transmits the Identity Key public component in
cleartext.  Any party that observes or captures a Contact Object
obtains a persistent, unique identifier for the user.</t>

<t>Mitigations:</t>

<t><list style="symbols">
  <t>Contact Objects are exchanged only during deliberate, in-person
ceremonies, limiting the exposure surface.</t>
  <t>The 5-minute validity window limits the useful lifetime of a
captured object.</t>
  <t>The Transport Key (used for networking) is a separate key that
does not reveal the Identity Key to network observers.</t>
</list></t>

</section>
<section anchor="relationship-correlation"><name>Relationship Correlation</name>

<t>If the same Identity Key is reused across multiple relationships or
applications, receivers that exchange identifiers or protocol
transcripts can determine that the same long-term key participated
in multiple relationships.  This may reveal social-graph structure
or cross-context linkage.</t>

<t>Deployments that treat such correlation as sensitive <bcp14>SHOULD</bcp14> consider
future profiles that use pairwise-derived relationship identifiers
or per-relationship keys.  Those mechanisms are not defined by this
document.</t>

</section>
<section anchor="metadata-exposure"><name>Metadata Exposure</name>

<t>The Contact Object can also reveal metadata through fields such as
display_name, addressing, timestamps, and transport key continuity.
Even when application payloads are encrypted elsewhere, these fields
may reveal account aliases, transport reachability hints, device
migration timing, or relationship existence.</t>

<t>Applications using this protocol <bcp14>SHOULD</bcp14> minimize metadata
disclosure, avoid unnecessary stable identifiers, and avoid
embedding data in the addressing field that is broader than required
for rendezvous.</t>

</section>
<section anchor="fingerprint-handling"><name>Fingerprint Handling</name>

<t>Relationship Fingerprints are intended for optional out-of-band
comparison.  Applications <bcp14>SHOULD</bcp14> avoid displaying full fingerprints where
they could be captured by screenshots, shoulder surfing, or
logging.</t>

<t>See <xref target="RFC6973"/> for a general discussion of privacy considerations
in Internet protocols.</t>

</section>
</section>
<section anchor="denial-of-service-via-presence-challenges"><name>Denial of Service via Presence Challenges</name>

<t>An authenticated peer could issue excessive Presence Challenges,
forcing repeated user-verification prompts.  The 300-second rate
limit (<xref target="presence-challenge"/>) mitigates this but does not eliminate
it.  Implementations <bcp14>SHOULD</bcp14> allow users to disable Presence Challenge
responses from specific contacts.</t>

</section>
<section anchor="post-quantum-considerations"><name>Post-Quantum Considerations</name>

<t>P-256 ECDSA is vulnerable to quantum computers implementing Shor's
algorithm.  When post-quantum signature algorithms are available in
platform key stores, the protocol <bcp14>SHOULD</bcp14> migrate.  The version field
in all structures enables this transition.</t>

</section>
<section anchor="forward-secrecy-of-authentication"><name>Forward Secrecy of Authentication</name>

<t>This protocol does not provide forward secrecy of authentication.
If the Identity Key private key is ever extracted from the platform
key store (despite hardware protections), all Key Binding Objects,
Session Credentials, and Presence Responses previously signed by
that key can be verified by the attacker.  Past signed objects
remain verifiable indefinitely.</t>

<t>Deployments that require forward secrecy of authentication evidence
<bcp14>SHOULD</bcp14> layer an ephemeral key agreement protocol (e.g., TLS 1.3
<xref target="RFC8446"/> or a Diffie-Hellman-based transport) beneath this
protocol.  This document's objects provide authentication, not
confidentiality or forward secrecy.</t>

</section>
<section anchor="session-credential-expiry-and-in-flight-messages"><name>Session Credential Expiry and In-Flight Messages</name>

<t>A Session Credential has a finite expiry.  Messages signed by the
SSK before the credential expires but received after expiry present
a time-of-check/time-of-use consideration.  The Signed Message
verification procedure (<xref target="signed-message"/>) requires that the
message timestamp falls within the Session Credential's validity
window, with an optional grace period for in-flight messages.
<bcp14>RECOMMENDED</bcp14> grace period: no more than 60 seconds past expiry.
After the grace period, verifiers <bcp14>MUST</bcp14> reject the message and
require a new Session Credential.</t>

</section>
<section anchor="ssk-compromise"><name>Session Signing Key Compromise</name>

<t>The SSK is a software key held in memory.  An attacker who extracts
it can forge Signed Messages for the remaining validity period of
the Session Credential.  A read-only memory disclosure (e.g., a
side-channel attack) that reveals the SSK but not the TK private
key would allow message forgery without transport impersonation.</t>

<t>The Session Credential intentionally omits a channel_binding field
because Session Credentials must remain valid across delivery paths,
including mailbox deposit.  As a consequence, a stolen SSK and SC
can be used from any network position for the remaining credential
lifetime.</t>

<t>Mitigations:</t>

<t><list style="symbols">
  <t>The Session Credential <bcp14>MUST</bcp14> have a finite expiry, limiting the
forgery window.</t>
  <t>The SSK <bcp14>MUST</bcp14> be discarded when the session ends.</t>
  <t>The peer_ik_hash field scopes the credential to a single
relationship.</t>
  <t>Implementations <bcp14>SHOULD</bcp14> store the SSK in a non-swappable memory
region.</t>
  <t>For operations requiring the strongest assurance, implementations
<bcp14>SHOULD</bcp14> sign directly with the Identity Key rather than delegating
to the SSK.</t>
</list></t>

</section>
<section anchor="device-loss-and-recovery"><name>Device Loss and Recovery</name>

<t>When a device is lost or destroyed, the Identity Key is permanently
unrecoverable (non-exportable from the platform key store).  All
contacts verified against that Identity Key become orphaned.</t>

<t>Revocation and recovery are out of scope for this document, but that
omission has concrete deployment consequences.  In such cases,
deployments will typically require an out-of-band re-verification
ceremony, explicit peer approval of a new Identity Key, or an
application-defined recovery mechanism.</t>

<t>Similarly, if an Identity Key is believed to be compromised, this
document does not define a protocol-native revocation object or
distribution method.  Applications <bcp14>MUST</bcp14> therefore define local policy
for suspending trust in a stored key and for handling replacement or
termination of the affected relationship.</t>

</section>
<section anchor="terminology-caution"><name>Terminology Caution</name>

<t>The "h2h" identifier in this document's name refers to the
intended use case -- communication between devices held by two
specific humans who have met in person -- and is not a claim that
the protocol cryptographically verifies biological humanness,
legal personhood, or proof-of-personhood in any form.</t>

<t>Implementations and profiles built on this document <bcp14>SHOULD</bcp14> avoid
using terms such as "proves human" or "non-repudiation" without
additional legal and deployment analysis.  The protocol produces
signed objects that attribute actions to a key; it does not prove
those actions were intentional or legally binding.</t>

</section>
</section>
<section anchor="iana"><name>IANA Considerations</name>

<t>This document defines protocol constants for structure types,
assurance values, and transport key algorithms.  No IANA registries
are requested.  These values are defined in the body of this
document and in the CDDL schema (<xref target="cddl"/>).  They are summarized
here for convenience.</t>

<section anchor="structure-type-values"><name>Structure Type Values</name>

<texttable>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Name</ttcol>
      <c>0x01</c>
      <c>KEY_BINDING</c>
      <c>0x02</c>
      <c>CONTACT_OBJECT</c>
      <c>0x03</c>
      <c>SESSION_CREDENTIAL</c>
      <c>0x04</c>
      <c>SIGNED_MESSAGE</c>
      <c>0x10</c>
      <c>PRESENCE_CHALLENGE</c>
      <c>0x11</c>
      <c>PRESENCE_RESPONSE</c>
</texttable>

</section>
<section anchor="assurance-values-1"><name>Assurance Values</name>

<texttable>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Name</ttcol>
      <c>1</c>
      <c>CREDENTIAL</c>
      <c>2</c>
      <c>BIOMETRIC</c>
      <c>3</c>
      <c>HARDWARE_VERIFIED</c>
</texttable>

</section>
<section anchor="transport-key-algorithms"><name>Transport Key Algorithms</name>

<texttable>
      <ttcol align='right'>COSE alg</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>tk_public Encoding</ttcol>
      <c>-8</c>
      <c>EdDSA</c>
      <c>32 bytes, Ed25519 public key (RFC 8032 S5.1.5)</c>
      <c>-7</c>
      <c>ES256</c>
      <c>65 bytes, uncompressed P-256 point (0x04 || x || y)</c>
</texttable>

<t>Implementations <bcp14>MUST</bcp14> support at least one of the above transport
key algorithms.</t>

<t>A future Standards Track document may request the creation of IANA
registries for these value spaces if broader interoperability
requires coordinated allocation.</t>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>
<reference anchor="RFC8949">
  <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="RFC9052">
  <front>
    <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
    <author fullname="J. Schaad" initials="J." surname="Schaad"/>
    <date month="August" year="2022"/>
    <abstract>
      <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
      <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="96"/>
  <seriesInfo name="RFC" value="9052"/>
  <seriesInfo name="DOI" value="10.17487/RFC9052"/>
</reference>
<reference anchor="RFC9053">
  <front>
    <title>CBOR Object Signing and Encryption (COSE): Initial Algorithms</title>
    <author fullname="J. Schaad" initials="J." surname="Schaad"/>
    <date month="August" year="2022"/>
    <abstract>
      <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines a set of algorithms that can be used with the CBOR Object Signing and Encryption (COSE) protocol (RFC 9052).</t>
      <t>This document, along with RFC 9052, obsoletes RFC 8152.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9053"/>
  <seriesInfo name="DOI" value="10.17487/RFC9053"/>
</reference>

<reference anchor="FIPS186-5" >
  <front>
    <title>Digital Signature Standard (DSS)</title>
    <author >
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <date year="2023" month="February"/>
  </front>
  <seriesInfo name="FIPS" value="PUB 186-5"/>
</reference>
<reference anchor="FIPS180-4" >
  <front>
    <title>Secure Hash Standard (SHS)</title>
    <author >
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <date year="2015" month="August"/>
  </front>
  <seriesInfo name="FIPS" value="PUB 180-4"/>
</reference>


<reference anchor="RFC8610">
  <front>
    <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
    <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
    <author fullname="C. Vigano" initials="C." surname="Vigano"/>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <date month="June" year="2019"/>
    <abstract>
      <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8610"/>
  <seriesInfo name="DOI" value="10.17487/RFC8610"/>
</reference>



    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC6973">
  <front>
    <title>Privacy Considerations for Internet Protocols</title>
    <author fullname="A. Cooper" initials="A." surname="Cooper"/>
    <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
    <author fullname="B. Aboba" initials="B." surname="Aboba"/>
    <author fullname="J. Peterson" initials="J." surname="Peterson"/>
    <author fullname="J. Morris" initials="J." surname="Morris"/>
    <author fullname="M. Hansen" initials="M." surname="Hansen"/>
    <author fullname="R. Smith" initials="R." surname="Smith"/>
    <date month="July" year="2013"/>
    <abstract>
      <t>This document offers guidance for developing privacy considerations for inclusion in protocol specifications. It aims to make designers, implementers, and users of Internet protocols aware of privacy-related design choices. It suggests that whether any individual RFC warrants a specific privacy considerations section will depend on the document's content.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6973"/>
  <seriesInfo name="DOI" value="10.17487/RFC6973"/>
</reference>
<reference anchor="RFC9345">
  <front>
    <title>Delegated Credentials for TLS and DTLS</title>
    <author fullname="R. Barnes" initials="R." surname="Barnes"/>
    <author fullname="S. Iyengar" initials="S." surname="Iyengar"/>
    <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <date month="July" year="2023"/>
    <abstract>
      <t>The organizational separation between operators of TLS and DTLS endpoints and the certification authority can create limitations. For example, the lifetime of certificates, how they may be used, and the algorithms they support are ultimately determined by the Certification Authority (CA). This document describes a mechanism to overcome some of these limitations by enabling operators to delegate their own credentials for use in TLS and DTLS without breaking compatibility with peers that do not support this specification.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9345"/>
  <seriesInfo name="DOI" value="10.17487/RFC9345"/>
</reference>
<reference anchor="RFC9420">
  <front>
    <title>The Messaging Layer Security (MLS) Protocol</title>
    <author fullname="R. Barnes" initials="R." surname="Barnes"/>
    <author fullname="B. Beurdouche" initials="B." surname="Beurdouche"/>
    <author fullname="R. Robert" initials="R." surname="Robert"/>
    <author fullname="J. Millican" initials="J." surname="Millican"/>
    <author fullname="E. Omara" initials="E." surname="Omara"/>
    <author fullname="K. Cohn-Gordon" initials="K." surname="Cohn-Gordon"/>
    <date month="July" year="2023"/>
    <abstract>
      <t>Messaging applications are increasingly making use of end-to-end security mechanisms to ensure that messages are only accessible to the communicating endpoints, and not to any servers involved in delivering messages. Establishing keys to provide such protections is challenging for group chat settings, in which more than two clients need to agree on a key but may not be online at the same time. In this document, we specify a key establishment protocol that provides efficient asynchronous group key establishment with forward secrecy (FS) and post-compromise security (PCS) for groups in size ranging from two to thousands.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9420"/>
  <seriesInfo name="DOI" value="10.17487/RFC9420"/>
</reference>
<reference anchor="RFC8446">
  <front>
    <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <date month="August" year="2018"/>
    <abstract>
      <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
      <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8446"/>
  <seriesInfo name="DOI" value="10.17487/RFC8446"/>
</reference>
<reference anchor="RFC9147">
  <front>
    <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
    <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
    <date month="April" year="2022"/>
    <abstract>
      <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
      <t>The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability. Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
      <t>This document obsoletes RFC 6347.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9147"/>
  <seriesInfo name="DOI" value="10.17487/RFC9147"/>
</reference>

<reference anchor="PlayIntegrity" target="https://developer.android.com/google/play/integrity/overview">
  <front>
    <title>Play Integrity API Overview</title>
    <author >
      <organization>Google</organization>
    </author>
    <date year="2024"/>
  </front>
</reference>
<reference anchor="AppAttest" target="https://developer.apple.com/documentation/devicecheck">
  <front>
    <title>DeviceCheck | Apple Developer Documentation</title>
    <author >
      <organization>Apple</organization>
    </author>
    <date year="2024"/>
  </front>
</reference>
<reference anchor="WebAuthn" target="https://www.w3.org/TR/webauthn-2/">
  <front>
    <title>Web Authentication: An API for accessing Public Key Credentials Level 2</title>
    <author initials="D." surname="Balfanz" fullname="D. Balfanz">
      <organization></organization>
    </author>
    <author initials="A." surname="Czeskis" fullname="A. Czeskis">
      <organization></organization>
    </author>
    <author initials="J." surname="Hodges" fullname="J. Hodges">
      <organization></organization>
    </author>
    <author initials="J.C." surname="Jones" fullname="J.C. Jones">
      <organization></organization>
    </author>
    <author initials="M.B." surname="Jones" fullname="M.B. Jones">
      <organization></organization>
    </author>
    <author initials="A." surname="Kumar" fullname="A. Kumar">
      <organization></organization>
    </author>
    <author initials="A." surname="Liao" fullname="A. Liao">
      <organization></organization>
    </author>
    <author initials="R." surname="Lindemann" fullname="R. Lindemann">
      <organization></organization>
    </author>
    <author initials="E." surname="Lundberg" fullname="E. Lundberg">
      <organization></organization>
    </author>
    <date year="2021" month="April"/>
  </front>
  <seriesInfo name="W3C" value="Recommendation"/>
</reference>
<reference anchor="FIDO2" target="https://fidoalliance.org/fido2/">
  <front>
    <title>FIDO2: Web Authentication (WebAuthn)</title>
    <author >
      <organization>FIDO Alliance</organization>
    </author>
    <date year="2024"/>
  </front>
</reference>
<reference anchor="Signal" target="https://signal.org/docs/specifications/x3dh/">
  <front>
    <title>The X3DH Key Agreement Protocol</title>
    <author initials="M." surname="Marlinspike" fullname="M. Marlinspike">
      <organization></organization>
    </author>
    <author initials="T." surname="Perrin" fullname="T. Perrin">
      <organization></organization>
    </author>
    <date year="2016"/>
  </front>
</reference>


    </references>

</references>


<?line 1712?>

<section anchor="cddl"><name>CDDL Schema</name>

<t>The following CDDL <xref target="RFC8610"/> schema formally defines all protocol
structures.  This schema is normative.</t>

<figure><sourcecode type="cddl"><![CDATA[
; ============================================================
; P2P Presence Verification CDDL Schema
; Reference: draft-rodriguez-h2h-presence-attestation-00
; ============================================================

; -- Common types --

assurance_value = 1 / 2 / 3   ; 1=CREDENTIAL, 2=BIOMETRIC,
                              ; 3=HARDWARE_VERIFIED

; P-256 public key as COSE_Key (kty=EC2, crv=P-256)
P256_COSE_Key = {
  1  => 2,                    ; kty: EC2
  -1 => 1,                   ; crv: P-256
  -2 => bstr .size 32,       ; x coordinate
  -3 => bstr .size 32,       ; y coordinate
}

; ============================================================
; COSE_Sign1 wrappers
; Each signed structure is a COSE_Sign1 with ES256 algorithm.
; The payload is a CBOR-encoded map defined below.
; ============================================================

KeyBindingObject = #6.18([
  bstr .cbor {1 => -7},             ; protected: alg ES256
  {},                                ; unprotected
  bstr .cbor KBO_payload,           ; payload
  bstr,                              ; signature
])

ContactObject = #6.18([
  bstr .cbor {1 => -7},
  {},
  bstr .cbor Contact_payload,
  bstr,
])

SessionCredential = #6.18([
  bstr .cbor {1 => -7},
  {},
  bstr .cbor SC_payload,
  bstr,
])

SignedMessage = #6.18([
  bstr .cbor {1 => -7},
  {},
  bstr .cbor SM_payload,
  bstr,
])

PresenceResponse = #6.18([
  bstr .cbor {1 => -7},
  {},
  bstr .cbor PR_payload,
  bstr,
])

; ============================================================
; Payload definitions (no additional keys permitted)
; ============================================================

; -- Key Binding Object --

KBO_payload = {
  0 => 1,                    ; structure_type: KEY_BINDING (fixed)
  1 => 1,                    ; version (fixed for v1)
  2 => P256_COSE_Key,        ; ik_public
  3 => bstr,                 ; tk_public: raw key bytes
  4 => int,                  ; tk_algorithm: COSE alg id
  5 => uint,                 ; timestamp: Unix ms
  6 => uint,                 ; expiry: Unix ms, max +30d
  7 => assurance_value,      ; assurance
}

; -- Contact Object --

Contact_payload = {
  0 => 2,                    ; structure_type: CONTACT_OBJECT (fixed)
  1 => 1,                    ; version (fixed for v1)
  2 => P256_COSE_Key,        ; ik_public
  3 => bstr,                 ; tk_public: raw key bytes
  4 => int,                  ; tk_algorithm: COSE alg id
  5 => tstr .size (0..64),   ; display_name: UTF-8, max 64 bytes
  6 => uint,                 ; timestamp: Unix ms
  7 => bstr .size 16,        ; nonce: 16 random bytes
  8 => bstr .size (0..1024), ; addressing: transport-specific
  9 => assurance_value,      ; assurance
  ? 10 => bstr,              ; attestation_evidence: OPTIONAL
}

; -- Session Credential --

SC_payload = {
  0 => 3,                    ; structure_type: SESSION_CREDENTIAL
  1 => 1,                    ; version (fixed for v1)
  2 => P256_COSE_Key,        ; ssk_public: ephemeral P-256 key
  3 => P256_COSE_Key,        ; ik_public: issuing Identity Key
  4 => bstr .size 32,        ; peer_ik_hash: SHA-256 of peer IK
  5 => uint,                 ; timestamp: Unix ms
  6 => uint,                 ; expiry: Unix ms
  7 => assurance_value,      ; assurance
}

; -- Signed Message --

SM_payload = {
  0 => 4,                    ; structure_type: SIGNED_MESSAGE (fixed)
  1 => uint,                 ; message_id: >= 1, strictly increasing
  2 => uint,                 ; timestamp: Unix ms
  3 => uint,                 ; content_type: application-defined
  4 => bstr / tstr,          ; content
}

; -- Presence Challenge (not signed, plain CBOR) --

PresenceChallenge = {
  0 => 16,                   ; structure_type: PRESENCE_CHALLENGE
  1 => bstr .size 32,        ; challenge_nonce: 32 random bytes
  2 => assurance_value,      ; required_assurance
}

; -- Presence Response --

PR_payload = {
  0 => 17,                   ; structure_type: PRESENCE_RESPONSE
  1 => bstr .size 32,        ; challenge_nonce: echoed
  2 => assurance_value,      ; assurance
  3 => bstr .size 32,        ; channel_binding: SHA-256
  4 => uint,                 ; timestamp: Unix ms
  ? 5 => bstr,               ; attestation_evidence: OPTIONAL
}
]]></sourcecode></figure>

</section>
<section anchor="implementation-considerations"><name>Implementation Considerations</name>

<t>The following implementation guidance is informative and does not alter
the protocol requirements in this document.</t>

<section anchor="platform-key-store-mapping"><name>Platform Key Store Mapping</name>

<t>The abstract "platform key store" requirement commonly maps to
mechanisms such as Secure Enclave, StrongBox or TEE-backed Android
keys, TPM-backed Windows keys, or TPM- and PKCS#11-based Linux
deployments.  Implementations <bcp14>MUST</bcp14> verify that their chosen mechanism
meets the Identity Key requirements in Section 3.2 regardless of the
platform name used in product documentation.</t>

</section>
<section anchor="app-integrity-impl"><name>App Integrity Attestation</name>

<t>Hardware key attestation proves the Identity Key resides in genuine
hardware but does not prove the application is legitimate.  Platform
app integrity services -- such as Android Play Integrity API
<xref target="PlayIntegrity"/> and Apple App Attest <xref target="AppAttest"/> -- can verify
the application binary is unmodified.  These services require online
validation against vendor APIs.  Implementations that wish to
include app integrity attestation <bcp14>SHOULD</bcp14> obtain a token at ceremony
time, include it alongside the Contact Object (not in the signed
payload), and validate it against the vendor's API.  Deployments
handling high-value authorizations <bcp14>SHOULD</bcp14> use both hardware key
attestation and app integrity attestation where available.</t>

</section>
<section anchor="payload-size-limits"><name>Payload Size Limits</name>

<t>Implementations <bcp14>MUST</bcp14> enforce maximum payload sizes to prevent
resource-exhaustion attacks.  A deployment <bcp14>SHOULD</bcp14> set explicit limits
for each structure type before CBOR decoding or signature verification.
If a profile does not define stricter limits, a reasonable default is
4,096 bytes for Contact Objects, Key Binding Objects, and Session
Credentials; 262,144 bytes for Signed Messages; and 1,024 bytes for
Presence Challenges and Presence Responses.</t>

</section>
</section>
<section numbered="false" anchor="acknowledgements"><name>Acknowledgements</name>

<t>This work builds on COSE <xref target="RFC9052"/>, CBOR <xref target="RFC8949"/>, WebAuthn
<xref target="WebAuthn"/>, the FIDO2 framework <xref target="FIDO2"/>, delegated-credential
patterns <xref target="RFC9345"/>, the Signal Protocol <xref target="Signal"/>, and prior
secure messaging designs.</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA9296XbbWJIu+n8/Ba79o8gqUtbkiS5nXVmSM9W2ZbWkrOpa
dep4gSQoogUCbACUrLTdz3Kf5T7ZiXEPACjJQ57u1Vq50hIJ7DF27Bi+iBgO
h6ZO6ywZRQ9OkqQc1sUQ/41OyqRK8kkS/TUp01k6ieu0yKNZUUanSUZ/VPN0
OXxVrPJptLeq50WZ/kafPzDxeFwmV9ji9kl3Qw8M/JtcFOXNKEo+Ls20mOTx
AgYxLeNZPSyLaZlerJLfhvPt+XApLQzjuk6qmhoYbm6adFmOorpcVfX25ubz
zW1TrcaLtKrg6/pmCY2l+TRZJvC/vDb5ajFOypGZQr+jaHtz+8lwc3e49cTA
OHfMZXJzXZTTkYmiYbSUdcB/oximBu/LuOn70l+AMS1Ain2k9Q2/rzP2xktf
7L8/O+RfXr0/NVdJvkqwx4u0nq/GsFxlkcXjOpnMH8G0H8A30A80AN/M63pZ
jR494kc3JsXiUeNhE9Me8Axmqyzj9fw5XqRZdKrrCd9GUVFexLls1gi+g3bo
82QRp9kousBX/l/bPHZmTF6UC3jhigZ8+np/e2vrufz6bOvprv76fFc/fb75
eNv9uoO/vj46Odt69mT4eETdKdkdpDCrOIvO0os8rldlEp3VcT6Ny2nUOzg7
6z+gp930ZAqj6JhmAG8e5RU0tqqTqJjZl6sI/o3OYQZ5kRUXN/Sm3f2dIdAL
flIBVSZVms8KbRuHOYpOfn0V0WDtwDeHu+HAz5IJjvaXuJp7Qz775fcZ8tbj
4eazewwZhimb8WRrc2QMPhfu3ZPnT3d0a3Z2H+uvu9ubuo27u0/0063dp/jr
SRbfHOVwZEug8nAZ8KvIfhftnRxF76+S8ipNrteuw89FcZEl4ZbscqtxeZEA
ySvFT5OrJCuWSbkBa1MW6ZSI/4Lef7SErh+l2vWjQrqFhvaWyz06fQ1aS67S
SbI/TyaX0Wd8KEuiA+0hOigmqwUcZGFRa8ZOb33l0PEVGvjU7wKfgOFMcDjQ
wt+SMTLSPBwyfEr81TEhGEJOy4zcOJ5MEmB5+UV0shpn6SR6k9xE+2VCDCnO
qugtjiLa7prOMGImcbARvYqzWZz/1vhibyPa/y2pLtOq8cW/bES/FNOLpP35
/kb0L0Xe+uLdxqvuL6CLN6tFXLY/fpvGRePTU/wU+PkizvPGV4fwFXBi4PEX
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
nj3vKSyMlHRyGV2B5WIJkg3zfwDdXkD5WyUBAA==

-->

</rfc>

