GnuPG implementiert OpenPGP zum Signieren und Verschlüsseln von Dateien und E-Mails, für Paketsignaturen in vielen Linux-Distributionen und zum Signieren von Git-Commits. Die Fakten auf dieser Seite wurden mit dem Paket aus Alpine 3.24.2 geprüft: GnuPG 2.4.9 mit libgcrypt 1.12.2. gpg --quick-gen-key nur mit einer User-ID erzeugt einen Ed25519-Primärschlüssel zum Signieren und Zertifizieren sowie einen Curve25519-Unterschlüssel (cv25519) zur Verschlüsselung, beide als Schlüssel der Version 4, und der Primärschlüssel läuft nach 1095 Tagen – drei Jahren – ab, sofern kein Ablaufdatum angegeben wird. Untersuche Schlüssel und Signaturen mit dem OpenPGP-Inspektor.
ECDSA-Schlüssel lassen sich auf P-256, P-384, P-521, secp256k1 und den drei Brainpool-r1-Kurven erzeugen; nistp224 scheitert mit „Unknown elliptic curve“. Das Signaturpaket enthält r und s als zwei OpenPGP-MPIs, also weder DER noch r‖s mit fester Breite. P-256-Signaturen verwenden standardmäßig SHA-256; wer für einen P-384-Schlüssel SHA-256 anfordert, erhält „signing failed: Invalid length“, während SHA-512 mit einem P-256-Schlüssel akzeptiert wird.
Die Nonces sind deterministisch: Bei eingefrorener Uhr (--faked-system-time) waren zwei Signaturen derselben Datei byteidentisch, und r stimmte mit einer unabhängigen Implementierung von RFC 6979 überein – zweimaliges Signieren derselben Daten verwendet eine Nonce also nicht auf gefährliche Weise wieder. s wird nicht normalisiert, und eine Signatur, in der s durch n − s ersetzt war, wurde als gültig gemeldet – wichtig überall dort, wo Signaturen eindeutig sein sollen.
Ed25519-Signaturen verwenden das ältere EdDSA-Format (Algorithmus 22): R und S sind MPIs, und was Ed25519 signiert, ist der SHA-512-Digest über die Datei und die gehashten Felder der Signatur, nicht die Datei selbst. Links auf jeweils 32 Byte aufgefüllt, bestand R‖S mit OpenSSL die Prüfung gegen diesen Digest, die Prüfung gegen die Datei dagegen nicht – wer gpg-Signaturen mit einer allgemeinen Ed25519-Bibliothek prüfen will, muss zuerst den OpenPGP-Digest berechnen. Ed448-Schlüssel werden als Schlüsselpakete der Version 5 erzeugt, im Format des LibrePGP-Entwurfs, dem GnuPG folgt, während die geprüften Standard-, ECDSA- und Ed25519-Schlüssel alle Version 4 hatten; stelle sicher, dass die Gegenseite Version 5 liest, bevor du Ed448 wählst. Dieses Release hat keinen Post-Quanten-Algorithmus: Die Liste der Algorithmen für öffentliche Schlüssel lautet RSA, ELG, DSA, ECDH, ECDSA und EDDSA, und ky768_cv25519 wird als unbekannte Kurve abgelehnt.
Lies in Skripten die maschinenlesbare Ausgabe von --status-fd statt des Texts: Eine gültige Signatur ergab GOODSIG und VALIDSIG mit Exit-Status 0, eine Signatur über andere Daten BADSIG mit Exit-Status 1 und ein abgeschnittenes Paket NODATA mit Exit-Status 2. gpg --export-ssh-key mit einem Fingerabdruck und ! schreibt für ECDSA- und Ed25519-Schlüssel eine Zeile mit dem öffentlichen Schlüssel im OpenSSH-Format, während --export und --export-secret-keys OpenPGP-Pakete schreiben.