diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b9624eabacc29e6fdc9a658015c0df54f997eef..04f8e34379cf964c90e7dc73b91dbab6b7dddc4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,8 +4,8 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). -## [1.0.0] - 2017-12-07 +## [0.0.1] - 2018-02-06 ### Added -- First release +- First commit diff --git a/definitions.tex b/definitions.tex index 1f78ddc57e71b3eeb8d4762fb6b46b2e0b549754..4c8b346d5b1d630b1473d3351c9cf09b161f939f 100644 --- a/definitions.tex +++ b/definitions.tex @@ -31,3 +31,13 @@ \makeatletter \newcommand{\manuallabel}[2]{\def\@currentlabel{#2}\label{#1}} % chktex 21 \makeatother + +\newcommand\blfootnote[1]{% + \begingroup + \renewcommand\thefootnote{}\footnote{#1}% + \addtocounter{footnote}{-1}% + \endgroup +} + +\newcommand\Fontvi{\fontsize{6}{7.2}\selectfont} + diff --git a/diagrams/protocol.tex b/diagrams/protocol.tex deleted file mode 100644 index b26cc5c86dbf30b447da74768b8e6b6a05e2211b..0000000000000000000000000000000000000000 --- a/diagrams/protocol.tex +++ /dev/null @@ -1,114 +0,0 @@ -\newcommand{\lockedData}{$\text{\lock}_\text{block}$} - -\begin{tikzpicture}[ - every node/.append style={minimum width=3em,minimum height=1.5em}, - align=center, - >=latex -] - - \node[ - inner sep=0, - outer sep=0, - scale=0.01 - ] (fake) {}; - - \node[ - below=of fake, - label={above:{\small Position table}}, - scale=0.75 - ] (table) { - - \begin{tabular}{ l | c } - - Block ID & Leaf ID \\ - - \midrule% - - 5 & 6 \\ - 6 & 8 \\ - 7 & 1 - - \end{tabular} - - }; - - \node[ - label={\small Stash}, - below=of table, - ] (stash) { - - $\{ 3, 5, 7, 13, \ldots \}$ - - }; - - \node[ - label={Client}, - fit=(fake)(table)(stash), - draw - ] (client) { }; - - \node[ - label={User}, - right=6.0 of client.north, - ] (user) { - \Huge \user - }; - - \node[ - label={Server}, - right=7.0 of client.south, - anchor=south, - draw - ] (server) { - - \Tree - [.\node[rounded corners, draw]{\lockedData}; - [.\node[rounded corners, draw]{\lockedData}; - [.\node[rounded corners, draw]{\lockedData}; ] - [.\node[rounded corners, draw]{\lockedData}; ] - ] - [.\node[rounded corners, draw]{\lockedData}; - [.\node[rounded corners, draw]{\lockedData}; ] - [.\node[rounded corners, draw]{\lockedData}; ] - ] - ] - - }; - - \uncover<2->{ - \draw[ - shorten >=\pgflinewidth, - -> - ] (user.west) -- node[sloped, anchor=center, above] {\scriptsize $\textsc{Access}(id)$} (client.north east); - } - - \uncover<6->{ - \draw[ - shorten >=\pgflinewidth, - <- - ] ([yshift=-3.0]user.west) -- node[sloped, anchor=center, below] {\scriptsize Return $data$} ([yshift=-3.0]client.north east); - } - - \uncover<3->{ - \draw[ - shorten >=\pgflinewidth, - <- - ] (server.north west) -- node[sloped, anchor=center, above] {\scriptsize Read path} (client.east); - } - - \uncover<4->{ - \draw[ - shorten >=\pgflinewidth, - -> - ] ([yshift=-3.0]server.north west) -- node[sloped, anchor=center, below] {\scriptsize Return path} ([yshift=-3.0]client.east); - } - - \uncover<5->{ - \draw[ - shorten >=\pgflinewidth, - -> - ] (client.south east) -- node[sloped, anchor=center, above] {\scriptsize Write path} (server.south west); - } - -\end{tikzpicture} - diff --git a/example/definitions.tex b/example/definitions.tex deleted file mode 100644 index 066aef01adb6cc9ffc64ff69083344f807c15250..0000000000000000000000000000000000000000 --- a/example/definitions.tex +++ /dev/null @@ -1,74 +0,0 @@ -% cSpell:disable - -\DeclareDocumentCommand% - {\oramNode} - { O{$\varnothing$} O{$\varnothing$} O{$\varnothing$} } - {#1, #2, #3} - -\newif\ifselected% -\newif\ifpathread% - -\newif\ifnodeonenew% -\newif\ifnodetwonew% -\newif\ifnodethreenew% -\newif\ifnodefournew% - -% -% 1 - caption -% -\newcommand% - {\drawTree} - [1] - { - \begin{figure} - \centering - - \input{example/tree} - \caption{#1} - \end{figure} - } - -% -% 1- map - default initial -% 2 - caption -% -\newcommand% - {\drawMap} - [2] - [initial] - { - \begin{figure} - \centering - - \input{example/#1-map} - \caption{#2} - \end{figure} - } - -% -% 1 - frame name -% 2 - settings -% 3 - upper block -% 4 - lower block -% 5 - notes -% -\newcommand% - {\exampleFrame} - [5] - { - \begin{frame}{#1} - - #2 - - #3 - - \vspace{-12pt} - - #4 - - \note{ - #5 - } - - \end{frame} - } diff --git a/example/final-map.tex b/example/final-map.tex deleted file mode 100644 index 9de7b0efc9ea3735d839fb3d9ff9d6f4157d9700..0000000000000000000000000000000000000000 --- a/example/final-map.tex +++ /dev/null @@ -1,11 +0,0 @@ -% cSpell:ignore textcolor - -\begin{tabular}{ l | *{9}{c} } % chktex 44 - - Block ID & 1 & 2 & 3 & 4 & \textcolor{red}{$5$} & 6 & $\ldots$ & 37 \\ - - \midrule% - - Leaf ID & 6 & 5 & 5 & 1 & \textcolor{red}{$3$} & 5 & $\ldots$ & 7 \\ - -\end{tabular} diff --git a/example/initial-map.tex b/example/initial-map.tex deleted file mode 100644 index d29e883289250c1b92f4b10bf424a145d161ff10..0000000000000000000000000000000000000000 --- a/example/initial-map.tex +++ /dev/null @@ -1,31 +0,0 @@ -% cSpell:ignore ifpathread ifselected textcolor - -\newcommand% - {\blockFive} - { - \ifselected% - \textcolor{red}{$5$} - \else% - $5$ - \fi% - } - -\newcommand% - {\leafSix} - { - \ifselected% - \textcolor{red}{$6$} - \else% - $6$ - \fi% - } - -\begin{tabular}{ l | *{9}{c} } % chktex 44 - - Block ID & 1 & 2 & 3 & 4 & \blockFive & 6 & $\ldots$ & 37 \\ % chktex 1 - - \midrule% - - Leaf ID & 6 & 5 & 5 & 1 & \leafSix & 5 & $\ldots$ & 7 \\ % chktex 1 - -\end{tabular} diff --git a/example/tree.tex b/example/tree.tex deleted file mode 100644 index c73824c1c68d4738978be725c27488a9f2a3371d..0000000000000000000000000000000000000000 --- a/example/tree.tex +++ /dev/null @@ -1,109 +0,0 @@ -% cSpell:ignore ifpathread ifselected textcolor ifnodeonenew ifnodetwonew ifnodethreenew ifnodefournew - -\newcommand% - {\blockFive} - { - \ifselected% - \textcolor{red}{$5$} - \else% - $5$ - \fi% - } - -\newcommand% - {\leafSix} - { - \ifselected% - \textcolor{red}{$6$} - \else% - $6$ - \fi% - } - -\ifpathread% - \newcommand{\selectedNode}{blue} -\else% - \newcommand{\selectedNode}{black} -\fi% - -\newcommand% - {\nodeLevelOne} - { - \ifnodeonenew% - \oramNode[\textcolor{blue}{$8$}][\textcolor{blue}{$7$}][\textcolor{blue}{$1$}] - \else% - \oramNode[$7$][$13$][$15$] - \fi% - } - -\newcommand% - {\nodeLevelTwo} - { - \ifnodetwonew% - \oramNode[\textcolor{blue}{$2$}][\textcolor{blue}{$10$}][\textcolor{blue}{$15$}] - \else% - \oramNode[$2$][\blockFive][$8$] - \fi% - } - -\newcommand% - {\nodeLevelThree} - { - \ifnodethreenew% - \oramNode[\textcolor{blue}{$13$}] - \else% - \oramNode[$10$][$1$] - \fi% - } - -\newcommand% - {\nodeLevelFour} - { - \ifnodefournew% - \oramNode[\textcolor{blue}{$5^\prime$}] - \else% - \oramNode% - \fi% - } - -\begin{tikzpicture}[scale=0.8] - \Tree - [.\node[rounded corners, draw/.expand once=\selectedNode]{\nodeLevelFour}; - [.\node[rounded corners, draw]{\oramNode[$4$]}; - [.\node[rounded corners, draw]{\oramNode[$12$][$17$][$36$]}; - [.\node[rounded corners, draw]{\oramNode[$22$][$23$]}; - 1 - ] - [.\node[rounded corners, draw]{\oramNode[$26$][$28$][$30$]}; - 2 - ] - ] - [.\node[rounded corners, draw]{\oramNode[$24$][$29$][$33$]}; - [.\node[rounded corners, draw]{\oramNode[$27$][$31$][$35$]}; - 3 - ] - [.\node[rounded corners, draw]{\oramNode[$34$][$32$][$21$]}; - 4 - ] - ] - ] - [.\node[rounded corners, draw/.expand once=\selectedNode]{\nodeLevelThree}; - [.\node[rounded corners, draw/.expand once=\selectedNode]{\nodeLevelTwo}; - [.\node[rounded corners, draw]{\oramNode[$3$][$6$][$11$]}; - 5 - ] - [.\node[rounded corners, draw/.expand once=\selectedNode]{\nodeLevelOne}; - \node[]{\leafSix}; - ] - ] - [.\node[rounded corners, draw]{\oramNode[$9$][$13$][$37$]}; - [.\node[rounded corners, draw]{\oramNode[$20$][$14$][$16$]}; - 7 - ] - [.\node[rounded corners, draw]{\oramNode[$25$][$18$][$19$]}; - 8 - ] - ] - ] - ] -\end{tikzpicture} diff --git a/main.tex b/main.tex index 6d557e440c97ecd20d726910da97a615661af1cf..7e157a0c08642756e5422950a2ccfcf8de9a5050 100644 --- a/main.tex +++ b/main.tex @@ -1,6 +1,6 @@ % cSpell:ignore bibfile -\documentclass{beamer} +\documentclass{beamer}[8pt] \usetheme[ progressbar=frametitle, @@ -21,37 +21,7 @@ \maketitle - \begin{frame}{Table of Contents} - - \begin{multicols}{2} - - \tableofcontents - - \end{multicols} - - \note{ - \begin{itemize} - \item - Start with the problem statement. - What an ORAM is and why we need it. - \item - Talk about what ORAMs are already there and what their disadvantages are. - \item - Then go in the same order as paper goes. - \end{itemize} - } - \end{frame} - - \input{sections/oblivious-memory} - \input{sections/overview-of-other-orams} - \input{sections/problem-definition} - \input{sections/path-oram-protocol} - \input{sections/example} - \input{sections/recursion-and-parametrization} - \input{sections/bounds-on-stash-usage} - \input{sections/evaluation} - \input{sections/applications-and-extensions} - \input{sections/conclusion} + \input{sections/all-sections} \maketitle @@ -60,9 +30,5 @@ \printbibliography% \end{frame} - - \appendix - - \input{sections/appendix} \end{document} diff --git a/sections/all-sections.tex b/sections/all-sections.tex new file mode 100644 index 0000000000000000000000000000000000000000..d105c34fcf91d0cd0afbe6f56598d355090ebb3d --- /dev/null +++ b/sections/all-sections.tex @@ -0,0 +1,146 @@ +% cSpell:ignore DBLP + +\begin{frame}{Disclaimer} + + \begin{alertblock}{Disclaimer} + Academic dishonesty in any form is strongly discouraged! + \end{alertblock} + +\end{frame} + +\section{Intro} + + \begin{frame}{The plan} + + We are going to cover the following + + \begin{itemize} + \item + Formal definition + \item + Types of academic dishonesty + \begin{itemize} + \item + How to avoid + \end{itemize} + \item + Prosecution mechanisms + \item + Interesting cases + \end{itemize} + + \end{frame} + + \begin{frame}{Definition} + + \begin{block}{Definition} + \textbf{Academic dishonesty} or academic misconduct is \emph{any} type of cheating that occurs in relation to a formal academic exercise.\blfootnote{ + \url{http://www.berkeleycitycollege.edu/wp/de/what-is-academic-dishonesty/} + } + \end{block} + + \end{frame} + + \begin{frame}{Types of misconduct} + + \begin{description} + \item[Plagiarism] + The adoption or reproduction of ideas or words or statements of another person without due acknowledgment. + \item[Fabrication] + The falsification of data, information, or citations in any formal academic exercise. + \item[Deception] + Providing false information to an instructor concerning a formal academic exercise. + \item[Cheating] + Any attempt to give or obtain assistance in a formal academic exercise (like an examination) without due acknowledgment. + \item[Sabotage] + Acting to prevent others from completing their work. + \end{description}\blfootnote{ + \url{http://www.berkeleycitycollege.edu/wp/de/what-is-academic-dishonesty/} + } + + \end{frame} + +\section{Plagiarism} + + \begin{frame}{Plagiarism} + + \begin{block}{Definition} + Representing the work of another as one’s own.\blfootnote{ + \url{https://www.bu.edu/academics/policies/academic-conduct-code/} + } + \end{block} + + \end{frame} + + \begin{frame}{Plagiarism} + + Includes, but not limited to + + \begin{itemize} + \item + Submitting someone's work as your own + \item + Using quotations, but not citing the source + \item + Copying so many words or ideas from a source that it makes up the majority of your work, whether you give credit or not + \item + Giving incorrect information about the source of a quotation + \item + $\ldots$ + \end{itemize}\blfootnote{ + \url{http://www.plagiarism.org/article/what-is-plagiarism} + }\blfootnote{ + \url{https://en.wikipedia.org/wiki/Plagiarism\#Common\_forms\_of\_student\_plagiarism} + } + + \end{frame} + + \begin{frame}{Plagiarism} + + Some caveats + + \begin{itemize} + \item + Self-plagiarism + \item + Common knowledge + \item + Copyrighted material + \item + Paraphrasing + \item + $\ldots$ + \end{itemize} + + \end{frame} + + \begin{frame}{Plagiarism} + + Preventing plagiarism + + \begin{itemize} + \item + Consult with your instructor + \item + When in doubt, cite sources + \item + Know how to paraphrase + \begin{itemize} + \item + change both the words and the sentence structure + \item + still requires citing! + \end{itemize} + \item + Analyze and evaluate your sources + \begin{itemize} + \item + Make sure you are citing the \emph{original} source + \end{itemize} + \item + $\ldots$ + \end{itemize}\blfootnote{ + \url{http://www.plagiarism.org/article/preventing-plagiarism-when-writing} + } + + \end{frame} diff --git a/sections/appendix.tex b/sections/appendix.tex deleted file mode 100644 index 59384755a6edae1a95e8ffad3547798510931224..0000000000000000000000000000000000000000 --- a/sections/appendix.tex +++ /dev/null @@ -1,71 +0,0 @@ -% cSpell:ignore DBLP manuallabel Stefanov - -\begin{frame}{Max stash size grows linearly with $\lambda$} - - \begin{center} - - \begin{figure}\manuallabel{fig:max-stash-size-linear}{figure} - - \includegraphics[ - height=5cm, - keepaspectratio - ]{static/images/max-stash-size-linear.png} - - \end{figure} - - \end{center} - - Figure 3 from~\cite{Stefanov:2013:POE:2508859.2516660}. - -\end{frame} - -\begin{frame}{Max stash size for large security parameters} - - \begin{center} - - \begin{figure}\manuallabel{tbl:stash-size-for-sec-parameters}{table} - - \begin{tabular}{ l c c c } - - \toprule% - - \multirow{3}{*}{\textbf{Security parameter} $\lambda$} & \multicolumn{3}{c}{\textbf{Bucket size} $Z$} \\ - & 4 & 5 & 6 \\ - & \multicolumn{3}{c}{\textbf{Max stash size}} \\ - - \midrule% - - 80 & 89 & 63 & 53 \\ - 128 & 147 & 105 & 89 \\ - 256 & 303 & 218 & 186 \\ - - \bottomrule% - - \end{tabular} - - \end{figure} - - \end{center} - - Figure 5 from~\cite{Stefanov:2013:POE:2508859.2516660}. - -\end{frame} - -\begin{frame}{Max stash size does not depend on $N$} - - \begin{center} - - \begin{figure}\manuallabel{fig:stash-size-does-not-depend-on-n}{figure} - - \includegraphics[ - height=5cm, - keepaspectratio - ]{static/images/stash-size-does-not-depend-on-n.png} - - \end{figure} - - \end{center} - - Figure 4 from~\cite{Stefanov:2013:POE:2508859.2516660}. - -\end{frame} diff --git a/sections/applications-and-extensions.tex b/sections/applications-and-extensions.tex deleted file mode 100644 index b1f426bf7c58e5fdc094a894a7a6dc2da014f410..0000000000000000000000000000000000000000 --- a/sections/applications-and-extensions.tex +++ /dev/null @@ -1,60 +0,0 @@ -% cSpell:ignore DBLP FPGAs -% cSpell:ignoreRegExp /textcite{.*}/ -% cSpell:ignoreRegExp /cite{.*}/ - -\section{Applications and extensions} - - \begin{frame}{Oblivious Binary Search Tree} - - PathORAM can be used to perform search on an oblivious binary search tree, using $\BigO{\log^2 N}$ bandwidth.~\cite{Gentry:2013} - - \note{ - \textcite{Gentry:2013} suggested that ORAMs can be used to perform search on an oblivious binary search tree. - - Underlying data structure for PathORAM is an oblivious binary tree. - One \textsc{Access} for the ORAM is equivalent to binary tree search. - This way, without re-randomization and write back subroutine, PathORAM \textsc{Access} is the same as binary search. - Thus, the bandwidth is $\BigO{\log^2 N}$. - } - \end{frame} - - \begin{frame}{Stateless ORAM} - - In order to avoid complicated (and possibly expensive) oblivious state synchronization between the clients, \citeauthor{DBLP:journals/corr/abs-1105-4125} introduce the concept of stateless ORAM~\cite{DBLP:journals/corr/abs-1105-4125} where the client state is small enough so that any client accessing the ORAM can download it before each data access and upload it afterwards. - - \note{ - If we are using recursive PathORAM, we can upload and download client state --- which is $\BigO{\log N} \cdot \omega (1)$ --- before each access. - This way we can build a \emph{stateless} ORAM --- potentially, multi-user ORAM\@. - } - \end{frame} - - \begin{frame}{Secure Processors} - - PathORAM is particularly amenable to hardware design because of its simplicity and low on-chip storage requirements. - - \textcite{Maas:EECS-2014-89} built a hardware implementation of a PathORAM based secure processor using FPGAs and the Convey platform. % chktex 8 - - \textcite{Fletcher:2012:SPA:2382536.2382540, fletcher2013ascend} and \textcite{ren2013design} built a simulator for a secure processor based on PathORAM\@. - - \note{ - Due to its simplicity, PathORAM is particularly good for silicon implementations. - For example, \textcite{Maas:EECS-2014-89} has build such implementation using FPGAs. % chktex 8 - \textcite{Fletcher:2012:SPA:2382536.2382540} and \textcite{ren2013design} built a simulator for a processor based on PathORAM\@. - } - \end{frame} - - \begin{frame}{Integrity} - - The protocol can be easily extended to provide integrity (with freshness) for every access to the untrusted server storage. - - We can achieve integrity by simply treating the PathORAM tree as a \emph{Merkle tree} where data is stored in all nodes of the tree. - - \[ - H (b_1 || b_2 || \ldots || b_Z || h_1 || h_2 ) - \] - - \note{ - It is possible to treat PathORAM internal tree structure as a Merkle tree. - Each node is tagged with the hash of the following form, which is a concatenation of hashes of all blocks in the bucket, and the children of the node. - } - \end{frame} diff --git a/sections/bounds-on-stash-usage.tex b/sections/bounds-on-stash-usage.tex deleted file mode 100644 index 5e2c4a0f7cb8e187dce8a10253db1819adbef29b..0000000000000000000000000000000000000000 --- a/sections/bounds-on-stash-usage.tex +++ /dev/null @@ -1,50 +0,0 @@ -\section{Bounds on stash usage} - - \begin{frame}{Probability of failure is negligible} - - \begin{block}{Main theorem} - - Let $\bm{a}$ be any sequence of block addresses with a working set of size at most $N$. - For a bucket size $Z = 5$, tree height $L = \ceil{\log N}$ and stash size $R$, the probability of a PathORAM failure after a sequence of load/store operations corresponding to $\bm{a}$, is at most - - \[ - \Pr \left[ \text{st} \left( \text{ORAM}_L^5 [ \bm{s} ] \right) > R \; | \; a( \bm{s} ) = \bm{a} \right] \le 14 \cdot (0.6002)^R - \] - - where the probability is over the randomness that determines $\bm{x}$ and $\bm{y}$ in $\bm{s = (a, x, y)}$. - - \end{block} - - \note{ - The whole proof of negligible failure probability is about proving this theorem. - It might look complex, but simply put, what it says is that for any ORAM with 5 blocks per bucket, stash usage exceeds some stash size $R$ with probability at most exponentially small with respect to $R$. - - Or, even simpler, the probability of exceeding stash capacity decreases exponentially with the stash size, given that the bucket size $Z$ is large enough. - - The authors prove this theorem in three steps. - } - \end{frame} - - \begin{frame}{Probability of failure is negligible} - - \begin{block}{Proof outline} - - \begin{enumerate} - \item - Introduce a second ORAM, called $\infty$-ORAM - \item - Characterize the distributions of real blocks over buckets in a $\infty$-ORAM for which post-processing leads to a stash usage $> R$ - \item - Analyze the usage of subtrees $T$ (introduced in the proof) - \end{enumerate} - - \end{block} - - \note{ - First, they introduce a second ORAM, called $\infty$-ORAM, together with an algorithm that post-processes the stash and buckets of $\infty$-ORAM in such a way that the blocks over buckets distribution of $\infty$-ORAM and real ORAM are the same. - - Second, they show that the stash usage after post-processing is $> R$ if and only if there exists a subtree $T$ for which its ``usage'' in $\infty$-ORAM is more than its ``capacity''. - - Finally, they show how a mixture of binomial and geometric probability distributions expresses the probability of the number of real blocks that do not get evicted from a subtree after a sequence of load/store operations. - } - \end{frame} diff --git a/sections/conclusion.tex b/sections/conclusion.tex deleted file mode 100644 index 565a3eba44b79cc0b99a74bae18438bdb1025dc5..0000000000000000000000000000000000000000 --- a/sections/conclusion.tex +++ /dev/null @@ -1,22 +0,0 @@ -% cSpell:ignore DBLP Stefanov - -\section{Conclusion} - - \begin{frame}{Conclusion} - - \begin{quote} - - Partly due to its simplicity, PathORAM is the most practical ORAM scheme known-to-date under a small amount of client storage. - We formally prove asymptotic bounds on PathORAM, and show that its performance is competitive with or asymptotically better than the best known construction (for a small amount of client storage), assuming reasonably large block sizes. - We also present simulation results that confirm our theoretic bounds.~\cite{Stefanov:2013:POE:2508859.2516660} - - \end{quote} - - \note{ - The conclusion given in the paper is very concise, so I have just copied it down from the paper. - To iterate, PathORAM is simple, practical and requires small client storage. - The paper proves asymptotic bounds and negligible probability of failure. - Lastly, the practical evaluation of theoretical results is given. - } - - \end{frame} diff --git a/sections/evaluation.tex b/sections/evaluation.tex deleted file mode 100644 index 413b1c58dccf4d04ced83af8c1c6db6c46421c3e..0000000000000000000000000000000000000000 --- a/sections/evaluation.tex +++ /dev/null @@ -1,106 +0,0 @@ -\section{Evaluation} - - \begin{frame}{Stash Occupancy Distribution} - - \begin{block}{Experiment setup} - - \begin{itemize} - \item - PathORAM uses a binary tree with height $L = \ceil*{\log_2 N} - 1$. - It is empirically proven to be sufficient and efficient. - \item - \emph{Stash occupancy} is the number of overflowing blocks. - Represents client's \emph{persistent} local storage. - \item - First load $N$ blocks into ORAM and then access each block in a round-robin pattern. - Worst-case access pattern in terms of stash occupancy. - \item - Single run for about 250 billion accesses after doing 1 billion accesses for warming-up. - \end{itemize} - - \end{block} - - \note{ - In the experiments, authors used a binary tree of height $\ceil*{\log_2 N} - 1$. - - Let us define \emph{stash occupancy} as the number of overflowing blocks. - Thus, this would be a client's persistent local storage in addition to $Z \log_2 N$ transient storage for storing single path. - - We access PathORAM in a round-robin fashion --- it is proven to be the worst-case scenario for PathORAM\@. - Round-robin fashion is like $\{ 1, 2, \ldots, N, 1, 2, \ldots, N, \ldots, 1, 2, \ldots \}$. - - Finally, they perform around billion accesses for warming-up, then 250 billion accesses for actual experiment. - } - - \end{frame} - - \begin{frame}{Stash Occupancy Distribution} - - \begin{block}{Results} - - \begin{itemize} - \item - Required stash size grows linearly with the security parameter. - Failure probability decreases exponentially with the stash size. - See~\ref{fig:max-stash-size-linear} in appendix. - \item - Extrapolate those results for realistic values of $\lambda$. - See~\ref{tbl:stash-size-for-sec-parameters} in appendix. - \item - It is by definition infeasible to simulate for practically adopted security parameters (e.g., $\lambda = 128$) - \item - Required stash size for a low failure probability does not depend on $N$. - This shows PathORAM has good scalability. - See~\ref{fig:stash-size-does-not-depend-on-n} in appendix. - \end{itemize} - - \end{block} - - \note{ - - Required stash size grows linearly with the security parameter, which is consistent with the theorem that failure probability decreases exponentially with the stash size. - There are two ways to attack our ORAM --- break encryption and trigger stash overflow. - Authors give approximate values for stash size such that the probability of stash overflow is no greater than the probability of encryption break. - - This linearity was used to predict required stash size for realistic security parameters. - Note that it is by definition infeasible to simulate for practically adopted security parameters, since that would have proven insecurity. - - Finally, it is discovered that required stash size does not depend on $N$, which proves that PathORAM is highly scalable. - } - - \end{frame} - - \begin{frame}{Bucket Load} - - \begin{block}{Results} - - \begin{itemize} - \item - For $Z \ge 5$, the usage of a subtree is close to the number of buckets in it. - Also holds for $Z = 4$. - % TODO - \item - For the levels close to the root, the bucket load is indeed 1 block. - \item - Leaves have slightly heavier loads as blocks accumulate at the leaves of the tree. - \item - $Z = 3$, however, exhibits a different distribution of bucket load and produces much larger stash sizes in practice. - \end{itemize} - - \end{block} - - \note{ - Another set of observations about bucket load. - - For $Z \ge 4$ the usage of a subtree is close to the number of buckets in it. - This means, we do not waste space with dummy blocks. - - For the levels close to the root, the bucket load is 1 block. - - Leaves have slightly heavier loads as blocks accumulate at the leaves of the tree. - - $Z = 3$ is different. - It produces much larger stash sizes in practice, so should not be used in production. - } - - \end{frame} diff --git a/sections/example.tex b/sections/example.tex deleted file mode 100644 index 99cd562cafa2f8e3086a6c6bfcf725bbd7cb672f..0000000000000000000000000000000000000000 --- a/sections/example.tex +++ /dev/null @@ -1,202 +0,0 @@ -% cSpell:ignore selectedtrue pathreadtrue nodeonenewtrue nodetwonewtrue nodethreenewtrue nodefournewtrue textcolor - -\input{example/definitions} - -\section{Example} - - \exampleFrame% - {Initial state} - {} - {\drawTree{Initial underlying tree}} - {\drawMap{Initial position map}} - { - Here we see the initial state before we access an element. - Buckets are filled greedily from the bottom to the top. - Leaves are numbered left to right. - Each number in the buckets corresponds to encrypted data block and each empty set symbol corresponds to dummy data block. - Position table shows the mapping from data blocks to leaves. - } - - \exampleFrame% - {\textsc{Access}$(5)$} - {\selectedtrue} - {\drawTree{Select block with ID 5}} - {\drawMap{Find leaf for block with ID 5}} - { - Let us access the data block with ID 5. - We first lookup position map to see, which leaf it corresponds to. - We see we need a path to the leaf number 6. - } - - \exampleFrame% - {Read path} - { - \selectedtrue% - \pathreadtrue% - } - {\drawTree{Select path $\mathcal{P}(6)$}} - {\drawMap{Find leaf for block with ID 5}} - { - We read the whole path from the root to the leaf number 6. - } - - \exampleFrame% - {Remap block} - {} - { - \begin{block}{Stash} - - \begin{gather*} - S = \{ 10, 1, 2, \textcolor{red}{5}, 8, 7, 13, 15 \} \\ - data = \textsc{DecryptBlock}(\textcolor{red}{5}) \\ - \textcolor{blue}{5^\prime} \gets \textsc{EncryptData}(data^{*}) \\ - S = \{ 10, 1, 2, \textcolor{blue}{5^\prime}, 8, 7, 13, 15 \} - \end{gather*} - - Re-encrypt all blocks in the stash. - - \end{block} - } - { - \vspace{10pt} - \begin{block}{Remap} - - Assign random leaf - - \[ - \text{position}[5] := 3 - \] - - \end{block} - } - { - Now, all those data blocks appear in the stash. - We know for a fact that our block of interest is there as well. - We extract it to data variable. - We change block's data and re-encrypt all data blocks. - We then put it back to stash. - - It is important that we also re-map the block. - Let say we assign it a new leaf --- number 3. - - Now we need to write the path back. - } - - \exampleFrame% - {Write path back} - { - \selectedtrue% - \pathreadtrue% - \nodeonenewtrue% - } - {\drawTree{Write bucket on level $L = 3$}} - { - \begin{block}{Stash} - - \begin{gather*} - S^\prime = \{ 8, 7, 1 \} \\ - S = \{ 10, 2, \textcolor{blue}{5}, 13, 15 \} - \end{gather*} - - \end{block} - } - { - We start filling buckets with data blocks greedily from leaves. - We pick those $Z = 3$ blocks from the stash which can be placed on the level in path not breaking invariant. - If fewer than $Z$ blocks can be placed, we pad it with dummy blocks. - } - - \exampleFrame% - {Write path back} - { - \selectedtrue% - \pathreadtrue% - \nodeonenewtrue% - \nodetwonewtrue% - } - {\drawTree{Write bucket on level $L - 1 = 2$}} - { - \begin{block}{Stash} - - \begin{gather*} - S^\prime = \{ 2, 10, 15 \} \\ - S = \{ \textcolor{blue}{5}, 13 \} - \end{gather*} - - \end{block} - } - { - We repeat the process for the next level. - } - - \exampleFrame% - {Write path back} - { - \selectedtrue% - \pathreadtrue% - \nodeonenewtrue% - \nodetwonewtrue% - \nodethreenewtrue% - } - {\drawTree{Write bucket on level $L - 2 = 1$}} - { - \begin{block}{Stash} - - \begin{gather*} - S^\prime = \{ 13 \} \\ - S = \{ \textcolor{blue}{5} \} - \end{gather*} - - \end{block} - } - { - Now, only one data block can be placed not breaking the invariant, so we pad. - } - - \exampleFrame% - {Write path back} - { - \selectedtrue% - \pathreadtrue% - \nodeonenewtrue% - \nodetwonewtrue% - \nodethreenewtrue% - \nodefournewtrue% - } - {\drawTree{Write bucket on level $L - 3 = 0$ --- root}} - { - \begin{block}{Stash} - - \begin{gather*} - S^\prime = \{ \textcolor{blue}{5} \} \\ - S = \varnothing - \end{gather*} - - \end{block} - } - { - Finally, we put last block in the root, because it is the only place along the path where $\mathcal{P}(6)$ and $\mathcal{P}(3)$ intersect. - } - - \exampleFrame% - {Final state} - { - \selectedtrue% - \pathreadtrue% - \nodeonenewtrue% - \nodetwonewtrue% - \nodethreenewtrue% - \nodefournewtrue% - } - {\drawTree{Tree after the execution}} - {\drawMap[final]{Position map after the execution}} - { - That is how our tree looks like after the operation. - - Please note that the adversary only sees that we have read whole path and written whole path. - She is not able to see which data block was modified because we re-encrypted everything. - - Keep in mind that it is possible that stash is not empty at the end of an operation. - It is unlikely to happen. - The stash is emptied during the next accesses. - } diff --git a/sections/oblivious-memory.tex b/sections/oblivious-memory.tex deleted file mode 100644 index 62b5c7b5a81f7c9acd25fb3589b2aeedafdd4cf7..0000000000000000000000000000000000000000 --- a/sections/oblivious-memory.tex +++ /dev/null @@ -1,82 +0,0 @@ -% cSpell:ignore bibfile Goldreich Dautrich - -\section{Oblivious Memory} - - \begin{frame}{Problem statement} - - Untrusted server. - Secure database --- each record is encrypted. - What are we missing? - - \pause% - - \begin{alertblock}{Security vulnerability} - Adversary still sees the \textbf{access pattern} --- an ordered sequence of read/write operations on data records. - \end{alertblock} - - \begin{exampleblock}{Attack example} - Compromising Privacy in Precise Query Protocols~\cite{Dautrich:2013:CPP:2452376.2452397}. - Observe range queries to recover order. - Requires $10^4$ queries to compromise privacy for database of over $10^6$ records. - \end{exampleblock} - - \note{ - The idea is to build a secure cloud, and more specifically --- secure database. - The server is untrusted --- we assume an adversary can read every byte on the disk and track all CPU operations, but cannot interfere. - This threat model is called \emph{honest-but-curious} adversary. - The first step is encrypting the database, so that only client can decrypt. - But that is just the first step --- what are we missing? - - An adversary can see the access pattern. - It can see which records are accessed more often. - Which records are accessed only after some other records were touched. - How often read vs write operations occur. - - Talk about~\textcite{Dautrich:2013:CPP:2452376.2452397} paper. - } - \end{frame} - - \begin{frame}{Oblivious RAM} - - \begin{block}{Definition} - A machine is \emph{oblivious} if the sequence in which it accesses memory locations is equivalent for any two inputs with the same running time~\cite{Goldreich:1996:SPS:233551.233553}. - \end{block} - - \note{ - A solution is to design an oblivious memory access system. - This definition of oblivious machine is cited from the original paper on ORAMs by \textcite{Goldreich:1996:SPS:233551.233553} from May 1996 --- around my birthday. - Among the other things the paper states a number of theorems on computational bounds of generic ORAMs. - - Although the paper analyzes generic ORAMs, 20 years ago people were more concerned about CPU working with RAM access patterns. - The cloud did not really exist at that time. - - So the one purpose of ORAM is to hide the access pattern. - We will come to more formal security definition in a couple of slides. - } - \end{frame} - - \begin{frame}{Theoretical bounds} - - \begin{block}{Theorems} - Let $\RAM(m)$ denote a \RAM\ with $m$ memory locations and access to a random oracle. - Then $t$ steps of an arbitrary $\RAM(m)$ can be simulated by - \begin{itemize} - \item - at most $\BigO{t \cdot (\log_2 t)^3}$ steps of an oblivious $\RAM(m \cdot (\log_2 m)^2 )$ - \item - at least $\max \{ m, (t-1) \cdot \log_2 m \}$ steps of an oblivious $\RAM(m)$ - \end{itemize} - - \cite{Goldreich:1996:SPS:233551.233553} % chktex 2 - - \end{block} - - \note{ - These are some theorems stated and proved in the paper. - I am not going to do proofs here. - The idea is that these are the theoretical bounds for generic ORAMs. - Designing our own ORAM the aim is to come as close as possible to lower bounds. - - In fact, PathORAM does hit the lower bound --- $\log m$ steps per each access. - } - \end{frame} diff --git a/sections/overview-of-other-orams.tex b/sections/overview-of-other-orams.tex deleted file mode 100644 index 1d47e9d47c1301d2a01f5ed59657dcf6b2bf26be..0000000000000000000000000000000000000000 --- a/sections/overview-of-other-orams.tex +++ /dev/null @@ -1,51 +0,0 @@ -%cSpell:ignore tablebox - -\section{Overview of other ORAMs} - - \begin{frame}{ORAMs Experimental Evaluation} - - \begin{lrbox}{\tablebox}% - - \begin{tabular}{ l c c c c } - - \toprule% - - $ORAM$ & Computation & Communication & Server & Client \\ - - \midrule% - - Basic-SR & $N \log N$ & $N \log N$ & $N$ & $1$ \\ - IBS-SR & $N$ & $\sqrt{N}$ & $N$ & $\sqrt{N}$ \\ - Basic-HR & $N \log^2 N$ & $N \log^2 N$ & $N \log N$ & $1^b$ \\ - BB-ORAM & $\log^2 N$ & $N \log^2 N$ & $N \log N$ & $1$ \\ - TP-ORAM & $\sqrt{N}$ & $1$ & $N$ & $\sqrt{N} + \frac{N}{B}$ \\ - \textbf{Path-ORAM} & $\bm{\log N}$ & $\bm{1}$ & $\bm{N}$ &\footnote{$\BigO{\log N} \cdot \omega(1) + \BigO{\frac{N}{B}}$} \\ - - \bottomrule% - - \end{tabular} - - \end{lrbox}% - - \begin{center} - - \scalebox{0.9}{\usebox{\tablebox}} - - \end{center} - - Table 2 from~\cite{Chang:2016:ORD:2994509.2994528}. - Worst-case scenarios shown. - - \note{ - \textcite{Chang:2016:ORD:2994509.2994528} published a great paper a year ago doing accurate comparison of known ORAM systems. - They analyzed space and time complexity of the systems. - The result is on the table. - - Communication overhead measures the number of rounds of communication for one access. - Server and client respectively show how much space is used by an ORAM on the server and on the client. - Computational overhead is a composite of communication, encryption/decryption and client running overheads \emph{per access}. - - I am not going to elaborate on all ORAMs, but it is clear that one of them wins in almost every category. - This is why we have chosen it for our secure cloud. - } - \end{frame} diff --git a/sections/path-oram-protocol.tex b/sections/path-oram-protocol.tex deleted file mode 100644 index 774d13f2f252cfa7c6ac8c56f04afa80a6c39214..0000000000000000000000000000000000000000 --- a/sections/path-oram-protocol.tex +++ /dev/null @@ -1,367 +0,0 @@ -% cSpell:ignore mybox - -\section{Path ORAM protocol} - - \subsection{Overview} - - \begin{frame}{Diagram} - - \input{diagrams/protocol} - - \note<1> { - Here is the diagram of PathORAM protocol. - There are two components in the ORAM model and a user interacting with the system. - - Server basically holds a binary tree of buckets with encrypted blocks. - - Client holds two data structures --- position map and stash --- we will talk about them in a moment. - } - - \note<2>{ - First, user makes a request to the (trusted) client part. - User requests --- to read or to write --- a block with certain identifier. - } - - \note<3,4>{ - If client does not have the block in stash, it makes a request to the server and reads a path with encrypted blocks. - - Server responds with a path of buckets of encrypted blocks. - } - - \note<5>{ - Client manipulates these blocks --- re-encrypts them, shuffles them and write the path back. - We will talk about how client writes path back in a randomized way. - } - - \note<6>{ - Finally, a client returns data to the user. - } - - \end{frame} - - \begin{frame}{Main invariant} - - The client stores a small amount of local data in a \textbf{stash}. - The server-side storage is treated as a \textbf{binary tree} where each node is a \textbf{bucket} that holds an exact fixed number of \textbf{blocks}. - - \begin{block}{Invariant} - At any time, each block is mapped to a uniformly random leaf bucket in the tree, and unstashed blocks are always placed in some bucket along the path to the mapped leaf. - \end{block} - - \note{ - An underlying data structure for PathORAM is a binary tree. - Client has a position table where each data block ID is mapped to the leaf node. - Each time access occurs, whole path from the leaf to the root gets read and written. - This ensures indistinguishability. - - The goal of the invariant is to keep position map accurate at all times. - } - \end{frame} - - \subsection{Server storage} - - \begin{frame}{\subsecname} - - \begin{block}{Binary tree} - The server stores a binary tree data structure of height $L$ and $2^L$ leaves. - We then need $L = \ceil*{ \log_2 N }$ levels. - The levels of the tree are numbered $0$ to $L$ where level $0$ denotes the root of the tree and level $L$ denotes the leaves. - \end{block} - - \note{ - Let us define $L$ --- the height of our tree. - Then reasonably it will be equal to $\log_2 N$ rounded up. - Let us also define 0 level as root and $L_\text{th}$ level as leaves. - } - \end{frame} - - \begin{frame}{\subsecname} - - \begin{block}{Bucket} - Each node in the tree is called \textbf{bucket}. - Each bucket can contain up to $Z$ real blocks. - If a bucket has fewer than $Z$ real blocks, it is padded with dummy blocks to always be of size $Z$. - \end{block} - - \note{ - Each node in a tree is a bucket that contains $Z$ blocks. - For the sake of indistinguishability, we pad bucket with dummy encrypted blocks. - Choice of $Z$ is a parameter. - Experimental results show that small constant, eq.\ 4, will suffice. - } - \end{frame} - - \begin{frame}{\subsecname} - - \begin{block}{Path} - Let $x \in \{ 0, 1, \ldots, 2^L - 1 \}$ denote the $x_{\text{th}}$ leaf node in the tree. - Any leaf node $x$ defines a unique path from the root of the tree to the leaf $x$. - We use $\mathcal{P}(x)$ to denote a set of buckets along the path from leaf $x$ to the root. - Additionally, $\mathcal{P}(x,l)$ denotes the bucket in $\mathcal{P}(x)$ at level $l$ in the tree. - \end{block} - - \note{ - Let us define a path from leaf $x$ to the root as $\mathcal{P}(x)$. - Let us also define $\mathcal{P}(x,l)$ as the bucket along the path at level $l$. - } - \end{frame} - - \begin{frame}{\subsecname} - - \begin{block}{Server storage size} - Total server storage used is about $Z \cdot N$ blocks. - Since $Z$ is a small constant, server storage is $\BigO{N}$. - \end{block} - - \note{ - Let us make an important observation. - The total server storage used is the order of $N$ since $Z$ is a small constant. - } - \end{frame} - - \subsection{Client storage} - - \begin{frame}{\subsecname} - - \begin{block}{Stash} - The client locally stores overflowing blocks in a local data structure $S$ called \textbf{stash}. - The stash has a worst-case size of $\BigO{\log N} \cdot \omega (1)$ blocks with high probability. - The stash is usually empty after each ORAM read/write operation completes. - \end{block} - - \note{ - The core component of the client is stash. - It is a local data structure that stores overflowing blocks. - PathORAM protocol is randomized, and the error is the event that this stash overflows. - The analysis, though, shows that for $\log N$ size of the stash this happens with negligible probability. - } - \end{frame} - - \begin{frame}{\subsecname} - - \begin{block}{Position map} - The client stores a position map, such that $x := \text{position}[a]$ means that block $a$ is currently mapped to the $x_\text{th}$ leaf node --- this means that block $a$ resides in some bucket in path $\mathcal{P}(x)$, or in the stash. - The position map changes over time as blocks are accessed and remapped. - \end{block} - - \note{ - Another core structure of the client is the position table. - It is a simple lookup table that maps the block with identifier $a$ to some leaf $x$. - The bucket does not necessarily live in the leaf, but it is guaranteed to live somewhere along the path or in the stash. - The key to security is the re-randomization of this table on each access. - } - \end{frame} - - \begin{frame}{\subsecname} - - \begin{block}{Bandwidth} - For each load or store operation, the client reads a path of $Z \log N$ blocks from the server and then writes it back, resulting in a total of $2Z \log N$ blocks bandwidth used per access. - Since $Z$ is a constant, the bandwidth usage is $\BigO{\log N}$ blocks. - \end{block} - - \note{ - Each read and write, client reads the whole path and writes it back. - A path is $Z \log N$ blocks, and since $Z$ is a small constant, resulting usage is $\BigO{\log N}$ in the number of blocks. - } - \end{frame} - - \begin{frame}{\subsecname} - - \begin{block}{Client storage size} - The position map is of size $N L = N \log N$ bits, which is of size $\BigO{N}$ blocks when the block size $\BigOmega{\log N}$ bits. - - The stash is at most $\BigO{\log N} \cdot \omega (1)$ blocks to obtain negligible failure probability. - The recursive construction can achieve client storage of $\BigO{\log N} \cdot \omega (1)$. - \end{block} - - \note{ - Position map is the order of $N$ and the stash is the order of $\log N$ for negligible error probability. - So, for the basic PathORAM the client storage usage is order fo $N$. - However, it is possible to use recursive version of the ORAM, which I will talk about later, to lower the usage to the order of $\log N$. - } - \end{frame} - - \subsection{The algorithm} - - \newcommand{\algName}{\textsc{Access$(op, a, data^{*})$}} - -%%% fragile frame -\begin{frame}[fragile]{Remap block} - - \lstinputlisting[ - firstline=1, - lastline=2, - firstnumber=1, - title=\algName% - ]{listings/algorithm.tex} - - \note{ - The client stash $S$ is initially empty. - The server buckets are initialized to contain randomized encryptions of the dummy blocks. - The client's position map is filled with independent random numbers between 0 and $2^L - 1$. - - When the access occurs, the requested block is remapped. - } - -\end{frame} -%%% end fragile frame - -%%% fragile frame -\begin{frame}[fragile]{Read path} - - \lstinputlisting[ - firstline=3, - lastline=5, - firstnumber=3, - title=\algName% - ]{listings/algorithm.tex} - - \note{ - Read the path $\mathcal{P}(x)$ containing block $a$. - } - -\end{frame} -%%% end fragile frame - -%%% fragile frame -\begin{frame}[fragile]{Update block} - - \lstinputlisting[ - firstline=6, - lastline=9, - firstnumber=6, - title=\algName% - ]{listings/algorithm.tex} - - \note{ - If the access is a \texttt{write}, update the data stored for block $a$. - } - -\end{frame} -%%% end fragile frame - -%%% fragile frame -\begin{frame}[fragile]{Write path back} - - \lstinputlisting[ - firstline=10, - lastline=15, - firstnumber=10, - title=\algName% - ]{listings/algorithm.tex} - - \note{ - Write the path back and possibly include some additional blocks from the stash if they can be placed into the path. - Buckets are greedily filled with blocks in the stash in the order of leaf to root, ensuring that blocks get pushed as deep down into the tree as possible. - A block $a^\prime$ can be placed in the bucket at level $\ell$ only if the path $\mathcal{P}( \text{position}[a^\prime])$ to the leaf of block $a^\prime$ intersects the path accessed $\mathcal{P}(x)$ at level $\ell$. - In other words, if $\mathcal{P}(x, \ell) = \mathcal{P}( \text{position}[a^\prime], \ell)$. - } - -\end{frame} -%%% end fragile frame - -%%% fragile frame -\begin{frame}[fragile]{Return} - - \lstinputlisting[ - firstline=16, - lastline=16, - firstnumber=16, - title=\algName% - ]{listings/algorithm.tex} - - \note{ - At the end, return the block. - } - -\end{frame} -%%% end fragile frame - -\begin{frame}{Subroutines} - - \begin{block}{$\textsc{ReadBucket}(bucket)$} - The client reads all $Z$ blocks (including any dummy blocks) from the $bucket$ stored on the server. - Blocks are decrypted as they are read. - \end{block} - - \begin{block}{$\textsc{WriteBucket}(bucket, blocks)$} - The client writes the blocks $blocks$ into the specified $bucket$ on the server. - When writing, the client \emph{pads} blocks with dummy blocks to make it of size $Z$ --- note that this is important for security. - All blocks (including dummy blocks) are re-encrypted, using a randomized encryption scheme, as they are written. - \end{block} - - \note{ - There are two important subroutines in the algorithm. - - $\textsc{ReadBucket}(bucket)$ reads all $Z$ blocks --- remember, there are always exactly $Z$ blocks per bucket and decrypts them as it reads them. - - $\textsc{WriteBucket}(bucket, blocks)$ writes blocks in the bucket on the server. - It pads blocks to make it $Z$ blocks total. - Remember that all buckets should be filled to make them indistinguishable to adversary. - Blocks are encrypted as they are written using randomized scheme --- every cipher text is different for the same plaintext. - } -\end{frame} - - \begin{frame}{Complexity} - - \begin{block}{Computation} - Client's computation is $\BigO{\log N} \cdot \omega (1)$ per data access. - We treat the server as a network storage device, so it only needs to do the computation necessary to retrieve and store $\BigO{\log N}$ blocks per data access. - \end{block} - - \note{ - Each access the client reads and writes the whole path, which is order of $\log N$ in size. - It re-encrypts each block, so the total complexity is $\BigO{\log N} \cdot \omega (1)$. - - Server, on the other hand, does not perform encryption, so its complexity is $\BigO{\log N}$. - } - \end{frame} - -%%% fragile frame -\begin{frame}[fragile]{Full algorithm} - - \begin{lrbox}{\mybox}% - - \lstinputlisting[ - firstline=1, - lastline=16, - title=\algName% - ]{listings/algorithm.tex} - - \end{lrbox}% - - \begin{center} - - \scalebox{0.75}{\usebox{\mybox}} - - \end{center} - - \note{ - Please, take a few moments and look at the whole algorithm. - It is a great time now to ask any questions. - } - -\end{frame} -%%% end fragile frame - - \begin{frame}{Security analysis} - - \begin{gather*} - \bm{p} = \left( \text{position}_M [a_M], \text{position}_{M-1} [a_{M-1}], \ldots , \text{position}_1 [a_1] \right) \\ - \Pr [ \bm{p} ] = \left( \frac{1}{2^L} \right)^M - \end{gather*} - - \begin{itemize} - \item - The sequence of encrypted paths is computationally indistinguishable from a random sequence of bit strings - \item - $A(\vec{y})$ is computationally indistinguishable from a random sequence of bit strings - \end{itemize} - - \note{ - Our definition of security requires that the access pattern is indistinguishable from random. - Encrypted paths look random enough by the definition of secure encryption --- and we use randomized encryption since deterministic one does not even satisfy chosen plaintext attack security. - The access pattern is random enough since the probability of a particular sequence is $\frac{1}{2^L}$ --- uniform in the number of blocks because each access the position table is re-randomized. - For $M$ access, the probability is even smaller by the Bayes rule. - } - \end{frame} diff --git a/sections/problem-definition.tex b/sections/problem-definition.tex deleted file mode 100644 index 6402f1ad7e3a81542361964676f853b28b431c56..0000000000000000000000000000000000000000 --- a/sections/problem-definition.tex +++ /dev/null @@ -1,81 +0,0 @@ -% cSpell:ignore Maas EECS - -\section{Problem definition} - - \begin{frame}{Notations} - - \begin{itemize} - \item - The client fetches/stores data in atomic units --- \emph{blocks} --- of size $B$ bytes each - \item - Let $N$ be the working set --- number of distinct data blocks stored in ORAM - \end{itemize} - - \note{ - Let us start with some notation. - Assume that all data comes in atomic units called blocks and assume that we have $N$ distinct blocks in ORAM\@. - } - \end{frame} - - \begin{frame}{Simplicity} - - \begin{quote} - We aim to provide an extremely simple ORAM construction in contrast with previous work - \end{quote} - - Can then be implemented in hardware~\cite{Maas:EECS-2014-89}. - - \note{ - On of the goals is simplicity. - It not only allows us to analyze system easily. - In case of PathORAM, it is so simple that it has been implemented in pure hardware. - - One of the works that puts PathORAM on the silicon is written by \textcite{Maas:EECS-2014-89}. % chktex 8 - } - \end{frame} - - \begin{frame}{Security definitions} - - \begin{block}{Formal security definition} - - Data request sequence of length $M$, where each $\text{op}_i$ denotes a $\text{read}(\text{a}_i)$ or a $\text{write}(\text{a}_i, \text{data}_I)$ operation - - \[ - \vec{y} := ( (\text{op}_M, \text{a}_M, \text{data}_M), \ldots , (\text{op}_1, \text{a}_1, \text{data}_1) ) - \] - - Let $A(\vec{y})$ denote the (possibly randomized) sequence of accesses to the remote storage given the sequence of data requests $\vec{y}$. - - \end{block} - - \note{ - Let us define what we mean by access pattern. - We mean a sequence of operations --- writes and reads --- on some blocks with identifiers $\text{a}_i$ reading or writing some $\text{data}_i$. - Say we have $M$ operations in sequence. - } - \end{frame} - - \begin{frame}{Security definitions} - - \begin{block}{Formal security definition} - - An ORAM construction is said to be secure if - - \begin{itemize} - \item - for any two data request sequences $\vec{y}$ and $\vec{z}$ of the same length, their access patterns $A(\vec{y})$ and $A(\vec{z})$ are computationally indistinguishable by anyone but the client - \item - the ORAM construction is correct with probability $p \ge 1 - negl(|\vec{y}|)$. - \end{itemize} - - \end{block} - - \note{ - The most important one. - We call a construction secure if an adversary cannot tell, which sequence of operations really went through the construction. - Indistinguishability is a strong requirement --- it says that we leak absolutely no information about our patterns. - And indeed, we need to correctly respond to client requests. - Since we allow randomized algorithms, we set another requirement on error probability. - It has to be negligibly small. - } - \end{frame} diff --git a/sections/recursion-and-parametrization.tex b/sections/recursion-and-parametrization.tex deleted file mode 100644 index 110cbd89fba8bab76531951865e2761e9b2b7da0..0000000000000000000000000000000000000000 --- a/sections/recursion-and-parametrization.tex +++ /dev/null @@ -1,29 +0,0 @@ -% cSpell:ignore DBLP - -\section{Recursion and parametrization} - - \begin{frame}{Recursion technique} - - In our non-recursive scheme described in the previous section, the client must store a relatively large position map. - - The idea is simple: instead of storing the position map on the client side, we store the position map on the server side in a smaller ORAM, and recurse~\cite{Shi:2011, DBLP:journals/corr/abs-1106-3652}. - - \note{ - One of the ways to make the client even thinner is to use recursion. - Zero-level ORAM contains data blocks, the position map of $i_\text{th}$ ORAM is stored in the ${(i+1)}_\text{st}$ ORAM, and the client stores the position map for the last ORAM\@. - The access to a block in a zero-level ORAM triggers recursive calls all up to the last ORAM\@. - - The idea of recursion was first described in the works of \textcite{Shi:2011} and \textcite{DBLP:journals/corr/abs-1106-3652}. % chktex 8 - } - \end{frame} - - \begin{frame}{Shared Stash} - - The client storage for the recursive PathORAM construction (with non-uniform block sizes) can be reduced from $\BigO{\log^2 N} \cdot \omega (1)$ to $\BigO{\log N} \cdot \omega (1)$ by having a \emph{single stash} shared among all levels of the recursion. - This is possible while still maintaining a negligible probability of stash overflow. - - \note{ - It is proven in the paper that we do not need to have separate stash for every level of recursion to maintain negligible probability of failure. - Having single stash reduces client storage by the order of $\log N$. - } - \end{frame} diff --git a/settings.tex b/settings.tex index f93192234eeb3a0c7942d95cdc546efa73673f2a..2743918b4e709c5daa529deef620e130ff5e0eee 100644 --- a/settings.tex +++ b/settings.tex @@ -4,15 +4,11 @@ \setbeameroption{\notesOption} -\title{Data-X Talk} % chktex 13 +\title{Academic Dishonesty} % chktex 13 -\subtitle{ - Path ORAM:\ An Extremely Simple Oblivious RAM Protocol \\ - {\small by \emph{Emil Stefanov}, \emph{Elaine Shi}, \emph{Marten van Dijk}, \emph{Christopher Fletcher}, \emph{ Ling Ren}, \emph{Xiangyao Yu} and \emph{Srinivas Devadas}} \\ - \cite{Stefanov:2013:POE:2508859.2516660} % chktex 2 -} +\subtitle{CS 697 Presentation} -\date{Built from \href{https://git.dbogatov.org/bu/PathORAM-Talk/commit/\version}{\emph{\version}} on \today} +\date{Built from \href{https://git.dbogatov.org/bu/CS-697/commit/\version}{\emph{\version}} on \today} \author{Dmytro Bogatov \\ dmytro@bu.edu} @@ -57,9 +53,9 @@ pdfcopyright={Copyright (C) Dmytro Bogatov \the\year. Creative Commons Attribution-NoDerivatives 4.0 International.}, pdflicenseurl={https://creativecommons.org/licenses/by-nd/4.0/legalcode}, pdfauthor={Dmytro Bogatov}, - pdftitle={Data-X Talk}, - pdfsubject={Path ORAM:\ An Extremely Simple Oblivious RAM Protocol}, - pdfkeywords={Data-X, Talk, ORAM, PathORAM, Oblivious, Security, Kollios, BU, PhD, homework}, + pdftitle={Academic Dishonesty}, + pdfsubject={CS 697 Presentation}, + pdfkeywords={CS, 697, Presentation, Academic, Dishonesty}, colorlinks=true, linkcolor=magenta, urlcolor=cyan, diff --git a/static/images/max-stash-size-linear.png b/static/images/max-stash-size-linear.png deleted file mode 100755 index 57b5074b984d09e677df1f8bf9d61bf38513e421..0000000000000000000000000000000000000000 Binary files a/static/images/max-stash-size-linear.png and /dev/null differ diff --git a/static/images/stash-size-does-not-depend-on-n.png b/static/images/stash-size-does-not-depend-on-n.png deleted file mode 100755 index 548bf2415d75930569d8cbfbc9829cbf31a4433d..0000000000000000000000000000000000000000 Binary files a/static/images/stash-size-does-not-depend-on-n.png and /dev/null differ diff --git a/static/papers/compromising-privacy-in-precise-query-protocols.pdf b/static/papers/compromising-privacy-in-precise-query-protocols.pdf deleted file mode 100644 index f0a7b1dec8ac2845e8c0c3578a8b526b70740a1d..0000000000000000000000000000000000000000 Binary files a/static/papers/compromising-privacy-in-precise-query-protocols.pdf and /dev/null differ diff --git a/static/papers/generic-attacks-on-secure-outsourced-databases.pdf b/static/papers/generic-attacks-on-secure-outsourced-databases.pdf deleted file mode 100644 index bf7cb2598eff57be41811b97db076484ba4e051e..0000000000000000000000000000000000000000 Binary files a/static/papers/generic-attacks-on-secure-outsourced-databases.pdf and /dev/null differ diff --git a/static/papers/inference-attacks-on-property-preserving-encrypted-databases.pdf b/static/papers/inference-attacks-on-property-preserving-encrypted-databases.pdf deleted file mode 100644 index 917f345c16b876823465c3898771822eeee060e7..0000000000000000000000000000000000000000 Binary files a/static/papers/inference-attacks-on-property-preserving-encrypted-databases.pdf and /dev/null differ diff --git a/static/papers/oblivious-ram-a-dissection-and-experimental-evaluation.pdf b/static/papers/oblivious-ram-a-dissection-and-experimental-evaluation.pdf deleted file mode 100644 index 38462f6852ea830a07ddf04d21bd92efd8476569..0000000000000000000000000000000000000000 Binary files a/static/papers/oblivious-ram-a-dissection-and-experimental-evaluation.pdf and /dev/null differ diff --git a/static/papers/path-oram-an-extremely-simple-oblivious-ram-protocol.pdf b/static/papers/path-oram-an-extremely-simple-oblivious-ram-protocol.pdf deleted file mode 100644 index ec07d517141e3aa12fa9da739d0f2b48e0d57245..0000000000000000000000000000000000000000 Binary files a/static/papers/path-oram-an-extremely-simple-oblivious-ram-protocol.pdf and /dev/null differ diff --git a/static/papers/software-protection-and-simulation-on-oblivious-rams.pdf b/static/papers/software-protection-and-simulation-on-oblivious-rams.pdf deleted file mode 100644 index c589096b85f83f45510b6aae27cf8c1a4c97e10c..0000000000000000000000000000000000000000 Binary files a/static/papers/software-protection-and-simulation-on-oblivious-rams.pdf and /dev/null differ