Nutzer Standortdaten (latitude & longitude) unverschlüsselt abspeichern ?

Danny77

Aktiver Benutzer
Beiträge
26
Hi,
damit meine Abfragen gut performen ist es notwendig dass ich die Standortdaten unverschlüsselt abspeichere. 70% meiner Abfragen sind Standortbasiert, wären diese verschlüsselt ist es notwendig dass mysql jede einzelne Zeile durchgehen muss um diese zunächst zu entschlüsseln.
Da vorgesehen ist dass sehr viele Zeilen die Datenbank füllen soll wäre das eine Katastrophe.

Eine Abfrage (nicht optimiert - kurz und knapp zum Verständnis) sieht in etwa so aus:
Code:
SELECT
   ...
   (
       6371 * acos( cos( radians:)lat) ) * cos( radians( AES_DECRYPT(l.lat, :key, l.latnonce) ) ) * cos( radians( AES_DECRYPT(l.lng, :key, l.lngnonce) ) - radians:)lng) ) + sin( radians:)lat) ) * sin(radians(AES_DECRYPT(l.lat, :key, l.latnonce))) )
   ) AS distance
FROM
   ...
INNER JOIN
   location l
   ON l.id = s.id
HAVING
   distance <= 50
ORDER BY
   ...
ASC
LIMIT 2

Nun hab ich mir überlegt wenn ich die Daten schon unverschlüsselt abspeichern müsste könnte ich zumindest die latitude und longitude kürzen. In etwa:
lat: 52.52835
lng: 13.40547
->
lat: 52.528
lng: 13.405

Dadurch würde eine Kürzung auf 3 ter Nachkommastelle ein Rechteck von ~ 50x80m ergeben. Für die Berechnung kein Problem.
Kürzung auf 2 ter Nachkommastelle ein Rechteck von ~ 400x700m. Worst case würde das eine Differenz von 1km betragen, was der Berechnung Schaden könnte.
Als Mittellösung könnte man die 3 te Nachkommastelle immer mit einer 5 ergänzen um die Berechnung von oben auf 500m worst case zu verringern.

Das Problem... Sollte es ein "Angreifer" auf meine Datenbank schaffen wüsste er nicht nur den ungefähren Standort jeder Nutzer sondern könnte dieser in Ausnahmefällen auch eine Adresse eines Nutzers herausfinden wenn sich im gesamten Rechteck nur ein Haus befindet.

Anstelle des Kürzens könnte man auch einfach für jeden Nutzer für die Abfrage die Stadt Koordinaten abspeichern. Dadurch wäre das obere Problem gelöst, allerdings würden sich bei größeren Städten wie Berlin usw die Genauigkeit der Berechnung um mehrere Kilometer verzerren was die Berechnung komplett sinnlos macht...

Was meint ihr ? Ist es gefährlich die Standortnutzerdaten unverschlüsselt, aber gekürzt abzuspeichern ?
Andere Vorschläge ?
 
Zuletzt bearbeitet:
Werbung:
irgendwo müssen ja die Schlüssel herkommen... wie willst Du das lösen?

Davon abgesehen: du scheinst eine Umkreissuche machen zu wollen, das können andere Datenbanken (PostgreSQL & PostGIS) von Haus aus indexbasiert und damit extrem effizient.
 
Welche Schlüssel meinst du ?
Auch andere Datenbanken müssen die Werte zuerst entschlüsseln. bevor diese die Berechnung anstellen können, was ja das Hauptproblem ist. Mit AES_DECRYPT erfolgt das Zeile für Zeile, deshalb muss ja jede einzelne Zeile zunächst entschlüsselt werden damit die Berechnung gemacht werden kann.

Indexes kann ich aber auch mit MYSQL anlegen ;D.
 
Ja die Frage ist eben ob ich kann die Daten unverschlüsselt abspeichern und ob es vielleicht eine bessere Möglichkeit gibt als oben aufgeführt.

Verschlüsselt läuft das auch unmöglich, ich habe bereits 3 querys die bei jeden Seitenaufruf auf diese Weise ablaufen müssen. Das würde bei mehreren Zeilen und gleichzeitigen Nutzern sofort zum overload führen.
 
mal als grobe Idee: unverschlüsselt und mit hoher Genauigkeit speichern, die Spalten aber nur für einen Superuser sichtbar machen. Zugriffe auf die Koordinaten (um z.B. Umkreissuche zu machen) nur via API-Funktionen innerhalb der DB mit SECURITY DEFINER.

Und, wie schon gesagt, ich würde PostGIS für Geoanwendungen nehmen, das skaliert auch bei großen Datenmengen.
 
Auf meine Datenbank gibt es nur Zugriff als Superuser, ich bin der einzige der diesen Server nutzt. Die genauen Standortdaten werden bereits libsodium encrypted abgespeichert, für die Berechnung selbst ist es eigentlich nicht so relevant ob die Genauigkeit perfekt ist.
 
Werbung:
So war das nicht gemeint, ich habe schon einen einen eigenen User für die Seite selbst und dessen Datenbank, aber die Verbindung zur Datenbank geht nur local als superuser. So irgendwie ;D.

Und das mit der Api verstehe ich nicht und wüsste nicht wie anfangen. Auserdem ist mir das dennoch nicht sicher genug als Lösung. Sollte der Angreifer superuser Rechte bekommen, ist es immer das selbe.

Wie lösen denn die Profis mein Problem ? Gibt ja mehrere solche Anwendungen.
 
Zuletzt bearbeitet:
Zurück
Oben