Processing math: 100%

Upon understanding the attack on Nova — Part 1

To understand the attack on Nova, I figure out I need to understand the role of the hash function and the validation check of hash function in Nova, from the first paper where the “cycle of curves” is not introduced, the circuit is illustrated as

Nova circuit in https://eprint.iacr.org/2021/370.pdf

to the circuit that has cycle of curves in the revisiting paper https://eprint.iacr.org/2023/969.pdf

The hash function in Nova

Recall the folding for a committed relaxed R1CS, the steps that both verifier and prover will do include

\bar{E}\leftarrow \bar{E}_1 + r\cdot \bar{T} + r^2 \cdot \bar{E}_2

s \leftarrow s_1 + r \cdot u_2

\bar{W} \leftarrow \bar{W}_1 + r \cdot \bar{W}_2

x \leftarrow x_1 + r \cdot x_2

for two committed relaxed R1CS (\bar{E}_1,s_1,\bar{W}_1,x_1) and (\bar{E}_2,s_2,\bar{W}_2,x_2). The relaxed R1CS structure is A Z\circ B Z=sCZ+E, in the original paper, it is “uCZ+E”. I use “s” instead of “u”. As in the circuit, u is also the notation for committed relaxed R1CS.

Recall, x in the instance is the public input.

Given a folding scheme, let’s build a IVC proof from scratch. Intuitively, the first attempt is

u_{i+1} is the proof for the execution of F’, which includes two parts, as describe in the paper

these two are the statements.

The first problem comes, what are the public inputs and outputs for F’? i.e., u_i.x? It worth to mention that these public inputs and outputs are only for function F’, for the SNARK prover at the end, it has different public inputs and outputs. The SNARK prover only takes the output of the last iteration of F’ and compute the proof of the whole IVC based on that. SNARK prover doesn’t need to see the inputs and outputs of previous iterations of F’. Therefore, there must be an mechanism embedded in the design that make sure the values transferred from one iteration of F’ to next iteration of F’ are correct. To figure out this mechanism, the first question is figure out what values are considered as public for F’

We consider the public inputs and outputs of the i+1th iteration of F’, there are in total 8 values in the inputs and outputs of F’:

i, z_0,z_i, u_i,U_i, z_{i+1}, u_{i+1}, U_{i+1}

let’s explore how many of them we need.

Case 1: only (i,z_0,z_{i+1}) are the public inputs.

in this case, u_{i+1}.x=(i,z_0,z_{i+1}), prover can randomly choose z_i, generate u_{i+1}, let u_i= \perp or U_i=\perp, prover can pass the SNARK verifier for iteration i+1 with state z_{i+1}=F(z_i).

You may observe the reason this doesn’t work is that z_i and (u_i,U_i) are not bonded together, giving the freedom to the attacker of choosing random u_i,U_i.

The solution is simple, we need to bonded these values. How? recall that u_i itself has a public part, we add the values we want to bind together inside and add a validation check in F’.

Case 2: i,z_0,z_{i+1},u_i,U_i are the public inputs

In this case, u_i itself has a pubic input part, and it should look like u_i.x=(i,z_0,z_{i},u_i, U_i)

The validation check follows the procedures below

F’ take public inputs i,z_0,z_i,u_i,U_i, compare them with the values in u_i.x=(i,z_0,z_1,z_i,U_i, if values math, that means F’ in i+1th iteration take the output from a valid ith iteration F’ as inputs. This reasoning is recursive, until we can prove the whole chain is valid.

There is another problem as mentioned in the paper, the i+1th iteration of F’ need to fold u_i and U_i, but we see U_i is already included in u_i.x, they have different size. To make this consistent, the hash function is introduced here.

Summary

From the above description, I conclude that, the hash function is to make U_i and u_i fold-able, because of the introduction of the hash function, the validation check become the format like now.

This make me think, is there any other way to do the validation check, but still keep u_i and U_i fold-able? This question is beyond the topic of this post series. In next post, I will discuss the attack on NOVA with the cycle of curves.

Leave a Reply

Your email address will not be published. Required fields are marked *