レジデント準備完了 静的コンパニオン
kari_mikumao 研究室

Systems

Mirai Guide:誰も追跡せずに「どこから来たか」の地球儀を作る

3つに分けた端末の識別子、署名前に丸める約100kmのセル、そしてデプロイを止める利用状況の開示。

  • mirai-guide
  • プライバシー
  • 暗号

企画展には、来場者がどこから来たかにピンを刺す壁の地図があります。あの壁が昔から好きです。通りかかると、みんながどれだけ遠くから来たのかが見えます。

そのデジタル版が、来場者1人につき1つの点を、選んだキャラクターの色で表示する回転する地球儀です。

作るにあたって、壁の地図には要らなかった問いに答える必要がありました。その端末がこれまで発したすべてを地理的に特定可能にせずに、「出身地」をどう集めるか。

意図的に分けた3つの識別子

端末はすでに2つの鍵を持っていました。

Ed25519の報告鍵は在庫報告に署名し、その報告者ハッシュは在庫・行列・快適さのピンなど、その端末が出したすべてに横串で残ります。もう1つ、テレメトリのインストールIDがあり、位置情報は収集しないと約束する開示文が公開されています。

出身地をどちらに結びつけても何かが壊れます。報告鍵で「ソウルから来た」に署名すれば、その端末の過去の在庫報告すべてが、同じ表空間で地理的に特定可能になります。インストールIDに付ければ、これから公開する開示文と矛盾します。

そこで地球儀には、最初のピンで生成する3つ目の鍵ペアを与えました。

代償は現実にあって、受け入れています。コミュニティ面は報告面から信頼の履歴を引き継ぎません。ここではそれで構いません。重み付けすべき合意はなく、あるのは存在だけだからです。

署名の前に、構造として粗く

通信ペイロードに生のタップ位置は決して入りません。

クライアントは署名の前に、およそ100km四方の固定グローバルグリッドへ位置を丸めます。送られるのはセルIDだけです。表示する重心はセルIDから導き、誰かのタップからは導きません。

グリッドは緯度1度×(1度÷緯度の余弦)の経度なので、極付近で細長く潰れずに面積がほぼ等しく保たれます。セルIDにはバージョン接頭辞が付くので、古い行を黙って読み替えることなく方式を変えられます。

本当に大事なのはこの性質です。点は常に「このセルのどこか」を意味し、「この人の町」は意味しません。しかもそれは、表が漏れても成り立ちます。

これがプライバシーポリシーと、プライバシーの性質との違いです。片方は約束で、もう片方はデータについての事実です。

集計は存在のみで、全体の合計とセルごとの合計だけです。キャラクター別の内訳はどこにもなく、成果物の件数には上限があります。キャラクターの語彙は既存のロスター表から複製せずに導出した閉じた集合で、キーとローカライズ名は単一の出所を保ち、サーバーが検証します。

開示文がデプロイを止める

商品ごとの購入事実を集めるようになったことで、利用状況の開示に書くべき内容が変わりました。そこで開示自体をリリースのゲートにしました。提供するすべての言語でその節が公開されるまで、機能は本番に出ません。

開示にはこう書いてあります。IDは匿名で群衆報告とは紐づかないこと。商品ごとの購入事実を収集すること。第二の目的が在庫予測のためのコーパスなので、データがイベント後も保持されること。収集しないもの(身元、カートの中身、価格、位置情報、検索語)。そして運営が収集を停止できること。

保持についての一文は、定型文なら書き落とすところです。そして、第二の目的を誠実にしている一文でもあります。