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_IDgpg --import secret-subkeysshred 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 passwdgpg --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 curling 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