GPSファイルを匿名化する方法は?


11

法的な意味で、匿名にしたいGPSトレースがあるとします。どうしますか?最も近いx距離にスナップし、十分な時間を取り除いていますか?これに関して国際的に合意された基準はありますか?誰かがこれを行うためのアルゴリズムをすでに書いていますか?そうでない場合、私はこれを行うために進化しているstplanrパッケージに関数を作成する予定です。

私自身の「識別可能な」データからの再現可能な例(@geospacedmanの素晴らしい回転関数を使用):

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

レッドルート

結果は上に示されています。要約すると、赤いルートは「識別可能」であり、より良い方法はありますか?


5
ここで「匿名」とは何かについて、適切な定義と範囲が必要になると思います。これは、データのコンテキストに大きく依存します。たとえば、都市にいる場合、誰でも非常に正確なルートをたどることができ、リモート/制限されたエリアでは、開始/終了または通過する場合、より多くの情報を提供します特に有益な場所(例:誰かの家)。そして、どの情報を保持する必要がありますか?走行距離は?相対時間または速度?トレイルをマッピングするためのパス?これらは、単に(一部の)データを削除できるか、または一定/ランダムノイズを追加できるかを決定します。
-drfrogsplat

どんなことにもそれを使用する予定です。すべてのルートの開始点を0,0に設定することができます
イアンタートン

興味深い質問であり、共有サイクリングデータに関するいくつかの同様の問題を扱っています。GPXファイルを「匿名化」して、GPX形式で保持することを想像していますか?行として保存できますか(トラックポイント情報を破棄します)?あなたは本当に何を隠したいですか?
シンバマング

同僚との議論により、最初と最後のxメートルを「k anonymous」と見なされる距離まで単純に切り刻むという考えに至りましたen.wikipedia.org/wiki/K-anonymity。@drfrogsplatの回答では、ICOの匿名性の定義を意味しています。これは曖昧です。状況はこれが個人データを構成します」(ただし、どちらですか?):ico.org.uk/media/1061/anonymisation-code.pdf
RobinLovelace

1
GPSポイントのシーケンスに対する匿名性とは何ですか?最初/最後のメーターを「切り刻む」とはどういう意味ですか?ポイントのセットをトリミングする(短くする)か、トラックポイントの精度を下げることを意味しますか?
シンバマング

回答:


5

ローカルサイクリンググループと協力して、2つの基準(主にセキュリティ)でGPXファイルを匿名化します。データを匿名化する標準的な方法に出くわしたことはありませんが、これは、道路と速度情報に沿った精度を維持しながら、メンバーの2つの懸念を満たします。

  • 個人の場所、個人用の「プライベート」エリアの削除。
  • 旅行データを使用して個々の動きを識別できないように、タイムスタンプを隠します。

GPSBabelは、コマンドラインからこれらの両方を実行できます。たとえば、GPXファイルの時刻を+123450秒シフトし、タンザニア北部のランドマークから0.5 km離れたすべてのトラックポイントを削除します。

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:プロセストラックのみ。
  • -i-f:入力ファイルタイプ(gpx)およびファイル名。
  • -x:ポイントの周りのタイムシフト(移動)と削除(半径、除外)の2つの連続(-x)フィルター引数。
  • -o-F:出力ファイルの種類とファイル名。

このコマンドは、いくつかのフィルターを連結します。最初にトラックポイントをウェイポイントに変換し、次にフィルタリングしてから、トラックポイントに戻します。

ランドマーク/プライバシーエリアの周囲の小数点以下の桁数を減らすことは、プライバシーエリアの正確な中心を不明瞭にするため、非常に重要であることに注意してください。この場合、小数点以下3桁= 〜110mの精度

私は通常RからGPSBabelを呼び出し、ランダムなタイムシフト+/- 2週間を含むフィルターが適用された新しいGPXファイルを作成します。これはbashまたはpythonスクリプトとしては良いでしょうが、私が行う他の仕事の多くはRであり、私は怠け者です...

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

0

特定の最小オフセットと最大オフセットの間のランダムな距離で、各ポイントのX座標とY座標を調整します。また、オフセットの方向(プラスまたはマイナス)をランダムに選択します。一部のポイントが座標ペアの一方または両方の部分を調整できない場合があることをランダム化に含めます。


0

あなたは運が悪いです、これは非常に難しいです!あなたがそれについて真剣であるなら、あなたはこれがおそらくあなたがしているものであるので、差別的なプライバシーについて読むべきです。

この問題を考えるとき、長い孤立した道の終わりに住んでいる世捨て人の場合を考慮すべきです。GPS座標について何かを行うことができ、その特定の人物については何も明らかにしないと本当に思いますか。ここでの副次的な情報は、1人だけがそこに住んでいることが簡単に発見できるということです。

ユーザーID、時間を取り除き、データポイントにノイズを追加することは、開始するのに適した場所です。しかし問題は、すべてのデータポイントが強く相関しているため、各ポイントにランダムノイズを追加すると、ノイズが相殺され、誰かが可能性のある軌道を導き出すことができるということです。そのため、たとえば弾道全体でノイズを一定にすることにより、ノイズはこの攻撃に耐える必要があります。しかし、その後、軌跡は、おそらく道路などに基づく可能性のあるルートと簡単に一致させることができます。

あなたが最終的にデータを使いたいと思っても何でも使えるかどうかはわかりませんが、少なくとも情熱的な分野です。

PS:法的に受け入れられるかどうかはわかりませんが、差別的なプライバシーの数学的定義があなたが得ることができる最も堅牢なものである一方で、それが動く標的であり国特有であると期待します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.