Verschlüsselung / Entschlüsselung mit mehreren Schlüsseln


110

Ist es möglich, Daten so zu verschlüsseln, dass sie mit mehreren verschiedenen Schlüsseln entschlüsselt werden können?

Beispiel:

Ich habe Daten mit Schlüssel 1 verschlüsselt, möchte aber mit Schlüssel 2, 3 und 4 entschlüsseln können.

Ist das möglich?

Antworten:


170

GnuPG führt standardmäßig eine Mehrschlüsselverschlüsselung durch.

Der folgende Befehl verschlüsselt doc.txtmit dem öffentlichen Schlüssel für Alice und dem öffentlichen Schlüssel für Bob. Alice kann mit ihrem privaten Schlüssel entschlüsseln. Bob kann auch mit seinem privaten Schlüssel entschlüsseln.

gpg --encrypt --recipient alice@example.com \
    --recipient bob@example.com doc.txt

Diese Funktion wird im Benutzerhandbuch mit dem Titel " Ver- und Entschlüsseln von Dokumenten " beschrieben.


Das Gleiche gilt. Es ist cool zu wissen, wie man das macht, aber ich kann keine Manpage darauf finden.
MarkusQ

@Mitch, ich gepostet eine Antwort , die möglicherweise unsere Antwort haben! (Bitte testen und empfehlen, wenn ja / nicht - sehr geschätzt!)
Pythonlarry

@ MarkusQ, siehe meinen Link zu Mitch oben. Test / danke wenn du kannst! :-)
Pythonlarry

Das Ergebnis ist also 1 verschlüsselte Datei, die entweder mit einem privaten Schlüssel gelesen werden kann, nicht mit 1 Datei pro Schlüssel?
user8675309

7
@ user8675309, Ja. Die Daten werden mit einem gemeinsamen symmetrischen Schlüssel verschlüsselt. Nur der symmetrische Schlüssel wird vom öffentlichen Schlüssel jedes Empfängers verschlüsselt. Es werden nicht die gesamten Daten für jeden Empfänger neu verschlüsselt.
wisbucky

55

Ja es ist möglich

Ja, Verschlüsselung für mehrere Empfänger ist möglich. Es scheint auch logisch , wenn Sie denken , dass Sie vielleicht in der Lage sein zu lesen , was Sie jemanden geschickt haben und tun , damit Sie in der Empfängerliste werden müssen.

Befehlszeile

So geht's über die gpgKommandozeile (wie in der Antwort von David Segonds beschrieben ):

gpg --encrypt \
  --recipient alice@example.com \
  --recipient bob@example.com \
clear-message.txt

GUI-Client

Ihre GUI muss eine Möglichkeit zum Verschlüsseln für mehrere Personen bieten

Mechanismus

Es gibt eine Frage zur Informationssicherheit , GPG-Dateigröße mit mehreren Empfängern? , die den Verschlüsselungsmechanismus erklären :

GPG verschlüsselt die Datei einmal mit einem symmetrischen Schlüssel und platziert dann einen Header, der das Zielschlüsselpaar identifiziert, und eine verschlüsselte Version des symmetrischen Schlüssels.

[...] Bei Verschlüsselung mit mehreren Empfängern wird dieser Header mehrmals platziert und bietet für jeden Empfänger eine eindeutig verschlüsselte Version desselben symmetrischen Schlüssels .


4
Besonderer Dank für die letzten beiden Sätze: Sie haben jetzt alles genau klar gemacht!
Radistao

31

GnuPG- und PGP-Clients verschlüsseln im Allgemeinen die tatsächlichen Daten normalerweise mit einem symmetrischen Schlüssel, der als "Sitzungsschlüssel" bezeichnet wird. Der Sitzungsschlüssel wird dann mit jedem "Empfängerschlüssel" verschlüsselt (dh denjenigen, die Sie mit -r / - Empfänger angeben). Dies wird manchmal als Hybrid-Chiffre bezeichnet . Derzeit glaube ich, dass GnuPG standardmäßig 256-Bit-Sitzungsschlüssel und AES verwendet, um die Klartextdaten mit diesem AES-256-Sitzungsschlüssel zu verschlüsseln, und Ihre Empfängerschlüssel sind Ihre RSA / DSA / ECDSA / etc. Assymetrischer Schlüssel in diesem Fall.

Ein Grund dafür ist, dass symmetrische kryptografische Algorithmen wie AES im Allgemeinen viel schneller sind als asymmetrische wie RSA. GnuPG muss daher nur ~ 256 Bit (den Sitzungsschlüssel) mit RSA verschlüsseln und kann AES verwenden, um die Daten (so groß wie Sie möchten!) Mit diesem Sitzungsschlüssel zu verschlüsseln. Intel-Maschinen haben sogar eine eingebaute Anweisung, AES-NI , um einige Schritte des Algorithmus in der Hardware auszuführen, wodurch GnuPG beim Ver- und Entschlüsseln von Daten besonders schnell funktioniert.

Ein weiterer Grund dafür ist, dass PGP-verschlüsselte Dokumente an mehrere Parteien verschlüsselt werden können, ohne dass die Größe des Dokuments verdoppelt werden muss. Beachten Sie, dass, wenn Sie mehrere Empfänger für ein verschlüsseltes Dokument angeben (zgpg -ea -r Alice -r Bob -o ciphertext.asc ), das verschlüsselte Dokument, das gespeichert wird (ciphertext.asc), nicht doppelt so groß ist, als hätten Sie es gerade mit Alice verschlüsselt.

Siehe auch den --show-session-keyParameter in der gpg-Manpage , um nur den Sitzungsschlüssel entschlüsseln zu können, z. B. um es einem Dritten zu ermöglichen, ein für Sie verschlüsseltes Dokument zu entschlüsseln, ohne Ihren privaten Schlüssel oder die Klartextdaten an ihn übertragen zu müssen.


1
Vielen Dank für die Erklärung, dass das verschlüsselte Dokument nicht n-mal größer ist, wobei n die Anzahl der Unterzeichner ist.
Herz des Seins

4

Ja es ist möglich. Google "Multiparty-Verschlüsselung" für den Anfang.

AFAIK, es gibt jedoch keine Drop-Em-In- und Use-Em-Pakete dafür.

- MarkusQ

PS Betrachten Sie dies, um eine Skizze zu erhalten, wie dies getan werden könnte. Die verschlüsselte Nachricht besteht aus:

  • die Nutzlast, verschlüsselt mit einem einmaligen Pad
  • das einmalige Pad, verschlüsselt mit key1
  • das einmalige Pad, verschlüsselt mit key2
  • ...
  • das einmalige Pad, verschlüsselt mit keyN

Der Empfänger, der den Schlüssel hält, entschlüsselt einfach seine Kopie des Pads mit seinem Schlüssel und entschlüsselt dann die Nutzlast.

Dies ist jedoch nur ein Beweis dafür, dass dies getan werden könnte und als tatsächliche Implementierung scheiße wäre . Wenn möglich, sollten Sie vermeiden, Ihre eigene Verschlüsselung zu verwenden. Wenn Sie nicht verstehen warum, sollten Sie auf jeden Fall vermeiden, Ihre eigene Verschlüsselung zu verwenden.

----- Bearbeiten ------------

Wenn ich falsch liege und die Gnu-Tools das tun, benutze sie. Aber ich kann anscheinend keine Informationen darüber finden, wie es geht.


1
Was daran scheißen könnte, ist, dass Sie, sobald Sie das einmalige Pad kennen, einen bekannten Klartext zusammen mit den verschlüsselten Werten für andere Schlüssel haben. Mithilfe dieser Informationen können Sie leichter herausfinden, um welche anderen Schlüssel es sich handelt.
Kibbee

2
Googeln "Mehrparteien-Verschlüsselung" taucht nicht viel auf. Mit der "Broadcast-Verschlüsselung", die auch diesen Fall umfasst, haben Sie wahrscheinlich mehr Glück.
staktrace

1
@ Kibbee: Die Schlüssel sind nicht geheim, sie sind öffentlich. Es spielt also keine Rolle, es einfacher zu machen, herauszufinden, was sie sind. (Diese Schemata werden nur mit Schlüsseln verwendet, die nur zum Verschlüsseln und nicht zum Entschlüsseln verwendet werden können.)
David Schwartz

5
Ich bin mir ziemlich sicher, dass die tatsächlichen Implementierungen kein gemeinsames einmaliges Pad verwenden (das so groß sein müsste wie der einfache Text und der verschlüsselte Text, wodurch sich die Nachrichtengröße verdoppelt), sondern tatsächlich einen gemeinsamen symetrischen Verschlüsselungsschlüssel verwenden (was normalerweise viel kleiner als die Nachricht ist).
Joachim Sauer

-16

RSA mit mehreren (mehr als zwei) Schlüsseln ist vielleicht so - nun, ich bin kein Mathematiker, daher ist dieser Algorithmus nicht unbedingt sicher, ich möchte nur eine Idee damit geben.

m = p * q * r; p, q, r sind große Primzahlen

fi (m) = (p-1) (q-1) (r-1)

d == (e1 * e2 * e3 * ... * ei) ^ (- 1) (mod fi (m)); e1 ... ei sind beliebige Zahlen, d wird berechnet, um die Gleichung zu erfüllen

y1 == x ^ e1 (mod m)

y2 == y1 ^ e2 (mod m)

y3 == y2 ^ e3 (mod m)

...

x == yi ^ d (mod m)

Dieser Algorithmus könnte beispielsweise verwendet werden, um die Geschwindigkeit des Onion Routers zu erhöhen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.