GPG
Siehe auch
Eine Anwendung für GPG: duplicity
Voraussetzungen schaffen:
dnf -y install pinentry
Wer bei der Key-Erzeugung für genügend Entropie sorgen möchte, lässt dieses Kommando während der Key-Erzeugung in einer zweiten Session nebenbei laufen:
dnf -y install rng-tools
rngd -f -r /dev/urandom
GPG-Keys interaktiv mit den notwendigsten Angaben erstellen (Keys gelten dann für 2 Jahre, 2048 Bit):
# asks for "Real name" (mind. 5 chars long), "Email address", "Passphrase"
gpg --gen-key
Tipp
Das Passwort verschlüsselt die Keys, und dient nicht der Verschlüsselung der Daten.
Real name: myname
Email address:
You selected this USER-ID:
"myname"
Change (N)ame, (E)mail, or (O)kay/(Q)uit? O
GPG-Keys interaktiv mit mehr Möglichkeiten erstellen:
# also asks for "Kind of key", "Keysize", "Key expiration", "Comment"
gpg --full-generate-key
Tipp
Per Default entspricht der Encryption-Key dem Signature-Key.
Schlüssel auflisten:
gpg --list-keys --keyid-format long
pub rsa4096/8F0B00C7FE8AD8F1 2022-02-01 [SCEA] <== public primary key, algo/short-key-ID
AFB712371AEDC93DE30BC6EE8F0B00C7FE8AD8F1 <== the fingerprint (fpr)
uid [ultimate] myname (mycomment) <a@b.ch> <== the owner of the key
sub rsa4096/1881B9C9B7BF2227 2022-02-01 [SEA] <== public sub-key
sec ... <== secret (private) primary key
ssb ... <== secret (private) sub-key
Tipp
Subkeys werden für die Verschlüsselung verwendet, Primary Keys für das Signing (unter anderem der Subkeys).
Zweck:
S: sign / Signing data
C: cert / Key Certification (= Signing keys)
E: encr / Encrypting data
A: auth / Authentication
Key-Type eddsa: cv25519 ist für encrypt, ed25519 für cert, sign, auth.
gpg --list-keys --keyid-format long
# for machine parsing:
gpg --list-keys --keyid-format long --with-colons
tru::1:1643905320:0:3:1:5
pub:u:4096:1:8F0B00C7FE8AD8F1:1643905231:::u:::escaESCA::::::23::0:
fpr:::::::::AFB712371AEDC93DE30BC6EE8F0B00C7FE8AD8F1:
uid:u::::1643905231::7FEC38053E299BB6D040BD0460E8DD28421504B4::duplicity_enc (duplicity) <a@b.ch>::::::::::0:
sub:u:4096:1:1881B9C9B7BF2227:1643905231::::::esa::::::23:
fpr:::::::::53EE2E443C2062A3127A29A01881B9C9B7BF2227:
pub:u:4096:1:0E3EE1044D2916F7:1643905236:::u:::escaESCA::::::23::0:
fpr:::::::::8A74804A2216ABCDD730E23C0E3EE1044D2916F7:
uid:u::::1643905236::69D60BEC6C72C72CC4AC676EC572307F0814BDA1::duplicity_sign (duplicity) <a@b.ch>::::::::::0:
sub:u:4096:1:FF202D2B4905C4CA:1643905236::::::esa::::::23:
fpr:::::::::C656AF43C183436187F16748FF202D2B4905C4CA:
GPG-Key signieren:
KEYNAME=myname
gpg --sign-key $KEYNAME
# unattended:
gpg --quick-sign-key $FINGERPRINT $NAME1 $NAME2
Secret-Keys auflisten:
gpg --list-secret-keys
Signing-Keys auflisten:
gpg --list-sigs
# pub rsa4096 2022-01-06 [SCEA]
# <ENCRYPT_KEY_ID>
# uid [ultimate] myname (mycomment) <a@b.ch>
# sig 3 <SIGNING_KEY_ID> 2022-01-06 duplicity_sign (duplicity) <a@b.ch>
# ...
Schlüssel exportieren (Backup der Schlüssel anlegen):
# Public Key:
gpg --armor --export $GPG_KEY > /path/to/key_pub.gpg
# Private Key - asks for the password:
gpg --armor --export-secret-keys $GPG_KEY > /path/to/key_sec.gpg
Schlüssel mit Passwort-Übergabe auf der Kommandozeile (für Automatismen) exportieren:
# Private Key - provide password via command-line:
echo "mypassword" | gpg --pinentry-mode loopback --passphrase-fd 0 --armor --export-secret-keys $GPG_KEY > /path/to/key_sec.gpg
Schlüssel (auf einem neuen System) importieren:
gpg --import /path/to/key_sec.gpg
gpg --list-keys --keyid-format long
gpg --edit-key $GPG_KEY trust quit
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? 5
Do you really want to set this key to ultimate trust? (y/N) y
Der GPG-Agent läuft auf einem Server unter dem root-Benutzer mit gpg-agent --homedir /root/.gnupg --use-standard-socket --daemon
.
ALLE Public und Private Keys löschen:
rm -rf ~/.gnupg
GPG-Keys automatisiert (unattended) erstellen
Der --batch
-Parameter kann nur Schlüssel mit einem Sub-Key erzeugen.
PASSWORD=$(< /dev/urandom tr -dc A-Za-z0-9 | head -c60)
cat > gpg-key.def << EOF
%echo Generating a basic OpenPGP key
Key-Type: RSA
Key-Length: 4096
Subkey-Type: RSA
Subkey-Length: 4096
Name-Real: $(hostname)
Name-Comment: My Comment
Name-Email: info@example.org
Expire-Date: 0
Passphrase: $PASSWORD
# Do a commit here, so that we can later print something
%commit
%echo Password: $PASSWORD
EOF
unset PASSWORD
# The --batch option to gpg is limited to generating a key with a single subkey:
gpg --batch --generate-key gpg-key.def
gpg --list-keys --keyid-format long
rm -f gpg-key.def
Um ed25519-Keys für Encryption nutzen zu können, ist GnuPG v2.1.7 nötig - RHEL 7 kommt aber mit GnuPG v2.0.22. Erst ab RHEL 8 mit GnuPG v2.2.20 ist deren Einsatz möglich.
Troubleshooting
- gpg: agent_genkey failed: No pinentry, Key generation failed: No pinentry
dnf -y install pinentry
Built on 2024-11-18