it-swarm.com.de

Wie können vertrauliche Daten wie eine Sozialversicherungsnummer sicher gespeichert werden?

Ich suche nach einer Möglichkeit, persönliche Informationen mit geringer Entropie sicher zu speichern.

Ich habe folgende Anforderungen an die Daten:

  • Muss in der Lage sein zu suchen (d. H. Ein vorhandenes Datenelement nachzuschlagen), aber nicht anzuzeigen
  • Andere Systeme müssen in der Lage sein, den tatsächlichen Wert wiederherzustellen
  • Das System muss einigermaßen leistungsfähig sein (Optionen in Sekunden und nicht in Stunden).

Ich denke, ein System zur Verschlüsselung der Daten mit einem öffentlichen Schlüssel ist meine beste Option. Ich kann den privaten Schlüssel offline halten, damit der einzelne Wert nicht direkt wiederhergestellt werden kann. Ich denke jedoch, dass ein Angreifer den Verschlüsselungsprozess als Oracle verwenden und die Daten aufgrund seiner geringen Entropie wiederherstellen könnte.

Irgendwelche Ideen, wie die Sicherheit dieses Systems verbessert werden kann? Das Nichterfassen dieser Daten ist keine Option. Es wird zusätzliche Ebenen um diese Daten geben (Zugriffskontrolle, Protokollierung, physische Sicherheit usw.), sodass ich mich nur auf diesen Teil des Systems konzentriere.

24
chotchki

Was Sie suchen, ist deterministische Verschlüsselung: Dasselbe zweimal verschlüsselte Wert die gleiche Ausgabe liefert. Bei einer deterministischen Verschlüsselung mit einem Schlüssel K würde ein Angreifer den Schlüssel benötigen, um zu bestimmen, welche SSN welchem ​​verschlüsselten Wert zugeordnet ist. Sie können weiterhin nach deterministisch verschlüsselten Daten suchen, jedoch nur nach Äquivalenzvergleichen (== ,! =).

Beispiele für deterministische Krypto, die funktionieren würden:

  • Blockchiffren im Modus ECB , wenn die Daten <1 Block lang sind
  • Blockieren Sie Chiffren im Modus CBC mit einem statischen IV .
  • Blockieren Sie Chiffren im Modus CBC mit einem aus dem Klartext abgeleiteten IV . (Beachten Sie, dass Sie die IV dann nicht speichern möchten, sodass eine Entschlüsselung ohne Klartext nicht möglich ist. Dies ist also eine reine Suchoption.)

Was nicht funktioniert:

  • CTR Modus mit einer statischen IV (ein Angreifer kann dann mehrere Chiffretexte verwenden, um den Schlüsselstrom und die Klartexte wiederherzustellen)
  • CBC-Modus mit einer zufälligen IV (kann nicht suchen)
  • Beliebige Stream-Verschlüsselung (wie CTR-Modus)

Beachten Sie, dass Sie in allen Fällen die Ununterscheidbarkeit von Chiffretexten aufgeben. Dies ist jedoch eine Grundvoraussetzung für die Suche nach Chiffretexten.

Sie benötigen einen Mechanismus, um den Schlüssel für andere Systeme freizugeben, die Zugriff auf den Klartext benötigen. Ein Angreifer, der Zugriff auf eine Datenbanksicherung, SQL-Injection oder einen anderen Angriff erhält, der nur Zugriff auf die Datenbank gewährt, kann dies jedoch nicht Erkennen Sie die Klartexte.

PKI ist hier nicht nützlich, wie Sie betonen, da der öffentliche Schlüssel es ermöglicht, die Werte aufzulisten und wiederherzustellen, wenn Sie eine deterministische PKI verwenden Kryptosystem (einfach, ungepolstert, RSA zum Beispiel). Wenn Sie eine nicht deterministische PKI (aufgefüllte RSA) verwenden, können Sie nicht nach Chiffretexten suchen.

Ich würde prüfen, ob Sie wirklich kleine, leicht brutale erzwungene Klartexte verschlüsseln müssen. Was ist Ihr Bedrohungsmodell? Können Sie sich auf andere Weise vor diesen Bedrohungen schützen?

16
David

Beachten Sie, dass es zwei separate Elemente gibt, um diese Daten zu sichern, wenn sie sich in Ruhe befinden und während des Transports.

Sie sollten sensible Daten (Daten in Ruhe) nicht direkt im Klartext speichern. Dinge wie Passwörter und soziale Sicherheit sowie Kreditkartennummern sollten verschlüsselt werden, bevor sie auf der Festplatte gespeichert werden. Ich stimme Lorenzog hinsichtlich der Entkopplung Ihrer Lösung zu, schlage jedoch ein etwas anderes Setup vor:

  1. Datenbankserver. Dieser Server speichert vertrauliche verschlüsselte Felder in einer Datenbank (SQL/MySQL/Oracle), verfügt jedoch nie über Klartextdaten. Es wird verschlüsselt, bevor es in der Datenbanktabelle/im Feld gespeichert wird. Es hat auch nicht den privaten Schlüssel zum Entschlüsseln der Daten, sondern nur verschlüsselte Blobs.

  2. Krypto-Anwendungsserver. Dieser Server speichert den privaten Schlüssel, der zum Ver- und Entschlüsseln der Felder für einen authentifizierten, autorisierten Benutzer verwendet wird. Dies ist der einzige Ort, an dem die auf dem Datenbankserver gespeicherten Daten verschlüsselt und entschlüsselt werden können. Offensichtlich wird dies ein hohes Asset-Ziel sein und sollte durch Richtlinien gehärtet und kontrolliert werden. Behandeln Sie es beispielsweise ähnlich wie einen Domänencontroller und prüfen Sie alle Zugriffe und Abfragen darauf.

  3. Webserver. Lastausgleichsanforderungen des Benutzers und sichere Kommunikation zwischen Servern und Diensten. Als Endpunkt für die Kommunikation mit externen Benutzern dienen.

Die Kommunikation (Daten während des Transports) mit dem Kunden und Ihren Partnerteams ist auch hier sehr wichtig. Stellen Sie sicher, dass Sie SSL verwenden und die höchstmögliche Verschlüsselungs- und Verschlüsselungsstufe verwenden.

Die Einrichtung ist nicht einfach (mit Sicherheit schwieriger als keine grundlegende Sicherheit, aber keinesfalls unmöglich). Wenn Sie das Vertrauen Ihrer Kunden verletzen, sind Sie in einer weitaus schlechteren Verfassung als die Zeit, die erforderlich ist, um die richtigen persönlichen Daten zu sichern . :) :)

Viel Glück!

7
AckSynFool

Tatsächlich haben Sie DREI Probleme, die Sie in Ihrer Frage impliziert haben.

  • Der Titel spricht von Daten in Ruhe.
  • In der Frage sprechen Sie auch über die Zugangskontrolle.
  • Darüber hinaus haben Sie dann auch eine Frage der Daten während des Transports.

Die Frage hat möglicherweise eine andere Antwort, wenn Sie bereits ein DB-System verwenden und die Verschlüsselung in einem vorhandenen System einführen. Viele der DB-Systeme unterstützen jetzt solche Sicherheitsfunktionen (siehe unten).

Zugangskontrolle und Daten während des Transports

Die meisten DB-Systeme unterstützen die Zugriffskontrolle vom ersten Tag an (dies ist fast eine Mindestanforderung). Wenn Sie jedoch sagen, dass das eine oder andere System es lesen muss, ist es wirklich eine Frage der Zugangskontrolle.

Ebenso sind Daten während der Übertragung auch eine Frage der verwendeten Protokolle, von denen viele von vorhandenen DB-Systemen unterstützt werden. Zum Beispiel unterstützt SQL Server SSL für Verbindungen, ebenso wie MySQL . (Suche nach anderen, sie könnten es auch unterstützen.)

Verschlüsselung in Ruhe

Die dritte ist die Verschlüsselung in Ruhe, die das Problem löst, ob eine nicht autorisierte Person oder ein nicht autorisiertes System die eigentliche DB-Datei abruft. Was sehen sie? Es gibt auch ein verwandtes Problem bei der Schlüsselverwaltung, d. H. Warum kann derjenige, der Ihre DB-Datei erhalten hat, die Schlüssel nicht erhalten?

Während des Entwurfs ist es ratsam anzunehmen, dass eines Tages die Schlüssel kompromittiert oder gestohlen werden könnten oder dass Sie aus rein krypto-agiler Sicht den Algorithmus und die Schlüssel ändern müssen (z. B. wer auch immer DES musste schließlich zu AES wechseln). Auch wenn es nicht 0 kosten kann, muss es einen Pfad geben, insb. Wenn Ihre Datenbank verteilt sein soll, ändern Sie entweder den Algorithmus oder den Schlüssel.

Viele DBs bieten jetzt zusammen mit einigen Schlüsselverwaltungslösungen eine Verschlüsselung in Ruhe an. Zum Beispiel unterstützt SQL Server Verschlüsselung seit 2008 . Darüber hinaus hat SQL Server auch eine Key Lifecycle Management Story veröffentlicht, die anscheinend sowohl symmetrische als auch asymmetrische Schlüssel (über Zertifikate) unterstützt. Ich glaube, SQL unterstützt auch die vollständige DB-Verschlüsselung gegenüber ausgewählten Feldern über Abfragen (wie in Ihrem Fall für SSN).

Ebenso unterstützt MySQL auch Verschlüsselung über Abfragefunktionen , die Sie für Ihr SSN-Szenario verwenden können. Sie können auch andere DB-Systeme verwenden, die möglicherweise bereits die Verschlüsselung unterstützen, und diese verwenden.

Wenn Sie ein System verwenden, das die integrierte Verschlüsselung unterstützt, vermeiden Sie wahrscheinlich viele Fallstricke, die damit verbunden sind, es selbst zu tun, und erhalten ein unterstütztes System.

Forschungsdatenbank

CryptDB ist ein unter MIT entwickeltes DB-System, das ruhende Daten verschlüsselt und auch das Ausführen von Abfragen über verschlüsselte Daten unterstützt. Wenn Sie sich die Seite für das System ansehen, werden Organisationen aufgelistet, die es tatsächlich verwenden.

Eigene Verschlüsselungslogik schreiben

Dies ist wahrscheinlich zeitaufwändiger und schwieriger, um es richtig zu machen, aber basierend auf Ihrer Frage scheint es, dass Sie dies als Problem betrachten. Wenn ich in einer ähnlichen Situation wäre, würde ich dies definitiv vermeiden und mich für eines der vorhandenen DB-Systeme entscheiden.

Es gibt viele Probleme. Wenn Sie beispielsweise Daten verschlüsseln, ist die Ausgabe etwas zufällig, sodass das Verschlüsseln derselben Daten mit demselben Schlüssel normalerweise nicht zu demselben Chiffretext führt. Dies kann eine Herausforderung darstellen und Sie müssen möglicherweise die Entropie verringern (z. B. durch Verwendung derselben Infusionen oder Salze), was sich auf die Sicherheit Ihres Systems auswirken kann. Und mit etwas so Einfachem wie dem Speichern von Hashes (oder sogar HMACs mit einem einzigen Schlüssel) kann jemand, der die Datenbankdatei (en) erhält, Brute Force ausführen, um die Daten innerhalb von Wochen, wenn nicht Tagen wiederherzustellen. Dies gilt insbesondere für Felder wie SSN, es sei denn, Sie verbringen Zeit und benötigen immer mehrere Felder für eine Abfrage (z. B. SSN und DOB und die ersten drei Buchstaben des Nachnamens oder solche Kombinationen) und speichern diese nur als Hash, aber keines von beiden diese separat. Dies erhöht die Entropie und erschwert es jemandem, tatsächliche Werte zu finden, wenn er Ihre DB-Datei erhält.

Ansonsten muss man die wichtigsten Probleme beim Lebenszyklusmanagement herausfinden.

EDIT: Es ist eigentlich ein häufiges Problem und ich hatte einmal die Verschlüsselung von Daten ausgewertet. Als ich die erste Antwort schrieb, habe ich das hier nicht aufgenommen. Seitdem habe ich meine Antwort aktualisiert, um dies zu berücksichtigen und die Probleme mit der Zugriffskontrolle, der sicheren Verbindung und den Daten im Ruhezustand zu klären.

4
Omer Iqbal

Ich bin nicht sicher, was Sie versuchen (ist es ein Webdienst? Eine mobile App? Eine Desktop-App?), Aber angesichts Ihrer Anforderungen könnten Sie erwägen, das System in zwei separate Komponenten zu entkoppeln:

  • Man würde einen (sicheren) Hash der SSN halten, der als "schreibgeschützte" Datenbank fungiert. Eine Suche nach einer bestimmten SSN würde die Abfrage hashen und mit der Datenbank abgleichen. Wenn der Hash vorhanden ist, wird eine Übereinstimmung zurückgegeben. Sie sollten natürlich ratenbegrenzende Abfragen in Betracht ziehen, um Bruteforce-Angriffe zu vermeiden.

  • Ein anderes System (VM oder physisch getrennt, bis zu Ihnen) würde die Daten mit einem ähnlichen Prozess wie PCI (dh zum Speichern sensibler Finanzdaten) "im Klartext" halten Daten). Der Zugriff auf dieses System wäre strenger und Sie könnten erfolgreiche (und fehlgeschlagene) Authentifizierungen genauer prüfen.

Die Eingabe einer neuen SSN auf dem letzteren System würde eine Aktualisierung der Einträge auf dem ersteren auslösen. Auf diese Weise können Sie die schreibgeschützte Datenbank durch Lastausgleich oder ähnliche Techniken replizieren, um die Leistung sicherzustellen.

1
lorenzog
How to safely store sensitive data like a social security number?
...
Must be able to search (i.e. to look up an existing piece of data) but not view
...

Die homomorphe Verschlüsselung ermöglicht das Sortieren und Suchen verschlüsselter Daten. Sowohl Microsoft als auch IBM haben Systeme. Aber ich habe sie (noch) nicht in der Mainstream-Produktion gesehen. Siehe zum Beispiel Effiziente vollständig homomorphe Verschlüsselung von (Standard) LWE . Es erfüllt auch Ihre beiden anderen Anforderungen - Reversibilität und Leistung.

Wenn Sie nicht den PRP-Begriff der Sicherheit benötigen, verwenden Sie eine Blockverschlüsselung. Möglicherweise können Sie sogar ein FPE-Schema (Format Preserving Encryption) verwenden. Siehe zum Beispiel Überarbeitete Order-Preserving-Verschlüsselung - Verbesserte Sicherheitsanalyse und alternative Lösungen und sogar Eine Zusammenfassung der Format-Preserving-Verschlüsselung für einige Ideen.

Ich bin mir nicht sicher, was ich von "Andere Systeme müssen in der Lage sein, den tatsächlichen Wert wiederherzustellen" (außer Reversibilität) halten soll. Können Sie den Datenfluss erklären? Naiv würde ich sagen, führen Sie die Auswahl für die verschlüsselten Daten durch, entschlüsseln Sie die Daten, verschlüsseln Sie die Daten unter dem öffentlichen Schlüssel des Remote-Systems und senden Sie die verschlüsselten Daten an das Remote-System.


Ich denke jedoch, dass ein Angreifer den Verschlüsselungsprozess als Oracle verwenden und die Daten aufgrund seiner geringen Entropie wiederherstellen könnte.

Es wird Informationen verlieren, wenn der PRP-Begriff der Sicherheit fehlt. nicht wegen Daten mit niedriger Entropie wie SSNs. Beispielsweise kann RSA/OAEP eine SSN effektiv maskieren. Der Böse hat keinen größeren Vorteil als zu raten (mit etwas Handverzicht).


Sie benötigen außerdem eine Strategie zum Speichern des privaten Schlüssels. Vielleicht ein HSM oder KMIP. Guttman hat in seinem Buch Engineering Security einige interessante Gedanken zu HSM und anderen Speichergeräten (wie der Hardware, die das KMIP-Protokoll unterstützt).

1
user29925