gnupg: OpenPGP Key Management
4.1.3 How to manage your keys
-----------------------------
This section explains the main commands for key management.
'--quick-generate-key USER-ID [ALGO [USAGE [EXPIRE]]]'
'--quick-gen-key'
This is a simple command to generate a standard key with one user
id. In contrast to '--generate-key' the key is generated directly
without the need to answer a bunch of prompts. Unless the option
'--yes' is given, the key creation will be canceled if the given
user id already exists in the keyring.
If invoked directly on the console without any special options an
answer to a "Continue?" style confirmation prompt is required. In
case the user id already exists in the keyring a second prompt to
force the creation of the key will show up.
If ALGO or USAGE are given, only the primary key is created and no
prompts are shown. To specify an expiration date but still create
a primary and subkey use "default" or "future-default" for ALGO and
"default" for USAGE. For a description of these optional arguments
see the command '--quick-add-key'. The USAGE accepts also the
value "cert" which can be used to create a certification only
primary key; the default is to a create certification and signing
key.
The EXPIRE argument can be used to specify an expiration date for
the key. Several formats are supported; commonly the ISO formats
"YYYY-MM-DD" or "YYYYMMDDThhmmss" are used. To make the key expire
in N seconds, N days, N weeks, N months, or N years use
"seconds=N", "Nd", "Nw", "Nm", or "Ny" respectively. Not
specifying a value, or using "-" results in a key expiring in a
reasonable default interval. The values "never", "none" can be
used for no expiration date.
If this command is used with '--batch', '--pinentry-mode' has been
set to 'loopback', and one of the passphrase options
('--passphrase', '--passphrase-fd', or 'passphrase-file') is used,
the supplied passphrase is used for the new key and the agent does
not ask for it. To create a key without any protection
'--passphrase ''' may be used.
To create an OpenPGP key from the keys available on the currently
inserted smartcard, the special string "card" can be used for ALGO.
If the card features an encryption and a signing key, gpg will
figure them out and creates an OpenPGP key consisting of the usual
primary key and one subkey. This works only with certain
smartcards. Note that the interactive '--full-gen-key' command
allows to do the same but with greater flexibility in the selection
of the smartcard keys.
Note that it is possible to create a primary key and a subkey using
non-default algorithms by using "default" and changing the default
parameters using the option '--default-new-key-algo'.
'--quick-set-expire FPR EXPIRE [*|SUBFPRS]'
With two arguments given, directly set the expiration time of the
primary key identified by FPR to EXPIRE. To remove the expiration
time '0' can be used. With three arguments and the third given as
an asterisk, the expiration time of all non-revoked and not yet
expired subkeys are set to EXPIRE. With more than two arguments
and a list of fingerprints given for SUBFPRS, all non-revoked
subkeys matching these fingerprints are set to EXPIRE.
'--quick-add-key FPR [ALGO [USAGE [EXPIRE]]]'
Directly add a subkey to the key identified by the fingerprint FPR.
Without the optional arguments an encryption subkey is added. If
any of the arguments are given a more specific subkey is added.
ALGO may be any of the supported algorithms or curve names given in
the format as used by key listings. To use the default algorithm
the string "default" or "-" can be used. Supported algorithms are
"rsa", "dsa", "elg", "ed25519", "cv25519", and other ECC curves.
For example the string "rsa" adds an RSA key with the default key
length; a string "rsa4096" requests that the key length is 4096
bits. The string "future-default" is an alias for the algorithm
which will likely be used as default algorithm in future versions
of gpg. To list the supported ECC curves the command 'gpg
--with-colons --list-config curve' can be used.
Depending on the given ALGO the subkey may either be an encryption
subkey or a signing subkey. If an algorithm is capable of signing
and encryption and such a subkey is desired, a USAGE string must be
given. This string is either "default" or "-" to keep the default
or a comma delimited list (or space delimited list) of keywords:
"sign" for a signing subkey, "auth" for an authentication subkey,
and "encr" for an encryption subkey ("encrypt" can be used as alias
for "encr"). The valid combinations depend on the algorithm.
The EXPIRE argument can be used to specify an expiration date for
the key. Several formats are supported; commonly the ISO formats
"YYYY-MM-DD" or "YYYYMMDDThhmmss" are used. To make the key expire
in N seconds, N days, N weeks, N months, or N years use
"seconds=N", "Nd", "Nw", "Nm", or "Ny" respectively. Not
specifying a value, or using "-" results in a key expiring in a
reasonable default interval. The values "never", "none" can be
used for no expiration date.
'--generate-key'
'--gen-key'
Generate a new key pair using the current default parameters. This
is the standard command to create a new key. In addition to the
key a revocation certificate is created and stored in the
'openpgp-revocs.d' directory below the GnuPG home directory.
'--full-generate-key'
'--full-gen-key'
Generate a new key pair with dialogs for all options. This is an
extended version of '--generate-key'.
There is also a feature which allows you to create keys in batch
mode. See the manual section "Unattended key generation" on how to
use this.
'--generate-revocation NAME'
'--gen-revoke NAME'
Generate a revocation certificate for the complete key. To only
revoke a subkey or a key signature, use the '--edit' command.
This command merely creates the revocation certificate so that it
can be used to revoke the key if that is ever needed. To actually
revoke a key the created revocation certificate needs to be merged
with the key to revoke. This is done by importing the revocation
certificate using the '--import' command. Then the revoked key
needs to be published, which is best done by sending the key to a
keyserver (command '--send-key') and by exporting ('--export') it
to a file which is then send to frequent communication partners.
'--generate-designated-revocation NAME'
'--desig-revoke NAME'
Generate a designated revocation certificate for a key. This
allows a user (with the permission of the keyholder) to revoke
someone else's key.
'--edit-key'
Present a menu which enables you to do most of the key management
related tasks. It expects the specification of a key on the
command line.
uid N
Toggle selection of user ID or photographic user ID with index
N. Use '*' to select all and '0' to deselect all.
key N
Toggle selection of subkey with index N or key ID N. Use '*'
to select all and '0' to deselect all.
sign
Make a signature on key of user 'name'. If the key is not yet
signed by the default user (or the users given with '-u'), the
program displays the information of the key again, together
with its fingerprint and asks whether it should be signed.
This question is repeated for all users specified with '-u'.
lsign
Same as "sign" but the signature is marked as non-exportable
and will therefore never be used by others. This may be used
to make keys valid only in the local environment.
nrsign
Same as "sign" but the signature is marked as non-revocable
and can therefore never be revoked.
tsign
Make a trust signature. This is a signature that combines the
notions of certification (like a regular signature), and trust
(like the "trust" command). It is generally only useful in
distinct communities or groups. For more information please
read the sections "Trust Signature" and "Regular Expression"
in RFC-4880.
Note that "l" (for local / non-exportable), "nr" (for
non-revocable, and "t" (for trust) may be freely mixed and prefixed
to "sign" to create a signature of any type desired.
If the option '--only-sign-text-ids' is specified, then any
non-text based user ids (e.g., photo IDs) will not be selected for
signing.
delsig
Delete a signature. Note that it is not possible to retract a
signature, once it has been send to the public (i.e. to a
keyserver). In that case you better use 'revsig'.
revsig
Revoke a signature. For every signature which has been
generated by one of the secret keys, GnuPG asks whether a
revocation certificate should be generated.
check
Check the signatures on all selected user IDs. With the extra
option 'selfsig' only self-signatures are shown.
adduid
Create an additional user ID.
addphoto
Create a photographic user ID. This will prompt for a JPEG
file that will be embedded into the user ID. Note that a very
large JPEG will make for a very large key. Also note that
some programs will display your JPEG unchanged (GnuPG), and
some programs will scale it to fit in a dialog box (PGP).
showphoto
Display the selected photographic user ID.
deluid
Delete a user ID or photographic user ID. Note that it is not
possible to retract a user id, once it has been send to the
public (i.e. to a keyserver). In that case you better use
'revuid'.
revuid
Revoke a user ID or photographic user ID.
primary
Flag the current user id as the primary one, removes the
primary user id flag from all other user ids and sets the
timestamp of all affected self-signatures one second ahead.
Note that setting a photo user ID as primary makes it primary
over other photo user IDs, and setting a regular user ID as
primary makes it primary over other regular user IDs.
keyserver
Set a preferred keyserver for the specified user ID(s). This
allows other users to know where you prefer they get your key
from. See '--keyserver-options honor-keyserver-url' for more
on how this works. Setting a value of "none" removes an
existing preferred keyserver.
notation
Set a name=value notation for the specified user ID(s). See
'--cert-notation' for more on how this works. Setting a value
of "none" removes all notations, setting a notation prefixed
with a minus sign (-) removes that notation, and setting a
notation name (without the =value) prefixed with a minus sign
removes all notations with that name.
pref
List preferences from the selected user ID. This shows the
actual preferences, without including any implied preferences.
showpref
More verbose preferences listing for the selected user ID.
This shows the preferences in effect by including the implied
preferences of 3DES (cipher), SHA-1 (digest), and Uncompressed
(compression) if they are not already included in the
preference list. In addition, the preferred keyserver and
signature notations (if any) are shown.
setpref STRING
Set the list of user ID preferences to STRING for all (or just
the selected) user IDs. Calling setpref with no arguments
sets the preference list to the default (either built-in or
set via '--default-preference-list'), and calling setpref with
"none" as the argument sets an empty preference list. Use
'gpg --version' to get a list of available algorithms. Note
that while you can change the preferences on an attribute user
ID (aka "photo ID"), GnuPG does not select keys via attribute
user IDs so these preferences will not be used by GnuPG.
When setting preferences, you should list the algorithms in
the order which you'd like to see them used by someone else
when encrypting a message to your key. If you don't include
3DES, it will be automatically added at the end. Note that
there are many factors that go into choosing an algorithm (for
example, your key may not be the only recipient), and so the
remote OpenPGP application being used to send to you may or
may not follow your exact chosen order for a given message.
It will, however, only choose an algorithm that is present on
the preference list of every recipient key. See also the
INTEROPERABILITY WITH OTHER OPENPGP PROGRAMS section below.
addkey
Add a subkey to this key.
addcardkey
Generate a subkey on a card and add it to this key.
keytocard
Transfer the selected secret subkey (or the primary key if no
subkey has been selected) to a smartcard. The secret key in
the keyring will be replaced by a stub if the key could be
stored successfully on the card and you use the save command
later. Only certain key types may be transferred to the card.
A sub menu allows you to select on what card to store the key.
Note that it is not possible to get that key back from the
card - if the card gets broken your secret key will be lost
unless you have a backup somewhere.
bkuptocard FILE
Restore the given FILE to a card. This command may be used to
restore a backup key (as generated during card initialization)
to a new card. In almost all cases this will be the
encryption key. You should use this command only with the
corresponding public key and make sure that the file given as
argument is indeed the backup to restore. You should then
select 2 to restore as encryption key. You will first be
asked to enter the passphrase of the backup key and then for
the Admin PIN of the card.
delkey
Remove a subkey (secondary key). Note that it is not possible
to retract a subkey, once it has been send to the public (i.e.
to a keyserver). In that case you better use 'revkey'. Also
note that this only deletes the public part of a key.
revkey
Revoke a subkey.
expire
Change the key or subkey expiration time. If a subkey is
selected, the expiration time of this subkey will be changed.
With no selection, the key expiration of the primary key is
changed.
trust
Change the owner trust value for the key. This updates the
trust-db immediately and no save is required.
disable
enable
Disable or enable an entire key. A disabled key can not
normally be used for encryption.
addrevoker
Add a designated revoker to the key. This takes one optional
argument: "sensitive". If a designated revoker is marked as
sensitive, it will not be exported by default (see
export-options).
passwd
Change the passphrase of the secret key.
toggle
This is dummy command which exists only for backward
compatibility.
clean
Compact (by removing all signatures except the selfsig) any
user ID that is no longer usable (e.g. revoked, or expired).
Then, remove any signatures that are not usable by the trust
calculations. Specifically, this removes any signature that
does not validate, any signature that is superseded by a later
signature, revoked signatures, and signatures issued by keys
that are not present on the keyring.
minimize
Make the key as small as possible. This removes all
signatures from each user ID except for the most recent
self-signature.
change-usage
Change the usage flags (capabilities) of the primary key or of
subkeys. These usage flags (e.g. Certify, Sign,
Authenticate, Encrypt) are set during key creation. Sometimes
it is useful to have the opportunity to change them (for
example to add Authenticate) after they have been created.
Please take care when doing this; the allowed usage flags
depend on the key algorithm.
cross-certify
Add cross-certification signatures to signing subkeys that may
not currently have them. Cross-certification signatures
protect against a subtle attack against signing subkeys. See
'--require-cross-certification'. All new keys generated have
this signature by default, so this command is only useful to
bring older keys up to date.
save
Save all changes to the keyrings and quit.
quit
Quit the program without updating the keyrings.
The listing shows you the key with its secondary keys and all user
IDs. The primary user ID is indicated by a dot, and selected keys
or user IDs are indicated by an asterisk. The trust value is
displayed with the primary key: "trust" is the assigned owner trust
and "validity" is the calculated validity of the key. Validity
values are also displayed for all user IDs. For possible values of
trust, ⇒trust-values.
'--sign-key NAME'
Signs a public key with your secret key. This is a shortcut
version of the subcommand "sign" from '--edit'.
'--lsign-key NAME'
Signs a public key with your secret key but marks it as
non-exportable. This is a shortcut version of the subcommand
"lsign" from '--edit-key'.
'--quick-sign-key FPR [NAMES]'
'--quick-lsign-key FPR [NAMES]'
Directly sign a key from the passphrase without any further user
interaction. The FPR must be the verified primary fingerprint of a
key in the local keyring. If no NAMES are given, all useful user
ids are signed; with given [NAMES] only useful user ids matching
one of theses names are signed. By default, or if a name is
prefixed with a '*', a case insensitive substring match is used.
If a name is prefixed with a '=' a case sensitive exact match is
done.
The command '--quick-lsign-key' marks the signatures as
non-exportable. If such a non-exportable signature already exists
the '--quick-sign-key' turns it into a exportable signature.
This command uses reasonable defaults and thus does not provide the
full flexibility of the "sign" subcommand from '--edit-key'. Its
intended use is to help unattended key signing by utilizing a list
of verified fingerprints.
'--quick-add-uid USER-ID NEW-USER-ID'
This command adds a new user id to an existing key. In contrast to
the interactive sub-command 'adduid' of '--edit-key' the
NEW-USER-ID is added verbatim with only leading and trailing white
space removed, it is expected to be UTF-8 encoded, and no checks on
its form are applied.
'--quick-revoke-uid USER-ID USER-ID-TO-REVOKE'
This command revokes a user ID on an existing key. It cannot be
used to revoke the last user ID on key (some non-revoked user ID
must remain), with revocation reason "User ID is no longer valid".
If you want to specify a different revocation reason, or to supply
supplementary revocation text, you should use the interactive
sub-command 'revuid' of '--edit-key'.
'--quick-revoke-sig FPR SIGNING-FPR [NAMES]'
This command revokes the key signatures made by SIGNING-FPR from
the key specified by the fingerprint FPR. With NAMES given only
the signatures on user ids of the key matching any of the given
names are affected (see '--quick-sign-key'). If a revocation
already exists a notice is printed instead of creating a new
revocation; no error is returned in this case. Note that key
signature revocations may be superseded by a newer key signature
and in turn again revoked.
'--quick-set-primary-uid USER-ID PRIMARY-USER-ID'
This command sets or updates the primary user ID flag on an
existing key. USER-ID specifies the key and PRIMARY-USER-ID the
user ID which shall be flagged as the primary user ID. The primary
user ID flag is removed from all other user ids and the timestamp
of all affected self-signatures is set one second ahead.
'--change-passphrase USER-ID'
'--passwd USER-ID'
Change the passphrase of the secret key belonging to the
certificate specified as USER-ID. This is a shortcut for the
sub-command 'passwd' of the edit key menu. When using together
with the option '--dry-run' this will not actually change the
passphrase but check that the current passphrase is correct.