Just some stuff about me.
The master key is the one used for certifying. It’s best to keep that off your main machine, and only keep subkeys for specific purposes on the machine.
gpg --full-gen-key
, use RSA at 4096 bits. If needed, do gpg --expert --edit-key
, adduid
for other users/emails, then uid <number>
and primary
to set a primary user, and save
.gpg --list-keys name
, then gpg --expert --edit-key MASTER_ID
. Type addkey
, RSA sign only, at large bit size and relatively short expiry date, then repeat for authenticate, sign, encrypt if needed. save
.$HOME/.gnupg
to wherever you’ll store the master key.gpg --output secret-subkeys --export-secret-subkeys MASTER_ID
.gpg --delete-secret-keys MASTER_ID
gpg --import secret-subkeys
shred secret-subkeys
(and rm
if shred
doesn’t do it automatically).gpg -K
, it should show sec#
instead of sec
, meaning, that secret key is not there (good!).gpg --edit-key MATER_ID passwd
gpg --keyserver keyring.debian.org --send-key MASTER_ID
(repeat for keyserver pool.sks-keyservers.net
and others if needed). Also, gpg --export -a MASTER_ID > gpg.pub
to export public subkeys and upload/share where needed.export GNUPGHOME=/path/to/stored/.gnupg
(or use the --homedir
flag with every GPG command).gpg -K
to find key ID and check the expiration date, then gpg --edit-key MASTER_ID
.key <n>
to switch to a subkey, then expire
and set the expiration date. Once done with all subkeys, do save
.gpg -a --export MASTER_ID > /path/to/exported-key.txt
(private keys don’t expire). You can verify with gpg /path/to/exported-key.txt
.gpg --import /path/to/exported-key.txt
and verify with gpg -K
(which should also still show a sec#
on the master key).gpg --send-keys MASTER_ID
to whichever keyservers you need. Also upload /path/to/exported-key.txt
to wherever you need, and you can check it by curl
ing into gpg
.Useful sources: viccuad.me on air-gapped GPG, Debian wiki on airgapped master keys, a post from Eleven Labs, Debian wiki on subkeys