You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
In a general~\gls{ipa}, Curdleproofs included, if the size of the vectors were not a power of two, the argument would not recurse down to size 1, as they work by halving the vectors every recursive round.
15
15
16
16
17
-
The core concept of the Springproofs scheme function is to split the vectors into sets, $T$ and $S$, before each recursive round of the protocol.
18
-
Then, the fold for that round is only done on one of the two sets,~$T$, before the other set,~$S$, is appended again at the end of the recursive round.
17
+
The core concept of the Springproofs scheme function is to split the vectors into sets, $\mathbf{\mathcal{T}}$ and $\mathbf{\mathcal{S}}$, before each recursive round of the protocol.
18
+
Then, the fold for that round is only done on one of the two sets,~$\mathbf{\mathcal{T}}$, before the other set,~$\mathbf{\mathcal{S}}$, is appended again at the end of the recursive round.
19
19
20
20
Springproofs present different scheme functions and prove some of them to be optimal.
21
21
One of these optimal functions is an optimized version of their \textit{pre-compression method}, which splits the vectors as seen in~\autoref{lst:schemefunc}.
22
-
The computation is for finding the set,~$T$.
22
+
The computation is for finding the set,~$\mathbf{\mathcal{T}}$.
23
23
24
24
\begin{figure}[!htb]
25
25
\begin{lstlisting}[language=Python,mathescape=true,label={lst:schemefunc},numbers=right,caption={Scheme function \textbf{\textit{f}} used in CAAUrdleproofs},captionpos=b,frame=single]
The construction can be seen in~\autoref{lst:ipa-prover}.
66
66
67
67
\begin{figure}[!htb]
68
-
\begin{lstlisting}[language=Python,mathescape=true,label={lst:ipa-prover},numbers=left,caption={Prover computation for CAAU-IPA in CAAUrdleproofs},captionpos=b,frame=single]
68
+
\begin{lstlisting}[language=Python,mathescape=true,label={lst:ipa-prover},numbers=right,caption={Prover computation for CAAU-IPA in CAAUrdleproofs},captionpos=b,frame=single]
It is implemented the same way as in Curdleproofs.
109
-
In line 2, the prover gets the cryptographic generators, $\mathbf{G}$, $\mathbf{G}'$ and $H$, which are going to be used for commitment constructions.
110
-
To ensure zero-knowledge, two blinding vectors for each commitment are constructed on lines 3--4.
110
+
From the prover input, line 2, we obtain the vectors $\mathbf{c}$ and $\mathbf{d}$, whose inner product we aim to prove is equal to $z$, as well as the commitments $C$ and $D$.
111
+
In line 3, the prover gets the cryptographic generators, $\mathbf{G}$, $\mathbf{G}'$ and $H$, which are going to be used for commitment constructions.
112
+
To ensure zero-knowledge, two blinding vectors for each commitment are constructed on lines 4--5.
111
113
These are also given the properties, $(\mathbf{r}_C\times\mathbf{d}+\mathbf{r}_D\times\mathbf{c})=0$~and~ $\mathbf{r}_C\times\mathbf{r}_D=0$, ensuring the completeness of the protocol.
112
114
113
-
After this, commitments to the blinding vectors are constructed as $B_C$ and $B_D$ on lines 5--6.
115
+
After this, commitments to the blinding vectors are constructed as $B_C$ and $B_D$ on lines 6--7.
114
116
These will eventually be used for verification by the verifier.
115
117
116
-
From the public input, hash values $\alpha,\beta$ are then computed on line 7.
118
+
From the public input, hash values $\alpha,\beta$ are then computed on line 8.
117
119
These are used to ensure the soundness of the protocol.
118
120
119
-
On lines 8--10, the two vectors are then blinded and multiplied by the $\alpha$ hash to ensure the zero-knowledge and soundness, as well as $H=\beta H$.
121
+
On lines 9--11, the two vectors are then blinded and multiplied by the $\alpha$ hash to ensure the zero-knowledge and soundness, as well as $H=\beta H$.
120
122
121
123
122
124
Now, the recursive proof construction, and step 2, begins.
123
-
As explained, at the start of the recursive round, line 13, we find the split of the vectors on line 14, with $f(n)$ being the scheme function from~\autoref{lst:schemefunc}.
124
-
Then, on line 15, we find half the length of the $T$ set, as it is the set we are doing the recursive folding round on.
125
-
Equally, on lines 16--19, we split our witness vectors and the group vectors using $T$ and $S$.
125
+
As explained, at the start of the recursive round, line 14, we find the split of the vectors on line 15, with $f(n)$ being the scheme function from~\autoref{lst:schemefunc}.
126
+
Then, on line 16, we find half the length of the $\mathbf{\mathcal{T}}$ set, as it is the set we are doing the recursive folding round on.
127
+
Equally, on lines 17--20, we split our witness vectors and the group vectors using $\mathbf{\mathcal{T}}$ and $\mathbf{\mathcal{S}}$.
126
128
127
-
After this, the prover constructs cross-commitment elements on lines 20--23 that are computed on the $T$ set.
128
-
These are added to the proof on line 24, which eventually is available to the verifier.
129
-
They are also used to construct a hash value,~$\gamma_j$, in the next step on line 25.
129
+
After this, the prover constructs cross-commitment elements on lines 21--24 that are computed on the $\mathbf{\mathcal{T}}$ set.
130
+
These are added to the proof on line 25, which eventually is available to the verifier.
131
+
They are also used to construct a hash value,~$\gamma_j$, in the next step on line 26.
130
132
131
-
This value is used on lines 26--29 for completing the folding of $\mathbf{c},\mathbf{d},\mathbf{G},\mathbf{G'}$.
132
-
We do the fold as in the original Curdleproofs protocol while also appending the elements of $S$ back onto the vectors.
133
+
This value is used on lines 27--30 for completing the folding of $\mathbf{c},\mathbf{d},\mathbf{G},\mathbf{G'}$.
134
+
We do the fold as in the original Curdleproofs protocol while also appending the elements of $\mathbf{\mathcal{S}}$ back onto the vectors.
133
135
The figure shows a concatenation, but it is important to know that the vectors are appended together as shown in~\autoref{fig:fold}(b).
134
136
135
-
At the end of the recursive round, on line 30,~$n$ is updated to the length of the concatenated vectors before starting a new round.
137
+
At the end of the recursive round, on line 31,~$n$ is updated to the length of the concatenated vectors before starting a new round.
136
138
137
139
The result of this is a proof,~$\mathbf{\pi}$, constructed in $\lceil\log n \rceil$ rounds, but with the proof size being smaller than if the shuffle size was a power of 2.
138
140
139
-
In step 3, lines 31--35, the folded vectors of size 1 are added to the proof as values as well as the commitments to the blinding values,~$B_C$ and~$B_D$.
141
+
In step 3, lines 32--36, the folded vectors of size 1 are added to the proof as values as well as the commitments to the blinding values,~$B_C$ and~$B_D$.
140
142
The proof, folded vectors, and updated commitment are saved for the verifier to use for verification.
Those modifications mean that the commitments~$C$ and~$D$ need to be commitments to the modified witnesses instead.
195
197
196
198
The setup phase is now complete, and the verifier then executes the recursive protocol, as shown in step 2.
197
-
First, the vectors are divided into two sets,~$T$ and $S$, on line 13, as in~\autoref{lst:ipa-prover}.
198
-
After this, the group vectors are in lines 14--16 split according to those sets, along with updating~$n$ to be half the size of~$T$.
199
+
First, the vectors are divided into two sets,~$\mathbf{\mathcal{T}}$ and $\mathbf{\mathcal{S}}$, on line 13, as in~\autoref{lst:ipa-prover}.
200
+
After this, the group vectors are in lines 14--16 split according to those sets, along with updating~$n$ to be half the size of~$\mathbf{\mathcal{T}}$.
199
201
200
202
The verifier then, on line 17, retrieves from the proof the cross-product commitment update values for the given round,~$L_{C,j},L_{D,j},R_{C,j},R_{D,j}$.
201
203
These are used for constructing a new commitment, lines 19--20, according to the fold made at round $i$.
Here the set $(c_1, \ldots, c_n)$ is a set of ciphertexts that are shuffled over $T$ slots.
248
-
In each slot $t$, a subset of the ciphertexts ${i_1, \ldots, i_\ell}$ is chosen randomly, shuffled and added back to the list of ciphertexts.
249
+
Here the set $(c_1, \ldots, c_n)$ is a set of ciphertexts that are shuffled over $Q$ slots.
250
+
In each slot $q$, a subset of the ciphertexts ${i_1, \ldots, i_\ell}$ is chosen randomly, shuffled and added back to the list of ciphertexts.
249
251
The shuffler then re-encrypts the ciphertexts and publishes them.
250
-
This process is repeated for $T$ slots, and the shuffle is complete.
251
-
During the $T$ shuffles, some shuffles may be adversarial.
252
+
This process is repeated for $Q$ slots, and the shuffle is complete.
253
+
During the $Q$ shuffles, some shuffles may be adversarial.
252
254
An adversary can choose to do anything with its shuffle, including not shuffling.
253
255
Hence, an adversarial shuffle can be seen as no shuffling being done.
254
-
Therefore, the number of honest shuffles that happen during the shuffle process is $T_H = T - \beta$, where $\beta$ is the number of adversarial shuffles.
256
+
Therefore, the number of honest shuffles that happen during the shuffle process is $Q_H = Q - \beta$, where $\beta$ is the number of adversarial shuffles.
255
257
256
258
The adversary can also track ciphertexts.
257
259
For instance, if the adversary owns some of the ciphertexts.
So, if a shuffle contains many ciphertexts with a larger-than-average chance of containing a specific ciphertext, then that would imply that there is a higher chance of that ciphertext being in that slot.
266
268
267
269
It is theoretically possible to find a number of shuffles, given a shuffle size and a number of adversarial shufflers, which guarantees that the shuffle is secure.
268
-
For any $0 < \delta < 1/3$, if $T\geq20 n / \ell\ln(n/\delta) + \beta$ and $\ell\geq256\ln^2(n/\delta)(1 - \alpha/n)^{-2}$.
269
-
If $T$ and $\ell$ are chosen such that the above two conditions are met, then the protocol is an $(\epsilon , \delta)$-secure $(T,n,\ell)$-shuffle in the presence of a $(\alpha, \beta)$-adversary where $\epsilon = 2/(n-\alpha)$.
270
+
For any $0 < \delta < 1/3$, if $Q\geq20 n / \ell\ln(n/\delta) + \beta$ and $\ell\geq256\ln^2(n/\delta)(1 - \alpha/n)^{-2}$.
271
+
If $Q$ and $\ell$ are chosen such that the above two conditions are met, then the protocol is an $(\epsilon , \delta)$-secure $(Q,n,\ell)$-shuffle in the presence of a $(\alpha, \beta)$-adversary where $\epsilon = 2/(n-\alpha)$.
270
272
271
-
This formula is the lowest theoretically proven bound for $T$ and $\ell$.
273
+
This formula is the lowest theoretically proven bound for $Q$ and $\ell$.
272
274
Plotting numbers relevant to Whisk will show that this theoretical bound is too large to use for argumentation of security.
273
-
It is, however, possible to find lower secure values for $T$ and $\ell$, but this has to be done experimentally.
275
+
It is, however, possible to find lower secure values for $Q$ and $\ell$, but this has to be done experimentally.
In Curdleproofs, both the~\gls{sameperm} and~\gls{samemsm} proof are recursive~\glspl{ipa}.
366
368
So, the modifications and optimization used on the~\gls{sameperm} argument are also used on the~\gls{samemsm} argument.
367
-
The modifications include the split into set $T$ and $S$ before recursion and the construction of the bit matrix,~$b_{i,j}$, to keep track of multiplications on individual elements.
369
+
The modifications include the split into set $\mathbf{\mathcal{T}}$ and $\mathbf{\mathcal{S}}$ before recursion and the construction of the bit matrix,~$b_{i,j}$, to keep track of multiplications on individual elements.
368
370
369
-
It is also worth noting that the concatenation of $T$ and $S$ in the recursive phase, lines 26--29 in~\autoref{lst:ipa-prover}, is handled effectively in the code.
371
+
It is also worth noting that the concatenation of $\mathbf{\mathcal{T}}$ and $\mathbf{\mathcal{S}}$ in the recursive phase, lines 26--29 in~\autoref{lst:ipa-prover}, is handled effectively in the code.
370
372
Instead of concatenating, the computation uses pointers to the original vector, so it never practically concatenates.
371
373
372
374
The code also uses the fact that the used scheme function will always end up with vectors being a power of two after the first round.
0 commit comments