From 6005cd6aff6c69ede4bc2b505d6014ab38332883 Mon Sep 17 00:00:00 2001 From: jude Date: Fri, 28 Apr 2023 10:32:05 +0100 Subject: [PATCH] Fix bit length proof --- static/js/modules/crypto/random_primes.js | 2 +- static/js/modules/interface/player.js | 23 +++++++++--- static/js/modules/interface/proofs.js | 30 ++++++++++++++-- templates/index.html | 18 +++++----- whitepaper/Dissertation.pdf | Bin 498480 -> 498746 bytes whitepaper/Dissertation.tex | 41 ++++++++++++---------- 6 files changed, 77 insertions(+), 37 deletions(-) diff --git a/static/js/modules/crypto/random_primes.js b/static/js/modules/crypto/random_primes.js index 7a205b4..f0e799a 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 = 512; +export const KEY_SIZE = 2048; export function cryptoRandom(bits) { if (bits === undefined) { diff --git a/static/js/modules/interface/player.js b/static/js/modules/interface/player.js index 46fe980..8d210ff 100644 --- a/static/js/modules/interface/player.js +++ b/static/js/modules/interface/player.js @@ -8,6 +8,7 @@ import { proveFortify, proveRange, proveRegions, + verifyBitLength, verifyFortify, verifyRegions, } from "./proofs.js"; @@ -208,12 +209,24 @@ export class Player { for (let regionName of Object.keys(data.fortify.fortify)) { let region = Region.getRegion(regionName); - region.reinforce( - new ReadOnlyCiphertext( - this.paillierPubKey, - BigInt(data.fortify.fortify[regionName]) - ) + let c1 = region.strength.cipherText.clone(); + let c2 = new ReadOnlyCiphertext( + this.paillierPubKey, + BigInt(data.fortify.fortify[regionName]) ); + + c1.update(c2); + + let v = verifyBitLength({ + ...data.fortify.rangeProofs[regionName], + cipherText: c1, + }); + + if (v !== null && v <= 8) { + region.reinforce(c2); + } else { + return false; + } } // request proofs diff --git a/static/js/modules/interface/proofs.js b/static/js/modules/interface/proofs.js index 3f0809b..c21eceb 100644 --- a/static/js/modules/interface/proofs.js +++ b/static/js/modules/interface/proofs.js @@ -45,6 +45,11 @@ function cryptoShuffle(l) { const ROUNDS = 24; +/** + * R-S transform. + * + * Uses the hash of the proof content to produce verifier coins + */ function getCoins(text) { // Construct verifier coins let hasher = new jsSHA("SHA3-256", "TEXT"); @@ -186,6 +191,9 @@ 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) +/** + * BCDG Range proof + */ export function proveRange(cipherText, rangeUpper) { if (cipherText.readOnly) { throw "Cannot prove range of ReadOnlyCiphertext"; @@ -322,6 +330,18 @@ export function proveBitLength(cipherText) { m >>= 1n; } + // Pad out + while (bitCommitments.length < 8) { + let c = key.encrypt(0n); + bitCommitments.push(c); + + let c2 = c.clone(); + c2.mul(e); + prod.update(c2); + + e <<= 1n; + } + let bitProofs = []; for (let bitCommitment of bitCommitments) { @@ -394,7 +414,13 @@ function proveOneOfTwo(cipherText) { cProofs: proof.cs.map((p) => p.proveNI()), }); } else { - let c1Index = proof.cs.findIndex((c) => c.plainText === 1n); + let c1Index; + if (cipherText.plainText === paillier.pubKey.n2 - 1n) { + c1Index = proof.cs.findIndex((c) => c.plainText === 1n); + } else { + c1Index = proof.cs.findIndex((c) => c.plainText === 0n); + } + let c1 = proof.cs[c1Index].clone(); c1.update(cipherText); @@ -699,8 +725,6 @@ export function verifyFortify(obj, key) { } } - // TODO verify range proofs - return true; } diff --git a/templates/index.html b/templates/index.html index b28a7ac..e9067c2 100644 --- a/templates/index.html +++ b/templates/index.html @@ -325,43 +325,43 @@ console.log(`Bench done. Time per verification: ${performance.measure("pv-duration", "pv-start", "pv-end").duration / ROUNDS}`) } - function RangeProofBench() { + function BitLengthProofBench() { console.log("Warming up") const ct = paillier.pubKey.encrypt(5n) const ROUNDS = 20; for (let i = 0; i < 5; i++) { - proveRange(ct, 10n) + proveBitLength(ct) } console.log("Benching") performance.mark("rp-start") for (let i = 0; i < ROUNDS; i++) { - proveRange(ct, 10n) + proveBitLength(ct) } performance.mark("rp-end") console.log(`Bench done. Time per proof: ${performance.measure("rp-duration", "rp-start", "rp-end").duration / ROUNDS}`) } - function RangeVerifierBench() { + function BitLengthVerifierBench() { console.log("Warming up") const ROUNDS = 20; const ct = paillier.pubKey.encrypt(5n) - let proof = proveRange(ct, 10n) + let proof = proveBitLength(ct) for (let i = 0; i < 5; i++) { - verifyRange(proof, paillier.pubKey) + verifyBitLength(proof, paillier.pubKey) } console.log("Benching") performance.mark("rv-start") for (let i = 0; i < ROUNDS; i++) { - verifyRange(proof, paillier.pubKey) + verifyBitLength(proof, paillier.pubKey) } performance.mark("rv-end") @@ -400,7 +400,7 @@ }; } - function RangeSize() { + function BitLengthSize() { const ct = paillier.pubKey.encrypt(5n) let ROUNDS = 10; @@ -408,7 +408,7 @@ let compressedSize = 0; for (let x = 0; x < ROUNDS; x++) { - let s = JSON.stringify(proveRange(ct, 10n)); + let s = JSON.stringify(proveBitLength(ct)); size += string_to_buffer(s).byteLength; compressedSize += LZString.compressToUint8Array(s).length; } diff --git a/whitepaper/Dissertation.pdf b/whitepaper/Dissertation.pdf index 6b9d516edc3d192d27953698998ca81600e61ece..a1e033e1eb436d23d7f74c98cc41c2d938df0789 100644 GIT binary patch delta 39401 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
    t&1y+TmglW=~9WvP{K>UBX^T1kun=grw(*S zU~Glc!tLgGX@paZE6NS#nJ{PS2Cal^GCm?Ll_Wwf7&A!#|A1fC@xC`-y$Zr}q6l_m z6~htMa#C#QpZ7|vJTYZ4|4YV7^DyqR+qff!twOtaKj>pkHHnnPNg zCR?WzIN**?%~Jb2{O9;9#r~eT^wa!)GJFmZ-utiG^BEj+ug%Rae%4F*6@0pk+!0`q zxGEjL3f_u^Z zlr-(LI!a5~vJ5eEB`nBq1K52r(6EuG?>e3*Om{b3{g}y$_nntG$xg#{$Uo*`@<@nZ zM#}&e#@VKIBU#Nrmn$E(nEX998kO4vphUQJStQ;8(_#{PpfKDN9u@-8x|amb&=4z4TQlAzs1GvEvNU>LR)dwwt1*k7 z-P|S8wjwZ*50I=*Ff>O>Q4TgSXh_0=T84Xss^ZH!U?w+KbiRMqefO>ci49UweF)jc zyz6zRAo%(6c>J<7F@%Lgj}Ltp-}sm(>?%Z3?e5dlPrKfS3#TB7?q~Ua41;`plHowK zh-1aQ+$0rY-j71bo6`BX2QKjp1CqUuqd8?l2ayalaV^>W40zwf$y?NTFrP4sNj+iL zO@7i;=zN0=i3#6}eJ)q|JYOIt)AY4{;WR`Z44>EG^~|th(Lj2GN$MA9*Mo`iS1)hN z(%ZkEd&toyM04f<9kF(|)4dbsHxWQUj5!v)ImPilNeItmH*7}e-DA^k_EO`gyD2ZK zrhZX^`AJY=b&xIU+r8g%Wq}{>quJz4anhnJl8EXu%$Bdlh)(fDEr9aW$?o_#0w1#P zG7sf`-^{sjcUbj?i$w`t6YjEN1-9?Df@CCf+Sk@{N&^a^Ga?<|o4YXf8q$(b{msV1!>S&CPZ(Nw9lB8I>Ui};Y)hOJ z@41IiS8>2pTV7XX&1U`jAZsH?T5)*a+j?O_pzYd!oz)$xPaTu6!Ae#QVi`kFtsgTh z$bNi^Fyqm!ylr7J-_td#dR_p;Ki{$#$w_r_1*Nt~Nk?%sRzVV8g+fKrA@;mHk%e4k=eG?V&b z;#KG@uDjqbhI`2;MQ5vr*VSltA$NT5amPm-Z((6>LCTj7RbY3AAFZ4x6< zCIMtaHZ@YCXJpIDx!yIcohJy#_j6GdsrDyaS@eW2rk{fd=B6Dw+XhbHV(?4}&HR=C zjmgy;Ka3bDnal;YsdhX-^E5ATp&3Km?wFOHa&x^c?xROta1rf0S<)=ImR4cO4tsy4 z0$gPzRpOc#>{t8_>lp@fvq(X7T~-zXftH|*k_cfeM2|9xWuC<-62$g|13`~xWhlvP zDEkcHK1YY-SE&1=s13w?8a22}THPcxO7%yuOP$Tn1Vt1R?IF%c)9RmxzUv)aQAZ4H4lr^(_! zOAJK6e^bJBP(6Tm7rkm^;~<`v+gJ?@<(~~%_3zmpnrA@2n*_C7CL6PUXY{eFquVs9 zsiYfWZ-d&~Zf#&O&}i);#*Tuy>hEv<J;YPhP7%N{$0Dy!oGm0Ozu6{ zMhb8?frfbc@_c{L7wSP&?B21P8ceIU68+#|E%1F$4byg; zYRT**qG%Ae-%8SU=f6+sXEMt4m`{+v7PS8fz*?KVG3=a1V63bXmk)_NFo6>qKM!+} z9nC&`j&ePXIJe`5r95ywT~HT1_}ENT4*3ILn;nUoJ>#H6oLuhr6n}@lZ84{RAt*V$ z?&l+s;3&W_BRUy}7Rd0e+V*zi4DuxACR0R|n?G=V`+lLj7`|;GII=#igYJWyo2!=$ zoMiaQztK3a>31bL>|d+eJ!Gt(3whO4?Lv3#t@2La_@e&G_ph_TLk`q(6g0PuI?(g_ z@NT)J!^=dPVioH*nK9HT6Up*oR(wdK+;*Ve!yko&5g1er;w+7TWaNbB6ctxG0J#5 z2Wo3duondng}f@(&o4UrWfeE_QH!SD+7tE8#vIVhT^Em0M)#h z+VWvb6hFV9xi%2l5%jRE40ZHZB9UNmUUr|HjWEMWOP6p6{@S^on-K+Vi6J2cj59Jy zKjCe_trqV`YE=pxld#@}E$L$C0={O<8r~u=`W7@f5P2$oCJC{wyy7Nb*{2!d$~1Wu zVlIxjWZ_EPL(&lgC~djhn(jm$U>cuk+z#s5R`{HrVy~Dd$3yG&lk_`RUExC^<6W5?5fyaMFq@x z8T4)ukqeRDGh@XPQuneg0fXs0bu8YWqE{Yg8fm7*P2ZO1C^485UZ=DSY)~7`kx3NSrHl-4 znv5T_1}{RTe#YeT+bf0W4b9?bEQ;E0L+j|JX>dFw2qtA2Q@7=*44fN! zI%7a_Lu|-Zdw+k;1{_^tDsJdx`GkGCZMX8jTp9lPGq}EW#1rI)ru~h<4&fArfT6+y zP%bd!B^dmY1CLML)f#5$X~W146NQ4I{9pm-e?!vBW3fM@3xfIolP1wnLq+iT6dc}r zcrrp?@&6BDf(Qul{}*A3HCl*U5+o1&V~B+CYGsLWSb(Lcili4kNv)?!S#boQg9dMn zKd==Z|NdhZm6;D){DF|UT@K&neZ#6Qk`L2WPA3I(GOroysu$^isc-U^Nv)`2FfH{^ zyVxz4gE6fvaBVZ)dkA##M=>lh(O)7r>$|Y!g%v$YaMPxG5KO?E3p9G}b%VUJ;EYNB zQkWZpI0nZ!*lsKm{FzsP5=L&3-^`jA6223qMD!$p-4j}v!lZ*&UrQ1yogJ#g)1{)t zOej1J&K1z%c5wk6w${4S-9BtMpJq}dsWLOVs7NLTv%}P4>|stZRIn(jZ^8D|ESSs$ z2{qAItu5vEKY=frugxi&nm8aGVSW97g)xB-{Wx-AgE)$?zK_zd0UQMxn>F6V;@$8konZ zp(GCjVBX>9KZvKAacTw{^yuWuy2Fr-(Hp>pmkFA55!!b3-TYlf;jL(t%u_!)UT^!| z`WNoFG)R<0x}<+RM%UpUB}POkPII2@@HUOuRabE7yuRDo0vc_vVR*f=+Pv9}Ekr2X z?HrB|s?<}*{T{{>xIZ3iH@P{63fp9)e}~)ybg_bxV_27TmrjEb%MIA`SB$*pHrW%S zOFNriKBeo4a18t*`el*Zub1iK&t1uoH@x8%XVdTqxvh%y(Q1>x9O~_ zsV>7ov6OmlcKV7Uu_NNGz9iHktDVuqe7w2r5=TY2=VEV)3+bsjyrk4& zN^%x+B6`)Zht?*xsvhtG=Tk;S!#MERk1)@%-#aevpN0W*G!t{4IMT%T!B33*F`O}gXpF7o_+jJS zRR^DD;NNYROIO6Bo8heG{yWePA?B2vOwgSKr@u0u?g#1vw~)E@Y~0RA0;{~fsKchr z=q$7JhzKn>4jXOyO@loZV7uFFmW?#1?465X$oMd6Rylx~TeE&ubdg)!<&7cr=;LYq zXtI!Y@7-zyus2NvRZy9G&Yg}wc6^wpeu9j#$N`Se{ucZ-KOU%hI$16|>h{@2Ecplt z9kzN*2bLh+I)eiJhX*2Rz)yFNlXPZx0VINL&MZ|=sPF^Lpa0kJ;7?;o#%3bq7cj-+ z({=E(VHD&SNYhTnCUfS8FoGF%@c5KnY+e6lq5pk?F`9^j!uTTErPm7$Z!+zfc z)GK%jw1-lR`R^NsCpo`t1-qJt>(#LZ>`yvli9}zYdzO427WHVxqGWdE zNUO-`=8x|IRM*v6rWp}w{aLcMGW2Hjs}O6Vt<7y@9P@54T3bLH%MV#FWetuisWC>> zS=8BEYh3nzu5PgyZuARe>V`VwE&>xy2akxyml0VNY;(89Gzy!K5c=?jAa(6(lMcp< zIgIq)h-K!Ip;!g4qFTQy>t2eWWJ*I&z@M$+)PjI7ePY2)493_8X9{Q6Of+4bZF2D5 zAF~#Os~D>!wa*0B>AIJqov?V|b#TOw1`AUqpQ1M>GL4~E@YkIyKLjV@45ORyn^B$m zOg=S{HREc@X;ZGEyyxHRI~-UFSw?F?`XL)xT4jjM_{^kgDV_S4qUIx(vF?yqNY<;} zV>mE0Xi#J(5G)i{s_2l|imbnuPzqe57q5yg$?soKr4er9EdqH{X}0HSYUx~WIy}zs ztJsH?w#@HVQYoD2{h?E$n4-!#FjFmM77r7`c4g7Q44`u5%}F)wmx?runvc`lEGwLG zoZfkZTa}f)!FQEMqy<_qK9DvQvl^=|>j$pN^)1-`>6@XpTcH}E>w&f{8k$e%?YY&D z_;;c-4>@M@NCnWm@Fb3BryVuCoI{$=5!91igWPD2%G7i3j53-t{rw{D(yFiS@Y@e& zD?Q81dvq^@8>COQgr*QVB^N0>nY;(ij``Go|1HGv=Fndr$cT;~@^Otg2Wj#dvH*hM z#*AmfGS4Tz%mn#GWyTp?T&5Cp2_Qr1CwhM2Da?f4S`bboIf!=BPdMiE-FxjQ05eAC zheAj@3F$0suWg|WG21)*?LD#4(K#iZ{+#pcnf6j9anqgFk!)%=@nVXJ&d3tg8b3k2 z&fewb-P+Ss_TpiglhoUj0|$w4(}hnNt*ac$ zvHp%ii7}&r+7%xcuV$)uACR=%K?6?qV$-p;T_Y=x3Q$5QBldYWZ5N(AzD!QDKjEDR zDm#XU%rkZ@wmkCqVS9Q;{)CEb*(mmMdx#O5LFjuA;*-O|Z65TLJUl)0D1fU#rGO$2 zcP7K%Q-Q1kJ2{{p?+X^W+zgJ!$d1I?kM)GEXo~?NT`bQ3 zB$EXv{`ssRNNWr>e@4DoC9d~5L0P1`AE|hnU5Z0Wsq2_*F!(cr^i=? zSwZ%(Xg?_Pt>LICS@m?M#n*-vO}cVHgeK0e@W(fMANc~ zRw?Nf@JH#fTG>*X%|8r`R_Ew@{y3`pO`)Ft_$RKQH?=~vhP`nnFX}}`{Y;WqRGiVl z5U#u;kJp8!{2;g2ZX-~@q52qTJXv2%X~3TO&GQglzAkmOQ}^8g_n(L1u_;#{)y!hx zuZs2%bo7)<#boE~l-!2fV_ja}c(~2DihUe9AEc99H)7t&In;Et-b6n7?dV+-Ifc>n zg^GN5YT%9571ck7kZLDdp@T>m&TLV@YH?l|%%L#ym(1;9C75gpU1OD4*o$LL?OhkY z4_b~`HSYe#EY|myzV!&hp!JA!8kLb0Rt*Hfnk~HtTVyk$?~UkNm*?*PI`a+qt;;gR z@F-o(Yh;~a+Jpn*6OwK!Y3mb1iB^s3j%kGPoxksMA0#adp0UkqN?7M-ResL^x~m>Y U!_LBHz!QP;HYbxOV2P%GelK=n! delta 39167 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 diff --git a/whitepaper/Dissertation.tex b/whitepaper/Dissertation.tex index f969d82..b2285aa 100644 --- a/whitepaper/Dissertation.tex +++ b/whitepaper/Dissertation.tex @@ -1030,6 +1030,8 @@ The other proofs do not translate so trivially to this structure however. In fac \textbf{Optimising language.} An optimising language may be able to reduce the time taken to encrypt. On the browser, this could involve using WASM as a way to execute compiled code within the browser, although WASM does not always outperform JavaScript \cite{wasm}. +Another approach is to use a web extension to communicate with a system daemon providing the relevant functionality. This is language-agnostic (except that the extension itself must be JavaScript), and the daemon could take advantage of other system features such as multiple cores. The multi-round proofs in particular are embarrassingly parallel, as each round is independent of the other rounds. + \subsection{Complexity results} All measurements were taken on Brave 1.50.114 (Chromium 112.0.5615.49) 64-bit, using a Ryzen 5 3600 CPU: a consumer CPU from 2019. Absolute timings are extremely dependent on the browser engine: for example Firefox 111.0.1 was typically 4 times slower than the results shown. @@ -1042,9 +1044,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 & Na\"ive encrypt & Jacobi encrypt & Jacobi encrypt with pre-computation & RSA encrypt \\ + Modulus size & Paillier encrypt & Jurik encrypt & Jurik encrypt with pre-computation & RSA encrypt \\ \midrule - $|n| = 1024$ & 6.0ms & 4ms & 1.4ms & 0.015ms \\ + $|n| = 1024$ & 6.0ms & 4.0ms & 1.4ms & 0.015ms \\ $|n| = 2048$ & 34ms & 22ms & 7.6ms & 0.040ms \\ $|n| = 4096$ & 189ms & 128ms & -- & 0.093ms \\ \bottomrule @@ -1053,20 +1055,21 @@ All measurements were taken on Brave 1.50.114 (Chromium 112.0.5615.49) 64-bit, u \begin{table} \fontsize{10pt}{10pt}\selectfont - \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 proofs} - \begin{tabularx}{\hsize}{c *6{>{\Centering}X}} + \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} & - \multicolumn{2}{c}{Proof-of-zero non-interactive} & + \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$} + \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} - & Prover & Verifier & Prover & Verifier & Prover & Verifier \\ + \cmidrule(l){2-3}\cmidrule(l){4-5}\cmidrule(l){6-7}\cmidrule(l){8-9} + & Prover & Verifier & Prover & Verifier & Prover & Verifier & Prover & Verifier \\ \midrule - $|n| = 1024$ & 10ms & 18ms & 1,420ms & 2,140ms & 443ms & 655ms \\ - $|n| = 2048$ & 44ms & 68ms & 6,390ms & 8,140ms & 1,980ms & 2,400ms \\ - $|n| = 4096$ & 225ms & 292ms & 41,500ms & 34,400ms & 14,300ms & 11,400ms \\ + $|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 & & \\ \bottomrule \end{tabularx} \parnotes @@ -1074,18 +1077,18 @@ All measurements were taken on Brave 1.50.114 (Chromium 112.0.5615.49) 64-bit, u \begin{table} \fontsize{10pt}{10pt}\selectfont - \caption{Byte size\parnote{1 UTF-16 character, as used by ECMAScript \cite[Section~6.1.4]{ecma2024262}, is 2 or more bytes.} of encoded proofs} + \caption{Byte size\parnote{1 UTF-16 character, as used by ECMAScript \cite[Section~6.1.4]{ecma2024262}, is 2 or more bytes.} of encoded non-interactive proofs} \label{table3} - \begin{tabularx}{\hsize}{c *6{>{\Centering}X}} + \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$} + \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$} \tabularnewline - \cmidrule(l){2-3}\cmidrule(l){4-5}\cmidrule(l){6-7} - & JSON & with LZ-String & JSON & with LZ-String & JSON & with LZ-String \\ + \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 \\ - $|n| = 2048$ & 3,153B & 1,050B & 662,233B & 187,333B & 252,230B & 70,868B \\ - $|n| = 4096$ & 6,226B & 1,999B & 1,315,027B & 368,646B & 484,117B & 135,990B \\ + $|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 & & \\ \bottomrule \end{tabularx} \parnotes