Signieren und verschlüsseln vs. verschlüsseln und signieren – Was macht GPG?

Signieren und verschlüsseln vs. verschlüsseln und signieren – Was macht GPG?

Ich habe die Diskussion bereits gelesenSollten wir erst signieren und dann verschlüsseln oder erst verschlüsseln und dann signieren?und das PapierFehlerhaftes Signieren und Verschlüsseln in S/MIME, PKCS#7, MOSS, PEM, PGP und XML. Meine Frage hat damit zu tun, was gpg macht. Dies war empirisch etwas schwierig herauszufinden, da die Ausgabe von:

gpg --encrypt --sign <filename>

Ändert sich jedes Mal, wenn ich es ausführe. (Warum?)

@Jens hat erklärt, dass ein Teil des Grundes darin liegt, dass ein Zeitstempel enthalten ist. Gibt es eine Möglichkeit, das zu vermeiden? Ich sehe keine GPG-Option.

Da die Reihenfolge der Optionen vermutlich keinen Unterschied macht und ich die --detach-signOption nicht verwenden kann (es wird unabhängig davon nur eine einzige Ausgabedatei erstellt), vermute ich, dass die Ausgabe Folgendes darstellt:

\begin{equation}
E_r (msg\  \| \ E_s (\#msg))
\end{equation}

wobei $E_r$die Verschlüsselung mit dem öffentlichen Schlüssel des Empfängers, $E_s$die Verschlüsselung mit dem privaten Schlüssel des Absenders, $msg$die Nachricht, $\#msg$der Hash der Nachricht und $\|$die Verkettung ist.dh.dies wäre „Nachricht signieren und dann verschlüsseln“. Ist das richtig?

Oder heißt es stattdessen:

\begin{equation}
E_r (msg) \  \| \ E_s (\#msg)
\end{equation}

Mit anderen Worten: Ist es „verschlüsseln und dann im Klartext signieren“? Ich gehe davon aus, dass es so ist.nicht„Verschlüsseln und dann den Chiffretext signieren“, ($E_r (msg) \ \| \ E_s (\# E_r (msg))$)da dies Abschnitt 1.2 des oben genannten Dokuments widersprechen würde.

@Jens hat erklärt, dass es tatsächlich „Signieren Sie die Nachricht und verschlüsseln Sie sie dann“ ist. Wie können wir also „verschlüsseln und dann im Klartext signieren“, wobei die Ausgabe eine einzelne OpenPGP-Datei ist, anstatt zwei Dateien, eine mit den verschlüsselten Daten und die andere mit der Signatur?

Darüber hinaus habe ich die Unterlagen und Handbücher gelesen. Wo, außer im Code selbst, kann ich dies nachschlagen?

@Jens hat folgendes vorgeschlagen:

echo 'foo' | gpg --recipient [key-id] --encrypt --sign | gpg --list-packets 

Ich habe es ausgeführt, für mich selbst verschlüsselt und die folgende Ausgabe gefunden. Kann jemand erklären, was es uns sagen soll?

[...]
gpg: okay, we are the anonymous recipient.
:encrypted data packet:
    length: unknown
    mdc_method: 2
gpg: encrypted with RSA key, ID 00000000
:compressed packet: algo=2
:onepass_sig packet: keyid C6701618143AFA1E
    version 3, sigclass 0x00, digest 10, pubkey 1, last=1
:literal data packet:
    mode b (62), created 1443494042, name="",
    raw data: 4 bytes
:signature packet: algo 1, keyid C6701618143AFA1E
    version 4, created 1443494042, md5len 0, sigclass 0x00
    digest algo 10, begin of digest d7 3a
    hashed subpkt 2 len 4 (sig created 2015-09-29)
    subpkt 16 len 8 (issuer key ID C6701618143AFA1E)
    data: [4095 bits]

Antwort1

Dies war empirisch etwas schwierig festzustellen, da das Ergebnis lautet:

gpg --encrypt --sign <filename>

ändert sich jedes Mal, wenn ich es ausführe. (Warum?)

Dies hat zwei Gründe:

  1. Die symmetrische Verschlüsselung in OpenPGP verwendet einen zufälligen Initialisierungsvektor (oder vielmehr ein ähnliches Konstrukt mit einem festen Initialisierungsvektor).
  2. Der Zeitstempel der Signaturerstellung ist enthalten.

Signieren und verschlüsseln vs. verschlüsseln und signieren – Was macht gpg?

GnuPG signiert eine Nachricht zuerst und verschlüsselt sie dann. Sie können dies mit folgendem Befehl überprüfen gpg --list-packets:

echo 'foo' | gpg --recipient [key-id] --encrypt --sign | gpg --list-packets

Dadurch wird eine Nachricht zunächst signiert und anschließend verschlüsselt, wie es die Reihenfolge der Pakete vorgibt.

Nach meinem Verständnis vonRFC 4880, OpenPGPsind jedoch beide Reihenfolgen definiert: OpenPGP-Nachrichten können Signaturen, verschlüsselte, komprimierte und wörtliche Daten sein, während Signaturen auf OpenPGP-Nachrichten angewendet werden und entschlüsselte Nachrichten ebenfalls OpenPGP-Nachrichten bilden müssen.

verwandte Informationen