OpenPGP is an open standard for encryption and digital signatures of arbitrary data, defined in RFC 4880 (2007) and substantially revised in RFC 9580 (2024, adding Ed25519, X25519, and modern AEAD encryption). GnuPG (GPG) is the dominant open-source implementation, maintained by Werner Koch and the GnuPG project, and the tool most users interact with. OpenPGP predates the PKI/CA model and takes a fundamentally different approach to trust: rather than a hierarchy of certificate authorities that users must trust transitively, OpenPGP uses a Web of Trust in which individual users sign each other’s public keys, and trust is established through chains of personal endorsements. In the Web of Trust model, Alice trusts Bob’s key because she verified it in person and signed it; Carol trusts Bob’s key because Alice (whom Carol trusts) signed it. This decentralised, peer-to-peer trust model made sense for email encryption between individuals who could meet at key-signing parties, but does not scale to automated infrastructure verification, which is why OpenPGP’s role in modern infrastructure is primarily supply chain signing — package repositories, Git commits, and release artifacts — rather than interactive authentication.
An OpenPGP key is a certificate that bundles a primary key (used for certification — signing other keys — and optionally for signing data) with one or more subkeys (for encryption, signing, and authentication), each with its own algorithm and validity period, all bound together by self-signatures from the primary key. The primary key’s fingerprint (SHA-1 historically, SHA-256 in RFC 9580) is the durable identity of the key, and is what users publish on keyservers (SKS, keys.openpgp.org), in DNS DANE records, or in their GitHub profiles. Key management in GnuPG is handled by the gpg CLI and, for smartcard/hardware token integration, by gpg-agent and the scdaemon: OpenPGP keys can be generated on and stored in hardware tokens (YubiKey with OpenPGP applet, Nitrokey) so that the private key never leaves the hardware, providing FIDO2-like physical presence requirements for signing operations. A signed OpenPGP packet (a --clearsign, --detach-sig, or --sign output) contains the data, the signature, and the signer’s key fingerprint; a verifier who has the signer’s public key can verify the signature without any CA or network call. Encryption in OpenPGP uses a hybrid scheme: a random session key is encrypted under each recipient’s public encryption subkey using RSA or X25519 (ECDH, per RFC 9580), and the data is encrypted with AES-256 using that session key.
The primary infrastructure uses of OpenPGP in this glossary’s context are three. Linux package signing: RPM (RHEL, Fedora) and DEB (Debian, Ubuntu) packages are signed with the distribution’s OpenPGP key; dnf and apt verify these signatures against the distribution’s public key (distributed in /etc/pki/rpm-gpg/ or via apt-key) before installing any package — GPG is the trust anchor for the entire package supply chain on Linux. Git signing: git commit --gpg-sign and git tag --sign embed OpenPGP or SSH signatures in Git objects; GitHub, GitLab, and Forgejo display verified badges for commits signed with a key registered to the author’s account, and tools like gitsign (from Sigstore) use ephemeral OIDC-bound certificates rather than long-lived OpenPGP keys for keyless Git signing. Email encryption: S/MIME and OpenPGP are the two competing email encryption standards; OpenPGP via Thunderbird/Enigmail or native Thunderbird 78+ support provides end-to-end encrypted email without a CA, though the Web of Trust’s usability barriers have limited adoption. The PQC transition is partially addressed in RFC 9580: the standard adds support for ML-KEM-768 and ML-DSA-65 (alongside the existing Ed25519/X25519 support) as OpenPGP algorithm identifiers, and GnuPG 2.5.x development branch implements these. The transition path is adding a PQC encryption subkey and a PQC signing subkey to existing OpenPGP keys — compatible with existing key management infrastructure — while retaining the classical subkeys for interoperability with verifiers that have not yet updated.
