ungovernable.tech

Briefing · Web of Trust Thursday

Web of Trust Thursday — August 13 2026 Weekly Update

published 2026-08-13 15 min read Identity, Social and Trust

TL;DR — This Week

  • nostr-wot extension v0.4.0 (August 11, 2026) — Post-quantum keys from the seed you already have. Derives ML-KEM-1024 (encryption) and ML-DSA-87 (signing) from the BIP-39 seed as siblings of the secp256k1 key, not children. Publishes kind:10203 attestation events. Post-quantum NIP-44/NIP-59 gift-wrapped DMs with ~3 KB constant overhead. CLI tool npm run pqc:keygen for offline key derivation. Chrome Web Store + Firefox AMO listed.
  • WoT trust-graph layer formally removed from the extension. The README now states: "Earlier versions shipped an experimental Web-of-Trust trust-graph layer (oracles, follow-graph sync, trust scoring, a page-injected window.nostr.wot API, and trust badges). That subsystem has been removed." The extension is now a pure identity provider — NIP-07 signer, encrypted vault, WebLN wallet, profile/mute/relay management.
  • @nostr-wot/pq v0.2.0 published on npm (August 10, 2026). Reference implementation for the PQ wire format: version byte, ML-KEM-1024 ciphertext (1,568 B), XChaCha20-Poly1305 AEAD, NIP-44 padding. Hybrid construction — combines KEM secret with NIP-44 conversation key via HKDF so it's never weaker than either input.
  • GnuPG TOFU trust-model bug fixed (August 10, 2026, commit 08611f5). The signed_by_utk function in g10/tofu.c never actually checked UTK (Ultimately Trusted Key) signatures since TOFU was introduced. The commit message is striking: "This bug sits here since the introduction of the TOFU models. It is just another nail into the coffin of this TOFU implementation. What we do in gpg is way too complicated and maybe even more complicated than the WoT it tried to simplify."
  • GnuPG partial-file guard regression fixed (August 12, 2026). Commits 95ad7f7 and 1b8debd address a regression where the partial file guard was enabled twice, corrupting output. GnuPG-bug-id: 8399.
  • nostr-wot org repos updated: extension (8 stars, pushed Aug 11), main toolkit repo (6 stars, pushed Aug 11), SDK (5 stars, pushed Aug 10), oracle (5 stars, last push June 4 — dormant). Two new repos visible: nostr-widgets (SVG profile widgets) and nostr-analytics (relay performance tracking).
  • NIPs repo at 3,067 stars. NIP-29 revision (August 8): added "previous" tag example for relay-based group moderation.
  • Amber 6.4.0 (August 7) — Android NIP-07 signer redesigns multi-request approval screen with per-request toggles; adds localized labels for 113 event kinds. Relevant to WoT: Amber is the dominant Android signer, and its approval UX shapes how users interact with NIP-85 WoT queries.
  • Sequoia PGP PQ implementation funded by NLnet under the NGI0 Commons Fund (started June 2025, ongoing). Implements draft-ietf-openpgp-pqc (RFC 9980) in Sequoia using Botan, RustCrypto, and Windows CNG backends.

Freedom-tech takeaway: The nostr-wot project's pivot from WoT infrastructure to post-quantum identity is the most consequential strategic shift this week. The extension that was supposed to be the portable trust layer for Nostr has become a post-quantum identity wallet instead. This leaves NIP-85 oracle providers (wot.klabo.world and similar) and AlgoRelay as the primary WoT-filtering infrastructure — they are now load-bearing without a funded maintainer on the extension side. Meanwhile, GnuPG's own maintainers are publicly acknowledging that their TOFU implementation is broken and overcomplicated, which strengthens the case for alternatives (Sequoia, Sigstore) but leaves the existing OpenPGP WoT in a worse state than previously understood.

The Week in Detail

1. nostr-wot Extension v0.4.0 — Post-Quantum Identity Keys

The single most significant WoT-adjacent release this week: nostr-wot-extension v0.4.0 (August 11, 2026, commit 750bcfa by @leonacostaok).

What it ships:

Feature Detail
ML-KEM-1024 encryption key FIPS 203, CNSA 2.0 parameter set. Derived from BIP-39 seed via HKDF-SHA256(seed, info="nip-pqc/v1/ml-kem-1024/<account>", 64)
ML-DSA-87 signing key FIPS 204, CNSA 2.0 parameter set. Derived via HKDF-SHA256(seed, info="nip-pqc/v1/ml-dsa-87/<account>", 32)
Key derivation Both PQ keys are siblings of the secp256k1 key — all three derived independently from the same 64-byte seed. Recovering the Nostr private key reveals nothing about the seed, so PQ-encrypted messages stay confidential permanently even if secp256k1 falls.
kind:10203 attestation Replaceable event carrying both PQ public keys. Counter-signed by the ML-DSA key over a message binding the npub to both keys (proof of possession, since ML-KEM cannot sign).
Post-quantum DMs NIP-44 + NIP-59 gift-wrapped. The PQ shared secret is combined with the existing NIP-44 conversation key through HKDF — hybrid construction, never weaker than either component. Self-describing payload: version byte + algorithm byte + ML-KEM ciphertext + XChaCha20-Poly1305 AEAD.
Entropy floor New identities now default to 24-word mnemonics (256-bit entropy). 12-word mnemonics (128-bit) would make the seed, not the lattice, the weakest link. The CLI tool refuses 12-word seeds.
CLI npm run pqc:keygen — offline key derivation and attestation generation without a browser.

Message size overhead (measured on complete kind:1059 gift-wrapped events):

Message Classic NIP-17 Post-quantum Overhead Ratio
"hi" (2 chars) 1,533 B 4,605 B +3,072 B 3.0×
Chat line (32 chars) 1,701 B 4,605 B +2,904 B 2.7×
Tweet (280 chars) 2,213 B 5,285 B +3,072 B 2.4×
Paragraph (1 KB) 3,921 B 7,333 B +3,412 B 1.9×
Long note (4 KB) 11,429 B 14,161 B +2,732 B 1.2×
Document (16 KB) 38,737 B 44,197 B +5,460 B 1.1×

~3 KB constant overhead per message, almost entirely the 1,568-byte ML-KEM ciphertext. At 100 messages/day: +300 KB/day or +107 MB/year per conversation — the number relay operators will care about.

Critical design decisions:

  1. Siblings, not children: The obvious design — deriving PQ keys from the Nostr private key — is circular. An adversary who recovers nsec from npub via Shor's algorithm runs the same derivation and gets the PQ keys too. Deriving from the seed independently breaks this chain.

  2. Seal-layer envelope: The PQ envelope is placed at the NIP-59 seal layer, not inside the rumor. This saves 16–28% compared to putting it in the rumor, because NIP-59 base64-encodes at every layer (three expansions of 4/3 for the rumor content).

  3. Hybrid, never bare: The KEM secret is combined with the NIP-44 conversation key through HKDF. Two tests assert binding: a wrong conversation key fails, and a wrong ML-KEM key fails. If either passed, the construction would not be hybrid.

  4. Explicit opt-in for encryption: A message can never be silently downgraded to PQ. Decryption routes automatically (self-describing payload), but encryption requires explicit opt-in.

  5. No relay changes needed: The PQ payload travels inside existing gift-wrap layers. Relays and clients that haven't implemented any of this are unaffected.

What this does NOT do: It does not stop a quantum adversary from forging events in your name. Events are still signed with secp256k1. Migrating signatures would add ~6.2 KB (ML-DSA-87 signature) to every event and requires relay operators at the table — not something a client can ship unilaterally. Publishing the ML-DSA verification key now via kind:10203 is what keeps that door open for the future.

Primary sources: Extension v0.4.0 release, CHANGELOG.md, interactive demo at nostr-wot.com/pqc/chat, @nostr-wot/pq on npm.

2. WoT Trust-Graph Layer Removed from Extension

The most important strategic signal this week is buried in a note on the extension's README:

Note: Earlier versions shipped an experimental Web-of-Trust trust-graph layer (oracles, follow-graph sync, trust scoring, a page-injected window.nostr.wot API, and trust badges). That subsystem has been removed. The extension now injects only the standard NIP-07 window.nostr and WebLN window.webln providers; relay data is read via window.nostr.getRelays().

This is a formal declaration that the nostr-wot extension is no longer a WoT extension. The project has pivoted to:

  1. Identity management — NIP-07 signer, encrypted vault (AES-256-GCM, PBKDF2 210K iterations), multi-account HD derivation
  2. Lightning wallet — NWC, LNbits, WebLN provider, auto-provisioning via zaps.nostr-wot.com
  3. Profile/mute/relay management — kind:0, NIP-51 mute lists, NIP-65 relay lists
  4. Post-quantum identity — the new v0.4.0 feature set

The WoT functionality that was removed: - Trust-score queries via window.nostr.wot API - Follow-graph synchronization - Trust badges on profiles - Oracle-based distance scoring - Page-injected trust indicators

Implications for the WoT ecosystem:

The nostr-wot extension was supposed to be the portable trust layer — following your graph across clients. Its removal means:

WoT Component Previous Provider Current State
Client-side trust scoring nostr-wot extension Removed — no replacement
Portable trust graph nostr-wot extension Removed — no replacement
window.nostr.wot API nostr-wot extension Removed — no standard replacement
Server-side oracle queries nostr-wot-oracle Dormant since June 4, 2026
NIP-85 trusted assertions wot.klabo.world, independent providers Active — the remaining WoT infrastructure
Algorithmic feed ranking AlgoRelay (Bitvora/utxo) Active — adopted by 4+ clients
Relay-level WoT filtering nostr-relay-tray (CodyTseng) Stable but last commit Feb 2026

The burden of Nostr WoT now falls entirely on NIP-85 providers and AlgoRelay, neither of which has the nostr-wot project's funding or development velocity. This is a net loss for portable, user-controlled trust.

What may replace it: The nostr-wot-oracle (Rust, 5 stars, last push June 4) is still available for self-hosting but appears dormant. The @nostr-wot/sdk (5 stars, npm v0.9.1 published May 2026) still provides JavaScript APIs for distance queries and trust scoring — it could be adopted by clients directly. But without the extension's distribution channel, adoption is uncertain.

3. @nostr-wot/pq — Reference Post-Quantum Wire Format Library

Published August 10, 2026 as npm package @nostr-wot/pq v0.2.0.

Description: "Post-quantum identity keys for Nostr: derive ML-KEM-1024 and ML-DSA-87 keys from a NIP-06 seed, and build, parse and verify the kind:10203 attestation."

Wire format specification:

version   1 byte    0x01
alg       1 byte    0x01 = ML-KEM-1024 + NIP-44 conversation key, XChaCha20-Poly1305
kem_ct    1568      ML-KEM-1024 ciphertext
nonce     24        XChaCha20-Poly1305 nonce
sealed    variable  AEAD(padded plaintext), includes the 16-byte tag

base64-encoded for transport.

Design rationale (from the README):

  • Own version byte, not NIP-44's: Overloading NIP-44's version registry would squat a number its authors own. This envelope is self-describing.
  • Hybrid, never bare: KEM secret combined with NIP-44 conversation key through HKDF. Result is no weaker than either input.
  • Authenticated framing: Version, algorithm, and both pubkeys go into the AEAD's associated data. A ciphertext cannot be replayed into another conversation, have its direction swapped, or have its algorithm byte downgraded.
  • Length-padded: Uses NIP-44's padding scheme so ciphertext size does not leak message size on a public relay.
  • One generic error: Every decryption failure throws the same message. Distinguishing bad padding from a bad tag from a wrong key hands an attacker an oracle.

This is one of the first production post-quantum messaging implementations in the freedom-tech space. It bridges the gap between NIST standardization (FIPS 203/204 finalized August 2024) and user-deployable code.

Relation to Overview - Post-Quantum Cryptography: The kind:10203 attestation format is a Nostr-native equivalent of OpenPGP's kind:10203 — both publish PQ public keys in a signed, discoverable format. The difference: Nostr's version is designed for real-time messaging (NIP-44/NIP-59), while OpenPGP's (RFC 9980) targets email and file encryption.

4. GnuPG TOFU Bug — Maintainer Calls Implementation "Too Complicated"

On August 10, 2026, commit 08611f5 fixed a fundamental bug in GnuPG's TOFU (Trust On First Use) trust model:

The bug: The signed_by_utk() function in g10/tofu.c was supposed to check whether a signature was made by an Ultimately Trusted Key before counting it in TOFU statistics. It never actually performed this check. The function returned true without verifying the signature, meaning TOFU statistics were computed incorrectly since the feature's introduction.

The commit message (by NIIBE Yutaka, GnuPG maintainer):

This bug sits here since the introduction of the TOFU models. It is just another nail into the coffin of this TOFU implementation. What we do in gpg is way too complicated and maybe even more complicated than the WoT it tried to simplify. One major problem with our implementation with all its heuristics, is that one may only check a file once to not mess up the statistics. This is highly impractical in real life. Tofu checking belongs to the caller, for example the address book of the mail client.

GnuPG-bug-id: 8404. Reported by arthur.chan@adalogics.com.

Why this matters for the WoT landscape:

  1. TOFU was supposed to be the simpler alternative to the classic WoT. The classic PGP WoT requires deliberate key-signing parties and ownertrust decisions. TOFU was introduced to make trust automatic: the first time you see a key, trust it; if you see it used by a different identity later, flag it. But GnuPG's implementation was buggy from day one.

  2. The maintainer is publicly acknowledging failure. When the person fixing the bug calls the implementation "another nail in the coffin" and "way too complicated," it signals that the feature may be deprecated or rewritten. This is not a confidence-building message for the ~965-star GnuPG project.

  3. This strengthens the case for alternatives. Sequoia PGP's sq tool implements a different trust model (certification-based, with sq pki commands). Sigstore offers ephemeral-certificate signing with transparency logs. Both avoid TOFU's heuristic complexity.

Related GnuPG commits this week:

Commit Date Description
1b8debd Aug 12, 2026 Fix regression introduced by partial file guards. Splits gnupg_process_partial_file into separate commit/rollback functions.
95ad7f7 Aug 12, 2026 Don't enable partial file guard if already done. GnuPG-bug-id: 8399.
08611f5 Aug 10, 2026 Fix TOFU trust models to actually check UTK signatures. GnuPG-bug-id: 8404.

Primary source: GnuPG commit 08611f5, GnuPG repo (965 stars, pushed Aug 12, 2026).

5. NIPs Repo Activity and WoT-Adjacent Protocol Updates

The nostr-protocol/nips repository is at 3,067 stars (up from 3,100 reported last week — likely fluctuation or a counting difference), last pushed August 12, 2026.

Commits this window:

Date Commit Description
Aug 8, 2026 NIP-29 Add "previous" tag example for relay-based group moderation
Aug 1, 2026 NIP-47 Simplify core spec and introduce extensions (#2419)
Jul 31, 2026 — Fix misapplied suggestion (#2427)
Jul 31, 2026 NIP-B0 Fix URI scheme ambiguity (#2425)
Jul 26, 2026 NIP-34 Drop GRASP hosting instructions from pull request descriptions

NIP-85 (Trusted Assertions) status: Still at draft / optional. No changes this week. The spec defines event kinds 30382–30385 for user, event, addressable event, and NIP-73 identifier assertions respectively. Live providers (wot.klabo.world, Nostr.Band) continue operating independently of the spec revision cycle.

NIP-29 relevance to WoT: NIP-29 (Relay-based Groups) added a "previous" tag example, which is relevant to group-level moderation — a WoT-adjacent use case where group membership can be gated by trust scores rather than invite codes.

6. Ecosystem Context — Nostr Client and Tool Releases (Aug 6–13)

From freedom.tech/nostr (198 releases tracked, 84 sources):

WoT-relevant releases this week:

Project Version Date WoT Relevance
Amber 6.4.0 Aug 7 Android NIP-07 signer — redesigns multi-request approval with per-request toggles. Shapes how users approve NIP-85 WoT queries. 338 GitHub stars.
Sidecar 1.7.0 Aug 30 → 1.6.0 Aug 28 Browser extension — Lightning wallet quick-start, "honest backup language", trust dialogs for app permissions.
Zap Store 1.1.1 Jul 25 Improves "trust dialogs for publishers lacking profiles" — directly relevant to WoT-based app verification.
strfry 1.1.1 Jul 21 C++ relay implementation — foundational infrastructure for WoT-filtered relays.

Key observation: No client shipped new WoT features this week. The WoT adoption curve appears to have plateaued at the client level — Amethyst, Primal, Nostur, and Jumble all have WoT filtering from earlier releases, but no new clients adopted it. The nostr-wot extension's pivot away from WoT may signal that client-side WoT computation is harder to maintain than anticipated.

7. Sigstore and Supply-Chain Trust — The WoT Alternative Track

While the PGP/Nostr WoT ecosystems deal with their respective challenges, Sigstore (535 stars, pushed Aug 10, 2026) continues maturing as the supply-chain trust alternative:

How Sigstore replaces the WoT for software signing:

WoT Concept PGP Equivalent Sigstore Equivalent
Identity binding Key fingerprint + key-signing parties OIDC identity (GitHub, Google) → short-lived Fulcio certificate
Trust attestation OpenPGP certification signature Rekor transparency log entry
Trust verification Walk certification paths Check inclusion proof in Merkle tree
Key management Long-lived private keys Ephemeral keys (discarded after signing)
Revocation Key revocation certificates Certificate expiry (minutes)

Advantages over PGP WoT: No key-signing parties, no long-lived private keys, no ownertrust decisions, automatic transparency. The trade-off: depends on OIDC providers (GitHub, Google) for identity, which reintroduces a form of centralized trust — albeit in the identity-verification layer rather than the cryptographic layer.

NLnet-funded Sequoia PGP PQ work: NLnet project page confirms ongoing funding under the NGI0 Commons Fund (started June 2025) to implement draft-ietf-openpgp-pqc (RFC 9980) in Sequoia PGP using Botan, RustCrypto, and Windows CNG backends. This is the implementation most likely to produce a working, RFC-9980-compliant OpenPGP PQ tool — in contrast to GnuPG's deliberately incompatible LibrePGP approach.

8. nostr-wot Organization Repo Landscape (Current State)

Repo Stars Forks Last Push Status
nostr-wot 6 2 Aug 11, 2026 Active — blog + web app, post-quantum content
nostr-wot-extension 8 3 Aug 11, 2026 Active — v0.4.0 (PQ keys), WoT layer removed
nostr-wot-sdk 5 1 Aug 10, 2026 Active — @nostr-wot/pq v0.2.0 published; main SDK at v0.9.1
nostr-wot-oracle 5 2 Jun 4, 2026 Dormant — last commit 2+ months ago
nostr-widgets 0 0 Jun 2, 2026 New — server-rendered SVG widgets for Nostr profiles
nostr-analytics 0 0 Apr 15, 2026 New — relay performance and npub event tracking
LNbits-proxy 0 0 Apr 15, 2026 Lightning wallet proxy

Assessment: The organization is healthy in terms of commit activity (extension and SDK pushed within the last 3 days), but the WoT-specific components (oracle, trust-graph APIs) are either dormant or removed. The active development has shifted to post-quantum identity and Lightning wallet infrastructure. The "Web of Trust" name persists in the org and extension branding, but the actual WoT functionality has been deprioritized.

Evidence at a Glance

Project / Component Maturity Active Dev Key Links Notes
nostr-wot-extension v0.4.0 Production High GitHub, Chrome Store PQ keys from seed; WoT layer removed; 8★
@nostr-wot/pq Beta High npm PQ wire format reference; v0.2.0; ML-KEM-1024+ML-DSA-87
@nostr-wot/sdk Stable Moderate npm v0.9.1; WoT distance queries still available; 5★
nostr-wot-oracle Beta Dormant GitHub Rust oracle; last push Jun 4; 5★
NIP-85 Providers (wot.klabo.world) Beta/Production Active NIP-85 PageRank scoring; 6h crawls; kinds 30382–30385
AlgoRelay (Bitvora) Production Active freedom.tech tracking Social-graph feeds; adopted by 4+ clients
GnuPG Mature Active (maintenance) GitHub 965★; TOFU bug fixed; maintainer calls TOFU "too complicated"
Sequoia PGP Mature Active NLnet PQC project RFC 9980 PQ implementation funded; ongoing
Sigstore Production High GitHub 535★; transparency-log-based trust; supply-chain focus
Amber (Android signer) Production High GitHub 338★; v6.4.0; per-request approval UX
NIPs repo Mature Active GitHub 3,067★; NIP-29 revised; NIP-85 still draft
OpenPGP.js Mature Moderate GitHub 5,964★; v6.3.1; last commit Jun 4

Strategic Analysis — The WoT Bifurcation

This week crystallizes a trend that has been building for months: the Nostr WoT ecosystem is bifurcating into two tracks with different goals.

Track 1: Trust Filtering (NIP-85 + AlgoRelay)

  • Goal: Spam resistance, content ranking, discovery
  • Mechanism: Offload graph computation to oracle providers; consume signed assertions
  • Providers: wot.klabo.world, Nostr.Band, AlgoRelay
  • Status: Production-deployed, but dependent on volunteer-maintained infrastructure
  • Risk: Oracle centralization — if wot.klabo.world goes down, clients that depend on it lose WoT filtering

Track 2: Identity and Key Management (nostr-wot extension)

  • Goal: Portable identity, key custody, post-quantum readiness
  • Mechanism: NIP-07 signer, encrypted vault, Lightning wallet, PQ keys
  • Provider: nostr-wot organization (extension + SDK)
  • Status: Actively developed, but WoT functionality removed
  • Risk: The extension named "Web of Trust" no longer does Web of Trust

The gap between these tracks is where portable, user-controlled trust scoring was supposed to live. With the nostr-wot extension's WoT layer removed, there is no production client-side tool that lets users carry their trust graph across Nostr applications. The @nostr-wot/sdk still provides the APIs, but without the extension's distribution channel, adoption requires individual client integration.

For freedom-tech operators: If you are building a Nostr application and want WoT filtering, your options are (1) consume NIP-85 events from an existing provider, (2) implement local graph computation using @nostr-wot/sdk, or (3) use AlgoRelay's social-graph-ranked feeds. The extension-based approach is no longer viable.