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
Copy file name to clipboardexpand all lines: spec/main.tex
+197-62
Original file line number
Diff line number
Diff line change
@@ -1265,95 +1265,230 @@ \subsubsection{Non-Interactive Version of the Proof}
1265
1265
1266
1266
\subsection{$\proof{fac}$: No Small Factor Proof}
1267
1267
The prover and verifier agree on shared state $\state$, auxiliary data $R_j=(N_j, s_j, t_j)$ with $s_j, t_j \in {\mathbb Z}_{N_j}^*$, and a security level~$L$.
1268
-
For this proof, the prover and verifier have common input~$N_i$, and the prover additionally has primes $2^\ell < p, q < \pm2^\ell\cdot\sqrt{N_i}$ with $N_i=pq$.
1268
+
For this proof, the prover and verifier have common input~$N_i$, and the prover additionally has primes $2^\ell < p, q < 2^\ell\cdot\sqrt{N_i}$ with $N_i=pq$.
1269
1269
In all the cases where this proof is used in the protocol, the verifier knows the factorization of $N_j$ (and hence knows~$\sk_j$).
1270
1270
1271
1271
% \item Proof guarantees: $p_0, q_0 > 2^\ell$
1272
1272
% \item Implicit constraints: $2^{2\ell + \varepsilon} \approx \sqrt{N_0}$ \jnote{Would be good to formalize exactly what this means} \nnote{I aped it from the paper. It seems they mention it to reconcile the fact that sometimes they mention this proof with $2^l$ as the lower limit, and sometimes with $2^l \sqrt{N_0}$ as the upper - this way they are the same (not taking $\epsilon$ into account)}
1273
1273
1274
1274
1275
1275
\subsubsection{Interactive Version of the Proof}
1276
-
\begin{enumerate}
1277
-
\item In the first round of the protocol, the prover does the following:
$x, y \gets\pm\left(2^{\ell + \varepsilon} N_j\right)$.
1287
1276
1288
-
\item The prover then computes:
1289
-
\begin{itemize}
1290
-
\item$P = s_j^{p} t_j^\mu\bmod N_j$
1291
-
\item$Q = s_j^{q} t_j^\nu\bmod N_j$
1292
-
\item$A = s_j^\alpha t_j^x \bmod N_j$
1293
-
\item$B = s_j^\beta t_j^y \bmod N_j$
1294
-
\item$T = Q^\alpha t_j^r \bmod N_j$.
1295
-
\end{itemize}
1296
-
Note that $P,Q,A,B$ are computed using fixed-base multiexponentiations. %(It is also possible to express computation of $T$ as a fixed-base multiexponentiation $T=(s^qt^\nu)^\alpha \cdot t^r = s^{q\alpha}t^{\nu\alpha+r} \bmod N_j$ and then use multiexp preprocessing, but I'm not sure this will be a net win.)
1297
-
\item The prover sends the first message $(P, Q, A, B, T, \sigma)$
1298
-
and also maintains local (secret) state $(\alpha, \beta, \mu, \nu, r, x, y)$.
1299
-
\end{itemize}
1277
+
\begin{description}
1300
1278
1301
-
\item The verifier chooses $e \leftarrow\pm Q$ and sends $e$ to the prover.
1279
+
\item
1280
+
\begin{inlineAlgorithm}
1281
+
\algoName{$\commit{fac}^L(R_j, N_i) \to ((P, Q, A, B, T, \sigma), (\alpha, \beta, \mu, \nu, r, x, y))$}
\item Given $N_i$, initial message $(P, Q, A, B, T, \sigma)$, challenge $e$, and response $(z_1, z_2, w_1, w_2, v)$, the verifier accepts if and only if the following are true: \begin{itemize}
1314
-
\item$s_j^{z_1} t_j^{w_1} = A \cdot P^e \bmod N_j$
1315
-
\item$s_j^{z_2} t_j^{w_2} = B \cdot Q^e \bmod N_j$
1316
-
\item$Q^{z_1} t_j^{v} = T \cdot (s_j^{N_i} t_j^\sigma)^e \bmod N_j$
\subsubsection{Non-Interactive Version of the Proof}
1325
1373
1326
-
\begin{itemize}
1327
-
\item We deterministically derive a challenge from inputs that include shared $\state$, the auxiliary data~$R_j$, the common input~$N_i$, and the initial protocol message~$(P, Q, A, B, T, \sigma)$.
1328
-
We write the resulting function as
1329
-
$e=\challengeni{fac}^{L} (\state, R_j, N_i, (P, Q, A, B, T, \sigma))$.
1330
-
1331
-
1374
+
\begin{description}
1332
1375
1333
-
\item A proof is computed as follows: compute initial message $(P, Q, A, B, T, \sigma)$ as described above; compute $e=\challengeni{fac}^{L} (\state, R_j, N_i, (P, Q, A, B, T, \sigma))$; next compute $(z_1, z_2, w_1, w_2, v)$ as described above, using challenge~$e$. Output the proof $((P, Q, A, B, T, \sigma), (z_1, z_2, w_1, w_2, v))$. We write the resulting function as $\proveni{fac}^{L}(\state, R_j, N_i, (p_i, q_i))$.
\to ((P, Q, A, B, T, \sigma); (z_1, z_2, w_1, w_2, v))$}
1380
+
\algoInputsList{
1381
+
\item security level $L = (Q, \dots)$,
1382
+
\item shared $\state\in\Bit^*$,
1383
+
\item auxiliary data $R_j$,
1384
+
\item public data $N_i \in\Z$,
1385
+
\item secret data: primes $p, q \in\Z^2$
1386
+
}
1387
+
\algoOutputsList{
1388
+
\item commitment $(P, Q, A, B, T, \sigma) \in\Z^6$,
1389
+
\item proof $(z_1, z_2, w_1, w_2, v) \in\Z^5$
1390
+
}
1391
+
\begin{algorithmic}[1]
1392
+
\State$((P, Q, A, B, T, \sigma), (\alpha, \beta, \mu, \nu, r, x, y))
1393
+
\gets\commit{fac}^L(R_j, N_i)$
1394
+
\State$e \in\pm Q = \challengeni{fac}^L(\state, R_j, N_i, (P, Q, A, B, T, \sigma))$
1395
+
\State$(z_1, z_2, w_1, w_2, v) = \prove{fac}(
1396
+
e;
1397
+
(p, q),
1398
+
(\alpha, \beta, \mu, \nu, r, x, y)
1399
+
)$
1400
+
\State\Return$((P, Q, A, B, T, \sigma), (z_1, z_2, w_1, w_2, v))$
1401
+
\end{algorithmic}
1402
+
\end{inlineAlgorithm}
1334
1403
1335
-
\item A party verifies a proof $\phi=((P, Q, A, B, T, \sigma), (z_1, z_2, w_1, w_2, v))$ by first computing \[e=\challengeni{fac}^{L} (\state, R_j, N_i, (P, Q, A, B, T, \sigma))\] and then verifying as described above, using the challenge~$e$. We write the resulting function as $\verifyni{fac}^{L}(\state, R_j, N_i, \phi)$.
1404
+
\item
1405
+
\begin{inlineAlgorithm}
1406
+
\algoName{$\proveni{fac}^L(\state, R_j, N_i, ((P, Q, A, B, T, \sigma), (z_1, z_2, w_1, w_2, v)))$}
1407
+
\algoInputsList{
1408
+
\item security level $L = (Q, \dots)$,
1409
+
\item shared $\state\in\Bit^*$,
1410
+
\item auxiliary data $R_j$,
1411
+
\item public data $N_i \in\Z$,
1412
+
\item non-interactive proof, consisting of:
1413
+
\begin{itemize}
1414
+
\item commitment $(P, Q, A, B, T, \sigma) \in\Z^6$,
1415
+
\item proof $(z_1, z_2, w_1, w_2, v) \in\Z^5$
1336
1416
\end{itemize}
1417
+
}
1418
+
\algoOutputs{aborts if proof is invalid}
1419
+
\begin{algorithmic}[1]
1420
+
\State$e \in\pm Q = \challengeni{fac}^L(\state, R_j, N_i, (P, Q, A, B, T, \sigma))$
1421
+
\State Assert $\verify{fac}^L(
1422
+
R_j,
1423
+
N_i,
1424
+
(P, Q, A, B, T, \sigma),
1425
+
e,
1426
+
(z_1, z_2, w_1, w_2, v)
1427
+
)$
1428
+
\end{algorithmic}
1429
+
\end{inlineAlgorithm}
1337
1430
1431
+
\end{description}
1338
1432
1339
1433
\subsection{\proof{sch}: Schnorr Proof of Knowledge}
1340
1434
We describe the standard Schnorr proof of knowledge, and also set up notation that we will use in what follows.
1341
-
\begin{itemize}
1342
-
\item$\commit{sch}() \to (A; \alpha)$\\
1343
-
$\alpha\gets\Z_q \\
1344
-
A = \alpha\cdot G$\\
1345
-
return $(A, \alpha)$
1346
1435
1347
-
\item$\challenge{sch}() \to e$\\
1348
-
return $e \gets\Z_q$
1436
+
\begin{description}
1349
1437
1350
-
\item$\prove{sch}(\alpha, e, x) \to z$\\
1351
-
return $z = \alpha + e x \bmod q$
1438
+
\item
1439
+
\begin{inlineAlgorithm}
1440
+
\algoName{$\commit{sch}() \to (A; \alpha)$}
1441
+
\algoInputs{—}
1442
+
\algoOutputs{public commitment $A \in\E$ and secret nonce $\alpha\in\Z_q$}
0 commit comments