Domain-signed Message-IDs.
Email spoofing, cryptographically dead.

SPF checks the envelope. DKIM checks the relay. MIDSIG binds the message itself to a domain key published in DNS — a forged From address fails a signature, not a heuristic. Plus optional postage: if you can't afford 5 cents of compute, I don't want your mail.

01How it works

Three moving parts. No flag day. Any receiving domain can start enforcing today.

1 · PUBLISH

Your domain publishes its Ed25519 public key in one DNS TXT record — the exact pattern DKIM already uses.

2 · SIGN

Every outgoing message carries a signature over (domain, Message-ID, timestamp). The binding survives relays.

3 · VERIFY

The receiver checks the signature against DNS in microseconds. Forged domain = failed crypto = rejected.

# 1. publish (once)
_midsig.example.com.  300 IN TXT "v=midsig1; k=ed25519; p=JwBWTqTtGzbFrFI/EEQJkguLJ1QeJI95mJiXf75n2bI="

# 2. every message carries
X-Midsig: v=1; d=example.com; i=<abc123@example.com>; t=1720600000; s=<base64 sig>
X-Midsig-Postage: v=1; n=000000000021f69e; x=0000097599…; b=20

# 3. receiver policy
$ midsig verify --input mail.eml --required-bits 20
verdict: pass

02What it kills

AttackSPFDKIMMIDSIG
Forged From domain (phishing)partialpartialrejected
Stripped / unverified signingignorableignorablequarantined
Mass spam from burner domainsweakweakpriced out
Message-ID impersonation / thread-jackingnonobound

SPF and DKIM stay. MIDSIG adds the one binding they both leave unsigned — the message identity — and gives receivers a pricing knob for their inbox.

03Live postage demo

Real proof-of-work, minted in your browser, no server involved. Raise the bits and watch the compute cost climb — this is the "5 cents" dial.

run this in the main thread so you feel the spammer's pain

04Honest lineage

// WE STOOD ON SHOULDERS, AND WE SAY SO

Hashcash (1997) invented PoW postage for email. Penny Black (2003) and Camram (2004) tried to make it mainstream. DKIM (2007) proved domain-key signing works at internet scale. MIDSIG is the narrow slice DKIM leaves unsigned — the Message-ID binding — plus a modern pricing knob. And no, the spoofing fix doesn't need a blockchain: DNS + signatures do it deterministically. A blockchain only earns its keep here as the payment rail for real postage later. The hard part was never crypto. It's convincing receiving domains to enforce it — which is why this is designed for incremental, unilateral adoption.