When most people think about creating PGP keys, they immediately type gpg --full-generate-key . It’s the standard. But what if I told you there’s a leaner, more scriptable, and arguably more transparent way to generate the same keys?
It is part of the suite (which also includes rnpgpg , rnpkeys , and rpki ). RNP aims to be a high-performance, easy-to-integrate OpenPGP library used by projects like Mozilla Thunderbird and ProtonMail Bridge .
I’d love to hear about your workflows. Drop a comment below or ping me on the OpenPGP mailing list. Want to dive deeper? Check out the official RNP documentation or explore the pkeygen man page ( man pkeygen ). pkeygen
Enter — a utility often bundled with OpenPGP implementations like rnp (RNC’s OpenPGP implementation) and sometimes found in gpg as an undocumented subcommand. While it’s not as famous as its gpg cousin, pkeygen offers a refreshing, JSON-driven approach to key creation.
In this post, we’ll dive into what pkeygen is, how it differs from traditional methods, and why you might want to add it to your crypto toolkit. Unlike the interactive wizards of GnuPG, pkeygen is designed to be non-interactive and data-driven . It reads a simple JSON configuration file (or string) and outputs a binary or armored OpenPGP keyring. When most people think about creating PGP keys,
{ "params": [ { "type": "EDDSA", "curve": "Ed25519" } ], "userid": "DevOps Bot <ci@example.com>" } Then run:
rnpkeys --export --armor --output my-pubkey.asc The real power of pkeygen is defining multiple subkeys for different purposes (authentication, encryption, signing). Here’s a production-ready config: It is part of the suite (which also
$ pkeygen --version rnp 0.17.0 Create a file called key-config.json :