gpg
Master GPG commands for secure encryption, decryption, signing, and key management. Learn to generate, export, import, and revoke GPG keys effectively.
GPG Command Line Guide
This guide provides essential GPG (GNU Privacy Guard) commands for managing cryptographic keys and performing secure operations like encryption, decryption, and signing. GPG is a powerful tool for ensuring data confidentiality and integrity.
GPG Key Management
Effectively managing your GPG keys is crucial for secure communication. This section covers generating, listing, exporting, and importing keys.
# Create a new GPG key pair
gpg --gen-key
# List all keys (public and secret)
gpg --list-keys
gpg -k
# List only secret keys
gpg --list-secret-keys
gpg -K
# Show your public key in ASCII armor format
gpg --armor --export
# Show the fingerprint for a specific key
gpg --fingerprint KEY_ID
# Search for keys on public key servers
gpg --search-keys 'user@emailaddress.com'
File Encryption and Decryption
Learn how to encrypt files for specific recipients and decrypt files that have been encrypted using GPG.
# Encrypt a file for a specific recipient
gpg --encrypt --recipient 'user@emailaddress.com' example.txt
# Decrypt a file
gpg --output example.txt --decrypt example.txt.gpg
Exporting and Importing Keys
Securely export your public and private keys for backup or sharing, and import keys from others.
# Export your public key
gpg --output ~/public_key.txt --armor --export KEY_ID
# Export your secret key (handle with extreme care)
gpg --output ~/private_key.txt --armor --export-secret-key KEY_ID
# Securely delete the private key file after export
shred -zu ~/private_key.txt
# Import a public key
gpg --import ~/public_key.txt
# Import a secret key (requires special flag)
gpg --allow-secret-key-import --import ~/private_key.txt
# Securely delete the imported private key file after import
shred -zu ~/private_key.txt
Revoking a GPG Key
If your private key is compromised or you no longer wish to use a key, you should revoke it.
# Create a revocation certificate
gpg --output ~/revoke.asc --gen-revoke KEY_ID
# Import the revocation certificate
gpg --import ~/revoke.asc
# Send the revocation to key servers
gpg --send-keys KEY_ID
Signing and Verifying Files
GPG can be used to digitally sign files to verify their authenticity and integrity.
# Sign a file (creates a .asc signature file)
gpg -ba filename
# Sign a file with a specific default key
gpg --default-key <key ID> -ba filename
# Verify a downloaded file using its signature
gpg --verify filename.asc
Signing Public Keys
Contribute to the web of trust by signing the public keys of others.
# Retrieve a public key from a keyserver
gpg --keyserver <keyserver> --recv-keys <Key_ID>
# Check the key's fingerprint
gpg --fingerprint <Key_ID>
# Sign the key
gpg --sign-key <Key_ID>
# Upload the signed key to a keyserver
gpg --keyserver <keyserver> --send-key <Key_ID>
Managing GPG Key UIDs (User IDs)
Modify the email addresses and names associated with your GPG keys.
# Edit a key
gpg --edit-key <key ID>
# Add a new User ID (name and email)
adduid
# List current UIDs
list
# Select a UID to delete
uid <list number>
# Delete the selected UID
deluid
# Save changes
save
# Publish the updated key to a server
gpg --send-keys <key ID>
Creating and Managing Subkeys
Subkeys offer flexibility by allowing you to keep your master key secure while using subkeys for specific purposes or machines.
# Edit a key to add subkeys
gpg --edit-key <key ID>
# Add a signing-only subkey
addkey
# Choose RSA, 4096 bits, and set an expiry period.
# Add an encryption-only subkey (repeat addkey process)
# Save changes
save
# Export secret subkeys
gpg --export-secret-subkeys <subkey ID> > subkeys
gpg --export <key ID> > pubkeys
# Delete the master secret key
gpg --delete-secret-key <key ID>
# Import the master public key and secret subkeys
gpg --import pubkeys subkeys
# Verify that subkeys are now present (should show sec#)
gpg -K
High-Quality Symmetric Encryption Options
For enhanced security in symmetric encryption, consider these advanced GPG options.
# Encrypt a file using high-quality symmetric options
gpg \
--symmetric \
--cipher-algo aes256 \
--digest-algo sha512 \
--cert-digest-algo sha512 \
--compress-algo none -z 0 \
--s2k-mode 3 \
--s2k-digest-algo sha512 \
--s2k-count 65011712 \
--force-mdc \
--pinentry-mode loopback \
--armor \
--no-symkey-cache \
--output somefile.gpg \
somefile # file to encrypt
# Decrypt a file using high-quality symmetric options
gpg \
--decrypt \
--pinentry-mode loopback \
--armor \
--output somefile.decrypted \
somefile.gpg # file to decrypt