AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SelectWhereQuery auf verschlüsselten Spalten durch Methodik beschleunigen
Thema durchsuchen
Ansicht
Themen-Optionen

SelectWhereQuery auf verschlüsselten Spalten durch Methodik beschleunigen

Ein Thema von UntoterGeist · begonnen am 13. Sep 2021 · letzter Beitrag vom 16. Okt 2021
Antwort Antwort
swestner

Registriert seit: 31. Aug 2012
Ort: Hallstadt
88 Beiträge
 
Delphi 12 Athens
 
#1

AW: SelectWhereQuery auf verschlüsselten Spalten durch Methodik beschleunigen

  Alt 15. Sep 2021, 16:14
Und warum nicht einfach der DB das Verschlüsseln / Entschlüsseln überlassen?

https://www.postgresql.org/docs/8.1/...n-options.html

Wir machen das mit Firebird so und das funktioniert alles wunderbar...
Stefan Westner
  Mit Zitat antworten Zitat
UntoterGeist

Registriert seit: 18. Sep 2019
25 Beiträge
 
#2

AW: SelectWhereQuery auf verschlüsselten Spalten durch Methodik beschleunigen

  Alt 15. Sep 2021, 18:21
Die Funktion wird doch auch von der DB ausgeführt. Die benutzt man wie jede andere Funktion, die von der DB zur Verfügung gestellt wird. pg_sym_decrypt ist eine Funktion von pgcrypto. pgcrypto ist ein offizielles ExtensionModul von postgres und standardmäßig bei der Installation dabei. Steht auch in deinem Link drin.
Zitat:
The /contrib function library pgcrypto allows certain fields to be stored encrypted. This is useful if only some of the data is sensitive. The client supplies the decryption key and the data is decrypted on the server and then sent to the client.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.493 Beiträge
 
Delphi 12 Athens
 
#3

AW: SelectWhereQuery auf verschlüsselten Spalten durch Methodik beschleunigen

  Alt 16. Sep 2021, 08:21
Eine Suchspalte ist bei der Suche über mehrere Spalten oder Subtabellen auch eine Möglichkeit der Optimierung.

Aber das war nicht mein Vorschlag.
Ich würde alle Daten der relevanten Spalten als Ergebnis noch einmal speichern.
Einmal abfragen und entschlüsseln:
Code:
Select id, name, vorname from patienten
Dann eine zusätzliche Tabelle mit einem Blobfeld und nur einem Datensatz wo das Ergebnis der Abfrage z.B. als CSV wieder verschlüsselt abgelegt wird.
Dieses Blobfeld muss bei jeder Änderung der orginalen Tabelle aktualisiert werden, in der selben Transaktion die auch den Patienten speichert.
(lesen, entschlüsssln, geänderte Zeile austauschen, verschlüsseln, speichern)
Im Prinzip eine materialisierte View.
Auf diese Weise braucht der Schlüssel den Client nie verlassen.
Bei 15.000 Patienten sollte dieser Blob etwa 1MB groß sein, da dürfte das Entschlüsseln kaum spürbar verzögern.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#4

AW: SelectWhereQuery auf verschlüsselten Spalten durch Methodik beschleunigen

  Alt 16. Sep 2021, 10:21
Ich konnte jetzt keine Aussage dazu finden, aber das hast du sicher schon versucht?
SQL-Code:

SELECT "id","name","vorname" FROM "schema"."personen" WHERE "name" ILIKE 'Albert%';
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
UntoterGeist

Registriert seit: 18. Sep 2019
25 Beiträge
 
#5

AW: SelectWhereQuery auf verschlüsselten Spalten durch Methodik beschleunigen

  Alt 16. Sep 2021, 12:28
@Blup
Achso war das gemeint, jetzt versteh ich deinen Ansatz.

@Uwe
Die relevanten Spalten haben den Datentyp bytea und sind durch die DB verschlüsselt worden. Man kann also nicht direkt auf die Spalten ILike anwenden. Man muss die Spalte schon vor dem Vergleich entschlüsseln lassen. Sonst sucht man (wenn man das in Text umcastet) nur in Datensalat herum. Die Datenbank macht das also nicht automatisch, kann sie auch garnicht, weil sie den Schlüssel dann nicht hat. Bei Oracle ist der Masterkey z.B. in der Datenbank hinterlegt. An dem Rechenaufwand ändert sich für Oracle dadurch aber auch nichts.

Da AES nicht homomorph ist kann man keine Suchoperationen auf den Verschlüsselten Text durchführen. Homomorphe Verschlüsselung ist aber glaube auch weniger sicher, weil die Strukturen erhalten bleiben. So wird das jedenfalls beschrieben. Bei diesen Verschlüsselungen könnte man den Suchtext verschlüsseln und das Ergebnis direktin den Spalten suchen.

Deshalb muss man das so schreiben:
Code:
SELECT
"id",
pgp_sym_decrypt("name",'geheimerSchlüssel') AS name,
pgp_sym_decrypt("vorname",'geheimerSchlüssel') AS vorname

FROM "schema"."personen"

WHERE pgp_sym_decrypt("name",'geheimerSchlüssel') ILIKE 'Albert%';
Postgres ist übrigens so schlau, das Ergebnis einer Spalte die schon entschlüsselt wurde zwischen zu speichern. Deshalb kostet der folgende Query nicht wirklich mehr Zeit als der vorige.
Code:
SELECT
"id",
pgp_sym_decrypt("name",'geheimerSchlüssel') AS name,
pgp_sym_decrypt("vorname",'geheimerSchlüssel') AS vorname

FROM "schema"."personen" WHERE pgp_sym_decrypt("name",'geheimerSchlüssel') ILIKE 'Albert%'
OR "schema"."personen" WHERE pgp_sym_decrypt("name",'geheimerSchlüssel') ILIKE 'Peter%'
OR "schema"."personen" WHERE pgp_sym_decrypt("name",'geheimerSchlüssel') ILIKE 'Daniel%';
  Mit Zitat antworten Zitat
UntoterGeist

Registriert seit: 18. Sep 2019
25 Beiträge
 
#6

AW: SelectWhereQuery auf verschlüsselten Spalten durch Methodik beschleunigen

  Alt 16. Okt 2021, 04:04
Hab eine Lösung gefunden =D

Auch wenn ich das vorher doof fand. Das Hashen von Teilstrings, was ich erwähnt hatte, nennt sich BlindIndexing. So an sich ist das immer noch doof. Man muss den Strings schon ein Salt mitgeben. Sonst ist "abc" leicht raus zu finden. Das ermitteln geht ganz automatisch mit Rainbowtables. Und dann wüsste jeder zumindest die ersten Buchstaben. Mit Salt wird aber "blablablubabc" daraus. Das kann man bis zu den ersten 3, 4 Buchstaben machen. Zwar gibts dann in der DB noch viele Übereinstimmungen an Hashs, aber was sie bedeuten lässt sich nicht mehr erraten. Suchen tut man dann über eine Vorslektion auf die Hashs. In Kombi mit der Suchspalte, die alles enthält wonach gesucht werden kann, erhält man ein gutes Ergebnis.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: SelectWhereQuery auf verschlüsselten Spalten durch Methodik beschleunigen

  Alt 16. Okt 2021, 11:20
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz