From 02bd8bfbbf5c27a27bb6e97f21b89e94f1ae8a05 Mon Sep 17 00:00:00 2001 From: Maximilian Blochberger Date: Sat, 12 Jan 2019 22:42:10 +0100 Subject: [PATCH] Add initial version of the white paper --- .gitignore | 5 ++ .latexmkrc | 3 + Makefile | 20 +++++ README.md | 17 +++++ article-content.tex | 140 ++++++++++++++++++++++++++++++++++ article.tex | 135 ++++++++++++++++++++++++++++++++ figures/acn-treemap.tex | 37 +++++++++ figures/filesonly-treemap.tex | 28 +++++++ figures/geolocation.tex | 14 ++++ figures/germany.pdf | Bin 0 -> 40411 bytes figures/germany.svg | 28 +++++++ figures/ip-treemap.tex | 33 ++++++++ figures/metadata-treemap.tex | 33 ++++++++ figures/proxy-treemap.tex | 28 +++++++ references.bib | 84 ++++++++++++++++++++ requirements.txt | 1 + 16 files changed, 606 insertions(+) create mode 100644 .gitignore create mode 100644 .latexmkrc create mode 100644 Makefile create mode 100644 README.md create mode 100644 article-content.tex create mode 100644 article.tex create mode 100644 figures/acn-treemap.tex create mode 100644 figures/filesonly-treemap.tex create mode 100644 figures/geolocation.tex create mode 100644 figures/germany.pdf create mode 100644 figures/germany.svg create mode 100644 figures/ip-treemap.tex create mode 100644 figures/metadata-treemap.tex create mode 100644 figures/proxy-treemap.tex create mode 100644 references.bib create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b29ad1b --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +# Ignore generated files +article.pdf + +# Ignore intermediate files +.tmp/ diff --git a/.latexmkrc b/.latexmkrc new file mode 100644 index 0000000..8179f5e --- /dev/null +++ b/.latexmkrc @@ -0,0 +1,3 @@ +$out_dir = '.tmp'; +$latex = "latex -shell-escape %O %S"; +$pdflatex = "pdflatex -shell-escape %O %S"; diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..27640af --- /dev/null +++ b/Makefile @@ -0,0 +1,20 @@ +TMPDIR=.tmp + +all: article + +article: article.pdf + +article.tmp: article.tex article-content.tex references.bib + latexmk -pdf -interaction=nonstopmode -f $< + +article.pdf: article.tmp + cp $(TMPDIR)/$@ $@ + +check: article.tmp + checkcites --backend biber $(TMPDIR)/article + +clean: + rm -rf $(TMPDIR) + #latexmk -c + +.PHONY: all check clean article diff --git a/README.md b/README.md new file mode 100644 index 0000000..f27b554 --- /dev/null +++ b/README.md @@ -0,0 +1,17 @@ +# Demonstration of Privacy Protection Mechanisms for Document Storage Services + +As privacy protection mechanisms are not necessarily visible to the user it is hard to demonstrate their effectiveness. We present several visualizations, which can be used for that purpose. + + +For the document storage service, see [PrivacyService](https://github.com/AppPETs/PrivacyService). + +## Compilation + +The article can be compiled by running: + +```sh +pip install --upgrade -r requirements.txt +make +``` + +There are also compiled PDF files in the releases section [[Download PDF](https://github.com/AppPETs/VisualizationProtectionMechanisms-Whitepaper/releases/download/v1.0.0/VisualizationProtectionMechanisms-Whitepaper-v1.0.0.pdf)]. diff --git a/article-content.tex b/article-content.tex new file mode 100644 index 0000000..4213d6a --- /dev/null +++ b/article-content.tex @@ -0,0 +1,140 @@ +\begin{abstract} + As privacy protection mechanisms are not necessarily visible to the user it is hard to demonstrate their effectiveness. + We present several visualizations, which can be used for that purpose. +\end{abstract} + +% ------------------------------------------------------------------------------ +\section{Introduction} +Privacy protection mechanisms have to be integrated into applications, frameworks, and services. +Many of these mechanisms work without the user noticing anything. +When such mechanisms are in effect in the background, a demonstration of their effectiveness might prove difficult. + +In this paper we present different visualizaitons that can be used to demonstrate the effectiveness of privacy protection mechanisms for document storage services. +Document storage services can be used by multiple users in order to store their documents or files. +Documents are usually tied to a user's account and are identified uniquely per user by their name and path. +Lots of personal information can be inferred from data stored in such a service. +Operators can abuse this information or it can unintentionally get leaked. +Privacy protection mechanisms can be integrated to protect personal information. + +However, demonstrating the effectiveness of such mechanisms by showing the contents of the database or log entries of the service is hard to comprehend. +We therefore present several visualizations with the aim to make the effect of some protection mechanism more comprehensible. + +\begin{figure*}[ht] + \centering + \input{figures/metadata-treemap.tex} + \caption{Visualizaton of files of different sizes belonging to two user accounts.}% + \label{fig:metadata-treemap} +\end{figure*} + +\begin{figure*}[ht] + \centering + \input{figures/filesonly-treemap.tex} + \caption{Visualizaton of files of different sizes, where the file's owner is not known.}% + \label{fig:filesonly-treemap} +\end{figure*} + +% ------------------------------------------------------------------------------ +\section{Setting} +In order to be able to demonstrate the effectiveness of such protection mechanisms we have developed a document storage, which can imitate a malicious service operator. +This is done by collecting as much information as possible, including traffic data like IP addresses, geolocation of networks, and metadata like file sizes. +The history of each document is preserved, so that even if a client issues a request to delete the document to the service, the serivce operator will still be able to access the file afterwards. +He reports to the client, that the file has been removed, so from the client's perspective the service functions normally. +The document storage is offered as a web service, which can be accessed using a REST-style API. +Each HTTP request will be logged completely. + +As the service including the visualizations or introspection APIs might be publicly accessible on the Internet, this behavior would violate privacy regulations of most countries. +Therefore, the malicious behavior of the service is only enabled if the client opts in by setting the \mintinline{http}{X-AppPETs-BadProvider: 1} HTTP header. +Additional HTTP headers are used to determine ground truth, e.\,g., if the identity of the client is protected by a specific mechanism, the identity can be provided additionally. +This allows to evaluate the accuracy of heuristical inference attacks. + +The visualizations are offered as web pages by the service and supports animations as well as interactions. + +% ------------------------------------------------------------------------------ + +\begin{figure*}[t] + \centering + \input{figures/ip-treemap.tex} + \caption{Visualizaton of files of different sizes, grouped by the sender's IP address.}% + \label{fig:ip-treemap} +\end{figure*} + +\begin{figure*}[t] + \centering + \input{figures/proxy-treemap.tex} + \caption{Visualizaton of files of different sizes, grouped by the sender's IP address. All senders use the same proxy server.}% + \label{fig:proxy-treemap} +\end{figure*} + +\begin{figure*}[t] + \centering + \input{figures/acn-treemap.tex} + \caption{Visualizaton of files of different sizes, grouped by the sender's IP address. The senders use an anonymization service that uses a different IP address for each request.}% + \label{fig:acn-treemap} +\end{figure*} + +\section{Scenarios} +We discuss some selected scenarios and present mock-ups for possible visualizations. + +\subsection{Content and Metadata} +A document storage without privacy protection mechanisms stores the files as they are. +They are tied to the account of the file owner. + +The state of the document storage service can be visualized as a tree map~\cite{DBLP:journals/ivs/GrahamK10}. +The files are rectangular leaf nodes and their size is derived from the file's size. +Files are grouped by the user account of their owner, as depicted in~\cref{fig:metadata-treemap}. +Additional metadata will be displayed when clicking on a file node, such as a preview of the content as well as a link to download the original file. +Metadata of files could be used for further visualizations, in order to demonstrate what a service operator can learn about its users if they have access to the files contents. +Possible visualizations with differing effects on the data subjects (file owners) are presented by \textcite{DBLP:journals/popets/HarkousRKA16,Krause:2017}. + +\subsection{Traffic Data} +We further assume that content and metadata are protected in a way, that the service provider can not link them to specific user accounts, e.\,g., as presented by \textcite{securekeyvaluestorage-whitepaper}. +The file sizes and file identifiers will be kept, so that differences can be spotted. +The same previous visualization method can then not group files per user account anymore, as depicted in~\cref{fig:filesonly-treemap}. + +We assume that the client communicates directly with the service. +A malicious service operator can now link the files by the client's IP address, e.\,g., if Alice has the IP address \texttt{2001:db8::a} and Bob has the IP address \texttt{2001:db8::b}, the grouping can be restored as depicted in~\cref{fig:ip-treemap}. +Note that the server might not know which IP address belongs to Alice or to Bob. +The address can still be used to deduce which files belong to the same user. + +The IP addresses can also be used to see where Alice and Bob where located when they modified or retrieved files. +As depicted in~\cref{fig:geolocation}, Alice interacted with a file 1 in Hamburg, then moved to Berlin and interacted with files 2 and 3. +Bob is located in Nuremberg. +A similar visualization based on EXIF metadata of photos has been proposed by \textcite{Krause:2017}. + +\begin{figure}[h] + \centering + \input{figures/geolocation.tex} + \caption[A map showing the locations where files were uploaded.]{A map\footnotemark\ showing the locations where files were uploaded.}% + \label{fig:geolocation} +\end{figure} +\footnotetext{Map taken from \url{https://pixelmap.amcharts.com}} + +We want to protect the client's IP addresses as well and use two different methods for this purpose to highlight their differences from the service's perspective. +First, the same proxy server with the IP address \texttt{2001:db8::1} is used for all clients, e.\,g., as presented by \textcite{DBLP:conf/icccn/PanchenkoWPA09}. +All users are in the same anonymity group. +The service operator now only sees a single sender IP address, as depicted in~\cref{fig:proxy-treemap}, which is quite similar to~\cref{fig:filesonly-treemap}. +Second, an anonymous communication network is used, e.\,g., Tor or JAP. +It is used in a way, that each request is sent through a different IP address with the prefix \texttt{2001:db8:1}. +The information derived as depicted in~\cref{fig:acn-treemap} cannot be used to reliably link files to either Alice or Bob. + +The problem is not solved however, as different methods can be used to link multiple requests to the same user. +Proxies usually attach additional traffic data that allows linkage, as presented by \textcite{DBLP:journals/corr/PerinoSV16}. +\textcite{DBLP:conf/pet/Eckersley10} present fingerprinting techniques based on HTTP headers, and \textcite{DBLP:journals/ejisec/HusakCJC16} present such techniques for TLS connections. + +% ------------------------------------------------------------------------------ +\section{Demonstrator} +An open source key-value storage service has been implemented in Python, which can be used to store documents\footnote{AppPETs/PrivacyService: Implementation of privacy-friendly services: \url{https://github.com/AppPETs/PrivacyService}}. +Visualizations have been implemented with \textit{D3.js} JavaScript library and are accessible through the service directly. +Not all the proposed visualizations have been implemented as described at the time of writing. +In addition to visualizations an introspection API was added that can be used to retrieve the data collected by the service. +This can be used to realize visualizations on the user's device. + +% ------------------------------------------------------------------------------ +\section{Conclusion} +Several visualizations have been proposed and a demo service was developed which implement some of these visualizations. +A user study should be performed in order to validate that the visualizations are helpful in understanding effects of privacy protection mechanisms on document storage services. + +Additional information could be collected from the client as well, which would allow creating even more helpful visualizations of data processing and data protection mechanisms. +One example of visualizing data flows for an application was proposed by \textcite{DBLP:conf/nordsec/Kani-ZabihiH11}. + +The visualizations presented in this paper as well as visualizations from related work could also be used for interactive privacy policies as they might be able to explain complex data processing and protection mechanisms in a comprehensive manner. diff --git a/article.tex b/article.tex new file mode 100644 index 0000000..33dea45 --- /dev/null +++ b/article.tex @@ -0,0 +1,135 @@ +\documentclass[ + parskip = half, + headings = small, + twocolumn = true, + bibliography = totoc, +]{scrartcl} + +% --- Encoding ----------------------------------------------------------------- +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} + +% --- Language & Regional Formatting ------------------------------------------- +\usepackage[ + main = USenglish, + ngerman, +]{babel} +\usepackage[useregional]{datetime2} + +% --- Bibliography ------------------------------------------------------------- +\usepackage[ + style = numeric-comp, + backend = biber, + urldate = long, +]{biblatex} +\addbibresource{references.bib} + +% --- Document Style ----------------------------------------------------------- +\usepackage{microtype} +\usepackage[binary-units]{siunitx} +\usepackage[autostyle]{csquotes} +\usepackage{lmodern} +\usepackage[light, semibold, scaled = 0.85]{sourcecodepro} +%\usepackage[scaled = 0.85]{sourcecodepro} % PRINT + +\DisableLigatures{encoding = T1, family = tt*} + +\usepackage[ + a4paper, + margin = 2.54cm, + marginparwidth = 2.0cm, + footskip = 1.0cm, +]{geometry} + +\pagestyle{plain} + +\AtBeginEnvironment{abstract}{\itshape} + +% --- TIKZ --------------------------------------------------------------------- +\usepackage{tikz} +\usetikzlibrary{arrows,arrows.meta} +\usepackage{pgf-umlsd} + +\tikzset{every picture/.style={font={\sffamily}}} + +% --- Formulas ----------------------------------------------------------------- +\usepackage{mathtools} + +\DeclarePairedDelimiter{\Paren}{\lparen}{\rparen} +\DeclarePairedDelimiter{\Curly}{\{}{\}} + +\DeclarePairedDelimiterX{\concat}[2]{}{}{% + #1\;\delimsize\|\;#2% +} + +\newcommand{\Function}[2]{#1\Paren*{#2}} +\newcommand{\Tuple}[1]{\Paren*{#1}} +\newcommand{\Set}[1]{\Curly*{#1}} +\def\concat{\;\|\;} + +% --- Listings ----------------------------------------------------------------- +\usepackage[outputdir=.tmp]{minted} + +\setminted{ + autogobble, + breaklines, + tabsize=2, +} + +% --- TODOs -------------------------------------------------------------------- +\usepackage[ + textwidth=\marginparwidth, + textsize=footnotesize, +]{todonotes} + +\presetkeys{todonotes}{fancyline, color=orange!25}{} + +% Taken from `todonotes` documentation +\newcommand\todoin[2][]{% + \todo[ + inline, + caption = {[\ldots]}, + size = \normalsize, + #1 + ]{% + \begin{minipage}{\textwidth-4pt}#2\end{minipage}% + }% +} + +% --- Meta --------------------------------------------------------------------- +\def\DocumentTitle{Demonstration of Privacy Protection Mechanisms for Document Storage Services} + +\author{% + Maximilian Blochberger\\ + \small\texttt{blochberger@informatik.uni-hamburg.de} +} +\title{\DocumentTitle} +\date{\today} + +% --- URLs --------------------------------------------------------------------- +\PassOptionsToPackage{hyphens}{url} +\usepackage[ + bookmarks = true, + bookmarksdepth = 4, + breaklinks, + unicode = true, + pdfdisplaydoctitle, + pdfpagemode = {UseOutlines}, + pdfpagelabels, + pdftitle = {{\DocumentTitle}}, + pdfauthor = {{Maximilian Blochberger}}, + linktoc = all, +]{hyperref} +\usepackage{cleveref} + +% --- Document ----------------------------------------------------------------- +\begin{document} + \maketitle + + \input{article-content} + + \section*{Acknowledgements} + This work was done in the AppPETs project\footnote{\begin{otherlanguage*}{ngerman}AppPETs – Datenschutzfreundliche Smartphone Anwendungen ohne Kompromisse\end{otherlanguage*}: \url{https://app-pets.org}} and supported by the BMBF. + + \printbibliography% +\end{document} diff --git a/figures/acn-treemap.tex b/figures/acn-treemap.tex new file mode 100644 index 0000000..08ba830 --- /dev/null +++ b/figures/acn-treemap.tex @@ -0,0 +1,37 @@ +\begin{tikzpicture} + \draw (0,4) rectangle ++(4.5,.5) node[pos=.5] {\textbf{\texttt{2001:db8:1::1}}}; + \draw[fill=green!15] (0,0) rectangle ++(4.5,4); + \draw[fill=white] (.25,.25) rectangle ++(4,3.5) node[pos=.5] {% + \shortstack{% + File 4\\ + \footnotesize\SI{14}{\mebi\byte} + } + }; + + \draw (4.75,4) rectangle ++(4.5,.5) node[pos=.5] {\textbf{\texttt{2001:db8:1::2}}}; + \draw[fill=blue!15] (4.75,2.5) rectangle ++(4.5,1.5); + \draw[fill=white] (5,2.75) rectangle ++(4,1) node[pos=.5] {% + \shortstack{% + File 1\\ + \footnotesize\SI{4}{\mebi\byte} + } + }; + + \draw (4.75,1.75) rectangle ++(4.5,.5) node[pos=.5] {\textbf{\texttt{2001:db8:1::3}}}; + \draw[fill=red!15] (4.75,0) rectangle ++(4.5,1.75); + \draw[fill=white] (5,.25) rectangle ++(4,1.25) node[pos=.5] {% + \shortstack{% + File 3\\ + \footnotesize\SI{5}{\mebi\byte} + } + }; + + \draw (9.5,4) rectangle ++(2.5,.5) node[pos=.5] {\small\textbf{\texttt{2001:db8:1::4}}}; + \draw[fill=yellow!15] (9.5,1.75) rectangle ++(2.5,2.25); + \draw[fill=white] (9.75,2) rectangle ++(2,1.75) node[pos=.5] {% + \shortstack{% + File 2\\ + \footnotesize\SI{3.5}{\mebi\byte} + } + }; +\end{tikzpicture} diff --git a/figures/filesonly-treemap.tex b/figures/filesonly-treemap.tex new file mode 100644 index 0000000..caa55c9 --- /dev/null +++ b/figures/filesonly-treemap.tex @@ -0,0 +1,28 @@ +\begin{tikzpicture} + %\draw (0,0) rectangle ++(8.75,4); + \draw (.25,.25) rectangle ++(4,3.5) node[pos=.5] {% + \shortstack{% + File 4\\ + \footnotesize\SI{14}{\mebi\byte} + } + }; + \draw (4.5,.25) rectangle ++(1.75,2) node[pos=.5] {% + \shortstack{% + File 2\\ + \footnotesize\SI{3.5}{\mebi\byte} + } + }; + \draw (6.5,.25) rectangle ++(2,2) node[pos=.5] {% + \shortstack{% + File 1\\ + \footnotesize\SI{4}{\mebi\byte} + } + }; + \draw (4.5,2.5) rectangle ++(4,1.25) node[pos=.5] {% + \shortstack{% + File 3\\ + \footnotesize\SI{5}{\mebi\byte} + } + }; +\end{tikzpicture} + diff --git a/figures/geolocation.tex b/figures/geolocation.tex new file mode 100644 index 0000000..8082c42 --- /dev/null +++ b/figures/geolocation.tex @@ -0,0 +1,14 @@ +\begin{tikzpicture} + \node[anchor=south west,inner sep=0] at (0,0) {% + \includegraphics[width=.95\columnwidth]{figures/germany} + }; + + %\draw[help lines,xstep=1,ystep=1] (0,0) grid (8,11); + + \node[draw,thick,fill=green!15] (f1) at (3.5,8) {File 1}; + \node[draw,thick,fill=green!15] (f2) at (6,6.5) {File 2 \& 3}; + + \draw[-{Latex[length=3mm]},thick] (f1) -- (f2); + + \node[draw,thick,fill=red!15] at (4.5,2.5) {File 4}; +\end{tikzpicture} diff --git a/figures/germany.pdf b/figures/germany.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4aa85e54cd3df05c01e3421892c559eec23cc8fe GIT binary patch literal 40411 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 G;{G2{@{%e5 literal 0 HcmV?d00001 diff --git a/figures/germany.svg b/figures/germany.svg new file mode 100644 index 0000000..4d84b9c --- /dev/null +++ b/figures/germany.svg @@ -0,0 +1,28 @@ + + + + JavaScript chart by amCharts 3.21.13 + This map was created using Pixel Map Generator by amCharts and is licensed under the Creative Commons Attribution 4.0 International License. You may use this map the way you see fit as long as proper attribution to the name of amCharts is given in the form of link to http://pixelmap.amcharts.com/ To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/ If you would like to use this map without any attribution, you can acquire a commercial license for the JavaScript Maps - a tool that was used to produce this map. To do so, visit amCharts Online Store: http://www.amcharts.com/online-store/ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/figures/ip-treemap.tex b/figures/ip-treemap.tex new file mode 100644 index 0000000..4547c34 --- /dev/null +++ b/figures/ip-treemap.tex @@ -0,0 +1,33 @@ +\begin{tikzpicture} + % Alice + \draw (0,4.25) rectangle ++(4.5,.5) node[pos=.5] {\textbf{\texttt{2001:db8::a}}}; + \draw[fill=green!15] (0,.25) rectangle ++(4.5,4); + \draw[fill=white] (.25,2) rectangle ++(1.75,2) node[pos=.5] {% + \shortstack{% + File 2\\ + \footnotesize\SI{3.5}{\mebi\byte} + } + }; + \draw[fill=white] (2.25,2) rectangle ++(2,2) node[pos=.5] {% + \shortstack{% + File 1\\ + \footnotesize\SI{4}{\mebi\byte} + } + }; + \draw[fill=white] (.25,.5) rectangle ++(4,1.25) node[pos=.5] {% + \shortstack{% + File 3\\ + \footnotesize\SI{5}{\mebi\byte} + } + }; + + % Bob + \draw (4.75,4.25) rectangle ++(4.5,.5) node[pos=.5] {\textbf{\texttt{2001:db8::b}}}; + \draw[fill=red!15] (4.75,.25) rectangle ++(4.5,4); + \draw[fill=white] (5,.5) rectangle ++(4,3.5) node[pos=.5] {% + \shortstack{% + File 4\\ + \footnotesize\SI{14}{\mebi\byte} + } + }; +\end{tikzpicture} diff --git a/figures/metadata-treemap.tex b/figures/metadata-treemap.tex new file mode 100644 index 0000000..0653cf6 --- /dev/null +++ b/figures/metadata-treemap.tex @@ -0,0 +1,33 @@ +\begin{tikzpicture} + % Alice + \draw (.25,4.25) rectangle ++(4.5,.5) node[pos=.5] {\textbf{Alice}}; + \draw[fill=green!15] (.25,.25) rectangle ++(4.5,4); + \draw[fill=white] (.5,2) rectangle ++(2,2) node[pos=.5] {% + \shortstack{% + File 1\\ + \footnotesize\SI{4}{\mebi\byte} + } + }; + \draw[fill=white] (2.75,2) rectangle ++(1.75,2) node[pos=.5] {% + \shortstack{% + File 2\\ + \footnotesize\SI{3.5}{\mebi\byte} + } + }; + \draw[fill=white] (.5,.5) rectangle ++(4,1.25) node[pos=.5] {% + \shortstack{% + File 3\\ + \footnotesize\SI{5}{\mebi\byte} + } + }; + + % Bob + \draw (5,4.25) rectangle ++(4.5,.5) node[pos=.5] {\textbf{Bob}}; + \draw[fill=red!15] (5,.25) rectangle ++(4.5,4); + \draw[fill=white] (5.25,.5) rectangle ++(4,3.5) node[pos=.5] {% + \shortstack{% + File 4\\ + \footnotesize\SI{14}{\mebi\byte} + } + }; +\end{tikzpicture} diff --git a/figures/proxy-treemap.tex b/figures/proxy-treemap.tex new file mode 100644 index 0000000..e3e4273 --- /dev/null +++ b/figures/proxy-treemap.tex @@ -0,0 +1,28 @@ +\begin{tikzpicture} + \draw (.25,4.25) rectangle ++(8.75,.5) node[pos=.5] {\textbf{\texttt{2001:db8::1}}}; + \draw[fill=green!15] (.25,.25) rectangle ++(8.75,4); + \draw[fill=white] (.5,.5) rectangle ++(4,3.5) node[pos=.5] {% + \shortstack{% + File 4\\ + \footnotesize\SI{14}{\mebi\byte} + } + }; + \draw[fill=white] (4.75,2) rectangle ++(1.75,2) node[pos=.5] {% + \shortstack{% + File 2\\ + \footnotesize\SI{3.5}{\mebi\byte} + } + }; + \draw[fill=white] (6.75,2) rectangle ++(2,2) node[pos=.5] {% + \shortstack{% + File 1\\ + \footnotesize\SI{4}{\mebi\byte} + } + }; + \draw[fill=white] (4.75,.5) rectangle ++(4,1.25) node[pos=.5] {% + \shortstack{% + File 3\\ + \footnotesize\SI{5}{\mebi\byte} + } + }; +\end{tikzpicture} diff --git a/references.bib b/references.bib new file mode 100644 index 0000000..3b0aa9b --- /dev/null +++ b/references.bib @@ -0,0 +1,84 @@ +@article{DBLP:journals/popets/HarkousRKA16, + author = {Hamza Harkous and Rameez Rahman and Bojan Karlas and Karl Aberer}, + journal = {PoPETs}, + number = {4}, + pages = {123--143}, + title = {The Curious Case of the {PDF} Converter that Likes Mozart: Dissecting and Mitigating the Privacy Risk of Personal Cloud Apps}, + volume = {2016}, + year = {2016}, +} + +@inproceedings{DBLP:conf/nordsec/Kani-ZabihiH11, + author = {Elahe Kani{-}Zabihi and Martin Helmhout}, + booktitle = {NordSec}, + pages = {131--148}, + publisher = {Springer}, + series = {Lecture Notes in Computer Science}, + title = {Increasing Service Users' Privacy Awareness by Introducing On-Line Interactive Privacy Features}, + volume = {7161}, + year = {2011} +} + +@article{DBLP:journals/ivs/GrahamK10, + author = {Martin Graham and Jessie B. Kennedy}, + journal = {Information Visualization}, + number = {4}, + pages = {235--252}, + title = {A survey of multiple tree visualisation}, + volume = {9}, + year = {2010}, +} + +@inproceedings{DBLP:conf/icccn/PanchenkoWPA09, + author = {Andriy Panchenko and Benedikt Westermann and Lexi Pimenidis and Christer Andersson}, + booktitle = {{ICCCN}}, + pages = {1--7}, + publisher = {{IEEE} Computer Society}, + title = {{SHALON:} Lightweight Anonymization Based on Open Standards}, + year = {2009} +} + +@article{DBLP:journals/corr/PerinoSV16, + author = {Diego Perino and Claudio Soriente and Matteo Varvello}, + journal = {CoRR}, + title = {Your Are \enquote{Proxy} And {I} Know It}, + volume = {abs/1612.06126}, + year = {2016}, +} + +@article{DBLP:journals/ejisec/HusakCJC16, + author = {Martin Hus{\'{a}}k and Milan Cerm{\'{a}}k and Tom{\'{a}}s Jirs{\'{\i}}k and Pavel Celeda}, + journal = {{EURASIP} J. Information Security}, + pages = {6}, + title = {{HTTPS} traffic analysis and client identification using passive {SSL/TLS} fingerprinting}, + volume = {2016}, + year = {2016}, +} + +@inproceedings{DBLP:conf/pet/Eckersley10, + author = {Peter Eckersley}, + booktitle = {Privacy Enhancing Technologies}, + pages = {1--18}, + publisher = {Springer}, + series = {Lecture Notes in Computer Science}, + title = {How Unique Is Your Web Browser?}, + volume = {6205}, + year = {2010}, +} + +@techreport{securekeyvaluestorage-whitepaper, + author = {Maximilian Blochberger}, + month = {1}, + title = {Key-value Storage with Cryptographic Client-separation}, + type = {White paper}, + url = {https://github.com/AppPETs/SecureKeyValueStorage-Whitepaper}, + year = {2019}, +} + +@online{Krause:2017, + author = {Felix Krause}, + month = {10}, + title = {iOS Privacy: detect.location - An easy way to access the user's iOS location data without actually having access}, + url = {https://krausefx.com/blog/ios-privacy-detectlocation-an-easy-way-to-access-the-users-ios-location-data-without-actually-having-access}, + year = {2017}, +} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..b23d774 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +Pygments