diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000000000000000000000000000000000..1a59ed3f5756463975caf34318bcbbba2a9ac092 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +# http://editorconfig.org +root = true + +[*] +indent_style = tab +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = false +insert_final_newline = true + +[*.yml] +indent_style = space +indent_size = 2 diff --git a/.vscode/settings.json b/.vscode/settings.json index e7ee0927659c27abccdcf0d169a21f96b9c7e254..89262cb208ca649f0388c2b4fe2fd2e2b6b9e355 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,6 +8,7 @@ "Dmytro", "Dulmage", "Edmonds", + "Eulerconst", "Freivald", "Freivalds", "Fulkerson", @@ -15,10 +16,18 @@ "Karp", "Martello", "Mendelsohn", + "ORAM", "Rainer", "Silvano", + "Untrusted", "Zwick", + "alertblock", + "allcaps", + "allsmallcaps", + "amsalpha", + "approxident", "arrowsize", + "beamer", "bijection", "bijective", "binom", @@ -26,15 +35,31 @@ "captionof", "cheatsheets", "chktex", + "colback", + "colframe", "colsep", "cryptosystem", + "cryptosystem's", "dbogatov", "distinguisher", + "ensuremath", + "eqref", + "frametitle", + "highlightline", + "highlightlinespecial", + "highlightmany", + "hltitlecodebox", + "hltitlecodeboxspecial", + "includegraphics", + "indist", "indistinguishability", + "keepaspectratio", "labelsep", "linestyle", "linewidth", "lstlisting", + "mathbb", + "mathrm", "midrule", "mnode", "multicols", @@ -44,55 +69,31 @@ "myitemize", "naput", "ncput", + "negl", "nicefrac", "nonsaturating", "noteq", "npos", + "orams", + "parametrization", "preflow", + "printf", + "progressbar", + "providecommand", "psmatrix", "psset", "rearrangeable", + "smallcaps", "subfigure", - "subtrees", - "toprule", - "Eulerconst", - "approxident", - "colback", - "colframe", - "cryptosystem's", - "ensuremath", - "eqref", - "printf", - "highlightline", - "highlightlinespecial", - "highlightmany", - "hltitlecodebox", - "hltitlecodeboxspecial", - "indist", - "mathbb", - "mathrm", "subname", + "subtrees", "tcblower", "tcolorbox", "textasciitilde", "titlecodebox", - "ORAM", - "Untrusted", - "alertblock", - "allcaps", - "allsmallcaps", - "amsalpha", - "beamer", - "frametitle", - "includegraphics", - "keepaspectratio", - "negl", - "orams", - "parametrization", - "progressbar", - "providecommand", - "smallcaps", "titleformat", + "toprule", + "unstashed", "usetheme" ] } \ No newline at end of file diff --git a/packages.tex b/packages.tex index f53f907013ea0a04f95fc53f469aeb10670570ee..d7dfe8bc611246d90493a83583141331b0cbfd54 100644 --- a/packages.tex +++ b/packages.tex @@ -4,3 +4,4 @@ \usepackage{pgfpages} \usepackage{booktabs} \usepackage{bm} +\usepackage{mathtools} diff --git a/preamble.tex b/preamble.tex index 1120c94d589b30473c29cfa13d8cad0c71134753..c43f04f7cf98c4201f67e2fedc6d715783498b85 100644 --- a/preamble.tex +++ b/preamble.tex @@ -38,3 +38,6 @@ \newcommand{\BigO}[1]{\mathcal{O}\left(#1\right)} \newcommand{\RAM}{\textbf{RAM}} + +\DeclarePairedDelimiter\ceil{\lceil}{\rceil} +\DeclarePairedDelimiter\floor{\lfloor}{\rfloor} diff --git a/sections/path-oram-protocol.tex b/sections/path-oram-protocol.tex index 54c8ffea8997a1072d9b3912d93d8768587d467a..82f56ba12de180baa5475f64e7438d207e8575c6 100644 --- a/sections/path-oram-protocol.tex +++ b/sections/path-oram-protocol.tex @@ -1 +1,75 @@ \section{Path ORAM protocol} + + \subsection{Overview} + + \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 can hold up to a 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 PAth ORAM 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. + } + \end{frame} + + \subsection{Server storage} + + \begin{frame}{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 }$. + 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. + + \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$th level as leaves. + } + \end{frame} + + \begin{frame}{Bucket} + + Each node in the tree is called a bucket. + Each bucket can contain up to $Z$ real blocks. + If a bucket has less than $Z$ real blocks, it is padded with dummy blocks to always be of size $Z$. + + \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}{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 leaf $x$ to the root of the tree. + We use $\mathcal{P}(x)$ to denote 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. + + \note{ + Let us define a path from leaf $x$ to 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}{Server storage} + + \begin{block}{Observation} + Total server storage used is about $Z \cdot N$ blocks. + Since $Z$ is s 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 s small constant. + } + \end{frame}