<?xml version="1.0" encoding="UTF-8"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     category="std"
     ipr="trust200902"
     docName="draft-ahearn-seal-00">

  <front>
    <title abbrev="SEAL">Signed Email Authentication Layer (SEAL)</title>

    <author fullname="Tim Ahearn" initials="T." surname="Ahearn">
      <organization>Independent</organization>
      <address>
        <email>Tim.ahearn@outlook.com</email>
      </address>
    </author>

    <date day="31" month="March" year="2026"/>

    <abstract>
      <t>
        This document defines the Signed Email Authentication Layer (SEAL), a
        cryptographically signed identity envelope carried within a new
        message header field, SEAL-Envelope. SEAL provides a stable,
        forwarding-resilient identity assertion that is independent of the
        mutable RFC 5322 header block and message body. SEAL is
        designed to complement or replace DKIM and ARC by eliminating
        their dependency on mutable message components and by providing a
        canonical, tamper-evident identity layer that survives transit through
        intermediaries.
      </t>
    </abstract>
  </front>

  <middle>
<section title="Introduction">
  <t>
    Email authentication today relies primarily on SPF, DKIM, and DMARC.
    These mechanisms provide meaningful protections but share a fundamental
    architectural limitation: they bind identity to message components that
    are inherently mutable. SPF validates only the connecting IP address,
    not the author identity. DKIM signs selected headers and the message
    body, both of which are routinely modified by forwarders, mailing lists,
    and security appliances. DMARC depends on alignment with SPF and DKIM
    and therefore inherits their fragility.
  </t>

  <t>
    The Signed Email Authentication Layer (SEAL) introduces a new identity
    layer for email that avoids this dependency on mutable data. SEAL
    defines a canonical, immutable identity envelope that is signed by the
    originating domain and carried in a dedicated header field,
    SEAL-Envelope. The envelope asserts the sender's identity, the intended
    recipient scope, a validity window, and a stable message identifier.
    Because SEAL does not sign or depend on the RFC 5322 header block or
    message body, it remains valid across forwarding and transformations
    that commonly break DKIM.
  </t>

  <t>
    SEAL is designed to operate alongside, or in some deployments instead
    of, DKIM and ARC. By relocating identity into a separate, tamper-evident
    envelope, SEAL provides a more stable foundation for domain-level
    authentication.
  </t>
  <t>
    This document is written using the xml2rfc v3 vocabulary [RFC7991].
  </t>
</section>

    <section title="Conventions Used in This Document">
      <t>
        The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
        "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
        "OPTIONAL" in this document are to be interpreted as described in
        BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
        capitals, as shown here.
      </t>
    </section>

    <section title="Terminology">
      <t>This section defines terminology used throughout this document.</t>

      <t>
        *  *Origin domain* -- The domain that generates and signs the SEAL
           envelope and publishes the corresponding public key in DNS.
      </t>

      <t>
        *  *SEAL envelope* -- The canonical JSON object defined by this
           document that carries the identity assertion and associated
           metadata, and that is signed by the origin domain.
      </t>

      <t>
        *  *Receiver* -- A system that receives an email message and is
           capable of parsing and verifying the SEAL-Envelope header.
      </t>

      <t>
        *  *Forwarder* -- An intermediary that receives a message and re-sends
           it, potentially modifying the RFC 5322 [RFC5322] header block or
           message body.
      </t>

      <t>
        *  *Scope* -- A field in the SEAL envelope that indicates the intended
           recipient domain or domains for the message.
      </t>

      <t>
        *  *Message identifier (msgid)* -- A stable, opaque identifier for the
           message within the SEAL envelope, intended to remain unchanged
           across forwarding.
      </t>
    </section>

    <section title="Problem Statement">
      <t>
        DKIM [RFC6376] attempts to provide message integrity by signing
        selected headers and the message body. However, email is inherently
        mutable. Forwarders, mailing lists, and security appliances routinely
        modify headers and bodies in ways that invalidate DKIM signatures. ARC
        attempts to preserve authentication results across intermediaries, but
        it adds complexity and does not address the underlying issue that
        identity is tied to mutable data.
      </t>

      <t>
        The core architectural problem is that DKIM binds identity to message
        components that are not stable. SEAL addresses this by binding
        identity to a separate, canonicalized envelope that is not part of the
        mutable header block and is therefore resilient to common
        transformations.
      </t>
    </section>

    <section title="SEAL Overview">
      <t>SEAL defines a new identity envelope containing:</t>

      <t>*  *origin* -- the domain asserting identity</t>
      <t>*  *scope* -- the intended recipient domain or domains</t>
      <t>*  *iat* -- issued-at timestamp</t>
      <t>*  *exp* -- expiration timestamp</t>
      <t>*  *msgid* -- stable message identifier</t>
      <t>*  *alg* -- signature algorithm identifier</t>
      <t>*  *sig* -- signature over the canonical envelope</t>

      <t>
        The envelope is serialized in a strict canonical JSON serialization
        and signed using the private key of the origin domain. The resulting
        signed envelope is base64-encoded and placed in the SEAL-Envelope
        header field. Because the envelope is independent of the mutable RFC
        5322 [RFC5322] header block and message body, it remains valid across
        forwarding and other transformations that commonly disrupt DKIM.
      </t>
    </section>

    <section title="The SEAL-Envelope Header">
      <t>
        The SEAL-Envelope header carries the signed identity envelope. Its
        ABNF is:
      </t>

      <t>
        SEAL-Envelope = "SEAL-Envelope:" OWS 1*(VCHAR / WSP)
      </t>

      <t>
        The header value is a base64-encoded representation of the signed
        envelope. Intermediaries MUST NOT modify the header value. Any
        modification will invalidate the signature.
      </t>
    </section>

    <section title="Envelope Canonicalization">
      <t>
        The SEAL envelope is serialized using a strict canonical JSON
        serialization to ensure that all implementations produce an identical
        byte sequence for signing and verification. The canonicalization rules
        are:
      </t>

      <t>*  *Top-level structure* -- The envelope MUST be a single JSON object.
         Arrays MUST NOT appear at the top level.</t>

      <t>*  *Key ordering* -- All keys MUST be serialized in lexicographic
         order based on their UTF-8 byte values.</t>

      <t>*  *String escaping* -- Strings MUST use the minimal JSON escaping
         required by RFC 8259. Characters MUST NOT be escaped unless required.
         Unicode escapes, if used, MUST use lowercase hexadecimal.</t>

      <t>*  *Timestamps* -- The _iat_ and _exp_ fields MUST use full RFC 3339 /
         ISO 8601 timestamps in UTC with seconds included (for example,
         "2026-03-03T23:17:00Z").</t>

      <t>*  *Whitespace* -- No whitespace is permitted outside of string
         literals.</t>

      <t>*  *Field presence* -- All defined fields MUST appear; optional
         omission is not permitted.</t>
    </section>

    <section title="Signature Model">
      <t>
        SEAL uses modern digital signature algorithms such as Ed25519
        [RFC8032] or RSA-PSS. The signature is computed over the canonicalized
        envelope excluding the "sig" field. To compute the signature, the
        implementation MUST construct the complete envelope object with all
        required fields except "sig", serialize it according to the
        canonicalization rules in this document, and sign the resulting byte
        sequence.
      </t>

      <t>
        The "sig" field is then populated with the base64-encoded signature
        value. The public key is published in DNS using records defined in
        this document. Receivers verify the signature using the public key
        retrieved from DNS. If verification fails, the SEAL assertion is
        invalid.
      </t>

      <t>
        The _msgid_ field is an opaque, stable identifier for the message
        within the SEAL envelope. It MUST remain unchanged across forwarding.
        The _msgid_ MAY be derived from, but is not required to match, the RFC
        5322 [RFC5322] Message-ID header field. Implementations SHOULD
        generate _msgid_ values that are globally unique, such as UUIDs.
      </t>

      <t>
        The _scope_ field indicates the intended recipient domain or domains
        for the message. A receiver MAY choose to enforce scope by treating a
        message as out-of-scope if the recipient domain does not match the
        value in _scope_. This document does not require any particular
        enforcement behavior; scope is an assertion by the origin domain that
        receivers MAY use as an input to local policy.
      </t>
    </section>

    <section title="Forwarding Semantics">
      <t>
        SEAL is designed to survive forwarding. Because the envelope is
        independent of the mutable header block and message body,
        intermediaries may modify those components without affecting SEAL
        validity.
      </t>

      <t>
        Forwarders MAY add their own SEAL-related headers in future
        extensions, but this document defines only the origin signature
        carried in the SEAL-Envelope header.
      </t>
    </section>

    <section title="Deployment Considerations">
      <t>
        SEAL is designed for incremental and non-disruptive deployment.
        Domains may adopt SEAL without requiring any changes from receivers,
        intermediaries, or other senders. SEAL operates in parallel with
        existing authentication mechanisms such as SPF, DKIM [RFC6376], and
        DMARC, and does not interfere with their operation.
      </t>

      <t>
        A domain may begin signing messages with SEAL at any time by
        publishing one or two SEAL keys in DNS and adding the SEAL-Envelope
        header to outbound mail. Receivers that understand SEAL can verify the
        signature and use the resulting identity assertion as an additional
        signal. Receivers that do not implement SEAL will simply ignore the
        SEAL-Envelope header without impact.
      </t>

      <t>
        SEAL does not require modifications to MTAs, message transfer
        pipelines, or intermediary systems. SEAL does not require any changes
        to SMTP protocol behavior. Because the SEAL envelope is independent of
        the RFC 5322 [RFC5322] header block and message body, SEAL signatures
        remain valid across forwarding, mailing list expansion, and common
        message transformations that frequently invalidate DKIM signatures.
      </t>

      <t>
        Domains typically publish one SEAL key, but MAY publish a second key
        to support key rotation or delegation to a third-party sending
        service. Receivers MUST attempt verification with any SEAL key
        published at the _seal.&lt;domain&gt; label.
      </t>

      <t>
        SEAL does not define receiver policy. Receivers determine how SEAL
        verification results are incorporated into local authentication,
        reputation, or filtering decisions. Future work may explore
        integration of SEAL with DMARC or related mechanisms, but such policy
        considerations are out of scope for this document.
      </t>

      <t>
        A dedicated SEAL DNS resource record type may be defined in a future
        revision of this specification. For initial deployment, SEAL keys are
        published using TXT records to ensure broad compatibility with
        existing DNS infrastructure.
      </t>
    </section>

    <section title="DNS Requirements">
      <t>
        Origin domains publish SEAL public keys in DNS under the _seal label
        using TXT records. TXT is the initial publication mechanism for SEAL
        keys. A dedicated SEAL-specific DNS resource record type MAY be
        defined in a future revision of this specification, but this document
        does not define such a type.
      </t>

      <t>
        A SEAL key record is published at:
      </t>

      <t>
        _seal.&lt;domain&gt;. TXT (
        "v=SEAL1; k=ed25519; p=&lt;base64-public-key&gt;"
        )
      </t>

      <t>
        Domains MAY publish up to two SEAL TXT records at the _seal.&lt;domain&gt;
        label. Receivers MUST retrieve all SEAL TXT records published at
        _seal.&lt;domain&gt; and MUST attempt verification with any key whose
        parameters match the envelope.
      </t>

      <t>
        Operators SHOULD choose DNS TTL values that balance responsiveness to
        key rotation with caching efficiency. TTLs on the order of one hour to
        one day are RECOMMENDED for SEAL key records. Receivers SHOULD respect
        published TTLs but MAY cache keys for shorter periods according to
        local policy.
      </t>
    </section>

    <section title="Security Considerations">
      <t>
        SEAL provides a cryptographically signed identity assertion that is
        independent of mutable message components. Receivers MUST NOT assume
        that the message body or headers are unmodified simply because the
        SEAL signature verifies. SEAL is complementary to existing mechanisms
        such as DKIM [RFC6376]. Receivers and operators SHOULD handle SEAL
        verification results according to local policy.
      </t>
    </section>

    <section title="Privacy Considerations">
      <t>
        SEAL asserts domain-level identity only and does not introduce new
        personal data fields. SEAL does not expose user identifiers beyond
        those already present in the email message.
      </t>

      <t>
        SEAL does not introduce new privacy considerations beyond those
        already present in DKIM [RFC6376] or other domain-based authentication
        mechanisms.
      </t>
    </section>

    <section title="IANA Considerations">
      <t>
        This document has no IANA actions.
      </t>
    </section>

    <section title="Future Work">
      <t>Future work may define:</t>

      <t>*  SEAL extensions for intermediaries.</t>
      <t>*  Integration with DMARC.</t>
      <t>*  A dedicated DNS RR type.</t>
      <t>*  Post-quantum signature algorithms.</t>
    </section>

  </middle>

  <back>

    <references title="Normative References">

      <reference anchor="RFC2119" target="https://www.rfc-editor.org/rfc/rfc2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date year="1997" month="March"/>
        </front>
      </reference>

      <reference anchor="RFC5322" target="https://www.rfc-editor.org/rfc/rfc5322">
        <front>
          <title>Internet Message Format</title>
          <author fullname="P. Resnick" initials="P." surname="Resnick"/>
          <date year="2008" month="October"/>
        </front>
      </reference>

      <reference anchor="RFC6376" target="https://www.rfc-editor.org/rfc/rfc6376">
        <front>
          <title>DomainKeys Identified Mail (DKIM) Signatures</title>
          <author fullname="D. Crocker" initials="D." surname="Crocker"/>
          <author fullname="T. Hansen" initials="T." surname="Hansen"/>
          <date year="2011" month="September"/>
        </front>
      </reference>

      <reference anchor="RFC8032" target="https://www.rfc-editor.org/rfc/rfc8032">
        <front>
          <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
          <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
          <date year="2017" month="January"/>
        </front>
      </reference>

      <reference anchor="RFC8174" target="https://www.rfc-editor.org/rfc/rfc8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date year="2017" month="May"/>
        </front>
      </reference>

      <reference anchor="RFC7991" target="https://www.rfc-editor.org/rfc/rfc7991">
        <front>
          <title>The "xml2rfc" Version 3 Vocabulary</title>
          <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
          <date year="2016" month="December"/>
        </front>
      </reference>

    </references>

  </back>

</rfc>