<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-slutsky-homing-pigeon-00" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.35.0 -->
  <front>
    <title abbrev="Homing Pigeon v1">Homing Pigeon Message Protocol, Version 1</title>
    <seriesInfo name="Internet-Draft" value="draft-slutsky-homing-pigeon-00"/>
    <author initials="A." surname="Slutsky" fullname="Andrew Slutsky">
      <organization/>
      <address>
        <email>slutsky5544@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="October" day="30"/>
    <keyword>email</keyword>
    <keyword>HMAC</keyword>
    <keyword>job execution</keyword>
    <keyword>DTLS</keyword>
    <abstract>
      <?line 180?>

<t>This document specifies the Homing Pigeon message protocol, version 1: signed JSON job and result objects exchanged over a transport binding. On the email binding, a submitter sends one HMAC-SHA-384 signed JSON object to a mailbox; a runner polls that mailbox, verifies the signature, executes the job, and returns a signed result; the other bindings carry the same objects unchanged. The signature is the only authorization. The job object is protected end to end by per-job AEAD encryption, a required part of the protocol: implementations <bcp14>MUST</bcp14> support it, the reference software sends encrypted by default, and a receiver refuses a cleartext job unless the operator has explicitly enabled cleartext acceptance — in the reference software, only by a command-line parameter. The store-and-forward bindings open no inbound listener on the host that runs the job.</t>
      <t>The DTLS binding changes the binding and not the messages: the same signed objects travel inside a direct DTLS 1.3 session between the submitter and the runner. It is a binding of version 1, not a new version of the protocol. The shared secret is the session's external pre-shared key; key exchange is ephemeral-only, so sessions have perfect forward secrecy; and once the handshake has authenticated the submitter, the runner opens the session with a greeting that discloses a tiered, responder-chosen summary of its platform. The binding opens an inbound listener on the runner's host and is off unless the owner enables it. It is an addition, never a replacement: the store-and-forward bindings remain the ones every submitter can reach.</t>
    </abstract>
  </front>
  <middle>
    <?line 186?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Some hosts cannot accept inbound connections. The protocol needs a store-and-forward queue so neither side opens a connection to the other. The first binding this document specifies is a mailbox: the submitter does not open a connection to the runner, and the runner does not open a connection to the submitter except to read and write that mailbox.</t>
      <t>The exchange is two messages:</t>
      <artwork><![CDATA[
Submitter                    Mailbox                      Runner
    |                            |                            |
    |  job message (signed JSON) |                            |
    |--------------------------->|                            |
    |                            |  poll                      |
    |                            |<---------------------------|
    |                            |  result message            |
    |                            |  (signed JSON)             |
    |                            |<---------------------------|
    |  result (same mailbox, or  |                            |
    |   signed reply_to)         |                            |
    |<---------------------------|                            |
]]></artwork>
      <t>The deployment this protocol is written for is a person operating their own machines from a cloud-resident agent. The person holds the mailbox and the secret; the agent holds neither the host nor a network path to it. Email is the path that already exists between them. The runner is deliberately plain: it executes what the signature authorizes, on the owner's host, under the owner's account.</t>
      <t>Version negotiation is not a handshake. The message carries <tt>v</tt>. This document defines <tt>v</tt> = 1 only. A receiver that does not implement version 1 <bcp14>MUST</bcp14> reject the message.</t>
      <section anchor="why-specify-this-publicly">
        <name>Why specify this publicly</name>
        <t>The protocol is specified in the open so that a submitter does not need the runner's source code. Any implementation of this document can submit jobs: the subject, the JSON object, and the MAC are all specified here, and the reference transport is email, which the submitter already speaks.</t>
        <t>Two things are out of scope for this document and are established out of band: the mailbox address, and the shared secret. The sender asks the owner which address to use, and the owner provides the secret with it. Neither is discovered from the mail. Once the sender knows the address, the secret, and this specification, no further coordination is required.</t>
      </section>
      <section anchor="versions-in-this-document">
        <name>Versions in this document</name>
        <t>This document specifies one version of the protocol: version 1. Its bindings are the email binding (Section 5), the file binding (Section 5.1), the NATS binding (Section 5.2), and the DTLS session binding (Section 19), which also carries the session greeting (Section 20). It consolidates this document's earlier text, which specified the email binding alone, with the DTLS binding text that was first drafted as a companion document. The companion draft that now carries the name draft-slutsky-homing-pigeon-v2-00 <xref target="I-D.slutsky-homing-pigeon-v2"/> is a different document: it specifies protocol version 2 (the determination, question, and answer exchange) and does not specify a binding.</t>
        <t>A binding does not version the messages. The job and result objects are the same objects on every binding, byte for byte; their <tt>v</tt> member is 1, and a receiver <bcp14>MUST NOT</bcp14> reject an object for carrying <tt>v</tt> = 1 on any binding. A receiver that does not offer a binding is not non-conformant; it simply does not offer that binding.</t>
        <t>The reference implementation speaks version 1, and it implements the bindings this document specifies, including the DTLS session binding of Section 19. A receiver following this document rejects any message <tt>v</tt> other than 1.</t>
        <t>The sender also requires the shared secret to meet a minimum-entropy floor (Section 17.3). That floor is not a protocol version; it is a requirement of this protocol, and it binds version 1 senders and runners today (Section 17.3). Nothing else in the exchange changes shape.</t>
        <t>Later work also layers behavior this document scopes out (Section 4) onto the base exchange: a local disclosure policy on results, queries against retained output, attestations, and task boards. Those behaviors ride in extra members (Section 8); they do not redefine any message specified here. One consequence a submitter needs: a receiver layered with a disclosure policy can withhold result output that a version 1 receiver would send, so the guidance in Section 13.2 binds only where no such policy is in force.</t>
      </section>
    </section>
    <section anchor="requirements-language">
      <name>Requirements Language</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>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>Job: a signed request that the runner execute work, or answer a liveness check.</t>
      <t>Result: a signed report of what the runner did with one job.</t>
      <t>Shared secret: an octet string known to the submitter and the runner. It is the HMAC key. It is not sent on the wire.</t>
      <t>Default secret: the shared secret selected when <tt>key_id</tt> is absent.</t>
      <t>Key identifier: the string in <tt>key_id</tt>. It is a label, not a secret.</t>
      <t>Seen-set: the runner's record of <tt>job_id</tt> values already processed. It is local state. It is not a message.</t>
      <t>Freshness window: how far <tt>issued_at</tt> may be from the runner's clock before the job is rejected.</t>
      <t>Preamble: text in the message body before the signed JSON object. It is not signed.</t>
      <t>LOCAL: a parameter or a check this document allows a receiver to set for itself. It is not negotiated.</t>
      <t>Session: one DTLS association between a submitter (the initiator, in the DTLS client role) and a runner (the responder, in the DTLS server role). Defined in Section 19.</t>
      <t>Greeting: the first application message of a session, sent by the runner after authentication completes (Section 20).</t>
      <t>PSK identity: the <tt>pre_shared_key</tt> identity under which a secret is offered. The default secret's identity is <tt>homing-pigeon</tt>; an additional secret's is <tt>homing-pigeon:</tt> followed by its <tt>key_id</tt>.</t>
      <t>Ticket: the opaque resumption identity a runner issues in a NewSessionTicket message.</t>
    </section>
    <section anchor="scope">
      <name>Scope</name>
      <t>This document specifies subjects, the signed object, the MAC, <tt>key_id</tt>, <tt>reply_to</tt>, replay, freshness, the <tt>job</tt> message, and the <tt>result</tt> message.</t>
      <t>This document does not specify disclosure policy, queries, attestations, task boards, sensors, confinement, installers, or local models. A job <bcp14>MAY</bcp14> carry extra members for those uses. Receivers that do not implement them <bcp14>MUST</bcp14> ignore unknown members (Section 8) and <bcp14>MUST</bcp14> still reject an unknown <tt>v</tt> or an unknown job <tt>kind</tt> (Sections 8 and 12). Section 1 describes how those uses relate to this document.</t>
    </section>
    <section anchor="transport-binding">
      <name>Transport Binding</name>
      <t>This section specifies the email binding. The protocol itself needs only the store-and-forward queue from Section 1. Further bindings are specified in Sections 5.1 and 5.2; both carry the same messages, unchanged. A direct session binding, in which the same messages travel inside a DTLS session and the runner greets the submitter after authentication, is specified in Section 19.</t>
      <t>The binding layer is abstract. A binding is an interchangeable carrier of the same messages: the objects, the MAC, the per-job encryption of Section 16, and the receiver checks of this document are identical on every binding. An implementation <bcp14>MAY</bcp14> substitute one binding for another, or add a binding, without changing the protocol; two parties interoperate on any binding both offer.</t>
      <t>Conformance is per binding. This document specifies one version of the protocol, version 1, and an implementation conforms for each binding it offers; it need not offer every binding, and no binding is mandatory to implement: a conforming implementation offers at least one binding, and two parties interoperate on any binding both offer. Pairing is established out of band (Section 1) in either case. The email binding of this section is the binding every submitter environment already speaks, and the reference implementation enables it by default; that is guidance, not a requirement.</t>
      <t>Two security properties are <bcp14>REQUIRED</bcp14> of the protocol on every binding, and they attach differently. The first is authentication of the object: the MAC of Section 7, verified as Section 14 specifies. That requirement attaches to the object, never to the transport. No authentication a binding performs, however strong, satisfies or relaxes it, because the MAC is the admission decision, it selects the key (Section 10), it binds the exact object, and it remains verifiable after any session has ended. The second is confidentiality of the object, in transit and at rest, between the submitter and the runner. That requirement attaches to the property, not to a mechanism. A binding whose carriage provides confidentiality end to end, between the holders of the shared secret, with no intermediary that can read the object or store it outside the parties' control, satisfies the property itself, and the per-job encryption of Section 16 is then <bcp14>OPTIONAL</bcp14> on that binding. Where a binding's carriage terminates at an intermediary, or stores the object outside the parties' control, the transport does not satisfy the property, and Section 16 is the mechanism that provides it; a message sent in cleartext by the explicit choice Section 16 permits is a message for which the confidentiality property is not claimed. Each binding specified in this document states which case it is: the email binding in this section, the file binding in Section 5.1, the NATS binding in Section 5.2, and the DTLS binding in Section 19.4.</t>
      <t>The runner reads the mailbox with IMAP and writes with SMTP. Mail authentication is out of band. The signature check does not change with the mail credential.</t>
      <t>IMAP and SMTP <bcp14>MUST</bcp14> be used over TLS. An implementation <bcp14>MUST NOT</bcp14> carry this protocol over a cleartext IMAP or SMTP session. The TLS version <bcp14>MUST</bcp14> be 1.2 or higher; TLS 1.0 and TLS 1.1 <bcp14>MUST NOT</bcp14> be used <xref target="RFC8996"/>. The recommendations of <xref target="RFC9325"/> apply. Cleartext mail access is obsolete <xref target="RFC8314"/>: implicit TLS is preferred, and where STARTTLS is used it <bcp14>MUST</bcp14> be required rather than opportunistic, and the peer certificate <bcp14>MUST</bcp14> be verified. TLS protects a hop. It does not hide the message from the mailbox provider (Section 17.2). The TLS requirements of this section therefore do not satisfy the confidentiality property stated above: the mailbox provider is an intermediary that stores the object and can read it. On this binding the confidentiality property is carried by the per-job encryption of Section 16, and the authentication property by the MAC, as it is on every binding.</t>
      <t>An implementation <bcp14>MAY</bcp14> additionally support PGP/MIME protection of the mail on this binding. Such support is not required, and it is not this protocol's confidentiality mechanism: that mechanism is the per-job encryption of Section 16, which travels with the object on every binding.</t>
      <t>The body is UTF-8 text in a <tt>text/plain</tt> part. This document does not register a media type. If the message is multipart, the receiver uses the first <tt>text/plain</tt> part that is not an attachment.</t>
      <t>The message <bcp14>MUST</bcp14> be rejected before the MAC if the raw RFC822 object exceeds the receiver's size cap. The <bcp14>RECOMMENDED</bcp14> cap is 4194304 octets. A cap of 0 means no limit. This cap is LOCAL.</t>
      <section anchor="the-file-binding">
        <name>The File Binding</name>
        <t>The file binding carries the same envelope as a file in a pair of watched directories on a filesystem both parties can reach. It exists for deployments where the submitter and the runner share a filesystem (a mounted volume, a synchronized folder, a removable medium) and for testing: it is the email binding's envelope with the mailbox removed, and nothing else changes.</t>
        <t>The envelope mapping is byte-for-byte the email form: a subject line in the shape of Section 6, a blank line, then the signed body. A job is a regular file in the inbox directory. The file <bcp14>SHOULD</bcp14> be named <tt>&lt;ident&gt;.job.txt</tt>, where <tt>&lt;ident&gt;</tt> is the binding-local name of the job (the <tt>job_id</tt> serves), but a receiver <bcp14>MUST NOT</bcp14> condition acceptance on the name: every regular file in the inbox is read as a candidate job and judged by its contents, and symbolic links and directories are not read. A result is a file named <tt>&lt;ident&gt;.result.txt</tt> in the outbox directory. A receiver polls the directories on its ordinary poll cycle.</t>
        <t>Acknowledgement is consumption. Whichever side has taken a file moves it into a sibling <tt>done/</tt> directory; files are never deleted by the binding. A redelivery of the same job rewrites the same file name, and the seen-set (Sections 14 and 17.6) deduplicates the repeat: delivery is at-least-once, exactly as on the email binding (Section 17.10).</t>
        <t>Two gates stand in series on this binding. The first is the inbox directory's operating-system access control: only principals the owner has given write access can present envelopes at all. The second is the signature, which remains the authorization, unchanged. A deployment <bcp14>MUST</bcp14> treat the directory's access control as a real gate and set it deliberately; the signature check does not excuse a world-writable inbox.</t>
        <t>The binding's limits are the filesystem's. Both parties need access to the same directories, so the binding does not cross a network by itself (a network filesystem under it is the deployment's own affair, with its own failure modes). There is no store-and-forward beyond the disk, no ordering beyond arrival, and the size cap of Section 5 applies to envelope files.</t>
        <t>Of the two security properties of Section 5, this binding provides neither itself, and needs neither from a transport: the carriage never leaves storage both parties already control, and no intermediary reads or holds the object. The MAC carries the authentication property, as on every binding. Whether Section 16 is applied on this binding is a local policy decision about the readers of that storage; a sender <bcp14>MAY</bcp14> apply it, and a receiver <bcp14>MUST</bcp14> be able to receive it, as Section 16 requires of every receiver.</t>
      </section>
      <section anchor="the-nats-binding">
        <name>The NATS Binding</name>
        <t>The NATS binding carries the same envelope over core NATS publish/subscribe. It exists for deployments where submitter and runner already share a NATS broker: a low-latency pipe with no store-and-forward pretensions.</t>
        <t>The envelope mapping is the email form carried as a message payload: the subject line of Section 6, a blank line, then the signed body, as one payload. Jobs are published on a jobs subject (a LOCAL name; the reference default is <tt>homing-pigeon.jobs</tt>). Results are published on a per-job subject formed from a LOCAL prefix and the <tt>job_id</tt> (the reference default is <tt>homing-pigeon.results.&lt;job_id&gt;</tt>).</t>
        <t>Core NATS is at-most-once: the broker acknowledges nothing and retains nothing. A job published while no runner is subscribed is lost, and a result published while no submitter is subscribed is lost. The protocol's own machinery is the recovery: the submitter retries per Section 15, and the seen-set makes a repeat harmless. A deployment that needs broker-side retention needs a persistence layer this binding does not specify.</t>
        <t>Two gates stand in series. The first is the broker's own authentication: broker authentication is <bcp14>REQUIRED</bcp14> by default -- a conforming receiver <bcp14>MUST NOT</bcp14> consume jobs over an unauthenticated broker connection, and the credential is supplied in configuration or in the broker URL's userinfo. A deployment <bcp14>MAY</bcp14> relax this by an explicit local setting (LOCAL), in which case the signature is the only gate and the deployment <bcp14>MUST NOT</bcp14> claim the two-gate posture. The second gate is the signature, unchanged. A required-auth NATS deployment is, for this reason, the more strongly gated of the bindings in this document: email's mailbox login authorizes the runner's reading, never the sender, so email stands on the signature alone.</t>
        <t>The binding's limits are the broker's: payload sizes are bounded by the broker's maximum and by the cap of Section 5, and ordering is per-subject arrival only.</t>
        <t>Of the two security properties of Section 5, broker authentication satisfies neither: it authenticates a party to the broker, not the object to the runner, and the broker is an intermediary that can read what it carries. TLS on a broker connection, where a deployment uses it, protects a hop to the broker in the same sense as Section 5's mail TLS, and no further. The MAC therefore carries the authentication property on this binding, as on every binding, and the confidentiality property is carried by the per-job encryption of Section 16, where the sender applies it.</t>
      </section>
    </section>
    <section anchor="subjects">
      <name>Subjects</name>
      <t>Subjects are part of the email binding (Section 5): they are how the receiver recognizes a job message in the mailbox.</t>
      <t>Subjects are matched case-insensitively. A preamble such as <tt>Re:</tt> <bcp14>MAY</bcp14> appear before the marker. The marker need not be the first character of the subject.</t>
      <t>A job subject matches this pattern, in the sense of a search, not a full-string match:</t>
      <artwork><![CDATA[
[HOMING-PIGEON] (SP word)* SP job SP job-id
]]></artwork>
      <t><tt>word</tt> is one or more visible characters. <tt>job-id</tt> is one or more visible characters with no space, further constrained below. The words between the marker and <tt>job</tt> are decoration. <tt>TEST</tt> is a legal decoration.</t>
      <t>A result subject matches:</t>
      <artwork><![CDATA[
[HOMING-PIGEON] SP result SP job-id
]]></artwork>
      <t>ABNF <xref target="RFC5234"/> for the identifier only:</t>
      <artwork><![CDATA[
job-id      = 1*128 job-id-char
job-id-char = ALPHA / DIGIT / "." / "_" / "-"
]]></artwork>
      <t>The <tt>job_id</tt> in the subject <bcp14>MUST</bcp14> equal the <tt>job_id</tt> member. A mismatch <bcp14>MUST</bcp14> be rejected (Section 14).</t>
      <t><tt>job-id</tt> <bcp14>MUST NOT</bcp14> be <tt>.</tt> or <tt>..</tt>.</t>
      <t>A UUID <xref target="RFC9562"/> is <bcp14>RECOMMENDED</bcp14> as the <tt>job_id</tt>.</t>
      <t>A message whose subject is not a job subject is not a job. The receiver <bcp14>MUST NOT</bcp14> execute it. The receiver <bcp14>MAY</bcp14> mark it seen so that a later poll skips it. Result messages use the result pattern above and are produced by the runner. They are not jobs.</t>
    </section>
    <section anchor="body-and-signature-marker">
      <name>Body and Signature Marker</name>
      <t>The signed object is one JSON object <xref target="RFC8259"/>. The receiver ignores preamble and trailer. Verification uses the object that ends in the signature marker.</t>
      <t>Line endings are normalized before both signing and verifying: every CRLF becomes LF, then every remaining CR becomes LF. Trailing whitespace after that normalization is not part of the signed octets.</t>
      <t>The sender builds the object without <tt>sig</tt>, serializes it, normalizes line endings, computes the MAC over those octets (Section 7.1), and replaces the final <tt>}</tt> with:</t>
      <artwork><![CDATA[
,"sig":"<96 hex digits>"}
]]></artwork>
      <t>JSON member order before <tt>sig</tt> is the sender's choice. <tt>sig</tt> <bcp14>MUST</bcp14> be last. Senders <bcp14>SHOULD</bcp14> serialize with no insignificant whitespace. Receivers <bcp14>MUST</bcp14> accept insignificant whitespace inside the object, because the MAC covers the octets the sender actually produced, not a re-encoding.</t>
      <t>The receiver finds the signature as follows:</t>
      <ol spacing="normal" type="1"><li>
          <t>Normalize line endings and remove trailing whitespace.</t>
        </li>
        <li>
          <t>Let <tt>marker</tt> be the last occurrence of the eight characters <tt>,</tt> <tt>"</tt> <tt>s</tt> <tt>i</tt> <tt>g</tt> <tt>"</tt> <tt>:</tt> <tt>"</tt>.</t>
        </li>
        <li>
          <t>If <tt>marker</tt> is absent, the message is malformed.</t>
        </li>
        <li>
          <t>The 96 characters after <tt>marker</tt> <bcp14>MUST</bcp14> be hexadecimal. The two characters after those <bcp14>MUST</bcp14> be <tt>"</tt> and <tt>}</tt>.</t>
        </li>
        <li>
          <t>The signed octets are the bytes from the <tt>{</tt> that opens this object through the character before <tt>marker</tt>, plus one <tt>}</tt>.</t>
        </li>
        <li>
          <t>That <tt>{</tt> is the start of the object that contains the marker, not a <tt>{</tt> inside a string. If no such <tt>{</tt> exists, the message is malformed.</t>
        </li>
      </ol>
      <t>A sender <bcp14>MUST NOT</bcp14> place the character sequence <tt>,"sig":"</tt> inside any string value. The receiver uses the last occurrence.</t>
      <section anchor="mac">
        <name>MAC</name>
        <t>The MAC is HMAC-SHA-384 <xref target="RFC2104"/> using SHA-384 <xref target="FIPS180-4"/>.</t>
        <t>The HMAC key is the UTF-8 octets of the shared secret. Implementations <bcp14>MUST NOT</bcp14> hash, stretch, or otherwise derive that key. The secret is a string of characters. Two sides that disagree on the characters disagree on the key.</t>
        <t><tt>sig</tt> is the 48-octet HMAC value encoded as 96 hexadecimal digits. Senders <bcp14>MUST</bcp14> use lowercase digits. Receivers <bcp14>MUST</bcp14> compare in constant time after mapping ASCII <tt>A-F</tt> to <tt>a-f</tt>.</t>
        <t>Receivers <bcp14>MUST</bcp14> reject a malformed tail. Receivers <bcp14>MUST</bcp14> reject a MAC mismatch. A mismatch produces no result message (Section 14).</t>
      </section>
      <section anchor="constant-time-compare">
        <name>Constant-time compare</name>
        <t>The compare covers all 96 digits. It <bcp14>MUST NOT</bcp14> stop at the first differing digit in a way that a network observer can time. A local reject log <bcp14>MAY</bcp14> record that the MAC failed. It <bcp14>SHOULD NOT</bcp14> record the expected digest.</t>
      </section>
    </section>
    <section anchor="unknown-members">
      <name>Unknown Members</name>
      <t>A receiver <bcp14>MUST</bcp14> ignore object members it does not implement, except:</t>
      <ul spacing="normal">
        <li>
          <t><tt>v</tt> other than 1 <bcp14>MUST</bcp14> be rejected</t>
        </li>
        <li>
          <t><tt>type</tt> other than <tt>job</tt>, on a message the receiver is executing as a job, <bcp14>MUST</bcp14> be rejected</t>
        </li>
        <li>
          <t><tt>kind</tt> other than <tt>exec</tt> or <tt>ping</tt> <bcp14>MUST NOT</bcp14> be executed; the reference receiver rejects any other value except <tt>sensor_alert</tt>, which it files as a signed alert for its Oracle (PROTOCOL.md, "Senses") and never executes</t>
        </li>
      </ul>
      <t>Ignoring a member means the member is still covered by the MAC and has no effect on version 1 processing.</t>
    </section>
    <section anchor="common-members">
      <name>Common Members</name>
      <table>
        <thead>
          <tr>
            <th align="left">Member</th>
            <th align="left">JSON type</th>
            <th align="left">Presence</th>
            <th align="left">Rule</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>v</tt></td>
            <td align="left">number</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
            <td align="left">Integer 1. No other value is defined.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>type</tt></td>
            <td align="left">string</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
            <td align="left">
              <tt>job</tt> or <tt>result</tt>.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>job_id</tt></td>
            <td align="left">string</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
            <td align="left">Section 6.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>key_id</tt></td>
            <td align="left">string</td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
            <td align="left">Selects the HMAC key. Absent selects the default secret.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>aud</tt></td>
            <td align="left">string</td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
            <td align="left">Audience claim. Enforcement is LOCAL. <tt>runner_id</tt> is accepted as its older spelling; when both are present <tt>aud</tt> is the claim.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>sig</tt></td>
            <td align="left">string</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
            <td align="left">Section 7. Not part of the signed octets.</td>
          </tr>
        </tbody>
      </table>
      <t><tt>key_id</tt> is covered by the MAC. Key identifiers <bcp14>MAY</bcp14> appear in logs. An unknown <tt>key_id</tt> <bcp14>MUST</bcp14> be rejected before the MAC is computed. The receiver <bcp14>MUST NOT</bcp14> try another secret.</t>
      <t>If a receiver enforces <tt>runner_id</tt>, the expected value <bcp14>MUST</bcp14> come from the receiver's configuration. The signed value is what the submitter claimed. It is not the source of the expected value.</t>
    </section>
    <section anchor="key-selection">
      <name>Key Selection</name>
      <t>The receiver holds a map from <tt>key_id</tt> to secret. The empty identifier names the default secret.</t>
      <t>Selection, before the MAC:</t>
      <ol spacing="normal" type="1"><li>
          <t>If <tt>key_id</tt> is absent, select the default secret.</t>
        </li>
        <li>
          <t>If <tt>key_id</tt> is present and is a string in the map, select that secret.</t>
        </li>
        <li>
          <t>Otherwise reject. Do not compute a MAC.</t>
        </li>
      </ol>
      <t>How keys are stored is LOCAL. Two values <bcp14>MUST NOT</bcp14> be assigned to one <tt>key_id</tt>. The default identifier has one slot.</t>
      <section anchor="fingerprint-names">
        <name>Fingerprint names</name>
        <t>A secret <bcp14>MAY</bcp14> be named by its fingerprint. The reference software does so. The fingerprint is <tt>k-</tt> followed by the first eight lowercase hexadecimal digits of SHA-384 over the UTF-8 octets of the label <tt>homing-pigeon key id v1\n</tt> and then the secret's UTF-8 octets:</t>
        <artwork><![CDATA[
key_id = "k-" ||
  hex(SHA-384("homing-pigeon key id v1\n" || secret))[:8]
]]></artwork>
        <t>The reference receiver puts that identifier in the map of Section 10, pointing at the same secret the empty identifier names. An operator-chosen name, when one was configured, is a further identifier for that same secret. One <tt>key_id</tt> still names one secret. One secret <bcp14>MAY</bcp14> have several identifiers. Two secrets <bcp14>MUST NOT</bcp14> share one.</t>
        <t>The reference sender includes <tt>key_id</tt> on every message it signs. The value is the fingerprint, unless the sender was told to use a chosen name. The empty identifier is how a sender asks for the unnamed form. A receiver that has not registered the fingerprint <bcp14>MUST</bcp14> reject that message as an unknown <tt>key_id</tt> (step 3). An absent <tt>key_id</tt> still selects the default secret.</t>
        <t>A fingerprint that is not in the map is an unknown <tt>key_id</tt>. So is a near-miss: a different length, a different case, or the fingerprint of a secret the receiver does not hold. The receiver <bcp14>MUST NOT</bcp14> select the default secret for any of those.</t>
        <t>The name is a label. It is 32 bits of a one-way function over a secret of at least 128 bits of entropy (Section 17.3). It is not invertible. As an oracle for a guessed secret it is weaker than the HMAC on any captured message, which already tests a guess in full. The label keeps this hash apart from that HMAC and from the HKDF that derives a job key, so a name cannot be confused with a signature or turned into one. Publishing the name discloses nothing a signed message does not already disclose.</t>
        <t>The DTLS PSK identity (Section 3) is a different label. <tt>homing-pigeon</tt> names the default secret. <tt>homing-pigeon:</tt> followed by a configured <tt>key_id</tt> names an additional secret. The fingerprint is not a PSK identity unless the operator stored that string as a <tt>key_id</tt>.</t>
      </section>
    </section>
    <section anchor="job-message">
      <name>Job Message</name>
      <t><tt>type</tt> is <tt>job</tt>.</t>
      <sourcecode type="json"><![CDATA[
{
  "v": 1,
  "type": "job",
  "job_id": "3f9a1c2e-7b14-4e0a-9c2d-6f0a1b2c3d4e",
  "issued_at": "2026-10-13T12:00:00Z",
  "kind": "exec",
  "script": "date\n",
  "timeout_sec": 60,
  "key_id": "submitter-a",
  "reply_to": "submitter@example.com",
  "sig": "001122...eeff"
}
]]></sourcecode>
      <t>The <tt>sig</tt> line above is abbreviated. On the wire it is 96 hex digits.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Member</th>
            <th align="left">JSON type</th>
            <th align="left">Presence</th>
            <th align="left">Rule</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>issued_at</tt></td>
            <td align="left">string</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
            <td align="left">Section 11.1.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>kind</tt></td>
            <td align="left">string</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
            <td align="left">
              <tt>exec</tt> or <tt>ping</tt>.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>reply_to</tt></td>
            <td align="left">string</td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
            <td align="left">Section 11.2.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>script</tt></td>
            <td align="left">string</td>
            <td align="left">see 11.3</td>
            <td align="left">Inline script. <tt>exec</tt> only.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>script_url</tt></td>
            <td align="left">string</td>
            <td align="left">see 11.3</td>
            <td align="left">
              <tt>https</tt> URL of the script. <tt>exec</tt> only.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>script_sha384</tt></td>
            <td align="left">string</td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
            <td align="left">96 lowercase hex digits over the script octets.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>interpreter</tt></td>
            <td align="left">array of strings</td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
            <td align="left">Program, then its arguments.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>args</tt></td>
            <td align="left">array of strings</td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
            <td align="left">Appended after the script path.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>env</tt></td>
            <td align="left">object</td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
            <td align="left">String values merged into the environment.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>files</tt></td>
            <td align="left">array</td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
            <td align="left">Section 11.4.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>timeout_sec</tt></td>
            <td align="left">number</td>
            <td align="left">
              <bcp14>OPTIONAL</bcp14></td>
            <td align="left">Positive integer. <bcp14>RECOMMENDED</bcp14> default 300. <bcp14>RECOMMENDED</bcp14> maximum 3600.</td>
          </tr>
        </tbody>
      </table>
      <section anchor="issuedat">
        <name>issued_at</name>
        <t><tt>issued_at</tt> is an ISO 8601 timestamp. It <bcp14>MUST</bcp14> carry a timezone designator, <tt>Z</tt> or a numeric offset. A value without a timezone <bcp14>MUST</bcp14> be rejected. A value that does not parse <bcp14>MUST</bcp14> be rejected. Senders <bcp14>SHOULD</bcp14> use UTC in the form <tt>YYYY-MM-DDTHH:MM:SSZ</tt>.</t>
        <t>Let <tt>age</tt> be the runner's clock minus <tt>issued_at</tt>, in seconds.</t>
        <t>The receiver <bcp14>MUST</bcp14> reject the job if <tt>age</tt> is greater than its past window. The <bcp14>RECOMMENDED</bcp14> past window is 3600 seconds. That window is LOCAL.</t>
        <t>The receiver <bcp14>MUST</bcp14> reject the job if <tt>issued_at</tt> is too far in the future. The <bcp14>RECOMMENDED</bcp14> future allowance is 300 seconds.</t>
      </section>
      <section anchor="replyto">
        <name>reply_to</name>
        <t><tt>reply_to</tt> is a single address, at most 254 characters, of the form <tt>local@domain</tt>, with no display name, no angle brackets, and no comma. The domain contains a dot.</t>
        <t>If the member is absent, or present but invalid, the result goes to the runner's own mailbox. The job is not rejected for an invalid <tt>reply_to</tt>.</t>
        <t>The receiver <bcp14>MUST</bcp14> take the result address only from this member. The email <tt>From</tt> header and the email <tt>Reply-To</tt> header <bcp14>MUST NOT</bcp14> select it.</t>
      </section>
      <section anchor="ping-and-exec">
        <name>ping and exec</name>
        <t><tt>kind</tt> <tt>ping</tt> carries no script. The runner <bcp14>MUST NOT</bcp14> start a script. The result has <tt>kind</tt> <tt>ping</tt>.</t>
        <t><tt>kind</tt> <tt>exec</tt> requires at least one of <tt>script</tt> or <tt>script_url</tt>. If neither is present, the receiver <bcp14>MUST</bcp14> reject the job (Section 12). If both are present, the receiver <bcp14>MUST</bcp14> use <tt>script_url</tt> and <bcp14>MUST</bcp14> ignore <tt>script</tt>.</t>
        <t>If <tt>script_sha384</tt> is present, the receiver <bcp14>MUST</bcp14> hash the script octets with SHA-384 and <bcp14>MUST</bcp14> reject the job if the digest differs. The digest is 96 lowercase hex digits.</t>
        <t>If <tt>interpreter</tt> is absent, the runner uses a LOCAL default.</t>
        <t>The script is written to a new file in a fresh directory for this <tt>job_id</tt> and run as:</t>
        <artwork><![CDATA[
<interpreter...> <script-file> <args...>
]]></artwork>
        <t>The working directory is that job directory. On timeout the receiver <bcp14>MUST</bcp14> kill the process tree. A <tt>timeout_sec</tt> above the receiver's maximum <bcp14>MUST</bcp14> be reduced to that maximum; the job <bcp14>MUST NOT</bcp14> be rejected for an excessive timeout alone. The <bcp14>RECOMMENDED</bcp14> maximum is 3600.</t>
      </section>
      <section anchor="files">
        <name>files</name>
        <t>Each element is an object:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Member</th>
              <th align="left">JSON type</th>
              <th align="left">Presence</th>
              <th align="left">Rule</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>name</tt></td>
              <td align="left">string</td>
              <td align="left">
                <bcp14>REQUIRED</bcp14></td>
              <td align="left">File name inside the job directory.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>url</tt></td>
              <td align="left">string</td>
              <td align="left">
                <bcp14>REQUIRED</bcp14></td>
              <td align="left">
                <tt>https</tt> URL.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>sha384</tt></td>
              <td align="left">string</td>
              <td align="left">
                <bcp14>OPTIONAL</bcp14></td>
              <td align="left">96 lowercase hex digits.</td>
            </tr>
          </tbody>
        </table>
        <t><tt>name</tt> <bcp14>MUST NOT</bcp14> be absolute, <bcp14>MUST NOT</bcp14> contain <tt>..</tt> as a path segment, and <bcp14>MUST NOT</bcp14> escape the job directory. A violation <bcp14>MUST</bcp14> be rejected before the file is used.</t>
        <t>Downloads <bcp14>MUST</bcp14> use HTTPS. If <tt>sha384</tt> is present, a digest mismatch <bcp14>MUST</bcp14> be rejected.</t>
      </section>
    </section>
    <section anchor="kind-and-type-failures">
      <name>Kind and Type Failures</name>
      <t>Unknown <tt>kind</tt> <bcp14>MUST NOT</bcp14> be executed.</t>
      <t>A job the receiver rejects after the MAC has verified, because the kind, the script hash, the file name, or a similar check failed, <bcp14>MUST</bcp14> produce a result (Section 13) with <tt>exit_code</tt> -2 and a short reason in <tt>stderr</tt>. That job <bcp14>MUST</bcp14> be marked seen and <bcp14>MUST NOT</bcp14> be retried.</t>
      <t>A job rejected before the MAC verifies produces no result. See Section 14.</t>
    </section>
    <section anchor="result-message">
      <name>Result Message</name>
      <t>The result is signed with the same secret that verified the job. <tt>key_id</tt> on the result, when present, <bcp14>MUST</bcp14> name that secret. The reference sender includes it (Section 10.1): the identifier the job carried, or, when the job carried none, the default secret's fingerprint.</t>
      <t><tt>type</tt> is <tt>result</tt>. The subject is the result pattern in Section 6.</t>
      <sourcecode type="json"><![CDATA[
{
  "v": 1,
  "type": "result",
  "job_id": "3f9a1c2e-7b14-4e0a-9c2d-6f0a1b2c3d4e",
  "kind": "exec",
  "completed_at": "2026-10-13T12:01:23Z",
  "exit_code": 0,
  "timed_out": false,
  "stdout": "",
  "stderr": "",
  "stdout_truncated": false,
  "stderr_truncated": false,
  "duration_sec": 12.345,
  "runner": "host.example",
  "sig": "001122...eeff"
}
]]></sourcecode>
      <table>
        <thead>
          <tr>
            <th align="left">Member</th>
            <th align="left">JSON type</th>
            <th align="left">Presence</th>
            <th align="left">Rule</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>completed_at</tt></td>
            <td align="left">string</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
            <td align="left">Same form as <tt>issued_at</tt>.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>kind</tt></td>
            <td align="left">string</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
            <td align="left">The job's kind.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>exit_code</tt></td>
            <td align="left">number</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
            <td align="left">Section 13.1.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>timed_out</tt></td>
            <td align="left">boolean</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
            <td align="left">True if the process tree was killed for time.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>stdout</tt></td>
            <td align="left">string</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
            <td align="left">Captured standard output. May be empty.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>stderr</tt></td>
            <td align="left">string</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
            <td align="left">Captured standard error. May be empty.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>stdout_truncated</tt></td>
            <td align="left">boolean</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
            <td align="left">True if <tt>stdout</tt> was cut.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>stderr_truncated</tt></td>
            <td align="left">boolean</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
            <td align="left">True if <tt>stderr</tt> was cut.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>duration_sec</tt></td>
            <td align="left">number</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
            <td align="left">Seconds, as a JSON number.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>runner</tt></td>
            <td align="left">string</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
            <td align="left">Host label. Authenticated only by the result MAC.</td>
          </tr>
        </tbody>
      </table>
      <section anchor="exitcode">
        <name>exit_code</name>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">The process exited 0, or <tt>ping</tt> succeeded.</td>
            </tr>
            <tr>
              <td align="left">-1</td>
              <td align="left">
                <tt>timed_out</tt> is true. The process tree was killed.</td>
            </tr>
            <tr>
              <td align="left">-2</td>
              <td align="left">Rejected before execution. Reason in <tt>stderr</tt>. Not retried.</td>
            </tr>
            <tr>
              <td align="left">other</td>
              <td align="left">The process exit status.</td>
            </tr>
          </tbody>
        </table>
        <t>If <tt>timed_out</tt> is true, <tt>exit_code</tt> <bcp14>MUST</bcp14> be -1.</t>
      </section>
      <section anchor="truncation">
        <name>Truncation</name>
        <t>Each stream <bcp14>MAY</bcp14> be cut at a LOCAL limit on the decoded text. The <bcp14>RECOMMENDED</bcp14> limit is 100000 characters. When a stream is cut, its <tt>*_truncated</tt> member <bcp14>MUST</bcp14> be true. When it is not cut, that member <bcp14>MUST</bcp14> be false.</t>
        <t>A result specified here includes the output the receiver chose to send. Omitting output for a local privacy policy is outside version 1. A submitter <bcp14>MUST NOT</bcp14> assume output will be withheld. Where a disclosure policy is layered on the exchange (Section 1), this guidance does not hold and the submitter <bcp14>MUST NOT</bcp14> rely on it.</t>
      </section>
    </section>
    <section anchor="receiver-processing">
      <name>Receiver Processing</name>
      <t>The receiver maintains a seen-set. The key <bcp14>SHOULD</bcp14> be <tt>job_id</tt> prefixed by the receiver's configured <tt>runner_id</tt> when one is configured, so two runners sharing a mailbox do not treat each other's jobs as replays.</t>
      <t>For each unseen message:</t>
      <ol spacing="normal" type="1"><li>
          <t>If the subject is not a job subject, do not execute. This is not an error. Stop.</t>
        </li>
        <li>
          <t>If the seen-set already contains this <tt>job_id</tt>, do not execute. Stop.</t>
        </li>
        <li>
          <t>If the raw message exceeds the size cap (Section 5), reject with no result. Mark seen. Stop.</t>
        </li>
        <li>
          <t>Select the key (Section 10). On failure, reject with no result. Mark seen. Stop.</t>
        </li>
        <li>
          <t>Verify the MAC (Section 7). On failure, reject with no result. Mark seen. Stop. The <tt>From</tt> header is not an input to this step.</t>
        </li>
        <li>
          <t>Parse the signed octets as one JSON object. If it is not an object, reject with no result. Mark seen. Stop.</t>
        </li>
        <li>
          <t>If <tt>v</tt> is not 1 or <tt>type</tt> is not <tt>job</tt>, reject with no result. Mark seen. Stop.</t>
        </li>
        <li>
          <t>If the subject <tt>job_id</tt> and the member <tt>job_id</tt> differ, reject with no result. Mark seen. Stop. (A <tt>job_id</tt> that is illegal under Section 6 is a shape failure of step 12: the job verified, so it is answered with an <tt>exit_code</tt> -2 result and enters the seen-set.)</t>
        </li>
        <li>
          <t>Check <tt>issued_at</tt> (Section 11.1). On failure, reject with no result. Mark seen. Stop.</t>
        </li>
        <li>
          <t>LOCAL checks (audience, per-key policy) <bcp14>MAY</bcp14> reject here. A reject at this step <bcp14>MUST NOT</bcp14> execute the job. Whether a result is sent is LOCAL. The reference receiver sends no result for an audience failure.</t>
        </li>
        <li>
          <t>If <tt>kind</tt> is <tt>ping</tt>, go to step 13.</t>
        </li>
        <li>
          <t>If <tt>kind</tt> is <tt>exec</tt>, resolve the script and files (Section 11). On failure, send a result with <tt>exit_code</tt> -2, mark seen, stop. If <tt>kind</tt> is anything else, send a result with <tt>exit_code</tt> -2, mark seen, stop.</t>
        </li>
        <li>
          <t>Execute. Honor <tt>timeout_sec</tt>.</t>
        </li>
        <li>
          <t>Build the result (Section 13) and sign it with the secret from step 4.</t>
        </li>
        <li>
          <t>Stash the signed result in a LOCAL outbox, record <tt>job_id</tt> in the seen-set, and mark seen, in that order, before any send is attempted.</t>
        </li>
        <li>
          <t>Send the result to <tt>reply_to</tt> if that member is valid, otherwise to the runner mailbox. If the send fails, the stashed result is resent on later polls, the same octets each time, until it lands or the stash's retention lapses. The job is never executed again (Section 15).</t>
        </li>
      </ol>
      <t>If the object verified at step 5 is an encryption envelope, Section 16 applies: decrypt after step 5 and process the recovered body from step 4. The envelope's verification never substitutes for the body's own.</t>
      <t>The email <tt>From</tt> address <bcp14>MAY</bcp14> be logged after step 5. It <bcp14>MUST NOT</bcp14> authorize the job. It <bcp14>MUST NOT</bcp14> choose the result address.</t>
    </section>
    <section anchor="retry">
      <name>Retry</name>
      <t>Execution is at most once; delivery of the result is at least once.</t>
      <t>A receiver <bcp14>MUST</bcp14> record <tt>job_id</tt> in the seen-set once it holds a signed result for the job (step 15), before the first send, and <bcp14>MUST NOT</bcp14> execute the job again because a send failed. A send that fails is retried from the stash; the resent result is the same octets.</t>
      <t>Submitters <bcp14>MUST</bcp14> still treat <tt>exec</tt> as repeatable: a receiver whose seen-set was cleared, or a job delivered to two receivers, runs it twice.</t>
      <t>Two senses of "seen" are kept apart. Marking a message seen (Section 14, steps 3 through 12 and 15) is the binding-level flag: that copy of the message is not reprocessed. Recording a <tt>job_id</tt> in the seen-set is the replay state of Section 14, and a receiver <bcp14>MUST</bcp14> add a <tt>job_id</tt> to the seen-set only after it has produced a result for it: the stashed result of step 15, or the <tt>exit_code</tt> -2 result of step 12. A reject that produces no result (steps 3 through 9, and step 10 when the LOCAL choice is silence) <bcp14>MUST NOT</bcp14> enter the seen-set. A redelivered copy of such a message is therefore processed afresh and rejected afresh. This is deliberate: a message that never verified cannot burn a <tt>job_id</tt>, so a forger holding a victim's <tt>job_id</tt> cannot block the genuine job from running.</t>
    </section>
    <section anchor="per-job-encryption">
      <name>Per-Job Encryption</name>
      <t>This section defines per-job encryption: encrypting the job object itself, so the binding's store-and-forward hops carry ciphertext instead of the signed body. It is a required part of version 1. Implementations <bcp14>MUST</bcp14> support receiving and decrypting objects encrypted as this section specifies. Senders <bcp14>SHOULD</bcp14> encrypt; the reference software encrypts by default on the sending side, and encryption <bcp14>MUST NOT</bcp14> fail silently into cleartext. A receiver <bcp14>MUST NOT</bcp14> execute a job object received in cleartext unless the operator has explicitly enabled cleartext acceptance on that receiver. In the reference software the enable is a command-line parameter (<tt>--allow-cleartext</tt>), deliberately not a configuration setting, so the posture holds only for the invocation that asks for it; the sender's corresponding explicit choice is the reference sender's <tt>--cleartext</tt> parameter. The MAC of Section 7 is verified before the form of the object is considered, in every posture: cleartext is never unauthenticated.</t>
      <t>This section is the protocol's confidentiality mechanism at the object layer. Receiver support is <bcp14>REQUIRED</bcp14> on every binding, because a sender <bcp14>MAY</bcp14> apply this section on any binding. Sender application is <bcp14>OPTIONAL</bcp14> on a binding that itself provides the confidentiality property as Section 5 states; the DTLS binding of Section 19 is that case (Section 19.4). On a binding that does not provide the property, this section is the only mechanism that does, and the sender posture above applies in full.</t>
      <section anchor="construction">
        <name>Construction</name>
        <t>The plaintext is the complete signed job body in its Section 7 form — the payload object with the signature spliced in. The cipher is AES-256-GCM <xref target="SP800-38D"/>:</t>
        <ul spacing="normal">
          <li>
            <t>Key: HKDF <xref target="RFC5869"/> with HMAC-SHA-384. The input keying material is the UTF-8 octets of the secret selected per Section 10. The salt is the nonce. The info string is "homing-pigeon job-encryption v1". The output is 32 octets.</t>
          </li>
          <li>
            <t>Nonce: 12 octets, freshly random for each message.</t>
          </li>
          <li>
            <t>Additional authenticated data: the <tt>job_id</tt>, the <tt>key_id</tt> (empty for the default secret), and the algorithm string, each UTF-8, joined by single NUL (0x00) octets, in that order.</t>
          </li>
        </ul>
        <t>The transmitted body is a JSON envelope object, signed exactly as Section 7 specifies — the MAC covers the envelope as transmitted:</t>
        <sourcecode type="json"><![CDATA[
{"hp_enc": {"alg": "aes-256-gcm/hkdf-sha384",
            "nonce": "<base64>", "ct": "<base64>"}}
]]></sourcecode>
        <t><tt>ct</tt> is the ciphertext with the 16-octet GCM tag appended, base64-encoded. When the selected secret is not the default, the envelope carries the same <tt>key_id</tt> member a cleartext body would. <tt>hp_enc</tt> is a reserved member name: a body whose members are exactly the envelope's is an envelope, and senders <bcp14>MUST NOT</bcp14> use <tt>hp_enc</tt> for any other purpose.</t>
      </section>
      <section anchor="receiver-processing-1">
        <name>Receiver processing</name>
        <t>An envelope is processed inside Section 14's steps, not beside them:</t>
        <ol spacing="normal" type="1"><li>
            <t>The envelope's <tt>key_id</tt> selects the secret (Section 10), exactly as for a cleartext body.</t>
          </li>
          <li>
            <t>The envelope's MAC is verified — step 5 applied to the envelope. On failure, reject as step 5 specifies. A receiver <bcp14>MUST NOT</bcp14> attempt decryption before the MAC verifies.</t>
          </li>
          <li>
            <t>Decrypt. Any failure — an unknown <tt>alg</tt>, a malformed member, a tag mismatch — is a rejection with no result, marked seen, as in step 5. No partial plaintext is processed.</t>
          </li>
          <li>
            <t>The recovered body re-enters Section 14 at step 4, as if it had arrived directly; its own MAC is verified again, and its <tt>key_id</tt> <bcp14>MUST</bcp14> match the envelope's.</t>
          </li>
        </ol>
        <t>Support of this section is <bcp14>REQUIRED</bcp14> (Section 16). A receiver that does not implement it is not conformant; presented with an envelope, it sees an object without <tt>v</tt> or <tt>type</tt> and rejects it at step 7.</t>
      </section>
      <section anchor="results">
        <name>Results</name>
        <t>The result for an encrypted job <bcp14>SHOULD</bcp14> be encrypted in the same construction, with the job's <tt>job_id</tt> in the additional data, so an exchange is encrypted in both directions or neither. A receiver's local policy <bcp14>MAY</bcp14> override in either direction; the reference receiver exposes that policy as configuration and defaults to mirroring the job.</t>
      </section>
      <section anchor="no-forward-secrecy">
        <name>No forward secrecy</name>
        <t>Per-job encryption provides confidentiality against observers of the transport. It provides NO forward secrecy, and the two statements travel together wherever the mechanism is described: the key derives from the static shared secret, so compromise of the secret exposes every recorded encrypted job and result, past and future. Encryption also raises the value of a captured secret under Section 17.3's analysis; it does not lower it.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="the-signer-controls-the-host">
        <name>The signer controls the host</name>
        <t>A valid MAC is permission to run as the runner's account. Anyone who holds the secret can operate the host. This protocol does not define a sandbox. LOCAL confinement <bcp14>MUST NOT</bcp14> be assumed by the submitter.</t>
      </section>
      <section anchor="confidentiality-and-its-limits">
        <name>Confidentiality and its limits</name>
        <t>HMAC authenticates; it does not encrypt. The protocol's confidentiality is Section 16, and nothing else in this document provides it. Where cleartext is in use under an operator's explicit enable (Section 16), the transport operator (in this binding, the mailbox provider) can read every job and every result, and an observer who can read the transport learns the script, the arguments, the environment, and the output.</t>
        <t>With per-job encryption in use, the job and result bodies are encrypted end to end on the binding: an observer of the transport learns the subject (which names the <tt>job_id</tt>), the timing, and the size, and nothing of the content. The reference software encrypts by default. A receiver that has not explicitly enabled cleartext acceptance refuses a cleartext object; an enabled receiver logs each cleartext arrival, so the choice is visible.</t>
        <t>Per-job encryption provides NO forward secrecy. Its key derives from the static shared secret, so compromise of the secret exposes every recorded encrypted job and result, past and future. A confidentiality claim for this protocol <bcp14>MUST</bcp14> be read with that limit attached.</t>
      </section>
      <section anchor="offline-guessing">
        <name>Offline guessing</name>
        <t>One captured message is enough to test candidate secrets. More messages do not reduce that search. HMAC-SHA-384 does not yield the key from the tags.</t>
        <t>The secret <bcp14>SHOULD</bcp14> be 32 octets from a cryptographic generator, stored as characters and used as UTF-8. Sixty-four hexadecimal characters are the usual form. A long human sentence is not a substitute. The secret <bcp14>SHOULD NOT</bcp14> be the mailbox password.</t>
        <t>The floor is normative for this protocol: the shared secret <bcp14>MUST</bcp14> carry at least 128 bits of entropy, estimated as the secret's length times log2 of its alphabet size, and a sender <bcp14>MUST</bcp14> refuse to sign with a secret below that floor. The requirement answers the offline-guessing attack above, and it binds version 1 today: the reference runner refuses to start with a secret below the floor, and the reference sender refuses to sign with one.</t>
      </section>
      <section anchor="headers-are-not-authentication">
        <name>Headers are not authentication</name>
        <t><tt>From</tt>, <tt>Reply-To</tt>, <tt>Sender</tt>, and <tt>To</tt> <bcp14>MUST NOT</bcp14> satisfy the MAC and <bcp14>MUST NOT</bcp14> select <tt>reply_to</tt>. An invalid MAC <bcp14>MUST NOT</bcp14> cause any result to be sent.</t>
      </section>
      <section anchor="unknown-key-identifiers">
        <name>Unknown key identifiers</name>
        <t>Failing closed before the MAC stops a message from verifying under the default secret because of a typo, and it avoids using MAC time as a probe of which identifiers exist. A near-miss fingerprint is this case (Section 10.1): it is not the default secret under another spelling.</t>
      </section>
      <section anchor="replay">
        <name>Replay</name>
        <t>The past window rejects stale <tt>issued_at</tt>. The seen-set rejects a repeated <tt>job_id</tt>. A receiver with a wrong clock will accept stale jobs or reject fresh ones. A receiver whose seen-set is cleared will accept a replay that is still inside the past window. Jobs <bcp14>MUST</bcp14> be safe to repeat for that reason; a lost result no longer causes one (Section 15).</t>
      </section>
      <section anchor="two-secrets">
        <name>Two secrets</name>
        <t>The transport credentials and the HMAC secret, which authorizes jobs.</t>
      </section>
      <section anchor="marker-collision">
        <name>Marker collision</name>
        <t>The splitter uses the last <tt>,"sig":"</tt>. A string value that contains that sequence will not verify as the sender intended. Senders <bcp14>MUST</bcp14> keep that sequence out of values.</t>
      </section>
      <section anchor="output">
        <name>Output</name>
        <t>Version 1 results carry <tt>stdout</tt> and <tt>stderr</tt> up to the truncation limit. A receiver that wants to withhold output is implementing a different policy. That policy is not signaled by <tt>v</tt>. How that layering relates to this document is stated in Section 1.</t>
      </section>
      <section anchor="at-least-once">
        <name>At-least-once</name>
        <t>An attacker who can drop the result mail delays delivery: the receiver resends the stashed result, the same octets, and does not execute the job again (Section 15). This protocol does not add a separate ack.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
      <t>No new port, service name, media type, TLS extension, or object identifier is required. HMAC-SHA-384 is already named by <xref target="RFC2104"/> and <xref target="FIPS180-4"/>. The algorithm OID <tt>hmacWithSHA384</tt> (<tt>1.2.840.113549.2.10</tt>) already exists. This protocol identifies the algorithm by name, not by OID.</t>
      <t>The reference port for the DTLS binding (Section 19), UDP 20220, is a LOCAL default of the reference implementation, not a registered assignment; deployments may use any port, and submitters learn the port out of band, with the address and the secret.</t>
    </section>
    <section anchor="the-dtls-binding">
      <name>The DTLS Binding</name>
      <t>This section and the three that follow it specify one further binding of version 1 and one behavior on it: a direct DTLS 1.3 session between submitter and runner, with the shared secret as the session's pre-shared key (this section), and the session greeting the runner sends once the handshake has authenticated the submitter (Section 20). The messages do not change on this binding; everything this document specifies for them applies unchanged.</t>
      <t>The store-and-forward bindings need no path between submitter and runner: a mailbox both can reach is enough, and the runner opens no listener. That is the right default, and it is also a ceiling. Where a direct path does exist -- the submitter can open a UDP flow to the runner's host -- a session buys three things the mailbox cannot: latency measured in round trips instead of poll cycles, confidentiality of the job and result objects themselves (not merely of one mail hop), and that confidentiality with forward secrecy.</t>
      <t>The cost is real, and it falls on the submitter. The store-and-forward bindings ask the submitter only to produce a signed object and hand it to a store-and-forward system it already speaks. This binding asks the submitter to terminate DTLS itself: the handshake, retransmission timers, connection IDs, session resumption -- a network stack obligation, discharged in the submitter's own environment. Many submitter environments cannot open a UDP socket at all. That is why this binding is optional, why the greeting (Section 20) hangs on the session existing, and why the email binding remains the binding every submitter reaches. Section 21 states the conformance burden plainly.</t>
      <t>Two consequences of a direct binding deserve emphasis up front. First, the runner listens: enabling this binding opens an inbound UDP listener on the runner's host, a posture the store-and-forward bindings deliberately never take. The binding is therefore off unless an owner enables it; nothing about installing or running the runner opens it. Second, channel security is not delivery. A session protects what crosses it while it lives; it acknowledges nothing at the protocol layer. Delivery, retry, and deduplication remain the protocol's own machinery (Sections 19.3 and 22.5).</t>
      <section anchor="shape">
        <name>Shape</name>
        <t>The submitter initiates. The runner listens on a UDP port (LOCAL; the reference default is 20220, which is not registered -- see Section 18) only when the binding is enabled. One session carries any number of job and result messages in each direction while it lives. Roles do not reverse: the runner never initiates a session to a submitter.</t>
      </section>
      <section anchor="the-profile">
        <name>The Profile</name>
        <t>This binding is a bounded profile of DTLS 1.3 <xref target="RFC9147"/>. An implementation of this binding implements exactly this profile; a peer proposing anything outside it is refused, and the refusal ends that handshake, not the listener.</t>
        <ul spacing="normal">
          <li>
            <t>Transport: DTLS 1.3 <xref target="RFC9147"/> over UDP. DTLS 1.2 <bcp14>MUST NOT</bcp14> be negotiated.</t>
          </li>
          <li>
            <t>Ciphersuite: TLS_AES_256_GCM_SHA384 <xref target="RFC8446"/> only. No other suite is offered or accepted.</t>
          </li>
          <li>
            <t>Authentication: pre-shared key only. The external PSK is the shared secret, under the identities of Section 3. Certificates are not part of this profile, in either direction. The shared secret <bcp14>MUST</bcp14> meet the minimum-entropy floor of this protocol (Section 17.3); a secret below the floor <bcp14>MUST NOT</bcp14> be offered as a PSK.</t>
          </li>
          <li>
            <t>Key exchange: <tt>psk_dhe_ke</tt> only. The <tt>psk_key_exchange_modes</tt> extension <bcp14>MUST</bcp14> offer mode 1 and <bcp14>MUST NOT</bcp14> offer mode 0 (<tt>psk_ke</tt>); a responder <bcp14>MUST</bcp14> refuse a handshake that does not offer <tt>psk_dhe_ke</tt>. An ephemeral X25519 <xref target="RFC7748"/> key share <bcp14>MUST</bcp14> ride every handshake, full or resumed. Section 22.1 gives the reason: this is the profile's perfect-forward-secrecy requirement, and it is not negotiable within the profile.</t>
          </li>
          <li>
            <t>Address validation: the responder <bcp14>MUST</bcp14> perform the HelloRetryRequest cookie exchange of <xref target="RFC9147"/> before allocating session state, and <bcp14>MUST NOT</bcp14> send any flight larger than the retry itself before the cookie returns. The cookie is stateless and is bound to the initiator's address.</t>
          </li>
          <li>
            <t>Connection ID: both sides <bcp14>MUST</bcp14> negotiate the <tt>connection_id</tt> extension <xref target="RFC9146"/> and <bcp14>MUST</bcp14> accept records under the negotiated IDs from a changed source address, so that a NAT rebinding does not kill a session.</t>
          </li>
          <li>
            <t>Retransmission: handshake flights are retransmitted on the timers <xref target="RFC9147"/> specifies. Duplicate or retransmitted handshake messages are consumed exactly once per handshake; a duplicate <bcp14>MUST NOT</bcp14> corrupt the transcript or the session.</t>
          </li>
          <li>
            <t>Early data: none. 0-RTT <bcp14>MUST NOT</bcp14> be offered, sent, or accepted; epoch 1 keys are never derived.</t>
          </li>
          <li>
            <t>Resumption: a responder <bcp14>MAY</bcp14> issue a NewSessionTicket. A resumed session <bcp14>MUST</bcp14> use a fresh ephemeral key share (the <tt>psk_dhe_ke</tt> rule admits no exception for resumption), <bcp14>MUST</bcp14> be treated as a new session for greeting purposes (Section 20), and the ticket <bcp14>SHOULD</bcp14> be single-use.</t>
          </li>
          <li>
            <t>KeyUpdate: an implementation <bcp14>MUST NOT</bcp14> initiate KeyUpdate. An implementation that receives a KeyUpdate with <tt>update_requested</tt> set <bcp14>SHOULD</bcp14> answer it as <xref target="RFC9147"/> requires; an implementation <bcp14>MAY</bcp14> instead ignore KeyUpdate, and peers <bcp14>MUST NOT</bcp14> depend on it, as this profile never initiates one.</t>
          </li>
          <li>
            <t>Malformed input: a malformed or undecryptable datagram is dropped and logged. It <bcp14>MUST NOT</bcp14> be fatal to the listener or to any session but, at most, its own.</t>
          </li>
        </ul>
      </section>
      <section anchor="carrying-the-messages">
        <name>Carrying the Messages</name>
        <t>Inside a session, application data is a stream of messages, each framed by a four-octet big-endian length prefix. Each message is one protocol envelope in the same form the store-and-forward bindings carry: the subject line, a blank line, then the signed body, exactly as the email binding carries it. A job message is answered, in due course, by its result message on the same session.</t>
        <t>Acknowledgement and deduplication are the protocol's own, unchanged: the runner's seen-set governs whether a job executes (Section 14), the submitter retries per Section 15, and DTLS record protection contributes neither an acknowledgement nor a duplicate suppression at the protocol layer. A result produced after its session has died cannot be delivered on that session; the submitter learns of the loss by timeout, re-asks on a fresh session, and the seen-set makes the repeat safe.</t>
      </section>
      <section anchor="composition-with-per-job-encryption">
        <name>Composition with Per-Job Encryption</name>
        <t>This binding provides the confidentiality property of Section 5 itself: the session is direct between the holders of the shared secret, no intermediary stores the object or can read it, and the session AEAD protects the object in transit with forward secrecy (Section 22.1). Application of the per-job encryption of Section 16 (the <tt>hp_enc</tt> envelope) on this binding is therefore <bcp14>OPTIONAL</bcp14>. A sender may send a cleartext signed job inside a session; the envelope remains available where protection at rest, beyond the session's lifetime, is wanted (the reference sender applies it by default and offers <tt>--cleartext</tt>). The receiver rule of Section 16 is unchanged on this binding: a cleartext object is executed only where the operator has explicitly enabled cleartext acceptance. Receiver support of Section 16 remains <bcp14>REQUIRED</bcp14>, on this binding as on every binding. Neither layer's presence relaxes the other's checks where it is applied: the envelope signature is verified before decryption, and the object signature is verified before execution, session or no session. The session's authentication of its peer does not substitute for the object signature: authentication attaches to the object (Section 5), not to the transport, on this binding as on every other.</t>
      </section>
    </section>
    <section anchor="the-session-greeting">
      <name>The Session Greeting</name>
      <t>When a session's handshake completes -- the responder has verified the initiator's Finished and the session keys are live -- the RUNNER sends the session's first application message: the greeting. Three properties are normative.</t>
      <ul spacing="normal">
        <li>
          <t>The greeting is post-authentication, never before. A responder <bcp14>MUST NOT</bcp14> send it before the handshake completes, and an unauthenticated peer harvests nothing from this binding: before authentication the only thing a stranger can obtain is the cookie exchange of Section 19.2.</t>
        </li>
        <li>
          <t>The greeting precedes work. A runner <bcp14>MUST NOT</bcp14> accept a job on a session before it has sent the greeting on that session.</t>
        </li>
        <li>
          <t>The greeting is the responder's choice. Its disclosure tier is the runner's LOCAL configuration. The initiator cannot request, negotiate, or widen it; this document defines no mechanism by which it could.</t>
        </li>
      </ul>
      <t>The greeting is a JSON object <xref target="RFC8259"/> in the protocol's idiom:</t>
      <artwork><![CDATA[
{"disclosure": "family",
 "platform": {"os_family": "linux",
              "default_interpreter": ["sh"],
              "protocol_versions": [1]},
 "transport": "dtls",
 "type": "greeting",
 "v": 1}
]]></artwork>
      <t>The members <tt>type</tt> (always <tt>greeting</tt>), <tt>transport</tt> (always <tt>dtls</tt>), <tt>v</tt> (the protocol version, 1), and <tt>disclosure</tt> (the tier in force) are always present. The <tt>platform</tt> member is present unless the tier is <tt>none</tt>, and its members depend on the tier:</t>
      <ul spacing="normal">
        <li>
          <t><tt>none</tt>: no <tt>platform</tt> member. The greeting still goes out; it says the session exists and nothing about the host.</t>
        </li>
        <li>
          <t><tt>family</tt>: <tt>os_family</tt> (one of <tt>windows</tt>, <tt>macos</tt>, <tt>linux</tt>, <tt>other</tt>), <tt>default_interpreter</tt> (the argv the receiver runs a script with when the job names none) and <tt>protocol_versions</tt> (the message versions it opens). This is the reference default.</t>
        </li>
        <li>
          <t><tt>standard</tt>: <tt>family</tt> plus <tt>os_release</tt> (the operating system's release string) and <tt>python_version</tt> (the runner runtime's version).</t>
        </li>
        <li>
          <t><tt>full</tt>: <tt>standard</tt> plus <tt>path_tools</tt>, an object naming a fixed, bounded set of common tools and whether each is on the runner's PATH.</t>
        </li>
      </ul>
      <t>The platform values above are strings on the wire; a future enterprise profile <bcp14>MAY</bcp14> map them under an OID arc.</t>
      <t>The disclosure is proportioned the way the protocol already proportions result content: a deployment that answers jobs with full output discloses more in results than one that answers with attestations, and the same owner's posture, expressed as a tier, governs the greeting. The information itself is of the kind any job the runner accepts could observe by running; the greeting gives it to the authenticated submitter up front, where it is useful for choosing what to send (an interpreter name, a script form), without spending a job to learn it.</t>
      <t>A resumed session is a new session for this section: the greeting <bcp14>MUST</bcp14> be sent again, under the tier in force at that time.</t>
    </section>
    <section anchor="the-submitters-conformance-burden">
      <name>The Submitter's Conformance Burden</name>
      <t>This section is candid because the Introduction's promise -- that a submitter needs nothing but the specification and tools it already has -- does not survive contact with a session binding, and a specification that hides its costs invites broken deployments.</t>
      <t>A conforming submitter for this binding implements DTLS 1.3 in the profile of Section 19.2 for itself: the handshake state machine, PSK binders, the cookie exchange, handshake retransmission timers (a UDP peer that cannot retransmit cannot finish a handshake on a lossy path), connection IDs, and resumption. It needs a UDP path to the runner, which is an environment property, not a code property: a submitter running inside a hosted tool that offers only HTTPS egress, or no raw sockets at all, cannot use this binding no matter how correct its implementation is.</t>
      <t>None of this is required of a submitter that uses only the store-and-forward bindings. The conformance of the messages and their checks is untouched by this section, a runner without this binding is a complete deployment, and an owner enables the binding as an additional door on a host they choose, for submitters that can reach it. The bindings coexist: the same runner, the same secrets, the same objects; the session is a faster, confidential carriage for submitters equipped for it, and the mailbox remains for those that are not.</t>
    </section>
    <section anchor="security-considerations-dtls-binding">
      <name>Security Considerations (DTLS Binding)</name>
      <section anchor="forward-secrecy-is-a-requirement-not-a-property">
        <name>Forward secrecy is a requirement, not a property</name>
        <t>The profile's load-bearing rule is that <tt>psk_ke</tt> is prohibited. In <tt>psk_ke</tt>, session keys derive from the pre-shared key alone; anyone who later obtains the secret and has recorded the session decrypts it in full. Because this protocol's shared secret is long-lived and is also the job-signing key, that failure mode would be catastrophic and silent. In <tt>psk_dhe_ke</tt>, every session -- full or resumed -- mixes a fresh ephemeral X25519 secret into its keys, so a later compromise of the shared secret yields the ability to impersonate going forward (which the version 1 analysis already grants a secret-holder) but decrypts no recorded session. An implementation <bcp14>MUST NOT</bcp14> offer, accept, or fall back to <tt>psk_ke</tt>, including on resumption and including when a peer insists. One limit is stated plainly: forward secrecy here is not post-quantum secrecy. The ephemeral exchange is X25519, so a recorded session is exposed to a future cryptographically relevant quantum computer in a way the symmetric constructions of this protocol (the object MAC of Section 7.1 and the per-job encryption of Section 16) are not. A hybrid post-quantum key exchange is the known remedy and is future work for this profile.</t>
      </section>
      <section anchor="one-secret-two-constructions">
        <name>One secret, two constructions</name>
        <t>The shared secret does two jobs on this binding: it is the DTLS external PSK, and it remains the HMAC key of the job and result objects. These are independent constructions (the TLS key schedule's HKDF derivation chain, and HMAC-SHA-384 over the object), and neither's outputs feed the other. The composition does not weaken the analysis of Section 17: the session authenticates the channel, the signature authorizes the object, and a job's authority comes from the signature alone, so a job captured anywhere -- a mailbox, a session recording -- is exactly as powerful as it is on any other binding, and replay is governed by the same seen-set and freshness rules. The offline-guessing analysis of Section 17.3 applies to the PSK unchanged: the entropy floor is normative for the secret in both roles.</t>
      </section>
      <section anchor="the-greeting-discloses">
        <name>The greeting discloses</name>
        <t>The greeting is a deliberate, bounded disclosure to an authenticated peer. Its bounds are its defenses: it is never sent before authentication, it contains no identifiers beyond platform shape (no hostname, no addresses, no user names, no filesystem paths beyond tool presence), its richest tier names a fixed tool set rather than enumerating the system, and its tier is set by the party being described. An owner who considers even the OS family sensitive sets <tt>none</tt> and the greeting still satisfies Section 20. What the greeting must never become is a negotiation: a future extension that lets the initiator ask for more would invert the design and <bcp14>MUST NOT</bcp14> be added compatibly.</t>
      </section>
      <section anchor="amplification-and-the-listener">
        <name>Amplification and the listener</name>
        <t>A UDP listener is a reflection surface. The cookie exchange is the mitigation this profile adopts: the responder is stateless and sends nothing larger than the retry flight until the initiator proves it can receive at its claimed address, so the binding cannot be used to amplify traffic at a third party beyond that small, fixed flight. The listener's other exposure is computational: handshakes cost more than datagrams. The stateless cookie keeps pre-authentication cost to one MAC verification per first hello; malformed datagrams are dropped at parse, and per-session failure is contained to the session.</t>
        <t>Enabling this binding changes the host's posture from the store-and-forward bindings' no-listener stance, and this document does not minimize that: the listener is off unless enabled, its port is LOCAL, and an owner who does not need the session binding should leave it off and lose nothing.</t>
      </section>
      <section anchor="channel-security-is-not-delivery">
        <name>Channel security is not delivery</name>
        <t>DTLS authenticates and encrypts records; it does not promise that a job arrived, ran, or was answered. This profile deliberately keeps the protocol's at-least-once semantics (Section 19.3) rather than letting a reliable-looking channel imply reliable delivery: sessions die (reboots, NAT timeouts past the connection ID's rescue, key exhaustion), and when one dies mid-exchange the loss is visible as a timeout, recoverable by a retry the seen-set makes safe. An implementation <bcp14>MUST NOT</bcp14> treat session establishment as job acceptance, nor session delivery of a result as its acknowledgement; the signed result message is the acknowledgement, as on every binding.</t>
      </section>
      <section anchor="termination-in-the-middle">
        <name>Termination in the middle</name>
        <t>The confidentiality claim is end to end between the submitter and the runner process. A middlebox that terminates DTLS -- an inspecting proxy the path forces traffic through -- ends the claim at that box: the session is then confidential in two hops, and the operator of the middlebox can read job and result objects in clear, though per-job encryption (Section 19.4) still protects an encrypted object past it. Deployments that route this binding through such a box should enable the object layer and understand which guarantee each layer is carrying.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2104" target="https://www.rfc-editor.org/info/rfc2104">
          <front>
            <title>HMAC: Keyed-Hashing for Message Authentication</title>
            <author initials="H." surname="Krawczyk" fullname="H. Krawczyk">
              <organization/>
            </author>
            <author initials="M." surname="Bellare" fullname="M. Bellare">
              <organization/>
            </author>
            <author initials="R." surname="Canetti" fullname="R. Canetti">
              <organization/>
            </author>
            <date year="1997" month="February"/>
          </front>
          <seriesInfo name="RFC" value="2104"/>
          <seriesInfo name="DOI" value="10.17487/RFC2104"/>
        </reference>
        <reference anchor="RFC5234" target="https://www.rfc-editor.org/info/rfc5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author initials="D. C." surname="Ed." fullname="D. Crocker, Ed.">
              <organization/>
            </author>
            <author initials="P." surname="Overell" fullname="P. Overell">
              <organization/>
            </author>
            <date year="2008" month="January"/>
          </front>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC5869" target="https://www.rfc-editor.org/info/rfc5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author initials="H." surname="Krawczyk" fullname="H. Krawczyk">
              <organization/>
            </author>
            <author initials="P." surname="Eronen" fullname="P. Eronen">
              <organization/>
            </author>
            <date year="2010" month="May"/>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="RFC7748" target="https://www.rfc-editor.org/info/rfc7748">
          <front>
            <title>Elliptic Curves for Security</title>
            <author initials="A." surname="Langley" fullname="A. Langley">
              <organization/>
            </author>
            <author initials="M." surname="Hamburg" fullname="M. Hamburg">
              <organization/>
            </author>
            <author initials="S." surname="Turner" fullname="S. Turner">
              <organization/>
            </author>
            <date year="2016" month="January"/>
          </front>
          <seriesInfo name="RFC" value="7748"/>
          <seriesInfo name="DOI" value="10.17487/RFC7748"/>
        </reference>
        <reference anchor="RFC8259" target="https://www.rfc-editor.org/info/rfc8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author initials="T. B." surname="Ed." fullname="T. Bray, Ed.">
              <organization/>
            </author>
            <date year="2017" month="December"/>
          </front>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC8314" target="https://www.rfc-editor.org/info/rfc8314">
          <front>
            <title>Cleartext Considered Obsolete: Use of Transport Layer Security (TLS) for Email Submission and Access</title>
            <author initials="K." surname="Moore" fullname="K. Moore">
              <organization/>
            </author>
            <author initials="C." surname="Newman" fullname="C. Newman">
              <organization/>
            </author>
            <date year="2018" month="January"/>
          </front>
          <seriesInfo name="RFC" value="8314"/>
          <seriesInfo name="DOI" value="10.17487/RFC8314"/>
        </reference>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author initials="E." surname="Rescorla" fullname="E. Rescorla">
              <organization/>
            </author>
            <date year="2018" month="August"/>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8996" target="https://www.rfc-editor.org/info/rfc8996">
          <front>
            <title>Deprecating TLS 1.0 and TLS 1.1</title>
            <author initials="K." surname="Moriarty" fullname="K. Moriarty">
              <organization/>
            </author>
            <author initials="S." surname="Farrell" fullname="S. Farrell">
              <organization/>
            </author>
            <date year="2021" month="March"/>
          </front>
          <seriesInfo name="RFC" value="8996"/>
          <seriesInfo name="BCP" value="195"/>
          <seriesInfo name="DOI" value="10.17487/RFC8996"/>
        </reference>
        <reference anchor="RFC9146" target="https://www.rfc-editor.org/info/rfc9146">
          <front>
            <title>Connection Identifier for DTLS 1.2</title>
            <author initials="E. R." surname="Ed." fullname="E. Rescorla, Ed.">
              <organization/>
            </author>
            <author initials="H. T." surname="Ed." fullname="H. Tschofenig, Ed.">
              <organization/>
            </author>
            <author initials="T." surname="Fossati" fullname="T. Fossati">
              <organization/>
            </author>
            <author initials="A." surname="Kraus" fullname="A. Kraus">
              <organization/>
            </author>
            <date year="2022" month="March"/>
          </front>
          <seriesInfo name="RFC" value="9146"/>
          <seriesInfo name="DOI" value="10.17487/RFC9146"/>
        </reference>
        <reference anchor="RFC9147" target="https://www.rfc-editor.org/info/rfc9147">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author initials="E." surname="Rescorla" fullname="E. Rescorla">
              <organization/>
            </author>
            <author initials="H." surname="Tschofenig" fullname="H. Tschofenig">
              <organization/>
            </author>
            <author initials="N." surname="Modadugu" fullname="N. Modadugu">
              <organization/>
            </author>
            <date year="2022" month="April"/>
          </front>
          <seriesInfo name="RFC" value="9147"/>
          <seriesInfo name="DOI" value="10.17487/RFC9147"/>
        </reference>
        <reference anchor="RFC9325" target="https://www.rfc-editor.org/info/rfc9325">
          <front>
            <title>Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)</title>
            <author initials="Y." surname="Sheffer" fullname="Y. Sheffer">
              <organization/>
            </author>
            <author initials="P." surname="Saint-Andre" fullname="P. Saint-Andre">
              <organization/>
            </author>
            <author initials="T." surname="Fossati" fullname="T. Fossati">
              <organization/>
            </author>
            <date year="2022" month="November"/>
          </front>
          <seriesInfo name="RFC" value="9325"/>
          <seriesInfo name="BCP" value="195"/>
          <seriesInfo name="DOI" value="10.17487/RFC9325"/>
        </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 PUB" value="180-4"/>
          <seriesInfo name="DOI" value="10.6028/NIST.FIPS.180-4"/>
        </reference>
        <reference anchor="SP800-38D">
          <front>
            <title>Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC</title>
            <author initials="M." surname="Dworkin" fullname="M. Dworkin">
              <organization/>
            </author>
            <date year="2007" month="November"/>
          </front>
          <seriesInfo name="NIST SP" value="800-38D"/>
          <seriesInfo name="DOI" value="10.6028/NIST.SP.800-38D"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
          </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"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC9562" target="https://www.rfc-editor.org/info/rfc9562">
          <front>
            <title>Universally Unique IDentifiers (UUIDs)</title>
            <author initials="K." surname="Davis" fullname="K. Davis">
              <organization/>
            </author>
            <author initials="B." surname="Peabody" fullname="B. Peabody">
              <organization/>
            </author>
            <author initials="P." surname="Leach" fullname="P. Leach">
              <organization/>
            </author>
            <date year="2024" month="May"/>
          </front>
          <seriesInfo name="RFC" value="9562"/>
          <seriesInfo name="DOI" value="10.17487/RFC9562"/>
        </reference>
        <reference anchor="I-D.slutsky-homing-pigeon-v2">
          <front>
            <title>Homing Pigeon Message Protocol, Version 2: Determinations, Questions, and Shared Context</title>
            <author initials="A." surname="Slutsky" fullname="Andrew Slutsky">
              <organization/>
            </author>
            <date year="2026" month="October"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-slutsky-homing-pigeon-v2-00"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
