OpenPGP Internals — An Implementer's Series

The Resource Map

Article 7 of 7 · RFCs, papers, books, videos, tools, roadmap

Sep 9, 2026 · security · 14 min read · 2730 words intermediate

The complete OpenPGP resource map and roadmap.

security openpgp pgp resources roadmap

The closing article of the series: every specification, paper, attack disclosure, book, talk, tool and community resource worth your time, organized by what you are trying to accomplish rather than by type. Includes three learning roadmaps — implementer, researcher, security engineer — and an honest note about which widely-recommended resources are now out of date and will teach you the wrong thing.

Read this first. Most OpenPGP material on the internet predates RFC 9580 (2024) and RFC 9980 (2026), and a great deal of it predates EFAIL (2018) and the SKS collapse (2019). Tutorials that tell you to upload to the SKS pool, that describe the MDC as adequate integrity protection, or that treat the Web of Trust as a working global system are teaching you a world that no longer exists. Check the date on everything.

1. Specifications — start here

1.1 Core

1.2 Active drafts worth tracking

1.3 Supporting cryptographic standards

2. Research papers and attack disclosures

2.1 The essential five

PaperVenue · YearWhy it matters
Efail: Breaking S/MIME and OpenPGP Email Encryption using Exfiltration Channels
Poddebniak, Dresen, Müller, Ising, Schinzel, Friedberger, Somorovsky, Schwenk
USENIX Security 2018The single most important OpenPGP security paper. CFB gadgets, three integrity bypasses, practical plaintext exfiltration. Article 3.
SoK: Why Johnny Can't Fix PGP Standardization2020Systematizes how the standardization process itself produced the ambiguities that became vulnerabilities. Essential context for anyone who wonders why the format is like this.
An Attack on CFB Mode Encryption As Used By OpenPGP
Mister & Zuccherato
IACR ePrint 2005The quick-check oracle. The clearest small example of "any observable check on unauthenticated plaintext is an oracle."
Challenging the Trustworthiness of PGP: Is the Web-of-Trust Tear-Proof?
Barenghi et al.
ESORICS 2015Graph-theoretic analysis showing the WoT strong set depends on a small number of high-degree nodes. The quantitative basis for Article 5's conclusions.
SHA-1 is a Shambles
Leurent & Peyrin
USENIX Security 2020Practical chosen-prefix SHA-1 collision. Bounds exactly how worried to be about v4 fingerprints. Article 2.

2.2 Further reading

2.3 Vulnerability disclosures worth studying

IdentifierWhatLesson
CVE-2018-12020 — SigSpoofStatus-line injection via unescaped Literal Data filenameNever multiplex machine-readable and human-readable output. Article 4.
CVE-2019-13050 — SKS floodingCertificate poisoning, permanent and unfixableAppend-only + unauthenticated writes + unbounded size = DoS primitive. Article 5.
CVE-2025-47934 — OpenPGP.js spoofingMessage spoofing via API-shape confusionMemory safety does not prevent verification-logic bugs.
Hansen — SKS Under AttackFirst-hand account by a targetRead this before designing any append-only public store.

3. Books

There is no current, good, technical book about OpenPGP. The format-specific books are all pre-2010 and describe a world before AEAD, before EFAIL, before the SKS collapse, and before RFC 9580. The RFC is the book. What follows is what to read for the surrounding competence instead.
BookAuthorRead it for
Real-World CryptographyDavid WongStart here if you need the surrounding crypto competence. Modern, practical, tells you what to use and what to avoid. Covers AEAD, KDFs, and PQC at the right level for this series.
Serious Cryptography (2nd ed.)Jean-Philippe AumassonOne layer deeper into primitives and why they fail. The natural follow-up to Wong. Second edition includes post-quantum.
Cryptography EngineeringFerguson, Schneier, KohnoHow cryptographic systems fail, as distinct from primitives. The mindset behind every "checklist" section in this series.
Security Engineering (3rd ed.)Ross AndersonThe architectural backstop. Chapters on trust, PKI and usability directly illuminate why the WoT failed. Freely available online.
PGP & GPG: Email for the Practical ParanoidMichael W. LucasOperational usage, well written — but 2006. Everything about keyservers and integrity is obsolete. Read for workflow intuition only.
PGP: Pretty Good PrivacySimson Garfinkel1994. Historical interest — the development story and the early format. Do not implement from it.
A Graduate Course in Applied CryptographyBoneh & ShoupFree. The rigorous treatment of the KEM/DEM framework, AEAD security definitions, and signature security notions that RFC 9980's composite constructions assume you know.

4. Talks and video

5. Courses

  • Cryptography I — Dan Boneh, Stanford — free. The standard foundation. Weeks on authenticated encryption and public-key encryption map directly onto Articles 3 and 6.
  • Cryptopals Crypto Challenges the single highest-value exercise for this material. Set 2 and 3 build CBC/CTR malleability and padding-oracle attacks by hand, which is precisely the intuition EFAIL requires. Do these before reading the EFAIL paper.
  • CryptoHack — gamified, broader coverage including lattices and post-quantum. Good complement to Cryptopals.
  • MIT 6.857 — Computer and Network Security — course materials and reading lists are public.

6. Implementations and tools

6.1 Libraries

ProjectLanguageStandardUse when
SequoiaRustRFC 9580New systems. Memory-safe, audited, explicit policy engine. The reference for correctness.
GnuPG / GPGMEC4880 + LibrePGPInteroperating with existing deployments. Use GPGME, never CLI parsing.
RNPC++4880 + AEADThunderbird integration or existing C++ stacks.
OpenPGP.jsJavaScript4880 + parts of 9580Browser or Node. Read the verification API docs carefully.
GopenPGPGo4880 + extensionsGo services.
rPGPRust4880 + 9580 workAlternative Rust implementation; used in some Delta Chat / messaging contexts.

6.2 Command-line and inspection

# Packet inspection — run at least two of these on the same input
gpg --list-packets --verbose message.pgp
sq packet dump --hex message.pgp          # Sequoia; stricter, reports policy issues
pgpdump -i -l -m message.pgp              # most readable annotations

# Armor handling
gpg --dearmor < message.asc > message.bin
sq packet dearmor message.asc

# Certificate inspection
sq inspect --certifications cert.pgp
gpg --list-packets < cert.pgp | grep -c ':signature packet:'   # flooding check

# WKD verification for a domain you operate
gpg-wks-client --check user@example.org
curl -sI https://openpgpkey.example.org/.well-known/openpgpkey/example.org/policy
  • GnuPG tool suite — includes gpg-wks-client and gpg-wks-server for WKD deployment.
  • Sequoia project suite sq, sqop, sq-wot, plus the Chameleon GnuPG-compatible drop-in.
  • pgpdump — long-standing standalone packet dumper.

6.3 Test suites and interoperability

7. Community and staying current

8. Learning roadmaps

Three paths through the same material Implementer Researcher Security engineer Boneh Crypto I · Cryptopals Boneh & Shoup · IACR Real-World Crypto · Anderson RFC 9580 §4,5,10 SoK · EFAIL · Mister-Zucc EFAIL · SigSpoof · SKS Write a parser · test suite WoT graph analysis · PQC Audit your own deployment Sequoia source · interop RFC 9980 · KEYTRANS WKD deploy · migration plan all three converge on the same rule: read the RFC, then check the interop matrix

Fig. 1 — Different starting points, same destination. The interoperability test suite is the reality check for all three.

8.1 Implementer — "I am building something with OpenPGP"

StepDoTime
1Cryptopals sets 1–3. Build a padding oracle by hand.2–3 weeks
2Read RFC 9580 §4, §5, §10. Dump real messages with two tools and reconcile.1 week
3Read this series' Articles 1–4 alongside the RFC.1 week
4Write a read-only packet parser in a memory-safe language. Do not implement crypto.2 weeks
5Run it against draft-bre-openpgp-samples and malformed inputs. Fix every panic.1 week
6Read the EFAIL paper and SigSpoof advisory. Re-audit your parser against both.3 days
7Read Sequoia's source for the layers you implemented. Compare decisions.1 week
8Check the interop matrix; pick your dialect explicitly and document it.1 day

Then stop and use a library. The point of the exercise is to be able to evaluate and use one correctly, not to ship your own.

8.2 Researcher — "I want to work on this"

  1. Boneh & Shoup for the KEM/DEM and AEAD security definitions RFC 9980's composites assume.
  2. The five essential papers in §2.1, in the order listed — EFAIL first, because it motivates the rest.
  3. RFC 9580 in full, then RFC 9980, then the LibrePGP spec, reading for the differences.
  4. The IETF openpgp@ archive around 2022–2024 for the schism as it happened.
  5. Open problems worth attention: formal analysis of RFC 9980's KEM combiner in the multi-user setting; automated detection of grammar-confusion classes across implementations; usable key transparency for OpenPGP; quantifying WoT residual value post-SKS; parser differential testing across the 4880/9580/LibrePGP dialects.

8.3 Security engineer — "I own a deployment"

  1. Inventory. Which implementation, which version, which algorithms, which key versions, and who consumes your artifacts.
  2. Kill the known-bad. No SED (tag 9) acceptance, no S2K usage 255, no RSA <3072, no DSA, no short key IDs anywhere in tooling or UI.
  3. Fix the interface. If anything shells out to gpg and parses output, that is your highest-priority finding. Move to GPGME or a library.
  4. Bound the inputs. Certification caps, size caps, decompression limits, nesting depth limits.
  5. Fix distribution. WKD on your domain; keys.openpgp.org; nothing depending on the SKS pool.
  6. Plan the migration. Ed25519/X25519 now; ML-KEM-768+X25519 for archival where you control both ends (Article 6).
  7. Instrument. Log algorithm and version usage, or you cannot measure any of the above.

9. What to be skeptical of

Resource typeProblem
Pre-2018 tutorialsPredate EFAIL. Will describe the MDC as sufficient and may not mention SED downgrade at all.
Pre-2019 keyserver adviceTells you to upload to the SKS pool. Actively harmful now.
Anything saying "OpenPGP-compatible" without qualificationMeaningless post-schism. Ask which: 4880, 9580, or LibrePGP.
"Web of Trust" tutorials framed as a global systemDescribes an aspiration, not a deployed reality. Fine as an internal mechanism.
Blog posts that shell out to gpg and parse stdoutTeaching the SigSpoof bug class as a pattern.
PGP-is-dead essaysUsually correct about the usability critique, usually silent on what to use for the file and archive encryption use cases OpenPGP still serves.

10. Closing the series

Six technical articles and a map. The through-line, if there is one: almost every OpenPGP failure in thirty years has been at a boundary rather than in a primitive. The ciphers held. The signatures were mathematically sound. What broke was the boundary between decryption and integrity checking (EFAIL), between the verification result and the interface reporting it (SigSpoof), between what a user sees and what was signed (cleartext canonicalization), between a certificate and its unbounded appendable signatures (SKS), and between two committees who could not agree on a packet tag (the schism).

That is the useful generalization to carry out of this material into whatever you build next. The cryptography is the part most likely to be correct. The interfaces around it are where you should spend your review time.

FAQ

What is the single best resource if I only read one thing?

RFC 9580, sections 4, 5 and 10. It is dense but it is the only current, complete, authoritative description of the format. Everything else is commentary — including this series.

Should I learn OpenPGP in 2026, or is it obsolete?

For interactive messaging, use Signal — the forward-secrecy and usability arguments are decisive. OpenPGP remains the standard for signed software releases, long-term archival encryption, non-interactive machine-to-machine encryption, and email where regulatory or institutional requirements dictate it. Those are real, ongoing use cases, and the format's engineering history is independently valuable as a case study.

Which implementation should I read the source of?

Sequoia. It is the most readable modern codebase, tracks RFC 9580 closely, and its explicit policy engine makes the security decisions visible in code rather than buried in defaults. Read its parser alongside RFC 9580 §4 and the two will teach each other.

How do I keep up after this?

Follow the IETF openpgp@ archive and the Sequoia and GnuPG blogs, and re-check the interoperability test suite when you change anything. Those three cover the standard, both sides of the schism, and reality respectively.

The full series

← prev: PQC & The Schism browse the archive →
© cvam — written in plaintext, served warm