Frage

Was sind die Grundlagen, um eine Datenverschlüsselung mit genau zwei Schlüsseln (die passwortbasiert sein können) zu erreichen, aber nur einen (beliebigen) der beiden Schlüssel zum Entschlüsseln der Daten zu benötigen?

Beispielsweise werden Daten mit dem Passwort eines Benutzers und dem Passwort seines Unternehmens verschlüsselt, und dann kann er oder sein Unternehmen die Daten entschlüsseln.Keiner von ihnen kennt das andere Passwort.Es wird nur eine Kopie der verschlüsselten Daten gespeichert.

Ich meine nicht öffentlichen/privaten Schlüssel.Vermutlich über symmetrische Schlüsselkryptographie, und vielleicht beinhaltet es so etwas wie eine XOR-Verknüpfung der Schlüssel, um sie zum Verschlüsseln zu verwenden.

Aktualisieren:Ich würde auch gerne eine Lösung finden, bei der die Schlüssel überhaupt nicht aufbewahrt werden.

War es hilfreich?

Lösung

Üblicherweise wird hierfür ein einzelner symmetrischer Schlüssel zur Verschlüsselung der Daten generiert.Anschließend verschlüsseln Sie den symmetrischen Schlüssel mit dem Schlüssel oder Passwort jedes Empfängers, damit dieser ihn selbst entschlüsseln kann.S/MIME (eigentlich die kryptografische Nachrichtensyntax, auf der S/MIME basiert) nutzt diese Technik.

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

Andere Tipps

Im Allgemeinen verschlüsseln Sie die Daten mit einem zufällig generierten Schlüssel und hängen dann Versionen dieses zufälligen Schlüssels an, die mit jedem bekannten Schlüssel verschlüsselt wurden.So kann jeder, der über einen gültigen Schlüssel verfügt, den „echten“ Schlüssel herausfinden, der zum Verschlüsseln der Daten verwendet wurde.

Wenn ich Sie richtig verstanden habe, verfügen Sie über einige Daten, die Sie verschlüsseln und verteilen möchten, aufgeteilt in n „Schlüsselteile“. (In Ihrem Fall 2 Teile)

Hierzu können Sie die XOR-basierte Aufteilung verwenden. So funktioniert sie:Sie geben die erforderliche Stückzahl – n – und den Geheimschlüssel – K – an.Um n Teile Ihres Schlüssels zu generieren, müssen Sie (n – 1) Zufallszahlen erstellen:R1, R2, R3, ..., Rn−1.Dazu können Sie einen SecureRandom-Zahlengenerator verwenden, der uns vor Duplikaten schützt. Dann führen Sie die XOR-Funktion auf diese Rn-1-Teile und Ihren Schlüssel - K aus:
Rn = R1 ⊕ R2 ⊕ R3 ⊕ ...⊕ Rn−1 ⊕ K

Jetzt haben Sie Ihre n Teile:R1, R2, R3, …, Rn-1, Rn und Sie können das K zerstören.Diese Teile können in Ihrem Code verbreitet oder an Benutzer gesendet werden.

Um den Schlüssel wieder zusammenzusetzen, verwenden wir die XOR-Operation für unsere Rn-Teile:
K = R1 ⊕ R2 ⊕ R3 ⊕ ...⊕ Rn−1 ⊕ Rn

Bei der XOR-Funktion (⊕) ist jedes Teil für die Rekonstruktion des Schlüssels von Natur aus wichtig. Wenn Bits in einem der Teile geändert werden, ist der Schlüssel nicht wiederherstellbar.

Weitere Informationen und Code finden Sie in dem Android-Dienstprogramm, das ich zu diesem Zweck geschrieben habe:
GitHub-Projekt: https://github.com/aivarsda/Secret-Key-Split-Util

Sie können auch die Demo-App „Secret Key Splitter“ ausprobieren, die dieses Dienstprogramm verwendet:
Google Play: https://play.google.com/store/apps/details?id=com.aivarsda.keysplitter

Ich glaube, ich habe mir eine Lösung ausgedacht, die funktionieren würde:

D = data to encrypt
h1 = hash(userpassword)
h2 = hash(companyPassword)
k = h1 concat h2

E = function to encrypt
//C is the encrypted data
C = E_h1(h2) concat E_h2(h1) concat E_k(D)

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

Vielleicht gibt es aber eine bessere Lösung als diese?

Im allgemeineren Fall kann ein Geheimnis (in dieser Anwendung ein Entschlüsselungsschlüssel für die Daten) in Anteile aufgeteilt werden, sodass eine bestimmte Schwellenwertanzahl dieser Anteile erforderlich ist, um das Geheimnis wiederherzustellen.Dies wird als Secret Sharing oder mit n Shares und einem Schwellenwert von t bezeichnet, einem (t,n)-Schwellenwertschema.

Eine Möglichkeit, dies zu erreichen, besteht darin, ein Polynom der Ordnung t-1 zu erstellen, das Geheimnis als ersten Koeffizienten festzulegen und die restlichen Koeffizienten zufällig auszuwählen.Dann werden n zufällige Punkte auf dieser Kurve ausgewählt und zu Anteilen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top