Wie anonymisiere ich eine GPS-Datei?

11

Stellen Sie sich vor, Sie haben eine GPS-Spur, die Sie im rechtlichen Sinne anonymisieren möchten. Wie würdest du das machen? Schnappen Sie auf die nächste x-Distanz und entfernen Sie die Zeit genug? Gibt es hierfür international vereinbarte Standards? Hat jemand schon einen Algorithmus geschrieben, um dies zu tun? Wenn nicht, plane ich, eine Funktion in meinem sich entwickelnden stplanr-Paket zu erstellen , um dies zu tun.

Reproduzierbares Beispiel (unter Verwendung einer fantastischen Rotationsfunktion von @geospacedman) aus meinen eigenen ' identifizierbaren ' Daten:

library(rgdal)
library(tmap)
downloader::download("https://www.openstreetmap.org/trace/1619756/data", "test.gpx")

r <-readOGR(dsn = "test.gpx", layer = "tracks")
r <- spTransform(r, CRS("+init=epsg:27700"))
rproj <- rotateProj(rs, 90) # rotate projection for plotting
r <- spTransform(r, rproj)
rs <- rgeos::gSimplify(r, 1000) # snap to nearest km
qtm(r) + qtm(rs, line.col = "red") + tm_layout(draw.frame = F) + tm_scale_bar()

rote Route

Das Ergebnis ist oben gezeigt. Zusammenfassend: Ist die rote Route „identifizierbar“ und gibt es einen besseren Weg?

RobinLovelace
quelle
5
Ich denke, Sie brauchen möglicherweise eine gute Definition und einen guten Spielraum für das, was hier "anonym" ist. Dies hängt stark vom Kontext der Daten ab, z. B. wenn sie sich in einer Stadt befinden und jeder eine sehr genaue Route hätte verfolgen können. In einem abgelegenen / eingeschränkten Gebiet werden viel mehr Informationen preisgegeben, wenn sie beginnen / enden oder durchlaufen ein besonders informativer Ort (zB jemandes Haus). Und welche Informationen müssen aufbewahrt werden? zurückgelegte Strecke? relative Zeiten oder Geschwindigkeit? der Weg für die Kartierung einer Spur? Diese bestimmen, ob Sie einfach (einige) Daten entfernen oder beispielsweise konstantes / zufälliges Rauschen hinzufügen können.
Drfrogsplat
Was planen Sie, um es auch für Angelegenheiten zu verwenden, Sie könnten einfach den Startpunkt für alle Ihre Routen auf 0,0 setzen
Ian Turton
Interessante Frage und beschäftige mich mit einigen ähnlichen Problemen mit gemeinsamen Fahrraddaten. Stellen Sie sich vor, Sie würden eine GPX- Datei anonymisieren und im GPX-Format belassen? Könnten Sie als Zeile speichern (Trackpoint-Informationen verwerfen)? Was willst du wirklich verdunkeln?
Simbamangu
Die Diskussion mit Kollegen hat zu der Idee geführt, den ersten und den letzten x Meter einfach auf eine Entfernung zu hacken, die als "k anonym" gilt. En.wikipedia.org/wiki/K-anonymity . Als Antwort auf @drfrogsplat meine ich die vage Definition der Anonymität des ICO: "Es gibt keine einfache Regel für den Umgang mit räumlichen Informationen - wie Postleitzahlen, GPS-Daten oder Kartenreferenzen - gemäß dem Data Protection Act 1998 (DPA) Umstände, unter denen dies personenbezogene Daten sind "(aber welche?): ico.org.uk/media/1061/anonymisation-code.pdf
RobinLovelace
1
Was ist K-Anonymität für eine Folge von GPS-Punkten? Was meinst du mit "Hacken" der ersten / letzten Meter - du meinst das Trimmen der Punktmenge (kürzer) oder das Verringern der Genauigkeit der Trackpoints?
Simbamangu

Antworten:

5

Ich arbeite mit unserer lokalen Fahrradgruppe zusammen, um GPX-Dateien nach zwei Kriterien zu anonymisieren (hauptsächlich aus Sicherheitsgründen). Ich bin noch nie auf eine Standardmethode zur Anonymisierung von Daten gestoßen, aber dies befriedigt zwei Bedenken unserer Mitglieder, während die Genauigkeit auf Straßen und die Geschwindigkeitsinformationen erhalten bleiben:

  • Persönliche Standorte, Entfernen von "privaten" Bereichen für Einzelpersonen;
  • Verschleierung von Zeitstempeln, sodass Reisedaten nicht zur Identifizierung einzelner Bewegungen verwendet werden können.

GPSBabel kann beides über die Befehlszeile ausführen, um beispielsweise die Zeiten in einer GPX-Datei um +123450 Sekunden zu verschieben und alle Trackpoints zu entfernen, die 0,5 km von einem Wahrzeichen im Norden Tansanias entfernt sind:

gpsbabel -t -i gpx -f infile.gpx \
  -x transform,wpt=trk,del -x track,move=123450s \
  -x radius,distance=0.5K,lat=-3.368,lon=36.624,nosort,exclude \
  -x transform,trk=wpt,del \
  -o gpx -F infile_rand.gpx
  • -t: nur Tracks verarbeiten;
  • -i, -f: Eingabedateityp (gpx) und Dateiname;
  • -x: zwei aufeinanderfolgende (-x) Filterargumente für Timeshift (Verschieben) und Entfernen (Radius, Ausschließen) um einen Punkt;
  • -o, -F: Ausgabedateityp und Dateiname.

Dieser Befehl verkettet mehrere Filter - zuerst werden die Trackpoints in Wegpunkte umgewandelt, dann gefiltert und dann wieder in Trackpoints umgewandelt.

Beachten Sie, dass das Reduzieren der Dezimalstellen um den Orientierungspunkt / Datenschutzbereich SEHR wichtig ist, da dadurch die genaue Mitte des Datenschutzbereichs verdeckt wird. 3 Dezimalstellen = ~ 110 m Genauigkeit in diesem Fall.

Normalerweise rufe ich GPSBabel von R aus an und schreibe eine neue GPX-Datei mit angewendeten Filtern, einschließlich einer zufälligen Zeitverschiebung von +/- 2 Wochen. Dies wäre besser als Bash- oder Python-Skript, aber viele andere Arbeiten, die ich mache, sind in R und ich bin faul ...

# Get the correct location for GPSBabel:
GB <- Sys.which("gpsbabel")

# Set up the filters
shift <- round((runif(1, 0, 2600000) - 1300000), 0) # +/- 2 weeks in secs
filter <- " -x transform,wpt=trk,del"
filter <- paste(" -x track,move=", shift, "s", sep = "")
filter <- paste(filter, " -x radius,distance=", dist, "K,", "lat=", lat, ",long=", lon, sep = "")
filter <- paste(filter, " -x transform,wpt=trk,del", sep="")

# Pass the complete command to the system
system(paste(GB, " -t -i gpx -f ", gpx_file, filter, " -o gpx -F ", 
           gsub(".gpx", replacement = "_rand.gpx", x = gpx_file, fixed = T),
           sep = ""), intern = TRUE)
Simbamangu
quelle
0

Nehmen Sie eine Anpassung der X- und Y-Koordinate jedes Punkts um einen zufälligen Abstand zwischen einem bestimmten minimalen und maximalen Versatz vor. Machen Sie auch die Richtung des Versatzes (Plus oder Minus) zu einer zufälligen Auswahl. Berücksichtigen Sie bei der Randomisierung, dass einige Punkte möglicherweise nicht an einen oder beide Teile eines Koordinatenpaars angepasst werden können.

Adam
quelle
0

Sie haben kein Glück, das ist enorm schwer zu tun! Wenn Sie es ernst meinen, sollten Sie über differenzierte Privatsphäre lesen, da dies wahrscheinlich das ist, wonach Sie suchen.

Wenn Sie an dieses Problem denken, sollten Sie den Fall einer Einsiedlerin in Betracht ziehen, die am Ende einer langen, isolierten Straße lebt. Glaubst du wirklich, du kannst etwas an ihrer GPS-Koordinate ändern und nichts über diese bestimmte Person preisgeben? Die Nebeninformation hier ist, dass es leicht entdeckt werden kann, dass nur eine Person dort lebt.

Das Entfernen der Benutzer-ID, der Zeit und das Hinzufügen von Rauschen zu den Datenpunkten ist ein guter Anfang. Das Problem ist jedoch, dass alle Datenpunkte stark korreliert sind. Wenn Sie also jedem Punkt zufälliges Rauschen hinzufügen, wird das Rauschen aufgehoben und jemand kann die wahrscheinlichen Trajektorien ableiten. Das Rauschen müsste also gegen diesen Angriff resistent sein, indem es beispielsweise über eine Flugbahn konstant gemacht wird. Aber dann können Flugbahnen wahrscheinlich leicht mit wahrscheinlichen Routen auf der Grundlage von Straßen usw. abgeglichen werden.

Ich bin mir nicht sicher, ob die Daten, mit denen Sie am Ende enden werden, für alles, was Sie damit machen möchten, noch funktionsfähig sind, aber zumindest ist es ein leidenschaftliches Feld.

PS: Ich weiß nicht, ob dies rechtlich akzeptabel ist. Ich würde erwarten, dass es sich um ein sich bewegendes Ziel und ein länderspezifisches Ziel handelt, während die mathematische Definition der differenzierten Privatsphäre die robusteste ist, die Sie erhalten können.

Mad Echet
quelle