<?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.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-slutsky-homing-pigeon-01" 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-01"/>
    <author initials="A." surname="Slutsky" fullname="Andrew Slutsky">
      <organization>Independent</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 181?>

<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 187?>

<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 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"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </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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
iXxdpSBEBFJ5VUixEdg5cw7qf5jaYVyUKilGqSj5mL1NXP87zVLdbzWGYtEj
BWEZeVLacBtsCVZk640VNDH7jpKu35NuvCXXNF2gAdfSJ7obp8tlstKU1D4J
cEKbmLg8sNrJHIc5yz8bjjdT7VvPRZVkJ+qdkeScQXrSIf1xS35vSLmJ4mkF
aPd+5ysxBks8chgqzz40hsawJY2wsmA1tgh5LSKE43nfbnspg/ZAGjXpux7o
B0mxNrYRWSyFWobuPxGGsXe8qlCd/aRSa6djpRj99oLqYbmrzpxfQVaPa05v
aIQv6R8cutAmVl4nAMuwQT98fPv2xYcsCnzwS5FqLLG0ZLX4El8DDggONaXV
pTcHaSSjGNJi5wRkTZLfeukJdFXwFLxQjhhr9V7dxvUPmvQWiPl48VamuKAJ
MYFbbn5mhuvQZ8JffTMCpDjCeLEQg6S0GgMaXJs7csRl1H3q8YaVIUqoPuq3
gbIEnQIfhNOJd9/qM+FjtbgGQoQ1tlitccK1bBJnUEs02JjaZ/0ruJkmILZa
4qOj2peNhoUksliULZE2ofVYaQKL6jzdYDVg9fUOLF9LFcT+byvZQcQg5NyM
1qG59ZgTOsXsH+8mj6sGqk316BSZ1ptehnJSVnPtvfDLXtgrEl+v8nk5WyNT
dm85yxuI6ZxZW7lP+oheIrl79bmVTYvi0sKdPkXtHOjtv+656d7fNl629XzS
GAqHVw//9gUze0rDHc6ameP1WAVv2zb/yAW+o15klriq+W4P89kdwp+G9hFy
B4Z+/OgFTMMPb4fCir24qgvscm1TjjMLINN3G21syr2N95kY6LiatGe2VAXp
MKp4Zn1pojIehnND2EOGISPRNheUWXubM+3ldVhRNmfqp/gv0Y7c8oaEYXZw
uXydkEONPUryKcQrJ2Im+tnTnIIVNOvQowgBxVq6SPykQwjwPB9X/AdjD/5g
TsEw34I5Ctm8vr7Vq+plGin4KvYkFjWTsvOSLgJQSNm84Qam6dCmwNnPAAL7
Ey1ybaM0iG+H0kOsoVTSxs5t28sZmksRHEjmKHJn2CFiEoOdQwC4ihy/oDGW
ttB1M60Wtkz92IK7UZVurvXZ8HhfoL+azbACvxpdA4JJPjVVNXOMPkYXCDZC
xbkMbtf7sJz08RxLR3r+Tn3komJaREzbXfz+7PJV3xeiYISzdmpaxaK2PfqP
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
iHtR3iw17FfwqNMj6MN20fk/imy6ofgHAQA=

-->

</rfc>
