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
Datenverschlüsseln, die in der Datenbank gespeichert werden
- __blackjack__
- User
- Beiträge: 13119
- 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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Hallo blackjack,__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.
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 ).
Vielleicht hast du einen Vorschlag, was ich zusätzlich machen könnte. Bin für alles offen.
Grüße Andrey35
- noisefloor
- User
- Beiträge: 3857
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
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
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.Die Datenbank an sich ist mit einem Login und Passwort geschützt. Denkst du das wird ausreichen ?
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
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
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
-
- 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 (...)"
- noisefloor
- User
- Beiträge: 3857
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
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
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.Meinetwegen mit der Cäsar-Chiffre oder so.
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
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.
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.
Hey noisefloor,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
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)
Hey DasIch und Kaa,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.
Ist aufjedenfall sehr sinnvoll bei IT sich mal zu melden.. (Hätte auch selber drauf kommen können)
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 ?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.
- __blackjack__
- User
- Beiträge: 13119
- 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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
- 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
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!
have a lot of fun!
-
- 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?
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 (...)"
- noisefloor
- User
- Beiträge: 3857
- 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
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
-
- 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
Das Objekt, was rauskommt wird dann entschlüsselt und dem request zugeordnet.
Ober habe ich einen Denkfehler?
Hans -> encryp. -> 4fsdo23
Code: Alles auswählen
select *
from table t
where t.name = '4fsdo23'
Ober habe ich einen Denkfehler?
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
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 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?
-
- 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 (...)"
-
- User
- Beiträge: 439
- Registriert: Mittwoch 8. August 2018, 16:42
Ich dachte nur Hashfunktionen seien kollisionssicher. Wie soll denn symmetrische Verschlüsselung funktionieren, wenn immer was anderes herauskommt?DasIch hat geschrieben: ↑Donnerstag 21. Januar 2021, 19:31Du 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 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?
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
@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.
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.