it-swarm.com.de

Datenverschlüsselung nach Anwendung im Vergleich zur Datenverschlüsselung in der Datenbank

Für eine Implementierung der DSGVO (EU General Data Protection Regulation) muss ich einige persönliche Informationen verschlüsseln. Es gibt zwei Möglichkeiten, wie wir die Daten verschlüsseln können:

  • Überlassen Sie der Webanwendung die alleinige Verantwortung für das Ver- und Entschlüsseln. Die tatsächlichen Daten in der Datenbank sind vollständig verschlüsselt. Auf diese Weise sind die Daten sicher, wenn sie gestohlen werden (vorausgesetzt, meine Verschlüsselung ist gut).

  • Aktivieren Sie die Verschlüsselung auf Datenbankebene und fügen Sie die zugreifende Webanwendung als vertrauenswürdigen Client hinzu. Die Ver- und Entschlüsselung erfolgt in der Datenbank selbst. Auf diese Weise gehen die Daten verloren, wenn die Datenbankanmeldeinformationen bekannt sind.

Was ist der beste Weg, ohne die Leistung zu stark zu beeinträchtigen?

18
madhairsilence

Es ist wahrscheinlich das Beste, wenn Ihre Datenbank die Verschlüsselung/Entschlüsselung übernimmt:

  1. Sie müssen keinen Verschlüsselungs-/Entschlüsselungscode schreiben und riskieren, Ihre eigene Sicherheit versehentlich zu verletzen. Dies bedeutet auch, dass Sie als Guntram Blohmdarauf hingewiesen nicht beweisen müssen Ihre eigene Sicherheit, um sicher zu sein, wenn es darum geht bis dahin. Und zu beweisen, dass Ihre benutzerdefinierte Software sicher ist, ist genauso schwierig, wie Sie wahrscheinlich denken, wenn nicht sogar mehr.
  2. Die Verwendung der in Ihrer Datenbank integrierten Inhalte ist normalerweise einfacher, z. Postgres lässt Sie auswählen, welche Spalten und Tabellen verschlüsselt werden sollen, und ihr Design enthält nur kurz die Schlüssel und entschlüsselten Daten auf dem Server. Andere Datenbanken sind wahrscheinlich ähnlich, aber das ist die einzige, mit der ich vertraut bin.
  3. Wenn Sie beispielsweise jemals einen Bericht basierend auf den Daten erstellen müssen, ist dies mit einem vorhandenen Tool, das verschlüsselte Datenbanken unterstützt, einfacher, als den gesamten benutzerdefinierten Code selbst auf der Clientseite zu schreiben.
  4. Wenn Sie jemals nach Daten filtern müssen, bei denen es sich nicht um exakte Werte handelt, bei denen zwischen Groß- und Kleinschreibung unterschieden wird, erledigt die Datenbank dies effizient für Sie, z. Indizes beibehalten, aber verschlüsselt halten, bis sie benötigt werden, und selbst dann nur die spezifischen Werte entschlüsseln, die sie zu einem bestimmten Zeitpunkt benötigen.

Es gibt einen Punkt für die clientseitige Verschlüsselung, den Sie bereits erwähnt haben. Es ist eine große Sache, aber ich denke nicht, dass sie die oben genannten Vorteile überwiegt:

  1. Ihre Sicherheit wird leicht erhöht, wenn Sie die gesamte Verschlüsselung/Entschlüsselung auf der Clientseite durchführen, da die Datenbank (und damit alle bösen Systemadministratoren/Angreifer, die diesen Server kontrollieren) zu keinem Zeitpunkt entweder den Entschlüsselungsschlüssel oder die entschlüsselten Daten kennt. Abhängig von den Daten und ihrer Verwendung sind jedoch einige Nachteile zu berücksichtigen:
    • Es ist durchaus möglich, dass Sie Ihren clientseitigen Verschlüsselungscode durcheinander bringen und die Daten/Schlüssel auf diese Weise entweder direkt oder über Seitenkanäle verlieren.
    • Sie müssen entweder Vertrauen ein Außenseiter oder die Schlüsselverwaltung selbst durchführen, was nicht trivial ist (und sehr nicht trivial zu unterstützen ist im Code, wenn Sie von Zeit zu Zeit geplante Ausfallzeiten vermeiden möchten)
    • Wenn Sie Ihren Code durcheinander bringen, sind Sie allein (nun, Ihr Unternehmen allein - Sie wissen, was ich meine) dafür verantwortlich, ihn zu beheben und den Schaden zu beseitigen, und bei allen Korrekturen ist die Wahrscheinlichkeit von Fehlern genauso hoch wie bei Ihrem ursprünglichen Code. Möglicherweise mehr, wenn Sie gestresst sind.
    • Sie müssen entweder viel Zeit für die Leistungsoptimierung aufwenden oder akzeptieren, dass Ihre Leistung schlecht ist, oder die Sicherheit für einfache Leistungssteigerungen verringern (z. B. indem Sie einen Vergleich kurzschließen oder einige vorberechnen Konstanten oder lassen Sie Ihren Compiler die falschen Bits optimieren). Nichts davon ist gut zu tun. Der Datenbankserver hatte bereits eine Menge von Leuten, die eine Menge von Tuning machten; Sie würden all diese Anstrengungen von Grund auf wiederholen.
    • Für jeden einzelnen neuen Entwickler müssen Sie ihn entweder in guten sicheren Codierungspraktiken schulen oder ihn anweisen, die sicherheitsrelevanten Teile Ihres Codes nicht zu berühren, von denen keiner kostengünstig oder allgemein so zuverlässig ist.
    • Wenn Sie die Fuzzy-Filterung clientseitig implementieren müssen, müssen Sie im Grunde SELECT * FROM table; und entschlüsseln und filtern Sie manuell jede einzelne Zeile, was einfach ... nicht gut gehen wird. Sie werden den Schlüssel lange Zeit auf einem Server speichern, auf den direkt über das Internet zugegriffen werden kann, als direkte Antwort auf eine Anfrage, die von einem Angreifer gesendet werden kann.

Als Kevinweist darauf hin haben Sie auch die Möglichkeit, bestimmte Felder zu verschlüsseln. Wenn Sie beispielsweise den Benutzernamen und die Kreditkartennummer eines Kunden speichern, muss letzterer definitiv verschlüsselt werden, ersterer jedoch wahrscheinlich nicht. Sie könnten z. a CHECK Einschränkung , um sicherzustellen, dass Sie nicht versehentlich eine unverschlüsselte Kreditkarte hinzufügen. Kreditkartennummern sind ein besonders gutes Beispiel dafür, da Sie niemals einen Abgleich mit ihnen durchführen müssen - Sie rufen sie immer nur aus der Datenbank ab oder speichern sie in der Datenbank, sodass Sie können Behandeln Sie sie effizient vom Kunden aus.

Beachten Sie jedoch, dass gute Sicherheit ist nicht eine Sache. Gute Sicherheit macht alles richtig:

  • Analysieren Sie Ihr Bedrohungsmodell, um sicherzustellen, dass Sie sich vor den richtigen Bedrohungen schützen
  • Verwenden von HTTPS für Ihre gesamte Website mit gültigen, aktuellen Zertifikaten
  • Verschlüsselung Ihrer Datenbank auf die eine oder andere Weise
  • Verschlüsselung der Kommunikation zwischen Ihrer Website und Ihrer Datenbank
  • Verwenden Sie SQL korrekt, um eine SQL-Injection zu vermeiden
  • Härten Sie Ihren Datenbankserver, um ihn vor Angriffen zu schützen
  • Anwenden des Prinzip des geringsten Privilegs
  • Und so viel mehr.

Wie auch immer Sie mit Ihrer Datenbank umgehen, es ist nicht das Ende des Weges. Stellen Sie sicher, dass Sie sich um alles kümmern.

28

Das Hinzufügen von Verschlüsselung auf der Basis der Datenbank pro Feld oder pro Feldgruppe scheint der beste Kompromiss zu sein, vorausgesetzt, dass neben jedem zu verschlüsselnden Feld auch ein oder mehrere Indexfelder erstellt werden.

Sie würden mehrere Probleme gleichzeitig lösen.

  1. Der Suchindex wäre genauso schnell
  2. Nicht alle Felder müssen verschlüsselt werden
  3. Der Overhead der Verschlüsselung wird auf ein Minimum reduziert, wobei der Schwerpunkt auf der DSGVO liegt.
  4. Je nach Berechtigung können für jedes Feld unterschiedliche Kennwörter für unterschiedliche Endbenutzer verwendet werden
3
John Greene

Der neueste Trend besteht darin, private Schlüssel in einem HSM zu speichern, bei dem es sich um Hardware-Sicherheitsmodule handelt. Es gibt Optionen, um den Schlüssel innerhalb des HSM als nicht exportierbar zu markieren. Die Daten, die verschlüsselt werden müssen, werden an den HSM gesendet. Bei großen Datenmengen kann dies jedoch zu Leistungseinbußen führen. Wenn der Schlüssel exportierbar ist, wird er nur exportiert und im Speicher gespeichert, damit er von der Anwendung zur Verschlüsselung verwendet werden kann. Wenn der Schlüssel exportiert wird, sollte er zuerst mit einem anderen öffentlichen Schlüssel im HSM verschlüsselt und dann an die Anwendung gesendet werden. Da die Anwendung über einen privaten Schlüssel verfügt, kann sie unseren Hauptverschlüsselungsschlüssel entschlüsseln. Nun stellt sich die Frage, wo dieser Schlüssel des Schlüssels gespeichert werden soll. Es kann in einer Datenbank mit eingeschränktem Zugriff gespeichert werden.

0
securitygeek