25

I have created a master key with two subkeys: one for signing and the other for encryption. Finally, I have exported the two subkeys to a new machine.

How can I tell the new machine to consider the master as "ultimate", even if it is absent from the machine? Does it matter?

Jens Erat
  • 23,446
  • 12
  • 72
  • 96
Antoine
  • 549
  • 1
  • 4
  • 7

3 Answers3

35

You can set every key to ultimate trust through opening the key edit command line

gpg --edit-key [key-id]

and running the trust command. You will now be prompted to select the trust level:

Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)

  1 = I don't know or won't say
  2 = I do NOT trust
  3 = I trust marginally
  4 = I trust fully
  5 = I trust ultimately
  m = back to the main menu

Your decision? 

Obviously, 5 will be the proper decision to achieve ultimate trust. Finally, save to commit the changes and exit GnuPG. The same commands apply to both GnuPG 1.4 and GnuPG 2 (and newer).

Ultimate enables a key to introduce trust in the OpenPGP web of trust, with other words all ultimately trusted keys act as a starting point for trust paths. You should set your own keys to ultimate trust, but usually will not do so for other's.

Jens Erat
  • 23,446
  • 12
  • 72
  • 96
  • 1
    Minor note: it seems that `save` is not necessary, giving 'Key not changed so no update needed.' – David Oliver May 12 '20 at 13:36
  • 1
    You're right, in fact this does not really edit the _key_, but the _trust database_ which does not seem to require the `save` command. – Jens Erat May 12 '20 at 20:01
8

To change the Ownertrust trust level of a key after importing in a simplier way (without the interactive --edit-key mode) I found this way in one line using gpg --import-ownertrust:

According to this mail from the Gnupg-users mailing list the trust level can be changed using gpg --import-ownertrust

You only need to get the fingerprint of the key and the trust level number which is the trust level number you use in the gpg --edit-key [key-id] trust trust level as 1,2,3,4,5 ... + 1 (Don't ask me why but I have tested each level)

1 = I don't know or won't say => will be = 2
2 = I do NOT trust => will be = 3
3 = I trust marginally => will be = 4
4 = I trust fully => will be = 5
5 = I trust ultimately => will be = 6

To change Ownertrust trust level to ultimate as example:

Get the fingerprint of the key (public or private) if already imported (if not use gpg --with-fingerprint mykey.gpg to get fingerprint before importing the key)

gpg --list-keys [key-id]
gpg --list-secret-keys [key-id]

Change the Ownertrust trust level by echoing FINGERPRINT:LEVEL: to gpg --import-ownertrust

echo "07C9F77F0E8134E64A7FF0AA666B4C8DC27B4A0A:6:" | gpg --import-ownertrust

See the new Ownertrust trust level of the key

gpg --list-keys [key-id]
gpg --list-secret-keys [key-id]

You can export your Ownertrust trust level of all keys before or to backup them

gpg --export-ownertrust > trustlevel.txt

And reimport them if needed

gpg --import-ownertrust < trustlevel.txt

Using gpg --import-ownertrust you can set the Ownertrust trust level of a key before importing the key and then the key will be trusted according to the trust level defined after import operation or import the key and then change the trust level of the imported key.

Kyle
  • 103
  • 2
moocan
  • 81
  • 1
  • 2
  • the echo could also be automated using `sed`to add the trust like `sed -E -n -e 's/^fpr:::::::::([0-9A-F]+):$/\1:6:/p'` – user228505 Feb 21 '21 at 07:57
  • I built a scripted version out of your answer: `keyid=$(gpg --quiet --import-options import-show --import $key | sed -e '2!d' -e 's/^[ \t]*//') && echo "${keyid}:6:" | gpg --import-ownertrust` – t2d Jul 09 '21 at 08:39
5

Here is how to automate this (gpg --edit-key; trust; 5; save) for newly imported keys, effectively importing them as ultimately trusted.

$ gpg --import <key.asc
$ (echo 5; echo y; echo save) |
  gpg --command-fd 0 --no-tty --no-greeting -q --edit-key "$(
  gpg --list-packets <key.asc |
  awk '$1=="keyid:"{print$2;exit}')" trust 
pts
  • 171
  • 1
  • 4
  • Great because it works inside (bash-)scripts, so I can automate the import, without iteraction with the terminal – KargWare Apr 02 '22 at 16:50