Harden Your GnuPG Configuration

Make your GnuPG configuration more secure with these hardened settings.

You may want to review the typographical conventions used on this site.

Threat Model

Adversaries that can monitor unencrypted network communication with the keyservers can build a social network based on the keys that clients request from the keyservers. The specific set of keys that each client refreshes can also be used to fingerprint and track individual clients.

Malicious keyservers can record the IP addresses from which clients connect and the keys that clients request in order to fingerprint and track users.

Unnecessarily leaking information about the specific versions of software that you have installed makes it easier for an attacker to target specific software vulnerabilities or de-anonymize users.

Install the Required Linux Software

Install the required GnuPG packages if you haven’t already.

apt-get install pinentry-curses pinentry-gtk2 pinentry-qt
apt-get install gnupg gpg gpg-agent dirmngr

Optionally, install Tor to anonymize your keyserver interactions.

apt-get install tor

Configure gpg


# Use UTF-8 character encoding everywhere.
display-charset utf-8

# Use GnuPG Agent (gpg-agent) for secret key management.

# Don't leak comments or software version information.

# Display full fingerprints.
keyid-format long

# Default key to use since more than one private key is in the keyring.
# Get public key ID with: gpg --list-secret-keys

# When verifying a signature made from a subkey, require that the
# cross-certification "back signature" on the subkey is present and valid.

# Prefer the strongest ciphers and digests in the OpenPGP specification.
# To list available algorithms: gpg --version
personal-cipher-preferences AES256 AES192 AES
personal-digest-preferences SHA512 SHA384 SHA256 SHA224
personal-compress-preferences BZIP2 ZLIB ZIP Uncompressed

# Use the strongest digest when signing a key.
cert-digest-algo SHA512

default-preference-list AES256 AES192 AES SHA512 SHA384 SHA256 SHA224 BZIP2 ZLIB ZIP Uncompressed

Configure gpg-agent


# Enable OpenSSH Agent (ssh-agent) protocol support.

# Set number of seconds for which cache entries are valid.
default-cache-ttl       300  #  5 minutes.
default-cache-ttl-ssh   300  #  5 minutes.
max-cache-ttl           900  # 15 minutes.
max-cache-ttl-ssh       900  # 15 minutes.

Add the following to your ~/.profile so that ssh will use gpg-agent instead of ssh-agent.

if [ -z "$SSH_AUTH_SOCK" ]; then
    export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"

Add the following to your ~/.bashrc so that a required environment variable will be set per-shell.

export GPG_TTY="$(tty)"

Configure dirmngr

All communication between dirmngr and the OpenPGP keyservers should be encrypted and optionally anonymized via the Tor network.

If you want to interact with the keyservers directly over TLS, use the following configuration.


keyserver hkps://keys.openpgp.org

If you want to interact with the keyservers via the Tor hidden service, use the following configuration. However, you will need to have Tor installed and running for this configuration to work.


keyserver hkp://zkaan2xfbuxia2wpf7ofnkbz6r5zdbbvxbunvp5g2iebopbfc4iqmbad.onion


If your system uses systemd user sessions, users may need to enable the gpg-agent sockets via systemd. Some systems auto-enable these user sockets, while others don’t.

systemctl --user enable gpg-agent.socket
systemctl --user enable gpg-agent-ssh.socket

I use the following systemd user-configuration files to automatically refresh my keys from the keyservers several times each week.


Description=GnuPG Refresh Keys
After=network.target network-online.target

ExecStart=/usr/bin/gpg --refresh-keys


Description=GnuPG Refresh Keys

OnCalendar=Mon,Wed,Fri *-*-* 04:00:00

systemctl --user daemon-reload
systemctl --user enable gpg-refresh-keys.timer

OpenPGP Cards

To protect your OpenPGP keys against surreptitious theft, store your OpenPGP keys on a YubiKey or other OpenPGP Card. Your private keys will then be inside of a tamper-resistant hardware token, instead of in easily-copied files on your hard drive.

Tags: encryption, GnuPG, OpenPGP, PGP, privacy, security