Unseenet Working Group A. Lorensen
UN-RFC: 0002 October 2026
Category: Standards Track
Status: Draft
Unseenet: Article Format
Abstract¶
This document defines the Unseenet article: its syntax, required and forbidden headers, canonical form, signature, content-derived Message-ID, and the validation procedure every node and client applies.
1. Syntax¶
An article is a sequence of UTF-8 lines, each terminated by CRLF, consisting of a header block, one empty line, and a body. This is the format of RFC 5322 / RFC 5536 with the following restrictions:
- Header names are ASCII, case-insensitive, and match
[A-Za-z0-9-]+. - Header folding is forbidden. Each header is exactly one line.
- A header name MUST NOT appear more than once.
- Header values MUST NOT contain CR, LF or NUL.
- The whole article, as transmitted (before NNTP dot-stuffing), MUST NOT exceed 65 536 octets. Nodes MUST accept articles of at least 32 768 octets and MAY set their limit anywhere between the two.
2. Headers¶
2.1 Required in Every Article¶
| Header | Value |
|---|---|
Unseenet-Version |
1 |
Message-ID |
Content-derived, see section 4 |
Newsgroups |
Exactly one Group ID (UN-RFC 0004). No crossposting. |
Date |
RFC 5322 date-time, UTC, e.g. Thu, 15 Oct 2026 19:50:00 +0000 |
Author-Key |
Author's public key, ed25519:... (UN-RFC 0003) |
Signature |
Author's signature, section 3 |
Proof-Of-Work |
Postage, UN-RFC 0006 |
2.2 Required Unless the Article Is Encrypted or a Control Article¶
| Header | Value |
|---|---|
From |
Display name (free text, max 128 characters) |
Subject |
Subject line (max 256 characters) |
Control articles (those with a Control header, UN-RFC 0004) MAY omit
From and Subject.
In encrypted articles (UN-RFC 0004, section 6), From and Subject
MUST NOT appear in the outer header block; they are carried inside the
ciphertext.
2.3 Optional¶
| Header | Value |
|---|---|
References |
Space-separated Message-IDs, oldest first (threading) |
Content-Type |
Default text/plain; charset=utf-8 |
Expires |
RFC 5322 date-time; nodes MAY delete after this |
Control |
Control article type, UN-RFC 0004 |
Encrypted |
Encryption parameters, UN-RFC 0004 |
Member-Signature |
Closed-group membership proof, UN-RFC 0004 |
Approved-By |
Moderator key, UN-RFC 0004 |
Approval |
Moderator signature, UN-RFC 0004 |
Any other header MAY be present. Nodes MUST preserve and forward unknown headers unchanged; they are covered by the signature.
2.4 Forbidden¶
Path and Xref MUST NOT appear in an article. Nodes MUST reject
articles containing them. (A node MAY synthesize them when serving an
article to a newsreader, see UN-RFC 0005, but they are never part of the
article and never forwarded.)
2.5 Date Granularity¶
To reduce timing correlation, clients SHOULD round Date down to a
multiple of 10 minutes. Nodes MUST reject articles whose Date is more
than 1 hour in the future, and MAY reject articles older than the
group's retention period.
3. Canonical Form and Signature¶
The canonical form C of an article is computed as follows:
- Take every header except
Message-ID,Signature,Proof-Of-Work,Member-Signature,Approved-ByandApproval. - Lowercase each header name. Strip leading and trailing whitespace (SP, HTAB) from each value.
- Sort the headers by name, comparing octets.
- Emit each header as
name ":" SP value CRLF. - Emit one CRLF.
- Emit the body, with every line ending converted to CRLF. If the body
does not end in CRLF, append one. (NNTP dot-stuffing is a transport
matter and is never part of
C.)
The author signs:
Signature = Sign( author_sk, purpose "UNSEENET-ARTICLE-1", C )
with the encoding of UN-RFC 0003, section 3.
The excluded headers are excluded because they are either derived from
C (Message-ID, Proof-Of-Work), or added by someone other than the
author afterwards (Approval), or are signatures themselves.
4. Message-ID¶
The Message-ID is derived from the signed content:
id = first 32 characters of b32( H( DS("UNSEENET-MSGID-1") || C || sig ) )
Message-ID: <id@unseenet>
where sig is the raw 64-octet Ed25519 signature. This gives 160 bits.
Consequences:
- A Message-ID cannot be chosen freely. An attacker cannot pre-empt a legitimate article by injecting a different one with the same ID.
- Two nodes that receive the same article always agree on its ID.
- A node MUST recompute the ID and reject the article if it differs.
5. Validation Procedure¶
A node MUST perform these checks, in this order, before accepting an article from a client or a peer. A client SHOULD perform them on articles it displays. Failure at any step means rejection.
- Size within limit; syntax valid (section 1).
Unseenet-Versionis1.- All required headers present; no forbidden headers.
Author-KeyandSignatureuse known algorithms and are well formed.- Signature verifies over
C(strict verification, UN-RFC 0003). - Message-ID equals the value computed in section 4.
- Message-ID is not already in the node's history (duplicate). A duplicate is not an error for the sender; see UN-RFC 0005.
Dateis within the window of section 2.5.- Postage meets the required difficulty (UN-RFC 0006).
- The group is carried by this node and the article is permitted by the group's manifest (UN-RFC 0004). Manifests themselves are validated by UN-RFC 0004, section 4.
6. Example¶
Unseenet-Version: 1
Message-ID: <q3x7ku2m5a4e6rj2wl9zpn4c8y3h2t5v@unseenet>
Newsgroups: dk.snak@ab3k5x7qwe2rtz4m
Date: Thu, 15 Oct 2026 19:50:00 +0000
From: Andreas
Subject: Hej fra Unseenet
Author-Key: ed25519:...
Content-Type: text/plain; charset=utf-8
Signature: ed25519:...
Proof-Of-Work: sha256; bits=20; nonce=Hk9r2w
Det virker!
7. Body Conventions (Informative)¶
These conventions come from Usenet and are not checked by nodes. Clients SHOULD follow them so that they work well together.
- Signature. A signature is separated from the text by a line
containing exactly
--(dash, dash, space), as in RFC 3676 section 4.3. It SHOULD be at most four lines. Clients SHOULD NOT quote the signature when replying, and MAY display it dimmed. - Quoting. Quoted lines start with
>, preceded by one line naming the author.
8. Security Considerations¶
Author-Keyis visible to every node, even in closed groups. It links articles by the same author. See UN-RFC 0003 section 2 on per-group identities.- Signatures prove authorship to anyone, permanently. An author cannot later deny having written a signed article. This is a deliberate trade-off for spam resistance and accountability; deniable messaging is out of scope for this series.
- The 64 KiB limit is a protection against storage exhaustion and keeps the network unsuitable for bulk file distribution.
Copyright Notice¶
Copyright (c) 2026 the persons identified as the document authors.
This document is licensed under CC BY 4.0, see rfc/LICENSE.md.