Jak zanonimizować plik GPS?

11

Wyobraź sobie, że masz ślad GPS, który chcesz uczynić anonimowym, w sensie prawnym. Jak byś to zrobił? Czy przyciąganie do najbliższej odległości x i skrócenie czasu jest wystarczające? Czy istnieją w tym zakresie międzynarodowe standardy? Czy ktoś już napisał algorytm, aby to zrobić? Jeśli nie, planuję zrobić funkcję w moim rozwijającym się pakiecie stplanr, aby to zrobić.

Powtarzalny przykład (przy użyciu niesamowitej funkcji obrotu z @geospacedman) z moich własnych danych „ możliwych do zidentyfikowania ”:

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()

trasa czerwona

Wynik pokazano powyżej. Podsumowując: czy czerwona droga jest „możliwa do zidentyfikowania” i czy istnieje lepszy sposób?

RobinLovelace
źródło
5
Myślę, że możesz potrzebować dobrej definicji i zakresu tego, co jest „anonimowe” tutaj. Będzie to zależeć w ogromnym stopniu od kontekstu danych, np. Jeśli jest w mieście, każdy mógł pójść nawet bardzo precyzyjną trasą, w odległym / ograniczonym obszarze daje dużo więcej informacji, jeśli zaczyna się, kończy lub przechodzi szczególnie pouczająca lokalizacja (np. czyjś dom). A jakie informacje należy zachować? przebyty dystans? czasy względne lub prędkość? ścieżka do wytyczenia szlaku? Określą one, czy można po prostu usunąć (niektóre) dane, czy na przykład dodać stały / losowy szum.
drfrogsplat
co planujesz wykorzystać również w sprawach, możesz ustawić punkt początkowy na 0,0 dla wszystkich swoich tras
Ian Turton
Interesujące pytanie i mam do czynienia z podobnymi problemami ze wspólnymi danymi dotyczącymi jazdy na rowerze. Czy wyobrażasz sobie „anonimizację” pliku GPX i utrzymanie go w formacie GPX? Czy możesz zapisać jako linię (odrzucając informacje o trackpointach)? Co naprawdę chcesz ukryć?
Simbamangu,
Dyskusja z kolegami doprowadziła do pomysłu po prostu pokrojenia pierwszego i ostatniego x metra na odległość, która jest uważana za „k anonimową” en.wikipedia.org/wiki/K-anonymity . W odpowiedzi na @drfrogsplat mam na myśli definicję anonimowości ICO, która jest niejasna: „Nie ma prostej zasady postępowania z informacjami przestrzennymi - takimi jak kody pocztowe, dane GPS lub odniesienia do map - zgodnie z ustawą o ochronie danych z 1998 r. (DPA). W niektórych okoliczności będą stanowić dane osobowe ”(ale które?): ico.org.uk/media/1061/anonymisation-code.pdf
RobinLovelace
1
Czym jest anonimowość K dla sekwencji punktów GPS? Co rozumiesz przez „cięcie” pierwszych / ostatnich metrów - masz na myśli przycinanie zestawu punktów (krótszy) lub zmniejszanie dokładności punktów śladu?
Simbamangu,

Odpowiedzi:

5

Współpracuję z naszą lokalną grupą rowerową w celu anonimizacji plików GPX według dwóch kryteriów (przede wszystkim bezpieczeństwa). Nigdy nie spotkałem się ze standardową metodą anonimizacji danych, ale spełnia to dwa obawy naszych członków, przy jednoczesnym zachowaniu dokładności na drogach i informacji o prędkości:

  • Lokalizacje osobiste, usuwające „prywatne” obszary dla osób fizycznych;
  • Przesłaniają znaczniki czasu, aby dane podróży nie mogły zostać użyte do identyfikacji poszczególnych ruchów.

GPSBabel może wykonać oba te operacje z wiersza poleceń - na przykład, aby przesunąć czasy w pliku GPX o +123450 sekund i usunąć wszystkie punkty trasy w odległości 0,5 km od punktu orientacyjnego w północnej Tanzanii:

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: tylko ścieżki procesowe;
  • -i, -f: typ pliku wejściowego (gpx) i nazwa pliku;
  • -x: dwa sekwencyjne (-x) argumenty filtru dla przesunięcia czasowego (przesunięcie) i usunięcia (promień, wykluczenie) wokół punktu;
  • -o, -F: typ pliku wyjściowego i nazwa pliku.

To polecenie łączy ze sobą kilka filtrów - najpierw przekształcając punkty trasy w punkty drogi, następnie filtrując, a następnie przekształcając z powrotem do punktów drogi.

Pamiętaj, że zmniejszenie miejsc dziesiętnych wokół punktu orientacyjnego / obszaru prywatności jest BARDZO ważne, ponieważ zasłania dokładny środek obszaru prywatności. 3 miejsca dziesiętne = w tym przypadku dokładność ~ 110 m .

Zazwyczaj dzwonię do GPSBabel z R, pisząc nowy plik GPX z zastosowanymi filtrami, w tym losową przesunięciem czasu +/- 2 tygodnie. Byłoby lepiej jako skrypt bash lub python, ale wiele innych prac, które wykonuję, to R i jestem leniwy ...

# 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
źródło
1

Masz pecha, jest to niezwykle trudne! Jeśli poważnie o tym myślisz, powinieneś przeczytać o prywatności różnicowej, ponieważ prawdopodobnie tego właśnie szukasz.

Kiedy myślisz o tym problemie, powinieneś wziąć pod uwagę przypadek samotnika mieszkającego na końcu długiej, odizolowanej drogi. Czy naprawdę uważasz, że możesz coś zrobić z ich współrzędną GPS i nie ujawniać niczego na temat tej konkretnej osoby? Boczna informacja tutaj jest taka, że ​​można łatwo odkryć, że mieszka tam tylko jedna osoba.

Dobrym początkiem jest usunięcie identyfikatora użytkownika, czasu i dodanie szumu do punktów danych. Problem polega jednak na tym, że wszystkie punkty danych są silnie skorelowane, więc jeśli dodasz losowy szum do każdego punktu, szum zostanie anulowany i ktoś będzie w stanie wyliczyć prawdopodobne trajektorie. Hałas musiałby więc być odporny na ten atak, na przykład poprzez ustawienie go na stałym poziomie na trajektorii. Ale wtedy trajektorie można prawdopodobnie łatwo dopasować do prawdopodobnych tras opartych na drogach itp.

Nie jestem pewien, czy dane, z którymi się skończysz, będą nadal przydatne do wszystkiego, co chcesz z nimi zrobić, ale przynajmniej jest to pasjonująca dziedzina.

PS: Nie wiem o prawnie dopuszczalnych, spodziewałbym się, że będzie to ruchomy cel i specyficzny dla kraju, podczas gdy matematyczna definicja zróżnicowanej prywatności jest najsolidniejsza z możliwych.

Szalony Echet
źródło
0

dokonaj korekty współrzędnych X i Y każdego punktu o losową odległość między pewnym przesunięciem minimalnym i maksymalnym. również ustaw losowy kierunek przesunięcia (plus lub minus). Uwzględnij w randomizacji, że niektóre punkty mogą nie mieć dostosowania do jednej lub obu części pary współrzędnych.

Adam
źródło