Security
This page documents the cryptographic keys and methods I use. For encrypted communication, see the contact page.
Key files and tools are also available on GitHub: mrpg/security.
OpenPGP key
My primary cryptographic key is managed with GnuPG. It is used for email encryption and for signing other keys and files.
| Key ID | 0x1636BA9B |
|---|---|
| Fingerprint | A09A92FC5015EE861A7098511999861C1636BA9B |
| Algorithm | Ed25519 (signing), Cv25519 (encryption), Kyber + ML-KEM (encryption) |
This key may be used with all my email addresses. Recent versions of Thunderbird support email encryption out of the box. This server also has Web Key Directory (WKD) enabled, so compliant email clients can discover the key automatically.
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 /gAXE0xXy33TiK8vppLM7w//Cw== =Q94h -----END PGP PUBLIC KEY BLOCK-----
Post-quantum signature keys
SLH-DSA is the post-quantum signature scheme I currently prefer. I retain my earlier Dilithium key for compatibility.
Both keys below are used for digital signatures, not for encryption.
| Item | SLH-DSA (preferred) | Dilithium |
|---|---|---|
| Public key | slhdsa-2026.pem | dilithium-2026.pem |
| Algorithm | SLH-DSA-SHAKE-256s FIPS 205; NIST security category 5 | Dilithium-8x7-r3 Round 3; NIST security level 5 |
| Purpose | Detached file signatures | Detached file signatures |
| Tool | botan-slhdsa-signing | botan-dilithium-signing |
| Example file | hello.txt | hello.txt |
| Signature | hello.txt.botansigh | hello.txt.botansig |
Authenticating the public keys
Both public keys have detached signatures made with my GnuPG key. Download the public key and its .sig file, then verify it explicitly:
gpg --verify slhdsa-2026.pem.sig slhdsa-2026.pem
gpg --verify dilithium-2026.pem.sig dilithium-2026.pem The detached signatures are slhdsa-2026.pem.sig and dilithium-2026.pem.sig. If you trust the GnuPG key identified above, a successful check authenticates the post-quantum public key.
Verifying post-quantum signatures
SLH-DSA (preferred), using botan-slhdsa-signing:
./verify.sh -p slhdsa-2026.pem hello.txt.botansigh Dilithium, using botan-dilithium-signing:
./verify.sh -p dilithium-2026.pem hello.txt.botansig The verifier exits with status 0 and prints nothing when the signature is valid.
Browser-based encryption
The contact page offers an in-browser encryption tool powered by OpenPGP.js. Messages are encrypted locally in your browser before being sent. No plaintext ever leaves your device.