Diagrams
This commit is contained in:
parent
663b8ab4de
commit
a7daf39918
Binary file not shown.
@ -28,6 +28,8 @@
|
||||
\usepackage{hyperref}
|
||||
\usepackage[alph]{parnotes}
|
||||
|
||||
\usetikzlibrary{decorations.pathreplacing,decorations.markings}
|
||||
|
||||
\DeclareMathOperator{\lcm}{lcm}
|
||||
\DeclareMathOperator{\id}{id}
|
||||
\DeclareMathOperator{\pr}{pr}
|
||||
@ -305,9 +307,9 @@ Despite this approach being centralised, it does emulate a fully P2P environment
|
||||
|
||||
In particular, the final point allows for the use of purely JSON messages, which are readily parsed and processed by the client-side JavaScript.
|
||||
|
||||
The game is broken down into three main stages, each of which handles events in a different way. These are shown below. Boxes in blue are messages received from other players (or transmitted by ourselves). Boxes in green require networking to complete.
|
||||
The game is broken down into three main stages, each of which handles events in a different way. These are shown below. Boxes in blue are messages received from other players (or transmitted by ourselves). Boxes in green require us to transmit a message to complete.
|
||||
|
||||
\begin{landscape}\begin{tikzpicture}[every node/.style={anchor=north west}]
|
||||
\begin{landscape}\begin{tikzpicture}[every node/.style={anchor=north west,minimum height=20pt}]
|
||||
% Create outlines
|
||||
\node[
|
||||
rectangle,
|
||||
@ -396,14 +398,40 @@ The game is broken down into three main stages, each of which handles events in
|
||||
\draw[very thick,->,dashed] (Act1)-- node[right] {Not all regions claimed} ++(Claim);
|
||||
\draw[very thick,->,dashed] (Act1) -- (200pt, -67.5pt)-- node[right] {All regions claimed} ++(Reinf);
|
||||
|
||||
\node[draw=black!50,fill=white,rotate=270,rectangle,very thick,rounded corners=0.1mm,anchor=north] (Update2) at (0.5\paperwidth + 60pt, -155.5pt) {Update game stage};
|
||||
\node[draw=black!50,fill=white,rotate=270,rectangle,very thick,rounded corners=0.1mm,anchor=north] (Update2) at (0.5\paperwidth + 60pt, -158pt) {Update game stage};
|
||||
|
||||
\draw[very thick,->,dashed] (End1)-- node[below] {All reinf. placed} ++(Update2);
|
||||
|
||||
% Player act handling 2
|
||||
\node[draw=blue!50,rectangle,very thick,rounded corners=0.1mm,anchor=north] (Act2) at (0.5\paperwidth+120pt, 0.5\textheight-4pt) {Current player acts};
|
||||
\node[draw=blue!50,rectangle,very thick,rounded corners=0.1mm,anchor=north] (Act2) at (0.5\paperwidth+112pt, 0.5\textheight-4pt) {Current player acts};
|
||||
|
||||
\node[draw=black!50,rectangle,very thick,rounded corners=0.1mm,anchor=north] (Reinf2) at (0.5\paperwidth+280pt, 140pt) {Reinforce regions};
|
||||
|
||||
\node[draw=black!50,rectangle,very thick,rounded corners=0.1mm,anchor=north] (Attack1) at (0.5\paperwidth+210pt, 70pt) {Attack region};
|
||||
|
||||
\node[draw=green!50,rectangle,very thick,rounded corners=0.1mm,anchor=north] (Attack2) at (0.5\paperwidth+210pt, 20pt) {Send defence};
|
||||
|
||||
\node[draw=blue!50,rectangle,very thick,rounded corners=0.1mm,anchor=north] (Attack3) at (0.5\paperwidth+340pt, 20pt) {Target defends};
|
||||
|
||||
\node[draw=green!50,rectangle,very thick,rounded corners=0.1mm,anchor=north] (Attack4) at (0.5\paperwidth+210pt, -30pt) {Resolve dice roll};
|
||||
|
||||
\draw[very thick,->,dashed] (Attack1) -- node[right] {Target region owned by us} ++ (Attack2);
|
||||
\draw[very thick,->] (Attack2) -- (Attack4);
|
||||
\draw[very thick,->] (Attack3) -- (0.5\paperwidth+340pt, -15pt) -- (0.5\paperwidth+210pt, -15pt) -- (Attack4);
|
||||
|
||||
\node[draw=black!50,rectangle,very thick,rounded corners=0.1mm,anchor=north] (Fortify) at (0.5\paperwidth+210pt, -90pt) {Fortify region};
|
||||
|
||||
\node[draw=black!50,rectangle,very thick,rounded corners=0.1mm,anchor=north] (End2) at (0.5\paperwidth+210pt, -140pt) {End turn};
|
||||
|
||||
\node[draw=black!50,rectangle,very thick,rounded corners=0.1mm,anchor=north] (End3) at (0.5\paperwidth+210pt, -190pt) {End game};
|
||||
|
||||
\draw[very thick,->,dashed] (End2) -- node[right] {All regions controlled by one player} ++(End3);
|
||||
\draw[very thick,->] (Fortify) -- (End2);
|
||||
|
||||
\draw[very thick,->,dashed] (Act2) -- (0.5\paperwidth+112pt, 130pt) -- node[below] {Reinf. remaining} ++ (Reinf2);
|
||||
\draw[very thick,->,dashed] (0.5\paperwidth+112pt, 130pt) -- (0.5\paperwidth+112pt, 60pt) -- (Attack1);
|
||||
\draw[very thick,->,dashed] (0.5\paperwidth+112pt, 60pt) -- (0.5\paperwidth+112pt, -100pt) -- (Fortify);
|
||||
\draw[very thick,->,dashed] (0.5\paperwidth+112pt, -100pt) -- (0.5\paperwidth+112pt, -150pt) -- (End2);
|
||||
\end{tikzpicture}\end{landscape}
|
||||
|
||||
\section{Message structure}
|
||||
@ -625,31 +653,33 @@ These points are referenced in the following sections.
|
||||
|
||||
The first proof to discuss is the honest-verifier protocol to prove knowledge that a ciphertext is an encryption of zero \cite[Section~5.2]{damgard2003}.
|
||||
|
||||
\begin{center}
|
||||
\begin{tikzpicture}[every node/.append style={very thick,rounded corners=0.1mm}]
|
||||
|
||||
\node[draw,rectangle] (P) at (0,0) {Prover};
|
||||
\node[draw,rectangle] (V) at (6,0) {Verifier};
|
||||
|
||||
\node[draw=blue!50,rectangle,thick,text width=5.05cm] (v) at (0,-1.5) {$r \in \mathbb{Z}_n^*$ with $c = r^n \mod n^2$};
|
||||
\draw [->,very thick] (0,-3)--node [auto] {$c$}++(6,0);
|
||||
|
||||
\node[draw=blue!50,rectangle,thick] (r) at (0,-4) {Choose random $r^* \in \mathbb{Z}_n^*$};
|
||||
\draw [->,very thick] (0,-5)--node [auto] {$a = (r^*)^n \mod n^2$}++(6,0);
|
||||
|
||||
\node[draw=blue!50,rectangle,thick] (e) at (6,-6) {Choose random $e$};
|
||||
\draw [<-,very thick] (0,-7)--node [auto] {$e$}++(6,0);
|
||||
|
||||
\draw [->,very thick] (0,-8)--node [auto] {$z = r^*r^e \mod n$}++(6,0);
|
||||
\node[draw=blue!50,rectangle,thick,text width=5cm] (verify) at (6,-9) {Verify $z, c, a$ coprime to $n$\\ Verify $z^n \equiv ac^e \mod n^2$};
|
||||
|
||||
\node[draw=none] (term) at (0,-9) {};
|
||||
\fill (term) circle [radius=2pt];
|
||||
|
||||
\draw [very thick] (P)-- (v)-- (r)-- (0,-9);
|
||||
\draw [very thick] (V)-- (e)-- (verify)-- (6,-9);
|
||||
\end{tikzpicture}
|
||||
\end{center}
|
||||
\begin{protocol}[Proof of zero]\label{protocol0}
|
||||
\begin{center}
|
||||
\begin{tikzpicture}[every node/.append style={very thick,rounded corners=0.1mm}]
|
||||
|
||||
\node[draw,rectangle] (P) at (0,0) {Prover};
|
||||
\node[draw,rectangle] (V) at (6,0) {Verifier};
|
||||
|
||||
\node[draw=blue!50,rectangle,thick,text width=5.05cm] (v) at (0,-1.5) {$r \in \mathbb{Z}_n^*$ with $c = r^n \mod n^2$};
|
||||
\draw [->,very thick] (0,-3)--node [auto] {$c$}++(6,0);
|
||||
|
||||
\node[draw=blue!50,rectangle,thick] (r) at (0,-4) {Choose random $r^* \in \mathbb{Z}_n^*$};
|
||||
\draw [->,very thick] (0,-5)--node [auto] {$a = (r^*)^n \mod n^2$}++(6,0);
|
||||
|
||||
\node[draw=blue!50,rectangle,thick] (e) at (6,-6) {Choose random $e$};
|
||||
\draw [<-,very thick] (0,-7)--node [auto] {$e$}++(6,0);
|
||||
|
||||
\draw [->,very thick] (0,-8)--node [auto] {$z = r^*r^e \mod n$}++(6,0);
|
||||
\node[draw=blue!50,rectangle,thick,text width=5cm] (verify) at (6,-9) {Verify $z, c, a$ coprime to $n$\\ Verify $z^n \equiv ac^e \mod n^2$};
|
||||
|
||||
\node[draw=none] (term) at (0,-9) {};
|
||||
\fill (term) circle [radius=2pt];
|
||||
|
||||
\draw [very thick] (P)-- (v)-- (r)-- (0,-9);
|
||||
\draw [very thick] (V)-- (e)-- (verify)-- (6,-9);
|
||||
\end{tikzpicture}
|
||||
\end{center}
|
||||
\end{protocol}
|
||||
|
||||
A proof for the following homologous problem can be trivially constructed: given some ciphertext $c = g^mr^n \mod n^2$, prove that the text $cg^{-m} \mod n^2$ is an encryption of 0. The text $cg^{-m}$ is constructed by the verifier. The prover then proceeds with the proof as normal, since $cg^{-m}$ is an encryption of 0 under the same noise as the encryption of $m$ given.
|
||||
|
||||
@ -948,6 +978,64 @@ It is preferred that these proofs can be performed with only a few communication
|
||||
|
||||
We can apply the Fiat-Shamir heuristic to make proofs of zero non-interactive \cite{fiatshamir}. In place of a random oracle, we use a cryptographic hash function. We take the hash of some public parameters to prevent cheating by searching for some values that hash in a preferable manner. In this case, selecting $e = H(g, m, a)$ is a valid choice. To get a hash of desired length, an extendable output function such as SHAKE256 can be used \cite{FIPS202}. The library jsSHA \cite{jssha} provides an implementation of SHAKE256 that works within a browser.
|
||||
|
||||
\subsection{Application to domain}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\begin{tikzpicture}[every node/.append style={
|
||||
very thick,fill=white,
|
||||
rounded corners=0.1mm,
|
||||
minimum height=20pt}]
|
||||
|
||||
\node[draw,rectangle] (P1) at (0,-0.5) {Player 1};
|
||||
\node[draw,rectangle] (V) at (6,-0.5) {World};
|
||||
\node[draw,rectangle] (P2) at (12,-0.5) {Player 2};
|
||||
|
||||
\draw [very thick] (P1)-- (0,-15);
|
||||
\draw [very thick] (V) -- (6,-15);
|
||||
\draw [very thick] (P2)-- (12,-15);
|
||||
|
||||
\draw [->,very thick] (0,-3)--node [auto] {Protocol~\ref*{protocol1}}++(6,0);
|
||||
\draw [->,very thick] (6,-3)--(12,-3);
|
||||
\node[draw=blue!50,rectangle] at (0,-2) {Reinforce regions};
|
||||
|
||||
\draw [<->,very thick] (12,-4)-- node[above] {Protocol~\ref*{protocol0} (neighbouring counts)} ++ (-12,0);
|
||||
|
||||
\node[draw=blue!50,rectangle] at (0,-5) {Attack Player 2};
|
||||
|
||||
\draw [->,very thick] (0,-6)--node [auto] {Protocol~\ref*{protocol4}}++(6,0);
|
||||
\draw [->,very thick] (6,-6)--++(6,0);
|
||||
|
||||
\node[draw=blue!50,rectangle] at (12,-7) {Send defence};
|
||||
|
||||
\draw [->,very thick] (12,-8)--node [above] {Protocol~\ref*{protocol4}}++(-6,0);
|
||||
\draw [->,very thick] (6,-8)--++(-6,0);
|
||||
|
||||
\path (0,-9)-- node[above] {Protocol~\ref*{protocol2} (resolve dice)} ++ (12,0);
|
||||
\draw [<->,very thick] (0,-9)--++ (6,0);
|
||||
\draw [<->,very thick] (6,-9)--++ (6,0);
|
||||
|
||||
\path (0,-10)-- node[above] {Protocol~\ref*{protocol4} (prove maintained ownership)} ++ (12,0);
|
||||
\draw [<->,very thick] (0,-10)--++ (6,0);
|
||||
\draw [<->,very thick] (6,-10)--++ (6,0);
|
||||
|
||||
\node[draw=blue!50,rectangle] at (0,-11) {Fortify};
|
||||
\draw [->,very thick] (0,-12)--node [auto] {Protocol~\ref*{protocol3}}++(6,0);
|
||||
\draw [->,very thick] (6,-12)--(12,-12);
|
||||
|
||||
\draw [<->,very thick] (12,-13)-- node[above] {Protocol~\ref*{protocol0} (neighbouring counts)} ++ (-12,0);
|
||||
|
||||
\path (0,-14)--node [auto] {Protocol~\ref*{protocol4} (prove non-negative)}++(12,0);
|
||||
\draw [->,very thick] (0,-14)--++(6,0);
|
||||
\draw [->,very thick] (6,-14)--++(6,0);
|
||||
|
||||
\fill (0,-15) circle [radius=2pt] ;
|
||||
\fill (6,-15) circle [radius=2pt] ;
|
||||
\fill (12,-15) circle [radius=2pt] ;
|
||||
\end{tikzpicture}
|
||||
\caption{An example turn during the game incorporates each of the protocols presented above, some many times.}
|
||||
\end{figure}
|
||||
|
||||
\chapter{Review}
|
||||
|
||||
\section{Theoretic considerations}
|
||||
|
Loading…
Reference in New Issue
Block a user