From 35dbf321e9458845da31756038946126fd852f96 Mon Sep 17 00:00:00 2001 From: jude Date: Fri, 14 Apr 2023 16:04:24 +0100 Subject: [PATCH] prove and verify rounds --- static/js/modules/crypto/paillier.js | 15 ++- static/js/modules/crypto/random_primes.js | 4 +- static/js/modules/interface/proofs.js | 140 ++++++++++++++++++---- whitepaper/Dissertation.pdf | Bin 389804 -> 390297 bytes whitepaper/Dissertation.tex | 16 +-- 5 files changed, 142 insertions(+), 33 deletions(-) diff --git a/static/js/modules/crypto/paillier.js b/static/js/modules/crypto/paillier.js index f6b9b54..fead085 100644 --- a/static/js/modules/crypto/paillier.js +++ b/static/js/modules/crypto/paillier.js @@ -52,18 +52,25 @@ class Ciphertext { this.pubKey = key; this.plainText = plainText; + while (this.plainText < 0n) { + this.plainText += key.n2; + } + this.readOnly = false; } update(c) { this.cipherText = (this.cipherText * c.cipherText) % this.pubKey.n2; this.r = (this.r * c.r) % this.pubKey.n2; - this.plainText += c.plainText; + this.plainText = (this.plainText + c.plainText) % this.pubKey.n2; // Force into range while (this.cipherText < 0n) { this.cipherText += this.pubKey.n2; } + while (this.plainText < 0n) { + this.plainText += this.pubKey.n2; + } } toString() { @@ -195,7 +202,11 @@ export class ReadOnlyCiphertext { BigInt(statement.challenge) ); - return verifier.verify(BigInt(statement.proof)); + if (verifier.verify(BigInt(statement.proof))) { + return BigInt(statement.plainText); + } else { + return null; + } } clone() { diff --git a/static/js/modules/crypto/random_primes.js b/static/js/modules/crypto/random_primes.js index 9f4c839..93628b5 100644 --- a/static/js/modules/crypto/random_primes.js +++ b/static/js/modules/crypto/random_primes.js @@ -20,9 +20,9 @@ export function cryptoRandom(bits) { } /** - * Generate random integer of length 2048 bits. + * Generate random integer of length N bits. * - * We generate between 2^2047 and 2^2048 - 1 by adding differences. + * We generate between 2^(N - 1) and 2^N - 1 by adding differences. */ function generate_bigint() { let intRepr = cryptoRandom(); diff --git a/static/js/modules/interface/proofs.js b/static/js/modules/interface/proofs.js index 6a616de..196810d 100644 --- a/static/js/modules/interface/proofs.js +++ b/static/js/modules/interface/proofs.js @@ -21,31 +21,12 @@ function cryptoShuffle(l) { return out; } -window.cryptoShuffle = cryptoShuffle; - const ROUNDS = 24; -function proveRegions(regions) { - // Construct prover coins - let coins = []; - - let regionNames = Object.keys(regions); - for (let x = 0; x < ROUNDS; x++) { - let psi = cryptoShuffle(structuredClone(regionNames)).join(""); - let newRegions = structuredClone(regions); - // rearrange keys - for (let index = 0; index < regionNames.length; index++) { - let c = regions[psi[index]].clone(); - // re-blind - c.update(c.pubKey.encrypt(0n)); - newRegions[regionNames[index]] = c; - } - coins.push(newRegions); - } - +function getCoins(text) { // Construct verifier coins let hasher = new jsSHA("SHA3-256", "TEXT"); - hasher.update(JSON.stringify(coins)); + hasher.update(text); let hash = hasher.getHash("UINT8ARRAY"); let verifierCoins = []; @@ -57,14 +38,129 @@ function proveRegions(regions) { } } + return verifierCoins; +} + +window.cryptoShuffle = cryptoShuffle; + +function proveRegions(regions) { + // Construct prover coins + let proofs = []; + let privateInputs = []; + + let regionNames = Object.keys(regions).sort(); + for (let x = 0; x < ROUNDS; x++) { + let psi = cryptoShuffle(structuredClone(regionNames)).join(""); + let newRegions = structuredClone(regions); + + // Rearrange keys + for (let index = 0; index < regionNames.length; index++) { + newRegions[regionNames[index]] = regions[psi[index]].pubKey.encrypt( + regions[psi[index]].plainText * -1n + ); + } + + proofs.push(newRegions); + privateInputs.push(psi); + } + + let verifierCoins = getCoins(JSON.stringify(proofs)); + + let verifications = []; + // Construct prover proofs - for (let coin of verifierCoins) { + for (let i = 0; i < ROUNDS; i++) { + let coin = verifierCoins[i]; + let proof = proofs[i]; + let privateInput = privateInputs[i]; + if (coin === 1) { // Reveal bijection and proof for zero + let zeroProofs = {}; + + for (let i = 0; i < regionNames.length; i++) { + let name = regionNames[i]; + let psiName = privateInput[i]; + + let c = proof[name].clone(); + c.update(regions[psiName]); + zeroProofs[name] = c.proveNI(); + } + + let ver = { + psi: privateInput, + zeroProofs: zeroProofs, + }; + verifications.push(ver); } else { // Reveal proof for plaintext + let valueProofs = {}; + + for (let name of regionNames) { + valueProofs[name] = proof[name].proveNI(); + } + + verifications.push({ valueProofs: valueProofs }); } } + + return { + regions: regions, + proofs: proofs, + verifications: verifications, + }; } window.proveRegions = proveRegions; + +export function verifyRegions(obj, key) { + let verifierCoins = getCoins(JSON.stringify(obj.proofs)); + let regions = obj.regions; + let regionNames = Object.keys(regions).sort(); + + for (let i = 0; i < ROUNDS; i++) { + let proof = obj.proofs[i]; + let verification = obj.verifications[i]; + + if (verifierCoins[i] === 1) { + for (let regionName of regionNames) { + // Undo psi + let originalRegion = proof[regionName]; + + // Compute product + let c = new ReadOnlyCiphertext(key, BigInt(regions[regionName])); + c.update(new ReadOnlyCiphertext(key, BigInt(originalRegion))); + + // Check ciphertext is zero + let plaintext = c.verifyNI(verification.zeroProofs[regionName]); + + if (plaintext !== 0n) { + console.log(plaintext); + return false; + } + } + } else { + let foundOne = false; + + for (let name of Object.keys(verification.valueProofs)) { + let ciphertext = new ReadOnlyCiphertext(key, BigInt(proof[name])); + let plaintext = ciphertext.verifyNI(verification.valueProofs[name]); + if (plaintext === null) { + return false; + } else if (plaintext === 1n) { + if (foundOne) { + return false; + } else { + foundOne = true; + } + } + } + } + } + + return true; +} + +window.verifyRegions = verifyRegions; + +// verifyRegions(proveRegions({A:paillier.pubKey.encrypt(0n),B:paillier.pubKey.encrypt(1n),C:paillier.pubKey.encrypt(0n),D:paillier.pubKey.encrypt(0n),E:paillier.pubKey.encrypt(0n)}), paillier.pubKey) diff --git a/whitepaper/Dissertation.pdf b/whitepaper/Dissertation.pdf index 941cf311245373a9a96082eb5007e6a9b812002b..9de8332d14eb68bc857bbccca12b8588b49dc6ab 100644 GIT binary patch delta 41134 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�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 Wba--QW(qSnI5;ve3MC~)PeuwYECM$G delta 40621 zcmV(nK=Qwt=@+c!7qCF#f853qzUx;Ed7Aj) zA;)~Ir2P6+byf8=xg#m3K!Ap9_N%I^zWSSGyuBf8r|5b`NLh|8TPV z`&1{~X8d%S+o7lTcB0>A=%@Bz$NI7RL@k}2CK}tGX|iFQ z>wXUpGmqst=98bL9h>DmLAS=<8#Q>2_8k@2r5t{aLvg2$& z&TeEL)uWTCi27lse-;+P$%e1X*!D;2Gm`@H$bPiVB68*|fAIY>4#%-R$F!F?(HpI5 z6_?s8)omd!NnLprb?rQNmY&A}v;!-g>Gf$CsqX-4KDSfNo5=YP;0tX68qPI5!hdZu z@%-F#r7hQD_bP&qDgx2r@q&*qv$V$hdoZ5p?Qpg)w3`%he_9xlg->#t+Q$}zXzfIL zVI_ky+o@TmNp$-N{maO9!ybMe_0;8w!tZQ$2F+j z&L9)+*v++ef?zIHRB@iG^@Ps8waKCe_j4NBhTl=O_&ZC7i!6=Lep$C}H2x9U{zdzI66uJ7c#`Vv#D;Dww6t zY5GUB4d?}UQs6m)tyF1nj#(a;ihc1&svew+ zxiew_(51)J5{~#-kB2*Ysk!m7?T2$)chcDoUzqk^nEXe2*q&_3CtLE#mU6OR zKEX5we^1#6LL*d?>>w5uiNXM0Pj(cI{3F;$%lF%VkulB(y zIPI(gR8LBdPNazU$8lI>pWl4ICi_Tl@B(aUeDB)EZ(JNHqu2D&^U!NZAs~ctCkrBS zP^#%?by6fwaZ?=Nwfsab>;;tRSgxcBf8;8FIOR+Nk<0bR`_XnaYeh%(JhQa;o(7Rw zN5293jnhmo_T#Bura1`Gnk3Ly3H~(EBn^h+26aT{uGu7bL>j&C3Ez93pc9(}%1ljQ zFa`~VSb&P|Xdv3nOY6*l!c>Z*7AUxvu=58P-0VH6cI{QP^ltr<*AHA!`mw7lf0G~U z9d~YVOXoe4lM4Lky`x4F^#=MqAXx)_^RV`bd&@kqW*)5R%&VTZ#5Xe~gme;Yve(Qd zkDf-y)%Z6U!NQ%1+4N2R=x^t;2BcSjMC6(c$gkOG0I;i1Q-5Db!1P?kN|9krW4O zU@dIpza?4XcvPz8Sm23%Q#J@_m^kNg_URlMzCtE3(`P3N{Bnc=w1Rn+f5X`n(iEB2 zc8D9ovS+(pgW-+X+q!wxyKDVt#}X{aej@aH#q>JXL)rAOy~{JA8mMtuRCz+9)SHB=>RTS zq>$*s^EJ_hmWkMcJ=^#*f4tkT0#g&o443(Jr6p~^x|LdYQQE`3p9=VFqBc{#L$M)! z9Ie2IQ;cCS%p}Dp(8vN?p!bQLm9i}ZvC(%Wy10R2Opl5x^H7ZH2Sao?{s;jTEXX}y z=!467OSCaq!S4@S=xlYFMn5^s7#>@Coj#rSOq0MHyIUMH*pjZQe>f@CdSBnFujRxl zjSI6L56U-aB_|_2vh0ja2uQ%9HL!?Bj&_&8{ zgl(be;QKsKj}hbfe*ukPY2?#M9;l#z^9iY>Tsjx&`k`4kIO6| z>Os3EHp#Cw{RA~lp0+*%DRr5y58{F8q!r|ZQii0XE}c^Ee<*5sYV(GEo`m5-P@kzw z+dtWwltjz~98ofba}d@ss(Yt(in)_`-#0v#MEZ28+i}{YFGDY!z}e2m1=13tok>@* zIhRBQSy?CcYT-b!lJnK7UYbK7l^WvPbKP|W*BW+-QSK9Ccl#gv^}1dP2wSbEc9fjede<)Z>>&jLfGT_4+cMY6E1BN|WMr(<5CL*%Q)6!-kUaRPz!c~oA0)glT zB7)}ZX7Zwg`uKpDFiMhGyr`v14PnDL$z5F&n=hlxuc~}^Wtl;u1^bJI#k^rkY$u=H z3dgLXfyw$jT-L;k7YAFu24g98RDpt>enr9MCXj*Uf8%#7;u4L9=@|1|Ez-$?noTQV zLdf~-1PCm9bt|xAbU^g$@dm1-Dv6a8nVb$KQC0<|q$*z@z9O~$85hr9d;)iM5~;#@ z0}NJ)HusOtd*SWOrMRVAc#)Y}F!H{q7DP|}293VZ3ZpmR5}1�QB=R1eV+%f5An) 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

=^txL*GIBQK2pSu!*yWKes=kkGv`506x1HJ+4r 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 bIB!UADtc3Cpc@2AATN&)ke*&%QvvuN^91J7 diff --git a/whitepaper/Dissertation.tex b/whitepaper/Dissertation.tex index 458d847..a2b04f7 100644 --- a/whitepaper/Dissertation.tex +++ b/whitepaper/Dissertation.tex @@ -566,7 +566,7 @@ Timing results versus RSA are backed experimentally by my implementation. The fo console.log(performance.measure("duration", "start", "end").duration) \end{minted} -Performing 250 Paillier encrypts required 48,800ms. On the other hand, performing 250 RSA encrypts required just 60ms. +Performing 250 Paillier encrypts required 47,000ms. On the other hand, performing 250 RSA encrypts required just 40ms. The speed of decryption is considerably less important in this circumstance, as Paillier ciphertexts are not decrypted during the execution of the program. @@ -580,7 +580,9 @@ Taking this idea further, one may simply cache $r^n$ for a number of randomly ge \textbf{Alternative Paillier scheme.} \cite{Jurik2003ExtensionsTT} presents an optimised encryption scheme based on the subgroup of elements with Jacobi symbol $+1$. This forms a group as the Jacobi symbol is multiplicative, being a generalisation of the Legendre symbol. -I used this scheme to reduce the time to encrypt to half. Greater optimisations are possible through pre-computation of fixed-base exponentials, but this takes a considerable amount of time, and I found it infeasible within my implementation, since keypairs are only used for a single session. +Using this scheme alone reduced the time to encrypt by a half. Greater optimisations are possible through pre-computation of fixed-base exponentials, but this takes a considerable amount of time, and I found it infeasible within my implementation, since keypairs are only used for a single session. + +Furthermore, in practice gains were closer to a reduction by a third, since in the modified scheme additional computation must be performed to attain the $r$ that would work with normal Paillier, in order to perform the zero-knowledge proofs from before. \textbf{Smaller key size.} The complexity of Paillier encryption increases with key size. Using a smaller key could considerably reduce the time taken \cite{paillier1999public}. @@ -599,12 +601,12 @@ The other proofs do not translate so trivially to this structure however. In fac All measurements taken on Brave 1.50.114 (Chromium 112.0.5615.49) 64-bit, using a Ryzen 5 3600 CPU. \begin{center} - \begin{tabular}{|c|c|c|} + \begin{tabular}{|c|c|c|c|} \hline - Modulus size & Na\"ive encrypt & Jacobi encrypt \\\hline - $n = 1024$ & cell5 & 4ms \\ - $n = 2048$ & cell8 & 22ms \\ - $n = 4096$ & cell8 & 128ms \\ + Modulus size & Na\"ive encrypt & Jacobi encrypt & RSA encrypt \\\hline + $|n| = 1024$ & 6ms & 4ms & <1ms \\ + $|n| = 2048$ & 34ms & 22ms & <1ms \\ + $|n| = 4096$ & 189ms & 128ms & <1ms \\ \hline \end{tabular} \end{center}