Frage:
Kann ich einen öffentlichen Schlüssel von der PGP-Signatur erhalten?
Karel Bílek
2014-07-02 12:02:10 UTC
view on stackexchange narkive permalink

Ich habe eine PGP-Signatur einer bekannten Nachricht. Ich bin mir jedoch nicht sicher, wer es signiert hat.

Kann ich den öffentlichen Schlüssel - oder zumindest den Fingerabdruck / eine andere Art der Suche auf einem öffentlichen Schlüsselserver - nur aus der Nachricht und einer Signatur abrufen? ?

Beispiel: Ich habe diese Nachricht / Signatur von hier https://futureboy.us/pgp.html

  ---- -BEGIN PGP signierte Nachricht ----- Hash: SHA1I Abstimmung ja auf diesem wichtigen measure.Alan Eliasen ----- BEGIN PGP SIGNATURE ----- Version: GnuPG v1.4.13 (GNU / Linux) iEYEARECAAYFAlHZCvgACgkQ5IGEtbBWdrF5HgCfc4xhT29ouAWdo1PMlyDKIfaqpGoAoKig5sCXukrPPoKC1ZYB5CW7BzNL = WPPL- ---- END PGP SIGNATURE -----  

Kann ich irgendwie herausfinden, wer es signiert hat, indem ich es mir nur ansehe?

Beachten Sie, dass Sie zwar möglicherweise den öffentlichen Schlüssel erhalten können, Sie jedoch auch den Schlüssel selbst überprüfen sollten (z. B. vertrauenswürdige Signaturen von Drittanbietern auf dem Schlüssel überprüfen oder den Eigentümer außerhalb des Bandes kontaktieren müssen), bevor Sie der Signatur vertrauen .
Fünf antworten:
#1
+25
otus
2014-07-02 12:40:05 UTC
view on stackexchange narkive permalink

Ja. Das Format der Signatur ist in RFC 4880 definiert. Wenn Sie die Basis-64 dekodieren und die Daten interpretieren, werden Sie feststellen, dass die Bytes von Position 19 bis 26 (einschließlich) in diesem Fall die Aussteller-ID sind:

  ID hex: E48184B5B05676B1  

, der mit der "Long Key ID" hinter Ihrem Link übereinstimmt. Wenn Sie die ID in Basis 64 konvertieren, finden Sie sie in den ursprünglichen Signaturdaten, da 18 Bytes gleichmäßig in 24 Basis 64-Zeichen aufgeteilt werden:

  ID b64: 5IGEtbBWdrE = Signatur: iEYEARECAAYFAlHZCvgACgkQ  5IGEtbBWdr  b> F5HgCfc4xhT29ouAWdo1PMlyDKIfaq...  
Ich habe das Format der Signatur noch nie studiert und wusste nicht, wie ich die KeyID wiederherstellen kann. Interessant Könnten Sie die Befehlszeile hinzufügen, um die LingKeyID wiederherzustellen? Mit base64 -d erhalte ich den Fehler "Ungültige Eingabe"
@ddddavidee, nein, aber ich habe buchstäblich nur "b16encode (b64decode (sig))" gemacht.
Zu Ihrer Information: Ich bin von Google hierher gekommen, aber in meinem Testfall wurde die Schlüssel-ID bei Byte-Offset 24 und nicht bei 19 angezeigt. Beim Lesen des RFC gibt es vermutlich verschiedene Versionen, in denen das "Signaturpaket" codiert sein kann.Da meine Anwendung Python war, habe ich letztendlich "pgpy" verwendet, was es einfach machte: "sig = pgpy.PGPSignature ();sig.decode (asciiarmored_signature);print (sig.signer); `.
#2
+21
Alan Eliasen
2014-07-14 13:08:30 UTC
view on stackexchange narkive permalink

Sie können alle diese Informationen von gpg erhalten, wenn Sie den Befehlszeilenschalter -vv hinzufügen. (Dies bedeutet besonders ausführlich.) Der einfachste Weg, detaillierte Informationen zu einer OpenPGP-formatierten Nachricht zu erhalten, besteht darin, einfach Folgendes einzugeben:

  gpg -vv  

Fügen Sie dann die Nachricht ein (oder übergeben Sie einen Dateinamen als Argument). Wenn Sie beispielsweise die obige Nachricht einfügen, erhalten Sie die folgenden detaillierten und interessanten Informationen:

  gpg: Armatur: BEGIN PGP SIGNED MESSAGEgpg: Rüstungsheader: Hash: SHA1: Paket 63: Länge 19 - gpg Steuerpaket gpg: Rüstung: BEGIN PGP SIGNATUREgpg: Rüstungsheader: Version: GnuPG v1.4.13 (GNU / Linux): Literales Datenpaket: Modus t ( 74), erstellt 0, name = "", Rohdaten: unbekannt lengthgpg: ursprünglicher Dateiname = '' Ich stimme mit JA zu dieser wichtigen Maßnahme ab. Alan Eliasen: Signaturpaket: algo 17, keyid E48184B5B05676B1 Version 4, erstellt 1373178616, md5len 0 , Sigclass 0x01 Digest Algo 2, Beginn des Digests 79 1e Hash-Subpkt 2 Len 4 (Sig erstellt am 07.07.2013) Subpkt 16 Len 8 (Ausstellerschlüssel-ID E48184B5B05676B1) Daten: [159 Bit] Daten: [159 160 Bit] gpg: Signatur erstellt So 07 Jul 2013 00:30:16 MDT mit DSA-Schlüssel-ID B05676B1gpg: mit PGP-Vertrauensmodellgpg: Schlüssel 92F88CF9: als vertrauenswürdiger Schlüssel akzeptiertgpg: Schlüssel 6C77A726: als vertrauenswürdiger Schlüssel akzeptiertgpg: Gute Signatur von "Alan Eliasen (http://futureboy.homeip.net/) <[email protected]> "gpg: WARNUNG: Dieser Schlüssel ist nicht mit einer vertrauenswürdigen Signatur zertifiziert! GPG: Es gibt keinen Hinweis darauf, dass die Signatur dem Eigentümer gehört. Primärschlüssel-Fingerabdruck : 402C C0D3 D527 13E3 FB7C 7103 E481 84B5 B056 76B1gpg: Textmodus-Signatur, Digest-Algorithmus SHA1  

In dieser Ausgabe sehen Sie die 16-hexadezimale Schlüssel-ID deutlich: E48184B5B05676B1

Auf diese Weise können Sie auf einem Schlüsselserver nach dem Unterzeichner suchen, indem Sie Folgendes verwenden:

  gpg --suchschlüssel E48184B5B05676B1  

Übrigens habe ich den GPG-Leitfaden geschrieben, auf den Sie verweisen, und ich kann Ihnen versichern, dass ich die obige Nachricht unterschrieben habe. :)

Beachten Sie auch die WARNUNG, die in der viertletzten Zeile beginnt. Sie können zwar die Informationen zum öffentlichen Schlüssel abrufen, sie sind jedoch von begrenztem Wert, es sei denn, Sie können auch bestätigen, dass der Schlüssel selbst vertrauenswürdig ist.
@lszi Das ist ein sehr wichtiger Punkt, der wiederholt werden muss. In dem GPG-Handbuch, das ich geschrieben habe (das, auf das auf dem Originalplakat verwiesen wird), stelle ich sehr stark fest, dass Sie, sofern Sie den Schlüssel nicht mit seinem Besitzer validiert haben, überhaupt keine Garantie dafür haben, dass er tatsächlich signiert wurde. Jeder kann einen öffentlichen Schlüssel für jede E-Mail-Adresse generieren und an einen Schlüsselserver senden. Siehe diesen Abschnitt: http://futureboy.us/pgp.html#ProcedureForVerification
#3
+4
Karel Bílek
2014-07-02 12:41:29 UTC
view on stackexchange narkive permalink

Ja, das kann ich tatsächlich. Mit GnuPG zum Beispiel:

  gpg - Datei.txt überprüfen  

(mit der obigen Datei)

schreibt um das Ende

Fingerabdruck des Primärschlüssels: 402C C0D3 D527 13E3 FB7C 7103 E481 84B5 B056 76B1

OpenPGP.js funktioniert auch.

  openpgp.cleartext.readArmored (['----- BEGIN PGP SIGNED MESSAGE -----', 'Hash: SHA1', '', '', 'Ich stimme für diese wichtige Maßnahme mit JA.', '', 'Alan Eliasen', '----- PGEG-UNTERZEICHNUNG BEGINNEN -----', 'Version: GnuPG v1.4.13 (GNU / Linux)', '', ' = WPPL ',' ----- END PGP SIGNATURE ----- ']. Join (' \ n ')). GetSigningKeyIds () [0] .toHex ();  

=>

"e48184b5b05676b1"

#4
+1
ddddavidee
2014-07-02 12:42:20 UTC
view on stackexchange narkive permalink

Ja, das können Sie.

Zumindest können Sie die KeyID problemlos wiederherstellen und damit den öffentlichen Schlüssel von einem Keyserver wiederherstellen (falls der Benutzer ihn jemals hochgeladen hat).

Sie können die KeyID mit pgpdump wiederherstellen (lokal, wenn Sie sie installieren oder über die Website: http://www.pgpdump.net/).

Die von Ihnen gepostete Nachricht lautet beispielsweise signiert von:

Sub: Aussteller-Schlüssel-ID (Sub 16) (8 Byte) Schlüssel-ID - 0xE48184B5B05676B1

und schließlich: http: / /pgp.mit.edu/pks/lookup?op=get&search=0xE48184B5B05676B1, um den Schlüssel oder die Schlüsseldetails abzurufen (Sie können auch Ihre gnupg-Installation verwenden, um die Daten von der Befehlszeile abzurufen)

#5
+1
aleb
2020-03-16 16:52:40 UTC
view on stackexchange narkive permalink

In golang:

  package mainimport ("fmt" "strings" "golang.org/x/crypto/openpgp/armor" "golang.org/x/crypto/openpgp/packet ") func main () {gepanzert: =` ----- PGEG-UNTERZEICHNUNG BEGINNEN ----- Version: GnuPG v1.4.13 (GNU / Linux) -` block, err: = Armor.Decode (strings.NewReader (gepanzert)) fmt.Println (err, block.Type) reader: = packet.NewReader (block.Body) pkt, err: = reader.Next () fmt .Println (err) key, ok: = pkt. (* Packet.Signature) fmt.Println (ok) fmt.Printf ("% X", * key.IssuerKeyId)}  

Drucke:

  <nil> PGP SIGNATURE<nil>trueE48184B5B05676B1  

https://play.golang.org/p/oluTm5kNQ



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...