【HotOS XVIII】ユーザ削除にも対応可能なプライバシー保護技術
TL;DR
プライバシー保護のためにRDBに適用する変換のフレームワークとツールの提案
匿名化やユーザ削除によってユーザに紐づくデータの依存や取り扱いをどのように行うか体系的に議論
はじめに
本文
GDPRやCCPAといった規制への準拠、あるいはユーザの希望に沿って、アカウント削除や投稿の匿名化といった対応が求められることがある。本論文では、そのようなプライバシー保護を実現する変換を実装を行う体系的な共有フレームワークとしてDisguiseという操作を提案している。
本論文で扱うDisguiseはDBに保存されている実際のデータを変換する。この点では、承認に基づくviewやアクセス制御されたユーザごとにviewを用意する情報フロー制御のアプリーチとは異なる手法といえる。またk匿名性、l-多様性のような統計的なプライバシー保証は後述のプライバシー保護仕様における述語が差分プライバシーに基づく場合があり、補完的な役割を果たすとしている。
論文中では国際会議のレビュープロセスを管理するソフトウェアであるHotCRPを題材に議論が進められている。以下の図はBeaを匿名化し、BeaのレビューをAxolotlとFossaのレビューにする例だ。 https://gyazo.com/16129f590e451ea1a3e7b0758b5e14b4
本論文ではアプリケーションコードを変更することなく、Disguiseを実現するツールEdnaを実装している。Ednaを利用する開発者は以下のようなプライバシー保護の仕様を定義する。EdnaはDBに必要な変更を計算し、適用するものだ。
https://gyazo.com/6c91964684689bf8c544903f5e2a6319
Disguiseのようなデータ自体を変換するアプローチの難しさは、依存するデータの取り扱いだ。例えばユーザアカウントを削除した場合、ユーザアカウントに紐づくすべてのデータを推移的に削除するか、投稿を保持したままにするかを要件として選択する必要がある。後者もさらに細分化され、例えばプライベートメッセージではメッセージの共有性のため匿名化をせず、受信者に表示し続ける。一方、Githubの@ghostは公開投稿を表示したまま匿名化する方式だ。所有者を削除しながらレビューを保持するためには、匿名化と削除を組み合わせたポリシーが必要で、Ednaではそのような変換にも対応している。
本論文ではその他にもVaultsというDisguise操作の逆変換についても述べられている。プライバシー保護仕様適用時に、Disguise操作を元に戻すようなreveal関数を定義し、Vaultに格納しておくことで、ユーザ削除後に元に戻せるようにする仕組みだ。規制の内容によっては準拠から外れることもあるとしつつ、サービスによってはユーザの復帰を用意にすることが要件になることもあり、そのような場合には有用としている。
終わりに
一口にユーザの削除や匿名化といっても、サービスやシステム上で取り扱うデータはユーザに紐付いたものも多い。本論文では、そういった関連データの取り扱いを整理して扱っており、開発者が実装する難しさとそれを代理してくれるツールの便利さを感じた。本論文の論理展開はRustのメモリ管理のそれと似たような雰囲気のある進め方で、実装にRustを用いていることもその一片であるように感じた。(文責・恩田) Appendix
便利なポリシーの例
cipepser.icon あまり採用はされていないらしい
Reversible account deletion
GDPRはユーザ退会時に完全な削除に重点
弱い実装(GDPRを満たしていない)
DBにデータを保持し続ける
データ侵害のリスクを飲む
強い実装
レコードをオフラインストレージに保存
暗号化してユーザ自身や承認されたサードパーティストレージに保存
Expiration
有効期限を設け、長時間非アクティブなユーザ投稿を匿名化/サニタイズ
Data decay
古いデータにおけるfidelityが徐々に失われると、履歴情報を保持しなければならない
機密ではあるが、ユーザデータが古くなる場合
変換の要件と操作
変換を適用時、ストレージ内のアプリケーションデータの整合性を維持する必要がある
非相関化によって参照整合性が崩れる可能性
外部キーがdanglingするなど
データの偽装を構成する3つの変換操作
データの削除
オブジェクトコンテンツの変更
オブジェクト間の参照を変換することによる非相関
Edna
Rust実装
スキーマの各テーブルを一連の述語と変換のペアに関連付け
述語
任意のSQL SHERE句
laysakura.icon SHERE? WHERE?
変換する行の選択に使う
変換
特定の外部キーの削除
非相関
実体は、カラムのvalueを更新するようなクロージャを渡す