Ist es möglich, einen Empfänger zu einer bereits verschlüsselten Datei in GPG hinzuzufügen?

12

Angenommen, ich habe eine (möglicherweise große) Datei mit GPG verschlüsselt. z.B

gpg --recipient "Some Name" -o this_file.gpg --encrypt this_file.txt

Ist es möglich, einen weiteren Empfänger hinzuzufügen, ohne zuerst die Datei zu entschlüsseln, gefolgt von einer weiteren Verschlüsselung?


quelle
Sie haben die Datei mit dem öffentlichen Schlüssel von "Some Name" verschlüsselt. Und was soll es für einen anderen Empfänger verwenden?
ott--
6
@ott: So funktioniert es nicht (AFAIK). PGP verschlüsselt die Datei mit einem symmetrischen Schlüssel, nicht mit einem öffentlichen Schlüssel des Empfängers. Anschließend werden mehrere Kopien dieses symmetrischen Schlüssels unter Verwendung des öffentlichen Schlüssels jedes Empfängers separat verschlüsselt.
RedGrittyBrick
@ RedGrittyBrick Ich weiß nicht über PGP, aber GPG verwendet --symmetricdafür. Mit --recipientnutzt th öffentlichen Schlüssel des Empfängers. Es kann mehr als einen Empfänger geben, dies muss jedoch in einem Befehl erfolgen, nicht in zwei separaten Befehlen.
ott--
3
@ott: Ich habe gelesen, dass " Es ist auch möglich, eine Datei mit einem Befehl der Form für eine beliebige Anzahl von mehreren Empfängern gleichzeitig zu verschlüsselngpg -e -r <name1> -r <name2> ... <file> ". Das habe ich aber selbst nicht versucht. Es passt zu dem, was ich vor vielen Jahren über Krypto gelernt habe, nämlich, dass es fast immer effizienter ist, schnelle symmetrische Algorithmen zum Verschlüsseln des Nachrichtentexts zu verwenden. Nur der Nachrichtenschlüssel wird mit langsamer asymmetrischer Verschlüsselung verschlüsselt.
RedGrittyBrick

Antworten:

8

Kurze Antwort: nein

Beachten Sie zunächst, dass dies völlig unmöglich ist, wenn Sie nicht zu den Empfängern gehören. Sie haben nicht einmal die Möglichkeit, die Datei zu entschlüsseln, geschweige denn einen Empfänger hinzuzufügen. Auch wenn Sie es vor zwei Sekunden verschlüsselt haben.

Vorausgesetzt, Sie sind Empfänger, ist dies technisch möglich. Die Datei wird tatsächlich mit einem Sitzungsschlüssel verschlüsselt, und der Sitzungsschlüssel wird mit Ihrem öffentlichen Schlüssel verschlüsselt. Sie können den Sitzungsschlüssel also theoretisch entschlüsseln und in den Schlüssel einer anderen Person neu verschlüsseln und dann alles in einer Datei zusammenfassen, als ob Sie es wären hatte ursprünglich das Dokument für beide Personen verschlüsselt.

Allerdings GPG nicht über diese Fähigkeit . Das nächste, was Sie mit gpg erreichen können, ist

  1. Verwenden Sie die --show-session-keyOption, um den Sitzungsschlüssel abzurufen (der anscheinend auch die Datei entschlüsselt, in diesem Fall fehlt der Punkt).
  2. Verschlüsseln Sie diesen Sitzungsschlüssel mit dem öffentlichen Schlüssel einer anderen Person (tatsächlich wird hierdurch ein neuer Sitzungsschlüssel erstellt und dieser Sitzungsschlüssel zum Verschlüsseln des ursprünglichen Sitzungsschlüssels verwendet).
  3. Senden Sie die beiden Dateien.
  4. Der Empfänger kann den Sitzungsschlüssel entschlüsseln und --override-session-keyzum Entschlüsseln der ursprünglichen Nachricht verwenden.
Nathan Grigg
quelle
3

1) Aus diesem Grund ist es immer eine gute Idee, eine Datei für sich selbst (sowie für die vorgesehenen Empfänger) zu verschlüsseln. RedGrittyBrick ist oben korrekt und beschreibt, wie GPG und PGP funktionieren, was oben in die Antwort von nathang einfließt.

2) Wenn Sie jedoch die ursprüngliche Datei haben, erstellen Sie am besten einfach eine neue verschlüsselte Datei für den neuen Empfänger.

Angenommen, Sie möchten nicht den von nathang vorgeschlagenen Weg des Sitzungsschlüssels beschreiten. Wenn Sie die Datei zunächst für sich selbst verschlüsselt haben (wie oben in # 1), entschlüsseln Sie sie und folgen Sie dann Schritt # 2 oben.

Wenn Sie weder das Original haben noch es für sich selbst verschlüsselt haben, können Sie die Daten nicht zurückerhalten und nicht an andere Personen verschlüsseln, ohne dass dieser erste Empfänger Ihnen eine Kopie zurücksendet.

Mikebabcock
quelle
1
Eigentlich ist es nicht immer eine gute Idee. Siehe PGP: Einbeziehen Ihres öffentlichen Schlüssels als Empfänger? Weniger sicher? auf dem Information Security Stack Exchange für einige Argumente für und gegen.
CVn
0

Ist es möglich, einen weiteren Empfänger hinzuzufügen, ohne zuerst die Datei zu entschlüsseln, gefolgt von einer weiteren Verschlüsselung?

Es ist nicht möglich , ohne Entschlüsselung überhaupt , aber es scheint , wie es sein sollte , ohne Entschlüsselung möglich in eine Datei :

gpg -d this_file.gpg | gpg -e -r "Some Name" -r "Another Name" -o this_file.gpg

Dies scheint jedoch (zumindest manchmal) zu einer beschädigten Datei zu führen, da gpggleichzeitig in dieselbe Datei gelesen und geschrieben wird:

Stattdessen können Sie (in einem Skript) Folgendes tun, um zu vermeiden, dass die entschlüsselte Datei verwaltet werden muss:

gpg -d -o this_file.txt this_file.gpg

gpg -e \
    -r "Some Name" \
    -r "Another Name" \
    -o this_file.gpg \
    --batch --yes \
    this_file.txt

shred -u this_file.txt

shredMit dieser -uOption werden die Daten der angegebenen Datei sicher überschrieben und anschließend gelöscht. Ähnliche Programme gibt es auch für andere Plattformen wie srmMac OS X.

Oder Sie können Ihr Skript wie folgt schreiben (mit freundlicher Genehmigung von dave_thompson_085 ), um zu vermeiden, dass Sie die entschlüsselten Daten überhaupt in einer Datei speichern müssen:

gpg -d this_file.gpg \
| gpg -e \
    -r "Some Name" \
    -r "Another Name" \
    -o this_file.gpg.new \
    --batch --yes

mv -f this_file.gpg.new this_file.gpg
Kenny Evitt
quelle
2
Sie müssen keine eindeutige temporäre Datei schreiben, wenn Sie die verschlüsselte Datei vorübergehend an gpg -d file.gpg | gpg -e ... -o file.new; mv file.new file.gpgihrem Platz belassen: oder ihren Spiegel mv file.gpg file.old; gpg -d file.old | gpg -e ... -o file.gpg. Oder (vielleicht auch) behalten Sie die alte Inode geschickt bei :{ rm file.gpg; gpg -d /dev/fd/3; } 3<file.gpg | gpg -e ... -o file.gpg
dave_thompson_085
@ dave_thompson_085 Interessant - danke!
Kenny Evitt