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


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

<!ENTITY RFC8032 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8032.xml">
<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC7946 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7946.xml">
]>


<rfc ipr="trust200902" docName="draft-koga-warn-00" category="exp" submissionType="independent">
  <front>
    <title abbrev="WARN">Wire-format Alerting for Risk Notification</title>

    <author initials="S." surname="Koga" fullname="Shunta Koga">
      <organization></organization>
      <address>
        <email>kogashunta@gmail.com</email>
      </address>
    </author>

    <date year="2026" month="May" day="10"/>

    <area>art</area>
    
    

    <abstract>


<?line 31?>

<t>This document describes WARN, a transport-agnostic compact binary wire protocol used for emergency alerts under constrained hardware and lossy networks. It is designed to reach farther and quicker than OASIS CAP, which tries to deliver full human-readable information at the cost of complexity. It primarily uses fixed fields, with support for TLVs when more expressiveness is required. It also has a mandatory signature to prevent fake alerts propagating through a mesh.</t>



    </abstract>



  </front>

  <middle>


<?line 35?>

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

<t>The current emergency alert infrastructure, <xref target="CAP"/> is flexible and widely deployed, but the structure inherently bears complexity which may fail under extreme conditions such as lossy networks and overloaded devices (i.e. potential outcomes of emergency situations).</t>

<t>This document defines a protocol aimed to be maximally resilient, distributed, and lightweight to mitigate those points.</t>

</section>
<section anchor="motivation"><name>Motivation</name>

<section anchor="issues-of-existing-solutions"><name>Issues of Existing Solutions</name>

<t><list style="symbols">
  <t>Lack of efficient internationalization
  <list style="symbols">
      <t>The size of messages multiply with internationalization.</t>
    </list></t>
  <t>Unbounded
  <list style="symbols">
      <t>On systems that lack proper amounts of available memory, CAP may overwhelm the chip, given that its length is not hard-capped.</t>
    </list></t>
  <t>Centralized
  <list style="symbols">
      <t>Even though the networking around the alert origin may be robust, bottlenecks may exist at any point in between the central origin and client.</t>
      <t>Physical interruptions of the network may cause connections to fault, and may require an expensive route change.</t>
      <t>The amount of connections the origin can juggle simultaneously limits the amount of clients that can receive CAP XML alerts.</t>
    </list></t>
  <t>Complex
  <list style="symbols">
      <t>XML is hierarchical, and you need to parse the whole tree to fetch information safely.</t>
      <t>CAP is too flexible and tolerant of duplicate fields in arbitrary order.</t>
      <t>Pushing multimedia through emergency pipelines increases the risk of corruption and/or incomplete messages.</t>
    </list></t>
  <t>Insecure
  <list style="symbols">
      <t>No legitimate enforcement on signing.</t>
    </list></t>
  <t>Demanding
  <list style="symbols">
      <t>Memory requirement is theoretically unbound due to CAP being unbound.</t>
      <t>Media interpretation requires mature, complex libraries.</t>
      <t>Realistically requires a whole OS to be running to make use of CAP.</t>
    </list></t>
</list></t>

</section>
<section anchor="design-goals"><name>Design Goals</name>

<t><list style="symbols">
  <t>Minimal alert-plane packet
  <list style="symbols">
      <t>Single UDP datagram</t>
      <t>Signed, verifiable, immutable</t>
    </list></t>
  <t>Best-effort propagation
  <list style="symbols">
      <t>Time-bounded spread</t>
      <t>Geographic advisory bounds</t>
    </list></t>
  <t>Two-plane architecture
  <list style="symbols">
      <t>Alert-plane: eager, proactive, stateless</t>
      <t>Info-plane: lazy, optional (not specified here)</t>
    </list></t>
  <t>Compatibility
  <list style="symbols">
      <t>Be easily convertible from existing formats (e.g., CAP)</t>
      <t>Allow future extensions without breaking existing implementations</t>
    </list></t>
  <t>Strong authenticity
  <list style="symbols">
      <t>Alerts are valid only if signed by an Alert Origin key</t>
      <t>Relay "trust" does not imply alert validity</t>
    </list></t>
  <t>no_std / zero-copy friendly
  <list style="symbols">
      <t>Fixed layouts</t>
      <t>Explicit bounds</t>
      <t>No required allocation</t>
    </list></t>
  <t>MTU safety
  <list style="symbols">
      <t>Recommended UDP payload &lt;= 1200 bytes</t>
    </list></t>
  <t>Lightweight
  <list style="symbols">
      <t>Be able to run on minimal hardware</t>
    </list></t>
</list></t>

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

<section anchor="normative-language"><name>Normative 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="versioning"><name>Versioning</name>

<t>WARN uses a two-level versioning scheme to distinguish wire incompatibility from backward-compatible extensions.</t>

<t><list style="symbols">
  <t>Major version (<spanx style="verb">version_major</spanx>)
  <list style="symbols">
      <t>A change in major version indicates wire-incompatible changes.</t>
      <t>If <spanx style="verb">version_major</spanx> is greater than the highest version supported by the implementation, the packet <bcp14>MUST NOT</bcp14> be fully interpreted.</t>
      <t>Implementations <bcp14>MAY</bcp14> parse only the common prefix for the purposes of safe rejection, logging, or routing, but <bcp14>MUST</bcp14> treat the packet as unsupported.</t>
      <t>No compatibility guarantees are provided across major versions.</t>
      <t>If <spanx style="verb">version_major</spanx> is zero, the packet is considered invalid.</t>
    </list></t>
  <t>Minor version (<spanx style="verb">version_minor</spanx>)
  <list style="symbols">
      <t>A change in minor version indicates a backward-compatible extension within the same major version.</t>
      <t>Minor version updates <bcp14>MUST NOT</bcp14> change the meaning of any field defined in the current major version.</t>
      <t>Minor version updates <bcp14>MAY</bcp14>:
      <list style="symbols">
          <t>define new flag bits (previously RESERVED),</t>
          <t>define new TLV types,</t>
          <t>define new <spanx style="verb">hazard_minor</spanx> values,</t>
          <t>add new semantics that can be safely ignored by older implementations.</t>
        </list></t>
      <t>However, keeping up to date is strongly recommended.</t>
      <t>Receivers <bcp14>MUST</bcp14> ignore unknown flag bits and unknown TLV types.</t>
    </list></t>
</list></t>

</section>
<section anchor="time"><name>Time</name>

<t><list style="symbols">
  <t>UNIX seconds (UTC), <spanx style="verb">u64</spanx>.</t>
  <t>Method of syncing time is dependent on hardware and medium.</t>
</list></t>

</section>
<section anchor="geographic-encoding"><name>Geographic Encoding</name>

<t>Latitude and longitude are signed <spanx style="verb">i32</spanx> in 100-nanodegree units (1e-7 degrees).</t>

<t>Ranges:</t>

<t><list style="symbols">
  <t>latitude: -900_000_000 ... +900_000_000</t>
  <t>longitude: -1_800_000_000 ... +1_800_000_000</t>
</list></t>

</section>
<section anchor="distance"><name>Distance</name>

<t>Distance is encoded as 10-meter units:</t>

<t><list style="symbols">
  <t>Stored value: <spanx style="verb">radius_10m</spanx> (<spanx style="verb">u16</spanx>)</t>
  <t>Real meters: <spanx style="verb">affected_radius_m = radius_10m x 10</spanx></t>
  <t>Used for propagation decisions (see <xref target="geographic-bounding"/>)</t>
  <t>A value of 0 indicates "unknown" or "see polygon TLV"</t>
</list></t>

</section>
<section anchor="authority-model"><name>Authority Model</name>

<t><list style="symbols">
  <t>ALERT validity requires:
  <list style="numbers" type="1">
      <t>A valid Ed25519 signature, AND</t>
      <t>The signing key being present in the local Origin Registry (registry format defined in <xref target="origin-registry-format"/>).</t>
    </list></t>
  <t>On-wire packets DO NOT embed public keys in v1.0.</t>
  <t>The packet identifies the signing key by <spanx style="verb">origin_key_id</spanx>.</t>
</list></t>

</section>
</section>
<section anchor="common-prefix-all-packets"><name>Common Prefix (All Packets)</name>

<t>Total size: 8 bytes</t>

<texttable>
      <ttcol align='left'>Offset</ttcol>
      <ttcol align='left'>Size</ttcol>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0x00</c>
      <c>4</c>
      <c>magic</c>
      <c><spanx style="verb">u8[4]</spanx></c>
      <c>ASCII "WARN"</c>
      <c>0x04</c>
      <c>1</c>
      <c>version_major</c>
      <c>u8</c>
      <c>v1.0 -&gt; 1</c>
      <c>0x05</c>
      <c>1</c>
      <c>version_minor</c>
      <c>u8</c>
      <c>v1.0 -&gt; 0</c>
      <c>0x06</c>
      <c>2</c>
      <c>flags</c>
      <c>u16</c>
      <c>See <xref target="flags"/></c>
      <c>0x08</c>
      <c>...</c>
      <c>payload</c>
      <c>-</c>
      <c>ALERT or non-ALERT fields</c>
</texttable>

<t>Notes:</t>

<t><list style="symbols">
  <t>The signed region is <spanx style="verb">[0x00, packet_len - 64)</spanx> for signed packets.</t>
  <t>The signature is always the last 64 bytes of signed packets.</t>
</list></t>

</section>
<section anchor="flags"><name>Flags</name>

<t>Bit numbering: Bit 0 is the most significant bit (MSB).</t>

<texttable>
      <ttcol align='left'>Bit</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c>0</c>
      <c>ALERT</c>
      <c>This is an ALERT packet</c>
      <c>1</c>
      <c>URGENT</c>
      <c>Forward with priority</c>
      <c>2</c>
      <c>UPDATE</c>
      <c>Revision of existing event</c>
      <c>3</c>
      <c>CANCEL</c>
      <c>Cancels an existing event</c>
      <c>4</c>
      <c>TEST</c>
      <c>Test alert</c>
      <c>5-15</c>
      <c>RESERVED</c>
      <c>Unused in v1; <bcp14>MUST</bcp14> be ignored by receivers</c>
</texttable>

</section>
<section anchor="alert-packet"><name>ALERT Packet</name>

<section anchor="fixed-alert-fields"><name>Fixed ALERT Fields</name>

<texttable>
      <ttcol align='left'>Offset</ttcol>
      <ttcol align='left'>Size</ttcol>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <c>0x08</c>
      <c>8</c>
      <c>timestamp_s</c>
      <c>u64</c>
      <c>0x10</c>
      <c>4</c>
      <c>event_id</c>
      <c>u32</c>
      <c>0x14</c>
      <c>2</c>
      <c>seq</c>
      <c>u16</c>
      <c>0x16</c>
      <c>2</c>
      <c>ttl_s</c>
      <c>u16</c>
      <c>0x18</c>
      <c>1</c>
      <c>hazard_major</c>
      <c>u8</c>
      <c>0x19</c>
      <c>1</c>
      <c>hazard_minor</c>
      <c>u8</c>
      <c>0x1A</c>
      <c>1</c>
      <c>urgency</c>
      <c>u8</c>
      <c>0x1B</c>
      <c>1</c>
      <c>severity</c>
      <c>u8</c>
      <c>0x1C</c>
      <c>1</c>
      <c>certainty</c>
      <c>u8</c>
      <c>0x1D</c>
      <c>1</c>
      <c>response</c>
      <c>u8</c>
      <c>0x1E</c>
      <c>8</c>
      <c>onset_s</c>
      <c>u64</c>
      <c>0x26</c>
      <c>8</c>
      <c>expiry_s</c>
      <c>u64</c>
      <c>0x2E</c>
      <c>8</c>
      <c>effective_time_s</c>
      <c>u64</c>
      <c>0x36</c>
      <c>4</c>
      <c>epicenter_lat</c>
      <c>i32</c>
      <c>0x3A</c>
      <c>4</c>
      <c>epicenter_lon</c>
      <c>i32</c>
      <c>0x3E</c>
      <c>2</c>
      <c>radius_10m</c>
      <c>u16</c>
      <c>0x40</c>
      <c>N</c>
      <c>signed_tlv</c>
      <c>bytes</c>
</texttable>

<t>Field descriptions:</t>

<t><list style="symbols">
  <t><spanx style="verb">timestamp_s</spanx>: The time this alert was issued</t>
  <t><spanx style="verb">event_id</spanx>: The root ID that this event has. Subsequent updates or queries to a database will utilize this specific key.</t>
  <t><spanx style="verb">ttl_s</spanx>: The baseline amount of time relays <bcp14>SHOULD</bcp14> propagate for.</t>
  <t><spanx style="verb">hazard_major</spanx>, <spanx style="verb">hazard_minor</spanx>, <spanx style="verb">urgency</spanx>, <spanx style="verb">certainty</spanx>, <spanx style="verb">response</spanx>: Specified in <xref target="value-tables"/>.</t>
  <t><spanx style="verb">onset_s</spanx>: When the alert becomes active</t>
  <t><spanx style="verb">expiry_s</spanx>: When the alert expires</t>
  <t><spanx style="verb">effective_time_s</spanx>: When the event actually occurred or will occur</t>
  <t><spanx style="verb">epicenter_lat</spanx>, <spanx style="verb">epicenter_lon</spanx>: Epicenter coordinates in 100-nanodegree units (see <xref target="geographic-encoding"/>).</t>
  <t><spanx style="verb">radius_10m</spanx>: Affected radius used for propagation decisions (see <xref target="geographic-bounding"/>)</t>
</list></t>

<t>Deriving signed_tlv bounds:
The signed TLV block has no explicit length field. Bounds are derived from the transport-provided packet length:</t>

<t><list style="symbols">
  <t><spanx style="verb">signed_tlv</spanx> starts at offset <spanx style="verb">0x40</spanx></t>
  <t><spanx style="verb">signed_tlv</spanx> ends at <spanx style="verb">packet_len - 68</spanx> (68 = 4 origin_key_id + 64 signature)</t>
  <t>Receivers <bcp14>MUST</bcp14> validate: <spanx style="verb">packet_len &gt;= 0x40 + 68</spanx> (i.e., <spanx style="verb">packet_len &gt;= 132</spanx>)</t>
</list></t>

</section>
<section anchor="signature-block"><name>Signature Block</name>

<t>Immediately follows <spanx style="verb">signed_tlv</spanx>:</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Size</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>origin_key_id</c>
      <c>4</c>
      <c>Identifies the signing key in the Origin Registry (<xref target="origin-registry-format"/>)</c>
      <c>signature</c>
      <c>64</c>
      <c>Ed25519 signature</c>
</texttable>

<t><list style="symbols">
  <t>Algorithm: Ed25519 <xref target="RFC8032"/> (required)</t>
  <t>Signed region: <spanx style="verb">[0x00, packet_len - 64)</spanx>(covers Common Prefix + ALERT fields + signed_tlv + origin_key_id).</t>
  <t>Receivers <bcp14>MUST</bcp14> resolve <spanx style="verb">origin_key_id</spanx> via the Origin Registry and reject if not present.</t>
  <t>Receivers <bcp14>MUST</bcp14> verify the signature before acting on any ALERT field.</t>
</list></t>

</section>
</section>
<section anchor="value-tables"><name>Value Tables</name>

<t>These list the possible values for fields in WARN ALERT packets. Most fields are designed to reflect CAP.
For advanced meanings of these values, refer to the OASIS <xref target="CAP"/> specs Section 3.2.2.
Refer to Section 9 for the tables.</t>

<t>NOTE: additional <spanx style="verb">hazard_minor</spanx> values are to be determined. Should be able to convert from all preexisting CAP messages which have been produced using this table.</t>

</section>
<section anchor="event-identity-and-updates"><name>Event Identity and Updates</name>

<t><list style="symbols">
  <t><spanx style="verb">event_id</spanx> identifies a physical event.</t>
  <t><spanx style="verb">seq</spanx> is monotonic per event, starting from 0.</t>
  <t><spanx style="verb">seq</spanx> <bcp14>MUST NOT</bcp14> overflow. In the case <spanx style="verb">seq</spanx> reaches 65535, the origin <bcp14>MUST</bcp14> re-issue an alert with a REPLACES TLV, and that alert <bcp14>SHOULD</bcp14> be URGENT.</t>
</list></t>

<t>Receiver rules:</t>

<t><list style="symbols">
  <t>seq &lt; highest_seen -&gt; drop</t>
  <t>seq == highest_seen -&gt; drop duplicate</t>
  <t>seq &gt; highest_seen -&gt; accept update, advance highest_seen</t>
</list></t>

<t>Deduplication state per event:</t>

<figure><artwork><![CDATA[
(origin_key_id, event_id) -> highest_seq: u16
]]></artwork></figure>

<section anchor="cancel-semantics"><name>CANCEL Semantics</name>

<t>A packet with the CANCEL flag set cancels the event identified by <spanx style="verb">event_id</spanx>.</t>

<t><list style="symbols">
  <t>CANCEL packets <bcp14>MUST</bcp14> carry a <spanx style="verb">seq</spanx> strictly greater than the highest previously accepted <spanx style="verb">seq</spanx> for that event.</t>
  <t>Upon accepting a CANCEL, receivers <bcp14>MUST</bcp14> immediately expire the event and cease acting on it.</t>
  <t>The CANCEL's deduplication entry <bcp14>MUST</bcp14> persist in the replay cache for at least <spanx style="verb">ttl_s</spanx> seconds measured from the CANCEL packet's own <spanx style="verb">timestamp_s</spanx>. This prevents late-arriving retransmissions of the original alert from slipping through after the CANCEL entry expires.</t>
</list></t>

</section>
</section>
<section anchor="signed-tlv-format"><name>Signed TLV Format</name>

<t>TLV layout:</t>

<t><list style="symbols">
  <t>type: u8</t>
  <t>len: u8</t>
  <t>val: <spanx style="verb">u8[len]</spanx></t>
</list></t>

<t>Rules:</t>

<t><list style="symbols">
  <t>Unknown TLVs <bcp14>MUST</bcp14> be ignored.</t>
  <t>TLVs <bcp14>MUST NOT</bcp14> be required for core safety behavior.</t>
</list></t>

<t>TLVs:</t>

<t><list style="symbols">
  <t>0x00 UNUSED</t>
  <t>0x01 HAZARD_NAME (UTF-8)</t>
  <t>0x02 POLYGON <spanx style="verb">((i32, i32)[])</spanx>
  <list style="symbols">
      <t>POLYGON <bcp14>MUST</bcp14> contain no less than 3 points and no more than 8 points.</t>
      <t>POLYGON points <bcp14>MUST</bcp14> be closed, and <bcp14>MUST</bcp14> be ordered in a counterclockwise fashion, abiding to <xref target="RFC7946"/>.</t>
      <t>POLYGON points <bcp14>MUST</bcp14> be the latitude and longitude of the point in 100-nanodegree units (see <xref target="geographic-encoding"/>).</t>
    </list></t>
  <t>0x03 REPLACES <spanx style="verb">(u32[])</spanx>
  <list style="symbols">
      <t>This is for when an alert origin issues an alert which may replace another for a variety of reasons, such as prevention of <spanx style="verb">seq</spanx> overflow, merging of two alerts, etc. An alert replacing another <bcp14>SHOULD</bcp14> be marked as URGENT.</t>
    </list></t>
</list></t>

</section>
<section anchor="forwarding-semantics-alert"><name>Forwarding Semantics (ALERT)</name>

<section anchor="time-based-ttl"><name>Time-Based TTL</name>

<t>The <spanx style="verb">ttl_s</spanx> field represents how many seconds the packet is permitted to spread.</t>

<t>Conceptual rule:</t>

<figure><artwork><![CDATA[
age_s = now_s - timestamp_s
if age_s > ttl_s -> SHOULD NOT forward
]]></artwork></figure>

</section>
<section anchor="geographic-bounding"><name>Geographic Bounding</name>

<t><list style="symbols">
  <t>Relays <bcp14>SHOULD</bcp14> drop packets outside <spanx style="verb">radius_10m x 10</spanx> meters.
  <list style="symbols">
      <t>If a relay does not know its own location, it <bcp14>MUST</bcp14> propagate.</t>
    </list></t>
</list></t>

</section>
<section anchor="forwarding-strategy"><name>Forwarding Strategy</name>

<t><list style="symbols">
  <t>Stateless fan-out</t>
  <t>Medium-dependent congestion control</t>
</list></t>

</section>
<section anchor="forwarding-exceptions"><name>Forwarding Exceptions</name>

<t>Under any of the conditions specified below, alerts <bcp14>MAY</bcp14> be propagated regardless of ttl and geographic bounding.</t>

<t><list style="symbols">
  <t>When a relay has a record of that specific event ID in its cache and it receives an alert with higher <spanx style="verb">seq</spanx>.</t>
  <t>When a relay is unsure of its own time, or if it may have a skewed clock for any reason.</t>
  <t>When a transport medium is known to have a slow transport speed.</t>
</list></t>

</section>
</section>
<section anchor="non-alert-packets"><name>Non-ALERT Packets</name>

<section anchor="fixed-headers"><name>Fixed Headers</name>

<texttable>
      <ttcol align='left'>Offset</ttcol>
      <ttcol align='left'>Size</ttcol>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <c>0x08</c>
      <c>2</c>
      <c>kind</c>
      <c>u16</c>
      <c>0x0A</c>
      <c>...</c>
      <c>general payload</c>
      <c>-</c>
</texttable>

<t>The <spanx style="verb">kind</spanx> field identifies the packet type. All non-ALERT packets share this header immediately after the Common Prefix.</t>

<t>Receivers <bcp14>MUST</bcp14> silently drop any packet whose <spanx style="verb">kind</spanx> is unknown or whose <spanx style="verb">kind</spanx> belongs to a different transport's range.</t>

</section>
<section anchor="warn-reserved-ranges"><name>WARN Reserved Ranges</name>

<t>The table of reservations for WARN 1.0 is as follows.</t>

<texttable>
      <ttcol align='left'>Range/Value</ttcol>
      <ttcol align='left'>Category</ttcol>
      <c>0x0000</c>
      <c>RESERVED(invalid)</c>
      <c>0x0001-0x00FF</c>
      <c>WARN</c>
      <c>0x0100-0x01FF</c>
      <c>IPWARN</c>
      <c>0x0200-0xFEFF</c>
      <c>Future use</c>
      <c>0xFF00-0xFFFE</c>
      <c>Private use</c>
      <c>0xFFFF</c>
      <c>RESERVED(invalid)</c>
</texttable>

</section>
</section>
<section anchor="non-alert-reserved-packet-kinds"><name>Non-ALERT Reserved Packet Kinds</name>

<t>All ADVISORY packets <bcp14>MUST</bcp14> be signed by the master origin key. Signing is determined by <spanx style="verb">kind</spanx>, not by a flag.</t>

<t>Receivers <bcp14>MUST</bcp14>:</t>

<t><list style="symbols">
  <t>Verify the Ed25519 signature over the signed region <spanx style="verb">[0x00, packet_len - 64)</spanx> if they exist.</t>
  <t>Drop the packet if verification fails.</t>
  <t>Drop the packet if <spanx style="verb">kind</spanx> is unknown.</t>
  <t>Drop the packet if <spanx style="verb">new_registry_version</spanx> is less than or equal to its own registry's version.</t>
</list></t>

<section anchor="advisory-signature-block"><name>Advisory Signature Block</name>

<t>Immediately follows the kind-specific payload:</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Size</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>signature</c>
      <c>64</c>
      <c>Ed25519 signature over <spanx style="verb">[0x00, packet_len - 64)</spanx></c>
</texttable>

</section>
<section anchor="advisory-kind-assignments"><name>Advisory Kind Assignments</name>

<texttable>
      <ttcol align='left'>Kind</ttcol>
      <ttcol align='left'>Name</ttcol>
      <c>0x0001</c>
      <c>ADVISORY_NEW</c>
      <c>0x0002</c>
      <c>ADVISORY_REVOKE</c>
      <c>0x0003</c>
      <c>ADVISORY_RETIRE</c>
      <c>0x0004</c>
      <c>ADVISORY_UPDATE</c>
      <c>0x0005</c>
      <c>ADVISORY_REGISTRY_REFRESH</c>
</texttable>

</section>
<section anchor="advisorynew-0x0001"><name>ADVISORY_NEW (0x0001)</name>

<t>Registers a new alert origin. Receivers <bcp14>MUST</bcp14> add the entry to their local registry and update their stored registry version to <spanx style="verb">new_registry_version</spanx>. In the case nodes receive a valid ADVISORY_NEW packet that collides with the current registry, nodes <bcp14>MUST</bcp14> drop that packet and refuse update, and <bcp14>SHOULD</bcp14> do a full resync of its local origin registry.</t>

<texttable>
      <ttcol align='left'>Offset</ttcol>
      <ttcol align='left'>Size</ttcol>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <c>0x0A</c>
      <c>8</c>
      <c>new_registry_version</c>
      <c>u64</c>
      <c>0x12</c>
      <c>4</c>
      <c>origin_key_id</c>
      <c>u32</c>
      <c>0x16</c>
      <c>32</c>
      <c>pubkey_ed25519</c>
      <c><spanx style="verb">u8[32]</spanx></c>
</texttable>

<t>Minimum packet size: 8 (prefix) + 2 (kind) + 44 (payload) + 64 (signature) = 118 bytes</t>

</section>
<section anchor="advisoryrevoke-0x0002"><name>ADVISORY_REVOKE (0x0002)</name>

<t>Emergency revocation of a compromised or rogue alert origin. Receivers <bcp14>MUST</bcp14> immediately remove the identified origin from their local registry and reject any further ALERTs signed by it, regardless of signature validity.</t>

<t>This packet <bcp14>SHOULD</bcp14> have URGENT set.</t>

<texttable>
      <ttcol align='left'>Offset</ttcol>
      <ttcol align='left'>Size</ttcol>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <c>0x0A</c>
      <c>8</c>
      <c>new_registry_version</c>
      <c>u64</c>
      <c>0x12</c>
      <c>4</c>
      <c>origin_key_id</c>
      <c>u32</c>
</texttable>

<t>Minimum packet size: 8 + 2 + 12 + 64 = 86 bytes</t>

</section>
<section anchor="advisoryretire-0x0003"><name>ADVISORY_RETIRE (0x0003)</name>

<t>Planned decommission of an alert origin. Receivers <bcp14>MUST</bcp14> remove the identified origin from their local registry and update their stored registry version.</t>

<t>Unlike ADVISORY_REVOKE, retirement is planned and does not imply compromise. URGENT <bcp14>SHOULD NOT</bcp14> be set.</t>

<texttable>
      <ttcol align='left'>Offset</ttcol>
      <ttcol align='left'>Size</ttcol>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <c>0x0A</c>
      <c>8</c>
      <c>new_registry_version</c>
      <c>u64</c>
      <c>0x12</c>
      <c>4</c>
      <c>origin_key_id</c>
      <c>u32</c>
</texttable>

<t>Minimum packet size: 86 bytes</t>

</section>
<section anchor="advisoryupdate-0x0004"><name>ADVISORY_UPDATE (0x0004)</name>

<t>Notifies nodes of a scheduled WARN protocol update. Implementations <bcp14>MAY</bcp14> ignore it. It carries no enforcement.</t>

<texttable>
      <ttcol align='left'>Offset</ttcol>
      <ttcol align='left'>Size</ttcol>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <c>0x0A</c>
      <c>1</c>
      <c>version_major</c>
      <c>u8</c>
      <c>0x0B</c>
      <c>1</c>
      <c>version_minor</c>
      <c>u8</c>
      <c>0x0C</c>
      <c>8</c>
      <c>scheduled_update_s</c>
      <c>u64</c>
</texttable>

<t>Minimum packet size: 8 + 2 + 10 + 64 = 84 bytes</t>

</section>
<section anchor="advisoryregistryrefresh-0x0005"><name>ADVISORY_REGISTRY_REFRESH (0x0005)</name>

<t>Signals that the registry has been updated and nodes <bcp14>SHOULD</bcp14> re-sync via the info-plane. Carries the authoritative current registry version so receivers can determine whether they are behind.</t>

<texttable>
      <ttcol align='left'>Offset</ttcol>
      <ttcol align='left'>Size</ttcol>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <c>0x0A</c>
      <c>8</c>
      <c>current_registry_version</c>
      <c>u64</c>
</texttable>

<t>Receivers that find their local registry version behind <spanx style="verb">current_registry_version</spanx> <bcp14>SHOULD</bcp14> fetch the full registry from the info-plane.</t>

<t>Minimum packet size: 8 + 2 + 8 + 64 = 82 bytes</t>

</section>
</section>
<section anchor="seeding-model"><name>Seeding Model</name>

<t><list style="symbols">
  <t>Alert Origin: signs and issues ALERT packets.</t>
  <t>Data Relay: receives alerts from Alert Origins and performs first-hop seeding into the mesh.</t>
</list></t>

<t>Goals:</t>

<t><list style="symbols">
  <t>Multiple independent entry points into the mesh</t>
  <t>Delivery over precision</t>
</list></t>

<t>All alert-plane propagation from Alert Origins <bcp14>MUST</bcp14> pass through at least one Data Relay before reaching leaf clients. General WARN coordination packets <bcp14>MAY</bcp14> originate from any node. Transport-specific seeding rules (relay discovery, registration, forwarding topology) are defined in per-transport specifications. See WARNIP.</t>

</section>
<section anchor="freshness-and-replay-windows"><name>Freshness and Replay Windows</name>

<t><bcp14>REQUIRED</bcp14> cache length:</t>

<t><list style="symbols">
  <t>Replay cache duration &gt;= ttl_s</t>
</list></t>

</section>
<section anchor="transport-constraints"><name>Transport Constraints</name>

<t>Transport-specific constraints such as NAT traversal, port binding, and client keepalive are defined in per-transport specifications.</t>

</section>
<section anchor="compliance-targets"><name>Compliance Targets</name>

<section anchor="relay-must"><name>Relay MUST</name>

<t><list style="symbols">
  <t>Bounds-check packets</t>
  <t>Resolve <spanx style="verb">origin_key_id</spanx> via Origin Registry</t>
  <t>Verify signature</t>
  <t>Enforce time-based TTL</t>
  <t>Enforce replay protection</t>
  <t>Forward immutable packets</t>
</list></t>

</section>
<section anchor="client-must"><name>Client MUST</name>

<t><list style="symbols">
  <t>Bounds-check packets</t>
  <t>Resolve <spanx style="verb">origin_key_id</spanx> via Origin Registry</t>
  <t>Verify signature</t>
  <t>Enforce freshness</t>
</list></t>

</section>
</section>
<section anchor="reference-sizes-alert-no-tlv"><name>Reference Sizes (ALERT, no TLV)</name>

<t><list style="symbols">
  <t>Common prefix: 8 bytes</t>
  <t>ALERT fixed fields: 56 bytes</t>
  <t>Signature block: 68 bytes</t>
  <t>Total: 132 bytes</t>
</list></t>

</section>
<section anchor="origin-registry-format"><name>Origin Registry Format</name>

<t>This section defines a simple local file or in-memory region that maps <spanx style="verb">origin_key_id</spanx> -&gt; public key.</t>

<t>This file is NOT transmitted on the alert-plane. How it is distributed/updated is out of scope.</t>

<section anchor="top-level-structure"><name>Top-Level Structure</name>

<t><list style="symbols">
  <t><spanx style="verb">registry_version</spanx>: u64, used to manage deltas and versions. The registry version <bcp14>MUST</bcp14> monotonically increase. This <bcp14>MUST</bcp14> match the newest version that the node has obtained, either via a sync or ADVISORY.</t>
</list></t>

</section>
<section anchor="origin-entry"><name>Origin Entry</name>

<t>Each entry <bcp14>MUST</bcp14> contain:</t>

<t><list style="symbols">
  <t><spanx style="verb">origin_key_id</spanx>: integer (must fit u32)</t>
  <t><spanx style="verb">pubkey</spanx>: Raw Ed25519 public key (32 bytes)</t>
</list></t>

</section>
<section anchor="required-receiver-behavior-authorization"><name>Required Receiver Behavior (Authorization)</name>

<t>Receivers <bcp14>MUST</bcp14>:</t>

<t><list style="symbols">
  <t>Reject ALERTs if <spanx style="verb">origin_key_id</spanx> does not exist in the registry.</t>
  <t>Verify Ed25519 signature using the registry pubkey.</t>
  <t>Remove origins immediately upon receiving a valid ADVISORY_REVOKE or ADVISORY_RETIRE signed by the master origin.</t>
</list></t>

</section>
</section>
<section anchor="mesh-isolation"><name>Mesh Isolation</name>

<t>Although WARN alerts are made to be usable in any region, nations <bcp14>SHOULD</bcp14> isolate their mesh against potential attacks by neighboring nations via a false alert. In such cases, nations <bcp14>SHOULD</bcp14> compile in their own keys for their nation, and isolate their trust system.</t>

</section>
<section anchor="transportation-and-auxiliary-infrastructure"><name>Transportation and Auxiliary Infrastructure</name>

<t>WARN only declares the common protocol which all devices using WARN must be able to parse. Therefore info-plane schemas, key distribution, and propagation will be medium-dependent. There are other specifications that are dependent on the medium, such as IP.
Other mediums may distribute WARN messages natively with medium-specific framing. The auxiliary data may change, but the WARN packet itself will be preserved.</t>

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

<t>The security and validity of WARN effectively relies on a single master key, which should be kept airtight, preferably using an HSM or equivalent security measure. If the master key is compromised, then a large-scale firmware update would be necessary for resetting keys.</t>

<t>Alert origins should keep their private keys secure, but in the case of a compromise, the master key should be able to revoke the compromised key fairly quickly.
Malicious alert relays will not be able to issue alerts or affect another node unless they have a origin private key, and complying implementations will be able to drop invalid packets either forged by a node or replayed from a previous time.
A malicious fleet of relays can "dilute" the mesh depending on the medium. On mediums such as IP, if a fleet of relays register but drop packets on a real emergency alert, they may degrade the resilience of the network.
A malicious fleet of relays will be able to effectively do a DoS attack on a relay to overwhelm its ability to process and validate the costly Ed25519 signature.</t>

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

<t>IANA will create a new registry group called "WARN." This group includes the "WARN Hazard Codes" "WARN Assigned Ranges" "WARN Advisory Codes" "WARN Response" "WARN Urgency" "WARN Severity" "WARN Certainty" registries described below.</t>

<section anchor="warn-hazard-codes"><name>WARN Hazard Codes</name>

<t>IANA will create the following registry:</t>

<t>Registry Name: WARN Hazard Codes</t>

<t>Registration Procedure: RFC Required</t>

<t>NOTE: The complete values of this table are TBD.</t>

<texttable>
      <ttcol align='left'>hazard_major</ttcol>
      <ttcol align='left'>hazard_minor</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c>0</c>
      <c>0</c>
      <c>RESERVED (invalid)</c>
      <c>1</c>
      <c>0</c>
      <c>Geophysical Unknown</c>
      <c>1</c>
      <c>1</c>
      <c>Earthquake</c>
      <c>1</c>
      <c>2</c>
      <c>Landslide</c>
      <c>1</c>
      <c>3</c>
      <c>Tsunami</c>
      <c>2</c>
      <c>0</c>
      <c>Meteorological Unknown</c>
      <c>2</c>
      <c>1</c>
      <c>Storm</c>
      <c>2</c>
      <c>2</c>
      <c>Flood</c>
      <c>3</c>
      <c>0</c>
      <c>Safety Unknown</c>
      <c>4</c>
      <c>0</c>
      <c>Security Unknown</c>
      <c>4</c>
      <c>1</c>
      <c>Terrorism</c>
      <c>4</c>
      <c>2</c>
      <c>Military Activity</c>
      <c>5</c>
      <c>0</c>
      <c>Rescue Unknown</c>
      <c>6</c>
      <c>0</c>
      <c>Fire Unknown</c>
      <c>6</c>
      <c>1</c>
      <c>Wildfire</c>
      <c>6</c>
      <c>2</c>
      <c>City Fire</c>
      <c>6</c>
      <c>3</c>
      <c>Prescribed Fire</c>
      <c>7</c>
      <c>0</c>
      <c>Health Unknown</c>
      <c>8</c>
      <c>0</c>
      <c>Environmental Unknown</c>
      <c>8</c>
      <c>1</c>
      <c>Air pollution</c>
      <c>9</c>
      <c>0</c>
      <c>Transport Unknown</c>
      <c>0x0A</c>
      <c>0</c>
      <c>Infra Unknown</c>
      <c>0x0B</c>
      <c>0</c>
      <c>CBRNE Unknown</c>
      <c>0xFF</c>
      <c>0</c>
      <c>Other</c>
</texttable>

</section>
<section anchor="warn-response"><name>WARN Response</name>

<t>IANA will create the following registry:</t>

<t>Registry Name: WARN Response</t>

<t>Registration Procedure: RFC Required</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c>0</c>
      <c>RESERVED(invalid)</c>
      <c>1</c>
      <c>All Clear</c>
      <c>2</c>
      <c>Assess</c>
      <c>3</c>
      <c>Avoid</c>
      <c>4</c>
      <c>Evacuate</c>
      <c>5</c>
      <c>Execute</c>
      <c>6</c>
      <c>Monitor</c>
      <c>7</c>
      <c>Prepare</c>
      <c>8</c>
      <c>Shelter</c>
      <c>9</c>
      <c>None</c>
</texttable>

</section>
<section anchor="warn-urgency"><name>WARN Urgency</name>

<t>IANA will create the following registry:</t>

<t>Registry Name: WARN Urgency</t>

<t>Registration Procedure: RFC Required</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c>0</c>
      <c>RESERVED(invalid)</c>
      <c>1</c>
      <c>Expected</c>
      <c>2</c>
      <c>Future</c>
      <c>3</c>
      <c>Immediate</c>
      <c>4</c>
      <c>Past</c>
      <c>5</c>
      <c>Unknown</c>
</texttable>

</section>
<section anchor="warn-severity"><name>WARN Severity</name>

<t>IANA will create the following registry:</t>

<t>Registry Name: WARN Severity</t>

<t>Registration Procedure: RFC Required</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c>0</c>
      <c>RESERVED(invalid)</c>
      <c>1</c>
      <c>Minor</c>
      <c>2</c>
      <c>Moderate</c>
      <c>3</c>
      <c>Severe</c>
      <c>4</c>
      <c>Extreme</c>
      <c>5</c>
      <c>Unknown</c>
</texttable>

</section>
<section anchor="warn-certainty"><name>WARN Certainty</name>

<t>IANA will create the following registry:</t>

<t>Registry Name: WARN Certainty</t>

<t>Registration Procedure: RFC Required</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c>0</c>
      <c>RESERVED(invalid)</c>
      <c>1</c>
      <c>Unlikely</c>
      <c>2</c>
      <c>Likely</c>
      <c>3</c>
      <c>Possible</c>
      <c>4</c>
      <c>Observed</c>
      <c>5</c>
      <c>Unknown</c>
</texttable>

</section>
<section anchor="warn-reserved-ranges-1"><name>WARN Reserved Ranges</name>

<t>IANA will create the following registry:</t>

<t>Registry Name: WARN Reserved Ranges</t>

<t>Registration Procedure: RFC Required</t>

<texttable>
      <ttcol align='left'>Range/Value</ttcol>
      <ttcol align='left'>Category</ttcol>
      <c>0x0000</c>
      <c>RESERVED(invalid)</c>
      <c>0x0001-0x00FF</c>
      <c>WARN</c>
      <c>0x0100-0x01FF</c>
      <c>IPWARN</c>
      <c>0x0200-0xFEFF</c>
      <c>Future use</c>
      <c>0xFF00-0xFFFE</c>
      <c>Private use</c>
      <c>0xFFFF</c>
      <c>RESERVED(invalid)</c>
</texttable>

</section>
<section anchor="warn-advisory-codes"><name>WARN Advisory Codes</name>

<t>IANA will create the following registry:</t>

<t>Registry Name: WARN Advisory Codes</t>

<t>Registration Procedure: RFC Required</t>

<texttable>
      <ttcol align='left'>Kind</ttcol>
      <ttcol align='left'>Name</ttcol>
      <c>0x0001</c>
      <c>ADVISORY_NEW</c>
      <c>0x0002</c>
      <c>ADVISORY_REVOKE</c>
      <c>0x0003</c>
      <c>ADVISORY_RETIRE</c>
      <c>0x0004</c>
      <c>ADVISORY_UPDATE</c>
      <c>0x0005</c>
      <c>ADVISORY_REGISTRY_REFRESH</c>
</texttable>

</section>
</section>


  </middle>

  <back>


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

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

&RFC8032;
&RFC2119;
&RFC8174;


    </references>

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

<reference anchor="CAP" target="https://docs.oasis-open.org/emergency/cap/v1.2/CAP-v1.2-os.html">
  <front>
    <title>Common Alerting Protocol Version 1.2</title>
    <author initials="J." surname="Westfall" fullname="Jacob Westfall">
      <organization></organization>
    </author>
    <author initials="E." surname="Jones" fullname="Elysa Jones">
      <organization>Warning Systems. Inc.</organization>
    </author>
    <author >
      <organization>OASIS</organization>
    </author>
    <date year="2010"/>
  </front>
</reference>
&RFC7946;


    </references>

</references>



  </back>

<!-- ##markdown-source:
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

-->

</rfc>

