Seite 1 von 2

Datenverschlüsseln, die in der Datenbank gespeichert werden

Verfasst: Sonntag 10. Januar 2021, 15:48
von Andrey35
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

Re: Datenverschlüsseln, die in der Datenbank gespeichert werden

Verfasst: Sonntag 10. Januar 2021, 16:45
von __blackjack__
@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.

Re: Datenverschlüsseln, die in der Datenbank gespeichert werden

Verfasst: Montag 11. Januar 2021, 11:27
von Andrey35
__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

Re: Datenverschlüsseln, die in der Datenbank gespeichert werden

Verfasst: Mittwoch 13. Januar 2021, 20:02
von noisefloor
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

Re: Datenverschlüsseln, die in der Datenbank gespeichert werden

Verfasst: Donnerstag 14. Januar 2021, 13:08
von Kaa
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

Re: Datenverschlüsseln, die in der Datenbank gespeichert werden

Verfasst: Donnerstag 14. Januar 2021, 20:30
von naheliegend
Warum kann man den Klartext in der DB nicht einfach verschlüsseln? Meinetwegen mit der Cäsar-Chiffre oder so.

Re: Datenverschlüsseln, die in der Datenbank gespeichert werden

Verfasst: Donnerstag 14. Januar 2021, 21:00
von noisefloor
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

Re: Datenverschlüsseln, die in der Datenbank gespeichert werden

Verfasst: Freitag 15. Januar 2021, 14:27
von DasIch
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.

Re: Datenverschlüsseln, die in der Datenbank gespeichert werden

Verfasst: Freitag 15. Januar 2021, 23:49
von Andrey35
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 ?

Re: Datenverschlüsseln, die in der Datenbank gespeichert werden

Verfasst: Samstag 16. Januar 2021, 01:23
von __blackjack__
@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.

Re: Datenverschlüsseln, die in der Datenbank gespeichert werden

Verfasst: Montag 18. Januar 2021, 14:22
von Käptn Haddock
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

Re: Datenverschlüsseln, die in der Datenbank gespeichert werden

Verfasst: Donnerstag 21. Januar 2021, 17:42
von naheliegend
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?

Re: Datenverschlüsseln, die in der Datenbank gespeichert werden

Verfasst: Donnerstag 21. Januar 2021, 17:51
von noisefloor
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

Re: Datenverschlüsseln, die in der Datenbank gespeichert werden

Verfasst: Donnerstag 21. Januar 2021, 18:00
von naheliegend
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?

Re: Datenverschlüsseln, die in der Datenbank gespeichert werden

Verfasst: Donnerstag 21. Januar 2021, 18:20
von sparrow
@naheliegend: Wie genau funktioniert es dann, wenn man "ORDER" in der SQL-Query verwendet?

Re: Datenverschlüsseln, die in der Datenbank gespeichert werden

Verfasst: Donnerstag 21. Januar 2021, 19:31
von DasIch
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.

Re: Datenverschlüsseln, die in der Datenbank gespeichert werden

Verfasst: Donnerstag 21. Januar 2021, 20:45
von naheliegend
@sparrow: Das geht dann halt nicht, bzw erst nach dem entschlüsseln im Code.

Re: Datenverschlüsseln, die in der Datenbank gespeichert werden

Verfasst: Donnerstag 21. Januar 2021, 20:50
von sparrow
@naheliegend: Genau. Du raubst damit der Datenbank ihrer Funktion. Das macht vielleicht für Passwort-Hashes Sinn, aber nicht für normale Nutzdaten.

Re: Datenverschlüsseln, die in der Datenbank gespeichert werden

Verfasst: Donnerstag 21. Januar 2021, 20:59
von naheliegend
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?

Re: Datenverschlüsseln, die in der Datenbank gespeichert werden

Verfasst: Donnerstag 21. Januar 2021, 22:28
von sparrow
@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.