it-swarm.com.de

Kann ich einen öffentlichen Schlüssel von der PGP-Signatur erhalten?

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

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

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

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


I vote YES on this important measure.

Alan Eliasen
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.13 (GNU/Linux)

iEYEARECAAYFAlHZCvgACgkQ5IGEtbBWdrF5HgCfc4xhT29ouAWdo1PMlyDKIfaq
pGoAoKig5sCXukrPPoKC1ZYB5CW7BzNL
=WPPL
-----END PGP SIGNATURE-----

Kann ich irgendwie finden, wer es unterschrieben hat, indem ich es mir nur ansehe?

26
Karel Bílek

Ja. Das Format der Signatur ist in RFC 488 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

dies entspricht der "Long Key ID" hinter Ihrem Link . 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=
Signature: iEYEARECAAYFAlHZCvgACgkQ5IGEtbBWdrF5HgCfc4xhT29ouAWdo1PMlyDKIfaq...
23
otus

Sie können alle diese Informationen von gpg erhalten, wenn Sie das -vv Befehlszeilenschalter. (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: armor: BEGIN PGP SIGNED MESSAGE
gpg: armor header: Hash: SHA1
:packet 63: length 19 - gpg control packet
gpg: armor: BEGIN PGP SIGNATURE
gpg: armor header: Version: GnuPG v1.4.13 (GNU/Linux)
:literal data packet:
    mode t (74), created 0, name="",
    raw data: unknown length
gpg: original file name=''

I vote YES on this important measure.

Alan Eliasen
:signature packet: algo 17, keyid E48184B5B05676B1
    version 4, created 1373178616, md5len 0, sigclass 0x01
    digest algo 2, begin of digest 79 1e
    hashed subpkt 2 len 4 (sig created 2013-07-07)
    subpkt 16 len 8 (issuer key ID E48184B5B05676B1)
    data: [159 bits]
    data: [160 bits]
gpg: Signature made Sun 07 Jul 2013 12:30:16 AM MDT using DSA key ID B05676B1
gpg: using PGP trust model
gpg: key 92F88CF9: accepted as trusted key
gpg: key 6C77A726: accepted as trusted key
gpg: Good signature from "Alan Eliasen (http://futureboy.homeip.net/) <[email protected]>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 402C C0D3 D527 13E3 FB7C  7103 E481 84B5 B056 76B1
gpg: textmode signature, digest algorithm 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 --search-keys E48184B5B05676B1

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

21
Alan Eliasen

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

gpg --verify file.txt

(mit der obigen Datei)

schreibt am Ende

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

OpenPGP.js funktioniert auch.

openpgp.cleartext.readArmored(

['-----BEGIN PGP SIGNED MESSAGE-----',
'Hash: SHA1',
'',
'',
'I vote YES on this important measure.',
'',
'Alan Eliasen',
'-----BEGIN PGP SIGNATURE-----',
'Version: GnuPG v1.4.13 (GNU/Linux)',
'',
'iEYEARECAAYFAlHZCvgACgkQ5IGEtbBWdrF5HgCfc4xhT29ouAWdo1PMlyDKIfaq',
'pGoAoKig5sCXukrPPoKC1ZYB5CW7BzNL',
'=WPPL',
'-----END PGP SIGNATURE-----']. join('\n')

).getSigningKeyIds()[0].toHex();

=>

e48184b5b05676b1

4
Karel Bílek

In Golang:

package main

import (
    "fmt"
    "strings"
    "golang.org/x/crypto/openpgp/armor"
    "golang.org/x/crypto/openpgp/packet"
)

func main() {
    armored := `-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.13 (GNU/Linux)

iEYEARECAAYFAlHZCvgACgkQ5IGEtbBWdrF5HgCfc4xhT29ouAWdo1PMlyDKIfaq
pGoAoKig5sCXukrPPoKC1ZYB5CW7BzNL
=WPPL
-----END PGP SIGNATURE-----
`
    block, err := armor.Decode(strings.NewReader(armored))
    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>
true
E48184B5B05676B1

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

1
aleb

Ja, du kannst.

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 ist beispielsweise signiert von:

Sub: Ausstellerschlü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 abzurufen die Kommandozeile)

1
ddddavidee