Wie verschlüssle ich eine Nachricht für mehrere Empfänger?

8

Was sind die Grundlagen für die Datenverschlüsselung mit genau zwei Schlüsseln (die passwortbasiert sein könnten), die jedoch nur einen (einen) der beiden Schlüssel zum Entschlüsseln der Daten benötigen?

Zum Beispiel werden Daten mit einem Benutzerpasswort und dem Firmenpasswort verschlüsselt, und dann kann er oder seine Firma die Daten entschlüsseln. Keiner von ihnen kennt das andere Passwort. Nur eine Kopie der verschlüsselten Daten wird gespeichert.

Ich meine nicht den öffentlichen / privaten Schlüssel. Wahrscheinlich über symmetrische Schlüssel-Kryptographie und vielleicht beinhaltet es etwas wie XORing die Schlüssel zusammen, um sie für die Verschlüsselung zu verwenden.

Update: Ich möchte auch eine Lösung finden, die das Speichern der Schlüssel überhaupt nicht beinhaltet.

    
Brian R. Bondy 02.09.2008, 04:58
quelle

5 Antworten

18

Die übliche Vorgehensweise besteht darin, einen einzelnen symmetrischen Schlüssel zum Verschlüsseln der Daten zu generieren. Dann verschlüsseln Sie den symmetrischen Schlüssel mit dem Schlüssel oder Passwort jedes Empfängers, sodass sie diesen selbst entschlüsseln können. S / MIME (eigentlich die Cryptographic Message Syntax, auf der S / MIME basiert) verwendet diese Technik.

Auf diese Weise müssen Sie nur eine Kopie der verschlüsselten Nachricht speichern, aber mehrere Kopien ihres Schlüssels.

    
erickson 02.09.2008, 05:04
quelle
6

Im Allgemeinen verschlüsseln Sie die Daten mit einem zufällig generierten Schlüssel und fügen dann Versionen dieses zufälligen Schlüssels an, die mit jedem bekannten Schlüssel verschlüsselt wurden. So kann jeder mit einem gültigen Schlüssel den "echten" Schlüssel finden, der zum Verschlüsseln der Daten verwendet wurde.

    
Brad Wilson 02.09.2008 05:01
quelle
1

Wenn ich Sie richtig verstanden habe, haben Sie einige Daten, die Sie bereit sind zu verschlüsseln und den Verschlüsselungsschlüssel in n 'Schlüsselstücke aufgeteilt zu verteilen. (In Ihrem Fall 2 Stück)

Dafür könnte man das XOR-basierte Splitting verwenden, so funktioniert es: Sie stellen die erforderliche Anzahl von Teilen - n, und den geheimen Schlüssel - K zur Verfügung. Um n Teile Ihres Schlüssels zu erzeugen, müssen Sie (n - 1) Zufallszahlen erzeugen: R1, R2, R3,. . . , Rn-1. Dafür können Sie einen SecureRandom-Nummerngenerator verwenden, der uns vor Duplikaten schützt. Dann bedienen Sie die XOR-Funktion für diese Rn-1-Teile und Ihren Schlüssel - K:
Rn = R1 ⊕ R2 ⊕ R3 ⊕. . . ⊕ Rn-1 ⊕ K

Nun hast du deine n Stücke: R1, R2, R3, ..., Rn-1, Rn und du kannst das K zerstören. Diese Teile können in deinem Code verteilt oder an Benutzer gesendet werden.

Um den Schlüssel wieder zusammenzusetzen, verwenden wir XOR-Operation auf unseren Rn-Stücken:
K = R1 ⊕ R2 ⊕ R3 ⊕. . . ⊕ Rn-1 ⊕ Rn

Mit der XOR-Funktion (⊕) ist jedes Stück von grundlegender Bedeutung für die Rekonstruktion des Schlüssels. Wenn Bits in einem der Teile geändert werden, ist der Schlüssel nicht wiederherstellbar.

Weitere Informationen und Code finden Sie in der Android-Anwendung, die ich für diesen Zweck geschrieben habe:
GitHub Projekt: Ссылка

Sie können auch die Secret Key Splitter-Demo-App ausprobieren, die dieses Dienstprogramm verwendet:
Google Play: Zypern

    
AivarsDa 06.08.2014 11:27
quelle
0

Ich denke, ich dachte an eine Lösung, die funktionieren würde:

%Vor%

Dann kann jede Person den Hash der anderen Person entschlüsseln und sie dann kombinieren, um den Rest der Daten zu entschlüsseln.

Vielleicht gibt es eine bessere Lösung als diese?

    
Brian R. Bondy 02.09.2008 05:16
quelle
0

Im allgemeineren Fall kann ein Geheimnis (in dieser Anwendung ein Entschlüsselungsschlüssel für die Daten) in Anteile aufgeteilt werden, so dass eine bestimmte Anzahl von Schwellenwerten erforderlich ist, um das Geheimnis wiederherzustellen. Dies ist bekannt als geheime Freigabe oder mit n Shares und einem Schwellenwert von t, einem (t, n) -Threshold-Schema.

Man kann dies zum Beispiel tun, indem man ein Polynom der Ordnung t-1 erzeugt, das Geheimnis als ersten Koeffizienten einstellt und den Rest der Koeffizienten zufällig wählt. Dann werden n zufällige Punkte auf dieser Kurve ausgewählt und die Anteile werden.

    
Andrew 15.09.2008 20:05
quelle