Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

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

Dieses Thema im Forum "Allgemeine Diskussionen" wurde erstellt von Danny77, 14 September 2018.

  1. Danny77

    Danny77 Aktiver Benutzer

    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: 14 September 2018
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  3. Danny77

    Danny77 Aktiver Benutzer

    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.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    ja, zum entschlüsseln halt und berechnen, wenn es verschlüsselt gespeichert ist.
     
  5. Danny77

    Danny77 Aktiver Benutzer

    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.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    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.
     
    Walter gefällt das.
  7. Danny77

    Danny77 Aktiver Benutzer

    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.
     
  8. akretschmer

    akretschmer Datenbank-Guru

    also greift auch die Applikation als Superuser zu? Warum machst Du Dir dann Gedanken zur Sicherheit? Die ist doch eh nicht da ...
     
  9. Danny77

    Danny77 Aktiver Benutzer

    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: 14 September 2018
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden