Datenverschlüsseln, die in der Datenbank gespeichert werden

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Andrey35
User
Beiträge: 16
Registriert: Donnerstag 8. Oktober 2020, 23:00

Guten Tag zusammen,

Zurzeit arbeite ich in meiner Uni für an einem Projekt, wo ich verschiedene Daten von anderen Studenten in einer Datenbank speichere (Name, Vorname, Email, ... ) und diese dann für eine Datenabfrage wieder benutze.

Nun möchte gerne die Daten, die ich in meiner Datenbank speichere, verschlüsseln (Datenschutz sicherheitshalber). Kann mir einer etwas empfehlen ?
Bzw. kann mir sagen, worauf ich alles dabei achten sollte, wenn ich Daten verschlüssle.

Grüße Andrey35
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Andrey35: Das würde ich nicht machen. Das System auf dem die Datenbank läuft sollte entsprechend geschützt sein. Also Zugang zu System auf Systemebene (Benutzer/Rechte), Zugang zur Datenbank auf Datenbankebene (Benutzer/Rechte). Dann Verschlüsselung auf Systemebene, also da sollte nichts unverschlüsselt auf den Datenträger landen auf dem die DB liegt. Und bei Sicherungskopien muss man sich noch mal Gedanken um den Schutz/die Verschlüsselung machen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Andrey35
User
Beiträge: 16
Registriert: Donnerstag 8. Oktober 2020, 23:00

__blackjack__ hat geschrieben: Sonntag 10. Januar 2021, 16:45 @Andrey35: Das würde ich nicht machen. Das System auf dem die Datenbank läuft sollte entsprechend geschützt sein. Also Zugang zu System auf Systemebene (Benutzer/Rechte), Zugang zur Datenbank auf Datenbankebene (Benutzer/Rechte). Dann Verschlüsselung auf Systemebene, also da sollte nichts unverschlüsselt auf den Datenträger landen auf dem die DB liegt. Und bei Sicherungskopien muss man sich noch mal Gedanken um den Schutz/die Verschlüsselung machen.
Hallo blackjack,

Danke dir für deine Rückmeldung. Die Datenbank an sich ist mit einem Login und Passwort geschützt. Denkst du das wird ausreichen ?
Mir gings ja nur im Prinzip darum die Daten so sicher, wie möglich zu speichern (Datenschutz :roll: ).
Vielleicht hast du einen Vorschlag, was ich zusätzlich machen könnte. Bin für alles offen.

Grüße Andrey35
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Die Datenbank an sich ist mit einem Login und Passwort geschützt. Denkst du das wird ausreichen ?
Na ja, dass ist ja das absolute Minimum. Nützt aber dann genau nicht mehr, wenn jemand physischen Zugriff auf den Server hat und sich erstmal die Dateien der Datenbank kopiert.

Wo steht denn der DB-Server? Wer hat Zugriff darauf? Wo werden die Daten analysiert? Wer hat Zugriff auf den Rechner, auf dem die Daten analysiert werden?

Gruß, noisefloor
Kaa
User
Beiträge: 13
Registriert: Montag 11. Januar 2021, 17:45

Hallo,
Bei uns an der Uni kümmert sich das Rechenzentrum um solche Angelegenheiten. An deiner Uni sollte es auch einen Beauftragten geben. Bei denen kannst du dich auch mal erkundigen, was du zu machen hast. Vielleicht hilft dir das auch etwas weiter.
Gruß, Kaa
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Warum kann man den Klartext in der DB nicht einfach verschlüsseln? Meinetwegen mit der Cäsar-Chiffre oder so.
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Meinetwegen mit der Cäsar-Chiffre oder so.
Natürlich. Es ist ja nicht so, dass eine "Verschlüsselung" via Cäsar-Chiffre nicht jeder Grundschüler in der 4. Klasse mit Stift und Papier dechiffrieren könnte.

Ich stelle mir das auch gerade bildlich vor, wie man einem Datenschutzbeauftragten allen ernstes erklärt möchte, dass man seine Bedenken bzgl. Cäser-Chiffre gar nicht verstehen würde - ist doch verschlüsselt...

Gruß, noisefloor
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Man kann Daten in einer Datenbank verschlüsseln, also ganz unironisch, Cäsar Chiffre war ja hoffentlich ein Scherz. Postgres hat dafür mit pgcrypto auch eine Extension.

Macht man sowas, kann man nach den verschlüsselten Daten aber nicht mehr (effizient) suchen. Das ist also äußerst unpraktisch, hier geht es ja auch nur um Name und Email usw. nicht um etwas wirklich kritisches.

Grundsätzlich sollte man sich aber mit GDPR/DSGVO auseinandersetzen, wenn man mit solchen persönlichen Daten hantiert. Wie Kaa schon erwähnt hat wird es sicherlich jemanden geben der sich um Datenschutz und Rechtsfragen kümmert und ggfs. Regeln aufgestellt hat, an die du dich halten solltest. Es ist sicherlich auch für dich besser dich daran zu orientieren als einen eigenen Weg zu gehen, sollte mal etwas schief gehen.

In der Regel würde Verschlüsselung at rest (der Festplatten) und Verschlüsselung in transit (SSL/TLS bei der Verbindung zur Datenbank) ausreichen. Die Daten in der Datenbank selbst verschlüsselt man normalerweise nicht. Außerdem sollte eine Datenbank nicht vom Internet aus erreichbar sein, sondern nur aus dem lokalen Netzwerk. Die Anwendung greift dann direkt auf die Datenbank zu, läuft ja im selben Netzwerk. Entwickler bei Bedarf durch einen SSH Tunnel mit Bastion Host.
Andrey35
User
Beiträge: 16
Registriert: Donnerstag 8. Oktober 2020, 23:00

noisefloor hat geschrieben: Mittwoch 13. Januar 2021, 20:02

Wo steht denn der DB-Server? Wer hat Zugriff darauf? Wo werden die Daten analysiert? Wer hat Zugriff auf den Rechner, auf dem die Daten analysiert werden?

Gruß, noisefloor
Hey noisefloor,

Der Server (Raspberry Pi im Moment) würde im Büro des Labors stehen und Zugriff auf diesen würden nur Mitarbeiter des Labors haben.
Es werden Daten von einem Arduinio Nano an den Server gesendet und ein Programm, was auf dem Server läuft, vergleicht diese mit dem Inhalt der Datenbank und der Server sendet dann ein Signal zurück an den Arduino zurück (Stimmen Daten überein leuchtet am Arduino eine LED grün, stimmen die nicht überein leuchtet die rot)
DasIch hat geschrieben: Freitag 15. Januar 2021, 14:27 Man kann Daten in einer Datenbank verschlüsseln, also ganz unironisch, Cäsar Chiffre war ja hoffentlich ein Scherz. Postgres hat dafür mit pgcrypto auch eine Extension.

Grundsätzlich sollte man sich aber mit GDPR/DSGVO auseinandersetzen, wenn man mit solchen persönlichen Daten hantiert. Wie Kaa schon erwähnt hat wird es sicherlich jemanden geben der sich um Datenschutz und Rechtsfragen kümmert und ggfs. Regeln aufgestellt hat, an die du dich halten solltest. Es ist sicherlich auch für dich besser dich daran zu orientieren als einen eigenen Weg zu gehen, sollte mal etwas schief gehen.
Hey DasIch und Kaa,

Ist aufjedenfall sehr sinnvoll bei IT sich mal zu melden.. (Hätte auch selber drauf kommen können) :lol:
DasIch hat geschrieben: Freitag 15. Januar 2021, 14:27

In der Regel würde Verschlüsselung at rest (der Festplatten) und Verschlüsselung in transit (SSL/TLS bei der Verbindung zur Datenbank) ausreichen. Die Daten in der Datenbank selbst verschlüsselt man normalerweise nicht. Außerdem sollte eine Datenbank nicht vom Internet aus erreichbar sein, sondern nur aus dem lokalen Netzwerk. Die Anwendung greift dann direkt auf die Datenbank zu, läuft ja im selben Netzwerk. Entwickler bei Bedarf durch einen SSH Tunnel mit Bastion Host.
Der Server befindet sich gerade in einem lokalen Netzwerk. Also würdest du empfehlen eher den Transport der Daten und den Zugang zu dem Server mehr zu sichern, als den Inhalt zu verschlüsseln ?
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Andrey35: Ich denke der Punkt an dem Dein Konzept nicht funktioniert ist der Raspi der die Daten unverschlüsselt speichert, und der physikalisch wahrscheinlich nicht genug abgesichert ist. Das Ding ist IMHO zu leicht mal einfach mitgenommen. Oder auch nur die SD-Karte.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
Käptn Haddock
User
Beiträge: 169
Registriert: Freitag 24. März 2006, 14:27

Hallo!
Es ist einfacher die Infrastruktur zu sichern.
1. Zugang zum Server nur über Keys für einen selektiven Kreis
2. Port der DB blockieren oder nur selektive Zugriffe erlauben
3. Datenbank mit Passwortschutz und/oder selektivem Zugriff von Gruppen oder IPs
4. Einziger Zugang der Nutzer zu den Daten von aussen über die Webapplikation (die hier mit der DB auf einer VM läuft)
5. DB-Backups verschlüsselt (zip)
6. VM-Backups nur selektiver Zugang

Mit großflächiger Verschlüsselung innerhalb der Datenbank macht man sich das Leben schwer, und generiert mehr Problem als Lösungen. Ausnahme sind einzelne Felder, die nicht durchsucht oder indiziert werden müssen. Hierbei stünden u.U. die entschlüsselten Daten auch im Index.

Gruß Uwe
---------------------------------
have a lot of fun!
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Ich würde dieses Thema nochmal aufgreifen. Warum ist es denn "unsinnig" die Klartextdaten in einer Datenbank mit einem symmetrischen Schlüssel zu sichern? Ich meine AES und co sind doch besonders schnell.
Was spricht dagegen im Backend zwischen Frontend und ORM einen AES einzubauen?
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wenn du den Inhalt der Datenbank an sich verschlüsselst wird das Suchen schwieriger, wie DasIch schon sagte. Wenn du sowas wie `SELECT foo, bar FROM spamegg WHERE criteria=data` machst, muss du die _gesamte_ Tabelle spamegg entschlüsseln, Suchen und wieder verschlüsseln. Klar geht das, aber es dauert halt länger. Und wenn du dann noch X Queries pro Minute oder Sekunde hast, ist das sicherlich messbar.

Wenn die Tabelle spamegg ein oder mehrere Index hat, dann muss du die ja auch verschlüsseln. Das geht bestimmt, aber da kenne ich mich zu wenig aus. Gehe aber davon aus, dass das dann auch ein erheblicher Aufwand ist.

Gruß, noisefloor
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Man würde ja nicht nach dem entschlüsselten Wert suchen, sonder nach dem verschlüsselten.

Hans -> encryp. -> 4fsdo23

Code: Alles auswählen

select *
from table t
where t.name = '4fsdo23'
Das Objekt, was rauskommt wird dann entschlüsselt und dem request zugeordnet.

Ober habe ich einen Denkfehler?
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

@naheliegend: Wie genau funktioniert es dann, wenn man "ORDER" in der SQL-Query verwendet?
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

naheliegend hat geschrieben: Donnerstag 21. Januar 2021, 18:00 Man würde ja nicht nach dem entschlüsselten Wert suchen, sonder nach dem verschlüsselten.
[...]
Ober habe ich einen Denkfehler?
Du gehst davon aus dass wenn man einen Wert verschlüsselt jedesmal der gleiche verschlüsselte Wert herauskommt. Ein Algorithmus der sich so verhält wäre allerdings nicht semantically secure. Ein guter Algorithmus wäre dies allerdings und damit wäre dann deine Annahme falsch.
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

@sparrow: Das geht dann halt nicht, bzw erst nach dem entschlüsseln im Code.
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

@naheliegend: Genau. Du raubst damit der Datenbank ihrer Funktion. Das macht vielleicht für Passwort-Hashes Sinn, aber nicht für normale Nutzdaten.
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

DasIch hat geschrieben: Donnerstag 21. Januar 2021, 19:31
naheliegend hat geschrieben: Donnerstag 21. Januar 2021, 18:00 Man würde ja nicht nach dem entschlüsselten Wert suchen, sonder nach dem verschlüsselten.
[...]
Ober habe ich einen Denkfehler?
Du gehst davon aus dass wenn man einen Wert verschlüsselt jedesmal der gleiche verschlüsselte Wert herauskommt. Ein Algorithmus der sich so verhält wäre allerdings nicht semantically secure. Ein guter Algorithmus wäre dies allerdings und damit wäre dann deine Annahme falsch.
Ich dachte nur Hashfunktionen seien kollisionssicher. Wie soll denn symmetrische Verschlüsselung funktionieren, wenn immer was anderes herauskommt?
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

@naheliegend: Wir bleiben mal bei deinem Beispiel:

Hans -> encryp. -> 4fsdo23

Das heißt, aus deinem Hans mit 4 Zeichen wird eine verschlüsselte Variante mit 7 Zeichen. Und wenn du jetzt alle Vornamen haben willst, die "Hans" enthalten? Hans-Jürgen, Olaf-Hans und Hans-Peter-Hans? Wenn die "Verschlüsselung" wirklich nur ein Austausch einzelner Zeichen ist, dann kann man sie sich auch sparen. Oder soll das dann auch wieder in der Software gemacht werden? Dann kann man sich auch die Datenbank sparen.
Antworten