From 663b8ab4de3fe56c0f7321544f8c9d0a6a3c0a8d Mon Sep 17 00:00:00 2001 From: jude Date: Fri, 28 Apr 2023 12:42:58 +0100 Subject: [PATCH] Lower rounds. tex stuff --- static/js/modules/crypto/random_primes.js | 2 +- static/js/modules/interface/proofs.js | 5 ++--- whitepaper/Dissertation.pdf | Bin 498746 -> 499063 bytes whitepaper/Dissertation.tex | 23 +++++++++++++--------- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/static/js/modules/crypto/random_primes.js b/static/js/modules/crypto/random_primes.js index f0e799a..7a205b4 100644 --- a/static/js/modules/crypto/random_primes.js +++ b/static/js/modules/crypto/random_primes.js @@ -1,6 +1,6 @@ import { mod_exp } from "./math.js"; -export const KEY_SIZE = 2048; +export const KEY_SIZE = 512; export function cryptoRandom(bits) { if (bits === undefined) { diff --git a/static/js/modules/interface/proofs.js b/static/js/modules/interface/proofs.js index c21eceb..8d88b0e 100644 --- a/static/js/modules/interface/proofs.js +++ b/static/js/modules/interface/proofs.js @@ -1,6 +1,7 @@ import { cryptoRandom } from "../crypto/random_primes.js"; import { Region } from "./map.js"; -import { mod_exp } from "../crypto/math.js"; + +const ROUNDS = 12; function cryptoRange(upper) { // This is ridiculous: why implement a BigInt primitive, have it behave like a number, and then _not_ offer @@ -43,8 +44,6 @@ function cryptoShuffle(l) { return out; } -const ROUNDS = 24; - /** * R-S transform. * diff --git a/whitepaper/Dissertation.pdf b/whitepaper/Dissertation.pdf index a1e033e1eb436d23d7f74c98cc41c2d938df0789..4d424b7397cf4a46a181b2e1ce43862c75f7fb75 100644 GIT binary patch delta 14317 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 HDD?ja6Ty}M delta 13998 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 Hh{OF4UC;hH diff --git a/whitepaper/Dissertation.tex b/whitepaper/Dissertation.tex index b2285aa..dd4fdf4 100644 --- a/whitepaper/Dissertation.tex +++ b/whitepaper/Dissertation.tex @@ -305,7 +305,7 @@ 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. +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. \begin{landscape}\begin{tikzpicture}[every node/.style={anchor=north west}] % Create outlines @@ -361,7 +361,7 @@ The game is broken down into three main stages, each of which handles events in % Player disconnect handling \node[draw=blue!50,rectangle,very thick,rounded corners=0.1mm,anchor=north] (Disconnect) at (170pt, 0.5\textheight-4pt) {Player disconnects}; - \node[draw=red!50,rectangle,very thick,rounded corners=0.1mm,anchor=north] (Removeplayer) at (170pt, 0.5\textheight-36pt) {Remove player $P_i$}; + \node[draw=black!50,rectangle,very thick,rounded corners=0.1mm,anchor=north] (Removeplayer) at (170pt, 0.5\textheight-36pt) {Remove player $P_i$}; \draw[very thick,dashed,->] (Starttimer)-- (170pt, 0.5\textheight-109.5pt)-- node[right] {Timer expires} ++(Removeplayer); \draw[very thick,->] (Disconnect) -- (Removeplayer); @@ -399,6 +399,11 @@ The game is broken down into three main stages, each of which handles events in \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}; \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}; + + \end{tikzpicture}\end{landscape} \section{Message structure} @@ -654,7 +659,7 @@ This is used in point (2), as one player can then convince a neighbour in zero-k Consider point (1). One option is to prove that the sum of the committed values is 1 by using the additive homomorphic property. However, this allows a player to cheat by using negative values. To overcome this, we want a new protocol that is still in zero-knowledge, but proves additional properties of a reinforce action. -\begin{figure}[htp] +\begin{figure}[H] \centering \begin{tikzpicture} \tikzstyle{style}=[circle,minimum size=15mm,draw=black,fill=white] @@ -1044,9 +1049,9 @@ All measurements were taken on Brave 1.50.114 (Chromium 112.0.5615.49) 64-bit, u \label{table1} \begin{tabularx}{\hsize}{c *4{>{\Centering}X}} \toprule - Modulus size & Paillier encrypt & Jurik encrypt & Jurik encrypt with pre-computation & RSA encrypt \\ + Modulus & Paillier encrypt & Jurik encrypt & Jurik encrypt with pre-computation & RSA encrypt \\ \midrule - $|n| = 1024$ & 6.0ms & 4.0ms & 1.4ms & 0.015ms \\ + $|n| = 1024$ & 6ms & 4ms & 1.4ms & 0.015ms \\ $|n| = 2048$ & 34ms & 22ms & 7.6ms & 0.040ms \\ $|n| = 4096$ & 189ms & 128ms & -- & 0.093ms \\ \bottomrule @@ -1058,7 +1063,7 @@ All measurements were taken on Brave 1.50.114 (Chromium 112.0.5615.49) 64-bit, u \caption{Time\parnote{$|n| = 4096$ uses a less-optimised encryption method, as the browser frequently timed out attempting to pre-compute for the more-optimised version.} to process non-interactive proofs} \begin{tabularx}{\hsize}{c *8{>{\Centering}X}} \toprule - \multirow{2}{*}{Modulus size} & + \multirow{2}{*}{Modulus} & \multicolumn{2}{c}{Proof-of-zero} & \multicolumn{2}{c}{\hyperref[protocol1]{Protocol~\ref*{protocol1}} with $t = 24$} & \multicolumn{2}{c}{BCDG Range with $t = 24$} & @@ -1069,7 +1074,7 @@ All measurements were taken on Brave 1.50.114 (Chromium 112.0.5615.49) 64-bit, u \midrule $|n| = 1024$ & 10ms & 18ms & 1,420ms & 2,140ms & 443ms & 655ms & 3,530ms & 5,310ms \\ $|n| = 2048$ & 44ms & 68ms & 6,390ms & 8,140ms & 1,980ms & 2,400ms & 15,800ms & 19,000ms \\ - $|n| = 4096$ & 225ms & 292ms & 41,500ms & 34,400ms & 14,300ms & 11,400ms & & \\ + $|n| = 4096$ & 225ms & 292ms & 41,500ms & 34,400ms & 14,300ms & 11,400ms & 112,000ms & 79,300ms \\ \bottomrule \end{tabularx} \parnotes @@ -1081,14 +1086,14 @@ All measurements were taken on Brave 1.50.114 (Chromium 112.0.5615.49) 64-bit, u \label{table3} \begin{tabularx}{\hsize}{c *8{>{\Centering}X}} \toprule - \multirow{2}{*}{Modulus size} & \multicolumn{2}{c}{Proof-of-zero non-interactive} & \multicolumn{2}{c}{\hyperref[protocol1]{Protocol~\ref*{protocol1}} with $t = 24$} & \multicolumn{2}{c}{BCDG Range with $t = 24$} & \multicolumn{2}{c}{\hyperref[protocol1]{Protocol~\ref*{protocol4}} with $t = 24$} + \multirow{2}{*}{Modulus} & \multicolumn{2}{c}{Proof-of-zero non-interactive} & \multicolumn{2}{c}{\hyperref[protocol1]{Protocol~\ref*{protocol1}} with $t = 24$} & \multicolumn{2}{c}{BCDG Range with $t = 24$} & \multicolumn{2}{c}{\hyperref[protocol1]{Protocol~\ref*{protocol4}} with $t = 24$} \tabularnewline \cmidrule(l){2-3}\cmidrule(l){4-5}\cmidrule(l){6-7}\cmidrule(l){8-9} & JSON & with LZ-String & JSON & with LZ-String & JSON & with LZ-String & JSON & with LZ-String \\ \midrule $|n| = 1024$ & 1,617B & 576B & 338,902B & 95,738B & 123,354B & 34,857B & 895,474B & 248,420B \\ $|n| = 2048$ & 3,153B & 1,050B & 662,233B & 187,333B & 252,230B & 70,868B & 1,746,017B & 485,787B \\ - $|n| = 4096$ & 6,226B & 1,999B & 1,315,027B & 368,646B & 484,117B & 135,990B & & \\ + $|n| = 4096$ & 6,226B & 1,999B & 1,315,027B & 368,646B & 484,117B & 135,990B & 3,458,376B & 964,913B \\ \bottomrule \end{tabularx} \parnotes