Skip to content
Snippets Groups Projects
Verified Commit afe128dd authored by Dmytro Bogatov's avatar Dmytro Bogatov :two_hearts:
Browse files

Refactor examples.

parent 504f23ce
Branches
No related tags found
Loading
Pipeline #
......@@ -12,3 +12,63 @@
\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}
}
......@@ -4,73 +4,46 @@
\section{Example}
\begin{frame}{Initial state}
\begin{figure}
\centering
\input{example/tree}
\caption{Initial underlying tree}
\end{figure}
\vspace{-12pt}
\begin{figure}
\centering
\input{example/initial-map}
\caption{Initial position map}
\end{figure}
\end{frame}
\begin{frame}{\textsc{Access}$(5)$}
\selectedtrue%
\begin{figure}
\centering
\input{example/tree}
\caption{Select block with ID 5}
\end{figure}
\vspace{-12pt}
\begin{figure}
\centering
\input{example/initial-map}
\caption{Find leaf for block with ID 5}
\end{figure}
\end{frame}
\begin{frame}{Read path}
\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 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%
\begin{figure}
\centering
\input{example/tree}
\caption{Select path $\mathcal{P}(6)$}
\end{figure}
\vspace{-12pt}
\begin{figure}
\centering
\input{example/initial-map}
\caption{Find leaf for block with ID 5}
\end{figure}
\end{frame}
\begin{frame}{Remap block}
}
{\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*}
......@@ -80,8 +53,11 @@
S = \{ 10, 1, 2, \textcolor{blue}{5^\prime}, 8, 7, 13, 15 \}
\end{gather*}
\end{block}
Re-encrypt all blocks in the stash.
\end{block}
}
{
\begin{block}{Remap}
Assign random leaf
......@@ -91,25 +67,29 @@
\]
\end{block}
\end{frame}
\begin{frame}{Write path back}
}
{
Now all those data blocks appear in stash.
We now 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 new leaf --- number 3.
Now we need to write path back.
}
\exampleFrame%
{Write path back}
{
\selectedtrue%
\pathreadtrue%
\nodeonenewtrue%
\begin{figure}
\centering
\input{example/tree}
\caption{Write bucket on level $L = 3$}
\end{figure}
\vspace{-12pt}
}
{\drawTree{Write bucket on level $L = 3$}}
{
\begin{block}{Stash}
\begin{gather*}
......@@ -118,26 +98,23 @@
\end{gather*}
\end{block}
\end{frame}
\begin{frame}{Write path back}
}
{
We start filling buckets with data blocks greedily from leaves.
We pick those $Z = 3$ blocks from 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%
\begin{figure}
\centering
\input{example/tree}
\caption{Write bucket on level $L - 1 = 2$}
\end{figure}
\vspace{-12pt}
}
{\drawTree{Write bucket on level $L - 1 = 2$}}
{
\begin{block}{Stash}
\begin{gather*}
......@@ -146,27 +123,22 @@
\end{gather*}
\end{block}
\end{frame}
\begin{frame}{Write path back}
}
{
We repeat the process for the next level.
}
\exampleFrame%
{Write path back}
{
\selectedtrue%
\pathreadtrue%
\nodeonenewtrue%
\nodetwonewtrue%
\nodethreenewtrue%
\begin{figure}
\centering
\input{example/tree}
\caption{Write bucket on level $L - 2 = 1$}
\end{figure}
\vspace{-12pt}
}
{\drawTree{Write bucket on level $L - 2 = 1$}}
{
\begin{block}{Stash}
\begin{gather*}
......@@ -175,28 +147,23 @@
\end{gather*}
\end{block}
\end{frame}
\begin{frame}{Write path back}
}
{
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%
\begin{figure}
\centering
\input{example/tree}
\caption{Write bucket on level $0$}
\end{figure}
\vspace{-12pt}
}
{\drawTree{Write bucket on level $L - 3 = 0$ --- root}}
{
\begin{block}{Stash}
\begin{gather*}
......@@ -205,33 +172,30 @@
\end{gather*}
\end{block}
\end{frame}
\begin{frame}{Final state}
}
{
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%
\begin{figure}
\centering
\input{example/tree}
\caption{Tree after the execution}
\end{figure}
\vspace{-12pt}
\begin{figure}
\centering
\input{example/final-map}
\caption{Position map after the execution}
\end{figure}
\end{frame}
}
{\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 operation.
It is unlikely to happen.
The stash is emptied during the next accesses.
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment