Abstract 1 Introduction 2 Preliminaries 3 Technical Overview 4 Updatable Hash-and-𝗕𝗔𝗥𝗚s (𝗨𝗽𝗕𝗔𝗥𝗚s) 5 One-step Delegation to IVC via UpBARGs References

Model-Generic Incrementally Verifiable Computation from Updatable BARGs

Eden Aldema Tshuva ORCID Tel Aviv University, Israel Rotem Oshman ORCID Tel Aviv University, Israel
Abstract

Incrementally verifiable computation (𝖨𝖵𝖢) is a computationally sound proof system that allows a prover to certify the correctness of a long or ongoing computation in an incremental manner, by repeatedly updating a proof certifying the computation so far. Updating the proof does not require access to the entire trace of the computation, which makes the IVC-prover memory efficient. Recently, such schemes were constructed for deterministic Turing machines from standard cryptographic assumptions (Paneth and Pass, FOCS 2022, and Devadas et al., FOCS 2022).

In this work we generalize and extend 𝖨𝖵𝖢 to support incremental certification and verifiability of a large set of computation models, focusing on distributed and online computation. This allows distributed algorithms to efficiently certify their own execution using low memory and communication overhead. We construct 𝖨𝖵𝖢 for a variety of computation models by proving one generic lifting theorem from a classical (non-incremental) delegation scheme (also known as 𝖲𝖭𝖠𝖱𝖦) into full-fledged 𝖨𝖵𝖢, while preserving the delegation scheme’s succinctness properties (up to an additive factor which is polynomial in the security parameter and independent of the size of the computation). Using this lifting theorem, we obtain 𝖨𝖵𝖢 for the following computation models:

  • RAM and exclusive-read exclusive-write (EREW) PRAM algorithms, using existing delegation schemes for these models.

  • Streaming algorithms, using the natural memory-efficiency properties of the model.

  • Massively parallel computation (MPC). Notably, in this model, memory efficiency is a critical bottleneck: the machines participating in an MPC algorithm usually cannot store the entire trace of their computation. Thus, certifying MPC algorithms naturally benefits from 𝖨𝖵𝖢. Moreover, since prior to our work, no delegation scheme for this model was known, we also construct a delegation scheme for one-round massively parallel computations, and then apply our lifting theorem to it.

  • Distributed graph algorithms, using existing distributed delegation schemes (also known as locally verifiable distributed 𝖲𝖭𝖠𝖱𝖦s). Here, in order to use our lifting theorem we have to first make some observations about the verification procedure of these existing schemes.

At the heart of this work is a new abstraction, updatable batch arguments for 𝖭𝖯 (𝖴𝗉𝖡𝖠𝖱𝖦s), which we define and construct. Standard 𝖡𝖠𝖱𝖦s allow one to prove a batch of k 𝖭𝖯-statements using a proof whose length barely grows with k; however, the statements and their witnesses must all be known in advance. In contrast, 𝖴𝗉𝖡𝖠𝖱𝖦s support adding statements and witnesses on the fly, making them a flexible tool for constructing 𝖨𝖵𝖢 across different computational models.

Keywords and phrases:
incrementally verifiable computation, massively parallel computation, streaming, parallel RAM, batch arguments, SNARG
Funding:
Eden Aldema Tshuva: Research supported by the Israeli Science Foundation, Grant No. 2338/23, and by AFOSR award FA9550-24-1-0156.
Rotem Oshman: Research funded by the Israel Science Foundation, Grant No. 2801/20, and by AFOSR award FA9550-24-1-0156.
Copyright and License:
[Uncaptioned image] © Eden Aldema Tshuva and Rotem Oshman; licensed under Creative Commons License CC-BY 4.0
2012 ACM Subject Classification:
Theory of computation Cryptographic protocols
Editor:
Shubhangi Saraf

1 Introduction

Delegation schemes [19, 16, 17] enable a computationally weak entity to outsource a computation to a more powerful entity without having to trust it: the powerful entity returns the result alongside with a succinct proof of correct execution, which the weak entity can verify efficiently. Delegation schemes typically require the prover to access the entire trace of the computation, which can be impractical. Incrementally verifiable computation (𝖨𝖵𝖢) [23] avoids this by maintaining the proof incrementally: given the state of the computation after t steps, and proof πt showing that the first t steps have been executed correctly, the prover updates the proof to a new proof πt+1 that the first t+1 steps have been executed correctly, without having to store in memory the entire trace of the computation so far. This makes 𝖨𝖵𝖢 a natural fit for scenarios where long computations must be executed reliably over time: for example, resuming a paused computation from an intermediate verified state, or continuously auditing the correctness of outsourced computation performed by an untrusted server or cloud. While [23] and follow-up work [5, 4] show how to construct 𝖨𝖵𝖢 for 𝖭𝖯 from heuristic (non-falsifiable) assumptions, recently 𝖨𝖵𝖢 for deterministic computations was constructed from LWE [20, 11],111While the constructions in [20, 11] are using specifically LWE, combining them with the works [24, 7] gives the same results also under bilinear maps assumption or under subexponential security of DDH. and this is the setting we adopt in the current paper.

While [20, 11] develop 𝖨𝖵𝖢 for sequential RAM, there are many other computation models that would benefit from 𝖨𝖵𝖢. In fact, a natural application of 𝖨𝖵𝖢 is to computations that are distributed or reactive in nature, where the inputs arrive over time, or are jointly held by multiple parties that collaborate to carry out the computation, such as in streaming algorithms and in massively parallel computations. The incremental structure of 𝖨𝖵𝖢 is particularly well-suited to such computation models, where it is usually impractical to store the full trace of the computation, which is required for non-incremental delegation schemes (i.e., succinct non-interactive arguments (𝖲𝖭𝖠𝖱𝖦s)). For example, when a computation is outsourced to a server farm, typically no single server has enough memory to store the entire trace of the full computation carried out across all the servers. Incremental verification avoids the need to store the full trace, and allows us instead to create a succinct proof of correctness and update it on-the-fly as the computation proceeds, with no asymptotic memory overhead other than the proof itself.

Despite this apparent fit, 𝖨𝖵𝖢 for reactive and distributed computation models has received very little attention in the context of standard cryptographic assumptions.222From heuristic assumptions, 𝖨𝖵𝖢 schemes have been developed for streaming algorithms [13, 22], and a generalization of 𝖨𝖵𝖢, known as proof-carrying data (PCD), may be considered as a form of distributed 𝖨𝖵𝖢 for some types of distributed computations [6, 5]. To our knowledge, the only work in this direction is [1], which developed zero-knowledge 𝖨𝖵𝖢 for streaming algorithms (using a different completeness notion and techniques than ours). In this paper we extend the scope of 𝖨𝖵𝖢 to encompass such distributed and reactive models of computation, bringing the benefits of incremental verification to settings that arguably stand to gain from it the most. We do this in a generic and modular way, by giving a lifting theorem that applies to any deterministic computation model represented as a labelled transition system (LTS), and allows us to lift a succinct proof for the correctness of one computation step in the model into full multi-step 𝖨𝖵𝖢.

Constructing incrementally verifiable computation.

Consider a computation starting from an initial configuration 𝖼𝖿0 and ending at configuration 𝖼𝖿t. Proving that the computation 𝖼𝖿0𝖼𝖿t is correct boils down to proving the conjunction of t statements: “for each i=0,,t1, the system transitions from configuration 𝖼𝖿i to configuration 𝖼𝖿i+1 in one step”. In Valiant’s paper introducing 𝖨𝖵𝖢 [23], this was done using a primitive he called noninteractive computationally sound proof of knowledge, and involved a tree-based construction where proofs for short computations are merged into proofs for longer ones: conceptually, at each point in time, the proof consists of a forest, where each tree proves correctness of a sub-computation of the form 𝖼𝖿i𝖼𝖿j for some i<j. There is at most one tree of any given height, and the proof stores only the roots of the trees, not the entire forest (making it succinct). To update the proof, the prover creates a new tree of height 1 for the last computation step 𝖼𝖿t𝖼𝖿t+1, and then repeatedly merges any two consecutive proof-trees of the same height, until the invariant that there is at most one tree of any given height is restored. Merging two proof trees for sub-computations 𝖼𝖿i𝖼𝖿j and 𝖼𝖿j𝖼𝖿k yields a new tree proving the sub-computation 𝖼𝖿i𝖼𝖿k, whose height is greater by 1 than the merged trees.

In [23], Valiant constructed noninteractive CS proofs of knowledge in the random oracle model; unfortunately, to date no construction of such proof system from standard assumptions is known. Follow-up work on (non-incremental) delegation [9, 15, 24, 7] and on 𝖨𝖵𝖢 [11, 20] follows the conceptual idea of Valiant’s construction but replaces noninteractive CS proofs of knowledge with batch arguments for 𝖭𝖯 (𝖡𝖠𝖱𝖦s), which are known to be constructible from standard assumptions [20, 11]. Informally, a 𝖡𝖠𝖱𝖦 for an 𝖭𝖯-language allows us to prove the conjunction of k statements, each of the form “xi”, using a proof whose length grows linearly with the length of a single 𝖭𝖯-witness for , and only polylogarithmically with the number of statements k.

The transition from noninteractive CS proofs of knowledge (used in [23]) to 𝖡𝖠𝖱𝖦s for 𝖭𝖯 (used in the 𝖨𝖵𝖢 of [11, 20]) is not as smooth as one might hope: many technical issues arise, which are resolved in an ad-hoc manner specific to each construction. Trying to extend these constructions to more complex computation models becomes prohibitively complicated. One key difference is that in standard sequential computation (e.g., Turing machines or RAM), given the initial configuration, the entire trace of the computation is determined; even though the prover does not actually store the entire trace, this fact is crucial for the soundness proof of [11, 20]. In contrast, in more complex models such as distributed and streaming algorithms, the computation trace (of a single machine, in the distributed case) cannot be determined from the initial configuration alone, because it depends on inputs or messages that arrive during the computation. Fundamentally, while standard sequential 𝖨𝖵𝖢 requires us to prove a predictable sequence of statements 𝖼𝖿0𝖼𝖿1,,𝖼𝖿t1𝖼𝖿t, in more complex models we cannot predict in advance the statements that we will need to prove, as each statement has the form “𝖼𝖿izi+1𝖼𝖿i+1”, where zi+1 is the input (or message) that arrives in step i+1.

A generic framework for incrementally verifiable computation.

To handle inputs that arrive over time in a simple and unified way across different computation models, we define and construct an updatable form of 𝖡𝖠𝖱𝖦s, which we call updatable hash-and-𝖡𝖠𝖱𝖦 (𝖴𝗉𝖡𝖠𝖱𝖦). An 𝖴𝗉𝖡𝖠𝖱𝖦 proves the conjunction of k 𝖭𝖯-statements, like a regular 𝖡𝖠𝖱𝖦; however, unlike a regular 𝖡𝖠𝖱𝖦, the 𝖴𝗉𝖡𝖠𝖱𝖦 exposes a hash of the statements that it proves, and can be updated on-the-fly to add a new statement (which is not true for plain 𝖡𝖠𝖱𝖦s). Moreover, the 𝖴𝗉𝖡𝖠𝖱𝖦 supports a consistency check specified by the user, which is applied to every pair of consecutive statements added to the 𝖴𝗉𝖡𝖠𝖱𝖦. This is especially useful for 𝖨𝖵𝖢, where we prove a batch of statements that each have the form “𝖼𝖿izi+1𝖼𝖿i”; in order for the conjunction of these statements to represent an actual trace of a computation, we must require that 𝖼𝖿i=𝖼𝖿i+1 for each i, and this is enabled by a consistency check applied to the statements “𝖼𝖿izi+1𝖼𝖿i” and “𝖼𝖿i+1zi+2𝖼𝖿i+1”.

With the 𝖴𝗉𝖡𝖠𝖱𝖦 in hand, we are able to extend delegation schemes into 𝖨𝖵𝖢. To give a unified statement which applies to diverse computational models, we use the general notion of deterministic computation models represented as a labeled transition system. This allows us to generalize the concept of delegation, and refer to a delegation from a stronger model of computation (where the prover is implemented) to a weaker model of computation (where the verifier is implemented). For instance, in the case of RAM delegation, the prover is a RAM machine and the verifier is a low-space Turing machine. Note that since the prover and verifier are in different models of computation, and thus have different computational power, even delegating one step of computation on a stronger model to a weaker model may be non-trivial (and this is the exact case in some of the models we handle, such as the massively parallel computation model).

Our main contribution is the following “lifting”-type theorem from one-step delegation to multi-step 𝖨𝖵𝖢:

Theorem 1 (Informal).

Let 𝕄,𝕍 be deterministic computation models represented as labeled transition systems, such that

  1. 1.

    There exists a delegation scheme succinctly proving the correctness of a single computation step of 𝕄, where the prover runs in the model 𝕄 and the verifier runs in 𝕍; and

  2. 2.

    The prover and the verifier of the 𝖴𝗉𝖡𝖠𝖱𝖦 can be implemented in 𝕄 and 𝕍, respectively.

Then there is an 𝖨𝖵𝖢 scheme for 𝕄, where the prover runs in 𝕄 and the verifier runs in 𝕍.

The 𝖨𝖵𝖢 construction described in Theorem 1 and its analysis are relatively straightforward compared to prior work on 𝖨𝖵𝖢: the interface of the 𝖴𝗉𝖡𝖠𝖱𝖦 allows us to cleanly implement Valiant’s construction [23], avoiding many of the complications that arise in prior work. The construction of the 𝖴𝗉𝖡𝖠𝖱𝖦 itself is closely based on [20], but there are some subtleties. For example, as part of the 𝖴𝗉𝖡𝖠𝖱𝖦’s interface, we must be able to provide an opening of the hash to any given statement, without holding all the statements in the clear, even though we do not know what statements will arrive in the future and go into the hash after the statement we are interested in. We show that we can compute the required openings in hindsight, using properties of tree-based hash families with local openings.

Applications.

Using Theorem 1 we develop 𝖨𝖵𝖢 for several reactive and distributed computation models: streaming algorithms,concurrent PRAM algorithms in the exclusive-read exclusive-write model (EREW), distributed algorithms in the CONGEST model, and distributed algorithms in the massively parallel computing (MPC) model. CONGEST is a model of network algorithms: it features a network of processors that communicate synchronously over some graph topology, with the number of bits that can be sent across any communication link bounded per synchronous round. The focus in this model is on communication as a bottleneck, not on space or even on local computation steps. In contrast, MPC is a model of server farms or cloud computing, where a large number of space-bounded machines collaborate to compute on an input partitioned between them. In each synchronous round, each machine can communicate with multiple other machines arbitrarily, subject only to a bound on the total number of bits sent and received.

While most of the models we consider already have non-incremental delegation schemes, for the MPC model this is not the case: proving the correctness of MPC computations almost requires 𝖨𝖵𝖢, because no single machine can even store the entire input, much less the entire trace of the distributed computation. Thus, while communication-efficient distributed provers have already been developed for other distributed models which are not space-bounded [12, 2, 3], prior to our work no such construction was known for MPC, even if we do not insist on 𝖨𝖵𝖢 and are willing to settle for a non-incremental construction. In fact, even proving the correctness of a single global computation step of the MPC model (i.e., a single synchronized round, where each machine receives messages, computes locally, and sends messages) is non-trivial, as it involves message exchanges between a large number of machines. To instantiate Theorem 1, we first use 𝖴𝗉𝖡𝖠𝖱𝖦s to construct a one-step delegation scheme for the MPC model, and then apply the theorem to obtain 𝖨𝖵𝖢 for MPC.

We consider two use cases for our 𝖨𝖵𝖢 for MPC. The first is reliable delegation to the cloud: here, the user holds an input x, and outsources a difficult computation on x to a server farm or a cloud provider, which returns both the output and a short correctness certificate. The user is a single time- and space-bounded machine; it hashes x once, never re-reads x (only its hash), and verifies the result of the computation in time polylogarithmic in |x|. The second use case that we consider is providing internal reliability to an MPC computation: instead of an external user, here it is the network itself that wants to verify that the computation so far has proceeded correctly (e.g., to protect against faults or issues with some of the machines). Our distributed 𝖨𝖵𝖢 allows the network to maintain a succinct, continuously updatable correctness proof that any machine can individually store and verify locally against its own input, such that if all machines accept the proof, then the computation is correct (except with negligible probability). This use case resembles a distributed fault-tolerance mechanism for the CONGEST model called proof labeling schemes [18], where each machine stores a short certificate, and the machines communicate with each other to verify that the network is in a legal configuration. Our 𝖨𝖵𝖢 for MPC scheme is more efficient, as our proof size grows polylogarithmically with the network and input size (in proof labeling schemes, the overall proof size is at least linear in the network size), and verifying the proof requires no communication between the machines. We note that the 𝖨𝖵𝖢 construction that we give for the CONGEST model returns to the traditional proof labeling scheme model, and has the machines each store a short certificate and communicate with its neighbors to verify it (as is also done in the non-incremental delegation schemes of [12, 2, 3]).

1.1 Related Work

We briefly survey related work. Since our results and techniques lie in the regime of arguments and delegation schemes from standard, and more importantly, falsifiable, cryptographic assumptions, we focus here on constructions in this regime.

Incrementally verifiable computation from LWE.

The recent work of Paneth and Pass [20] and Devadas et al. [11] constructs 𝖨𝖵𝖢 from standard cryptographic assumptions. Our construction is similar in spirit to these constructions (specifically to [20]), but the provers of [20, 11] require access to the full current state of the system, and their verifiers must read the full state of the system to verify it. We allow for more limited access; for instance, in distributed graph algorithms our prover updates the proof without any single entity knowing the entire communication graph state. That said, these works are closely related to ours: both [20, 11] construct rate-1 batch arguments, which we use to construct our 𝖴𝗉𝖡𝖠𝖱𝖦s, and the framework of [20] for constructing 𝖨𝖵𝖢 serves as a starting point for the construction of our 𝖴𝗉𝖡𝖠𝖱𝖦s.

As mentioned above, there is an independent construction of 𝖨𝖵𝖢 for streaming algorithms [1], which is also zero-knowledge. In the current paper, 𝖨𝖵𝖢 for streaming is almost trivially implied by Theorem 1 and our 𝖴𝗉𝖡𝖠𝖱𝖦 construction. We do not attempt to provide zero-knowledge.

Works from indistinguishability obfuscation.

In general, succinct arguments from i𝒪 have some major drawbacks; in order to instantiate them from falsifiable assumptions they usually require the CRS to be non-succinct and the underlying assumption to be exponentially secure. In contrast, all of our results are instantiable from either LWE, bilinear maps assumptions, or subexponential security of DDH. Nevertheless, the following recent works are related to ours. The first notion of updatable batch arguments was defined and constructed in [14] from i𝒪. As is the case with the earlier 𝖲𝖭𝖠𝖱𝖦 for 𝖭𝖯 from i𝒪 [21], their argument is non-adaptively sound. That is, the statements in the soundness game are chosen before the CRS, and the latter may depend on them. The somewhere argument of knowledge property is incomparable, as it is on one hand adaptive (the CRS is chosen before the statements) but on the other hand only provides guarantee somewhere (while non-adaptive soundness is a guarantee about all locations at the same time).

Very recently, [10] constructed 𝖨𝖵𝖢 for 𝖭𝖯 from the combination of i𝒪 and LWE with proofs which grow polynomially with the size of one configuration and polylogarithmically with the number of steps. They also offered an 𝖨𝖵𝖢 with proofs which do not grow with the size of one configuration which works for the special case of trapdoor languages.

2 Preliminaries

Algorithms, computation models and traces.

We represent an algorithm by a labeled transition system (LTS) (C,Λ,T), where C is a set of configurations (i.e., states of the algorithm), Λ is a set of labels, and TC×Λ×C is a transition relation between configurations. The labels typically represent the input to the algorithm, but in some scenarios they may represent something else (e.g., a message received by a machine in the MPC model). We restrict to deterministic algorithms, where T is single-valued: for any configuration 𝖼𝖿C and label λΛ there is a unique configuration 𝖼𝖿C such that (𝖼𝖿,λ,𝖼𝖿)T. We sometimes represent T is a function, T(𝖼𝖿,λ)=𝖼𝖿.

A computation model is simply a set of algorithms (i.e., LTSs). A trace or computation of an algorithm is a sequence 𝖼𝖿0λ1𝖼𝖿1λ2λt𝖼𝖿t, such that (𝖼𝖿i,λi+1,𝖼𝖿i)T for each i=0,,t1.

The common reference string model and computational hardness.

Our work is set in the common reference string (CRS) model, where all parties have access to a string that is sampled randomly by a trusted setup process, denoted 𝖦𝖾𝗇, which takes a security parameter λ and returns the CRS. The security parameter governs the computational resources that must be invested to break security: we say that a task involving the CRS is computationally hard there is no adversary that takes 𝖼𝗋𝗌𝖦𝖾𝗇(1λ) and runs in time polynomial in λ, can succeed in the task, except with negligible probability in λ. The following primitives are all in the CRS model and all include CRS generation as part of their interface.

Delegation schemes.

A delegation scheme involves a prover and a verifier; the prover tries to convince the verifier of the correctness of some computation. The goal here is succinctness: the proof short, and in this context, succinct means polylogarithmic in the size of the input to the computation. We adopt the notion from [16], where the proof is with respect to a digest (a hash) of the initial and final configuration of the computation. The digest is computed honestly by calling 𝖣𝗂𝗀𝖾𝗌𝗍(𝖼𝗋𝗌,𝖼𝖿) with a configuration 𝖼𝖿, and the algorithm 𝖣𝗂𝗀𝖾𝗌𝗍 satisfies computational collision-resistance. Soundness requires that a dishonest prover cannot convince the verifier of two “contradictory statements” x0,x1, where each xi asserts that from an initial configuration represented by the same digest h, the computation reaches a final configuration represented by digest hi, but h0h1.

In this work we use a generalized notion of delegation scheme we call 𝕍- delegation, where the digest and prover are algorithms and the verifier is a 𝕍 algorithm. We moreover adjust the syntax to fit label transition systems, and add a label digest algorithm. The syntax is given below.

  • 𝖣𝗂𝗀𝖾𝗌𝗍(𝖼𝗋𝗌,𝖼𝖿)h: A -algorithm that takes a reference string 𝖼𝗋𝗌, and a configuration 𝖼𝖿𝖢𝖥[]. It outputs digest h.

  • 𝖫𝖻𝗅𝖣𝗂𝗀𝖾𝗌𝗍(𝖼𝗋𝗌,(𝗅𝖻𝗅i)it)H: A -algorithm that takes a reference string 𝖼𝗋𝗌 and a series of labels (𝗅𝖻𝗅i)i[t]𝖫𝖻𝗅[]. It outputs digest H.

  • 𝒫(𝖼𝗋𝗌,,𝖼𝖿,t,(𝗅𝖻𝗅i)i[t])π: A -algorithm that takes a reference string 𝖼𝗋𝗌, a -algorithm a configuration 𝖼𝖿𝖢𝖥[], a number of steps t, and a set of t labels (𝗅𝖻𝗅i)i[t] . It outputs a proof π.

  • 𝒱(𝖼𝗋𝗌,,h,H,h,t,π)b: A 𝕍-algorithm that takes a reference string 𝖼𝗋𝗌, a -algorithm , an initial digest h, a final digest h, a number of steps t, and a proof π. It outputs an acceptance bit b.

Incrementally Verifiable Computation (𝗜𝗩𝗖).

An 𝖨𝖵𝖢 scheme is similar to a delegation scheme, but the prover incrementally updates an existing proof, and is therefore represented by an update procedure 𝒰(𝖼𝗋𝗌,,𝖼𝖿,π) that takes the current configuration 𝖼𝖿 and proof π, and returns the next configuration 𝖼𝖿 and proof π. The verifier also takes the current number of steps t. Soundness is the same as for delegation. However, completeness is replaced by incremental completeness, which intuitively requires that any proof accepted by the verifier can be extended into a proof for the next step:

  • Incremental completeness: for any 𝖼𝗋𝗌 generated by 𝖦𝖾𝗇, step count t<2λ, digest h𝗌𝗍𝖺𝗋𝗍, machine , configuration 𝖼𝖿 and proof π, if h𝗌𝗍𝖺𝗋𝗍=𝖣𝗂𝗀𝖾𝗌𝗍(𝖼𝗋𝗌,𝖼𝖿) and
    𝒱(𝖼𝗋𝗌,,t,h𝗌𝗍𝖺𝗋𝗍,h,π)=1, then for (𝖼𝖿,π)=𝒰(𝖼𝗋𝗌,,𝖼𝖿,π) and h=𝖣𝗂𝗀𝖾𝗌𝗍(𝖼𝗋𝗌,𝖼𝖿), we have 𝒱(𝖼𝗋𝗌,,t+1,h𝗌𝗍𝖺𝗋𝗍,h,Π)=1.

This formulation does not involve input that arrives during the computation. In reactive models, the prover takes the input in addition to the current configuration, and produces a digest of the inputs in addition to the new configuration and proof. The verifier is given the digest of the inputs in addition to the parameters it is given above.

Somewhere extractable batch arguments for NP.

A batch argument (𝖡𝖠𝖱𝖦) [8] allows a prover to succinctly prove the conjunction of k 𝖭𝖯 statements, with a proof whose size is roughly the same as the size of one witness and barely grows with k. The interface is as follows:

  • 𝒫(𝖼𝗋𝗌,,x1,,xk,w1,,wk)(π): takes a reference string 𝖼𝗋𝗌, an 𝖭𝖯-machine , instances x1,,xk and witnesses w1,,wk, and outputs a proof π.

  • 𝒱(𝖼𝗋𝗌,,π)b: takes a 𝖼𝗋𝗌, an 𝖭𝖯-machine , and proof π and outputs an acceptance bit b.

Note that the prover 𝒫 requires all k statements and corresponding witnesses to construct the 𝖡𝖠𝖱𝖦 proof; this is one key difference between plain 𝖡𝖠𝖱𝖦s and the 𝖴𝗉𝖡𝖠𝖱𝖦s that we introduce later.

We say a 𝖡𝖠𝖱𝖦 is somewhere extractable if it allows the extraction of one witness from a convincing proof π: the 𝖼𝗋𝗌 generation procedure 𝖦𝖾𝗇 can be called in trapdoor mode, where it takes as additional input an index i[k], called the binding index. In this mode, 𝖦𝖾𝗇 outputs a pair (𝖼𝗋𝗌,𝗍𝖽i), where 𝗍𝖽 is a trapdoor that can later be used to recover the i-th witness. In trapdoor mode, the 𝖦𝖾𝗇 procedure has a property called index hiding: given 𝖼𝗋𝗌 (without 𝗍𝖽i), it is computationally hard to find the binding index i. We require somewhere argument of knowledge: there exists an efficient extractor (𝗍𝖽i,,π)wi, which satisfies the following. Suppose we call 𝖦𝖾𝗇 in trapdoor mode with a binding index i and obtain (𝖼𝗋𝗌,𝗍𝖽i). Given only 𝖼𝗋𝗌, it is computationally hard to find a proof π that is accepted by the verifier, such that when we extract a witness wi using (𝗍𝖽i,,π), we have (xi,w)1.

3 Technical Overview

In this section we give an overview of our 𝖨𝖵𝖢 construction, focusing on the definition and construction of the 𝖴𝗉𝖡𝖠𝖱𝖦, the proof of Theorem 1, which lifts from one-step delegation to 𝖨𝖵𝖢, and the application to massively parallel computation (MPC).

3.1 Defining Updatable Hash-and-𝗕𝗔𝗥𝗚s

An updatable hash-and-𝖡𝖠𝖱𝖦 is defined with respect to some hash family with local opening; for simplicity, in this overview we use a Merkle tree. The 𝖴𝗉𝖡𝖠𝖱𝖦 consists of three algorithms, (𝖦𝖾𝗇,𝒰,𝒱), where 𝖦𝖾𝗇 is a CRS generation algorithm, and 𝒰,𝒱 are update and verification algorithms, respectively, with the following syntax.

  • 𝒰(𝗁𝗄,𝖼𝗋𝗌,,H,Π,x,w)(H,Π): the 𝖴𝗉𝖡𝖠𝖱𝖦’s update procedure takes as input a hash key 𝗁𝗄, common reference string 𝖼𝗋𝗌, 𝖭𝖯-machine , hash value H, proof Π, and new statement x and witness w, and outputs a new hash value H and proof Π.

  • 𝒱(𝗁𝗄,𝖼𝗋𝗌,,H,Π)b: the 𝖴𝗉𝖡𝖠𝖱𝖦 verifier takes a hash key 𝗁𝗄, common reference string 𝖼𝗋𝗌, 𝖭𝖯-machine , hash value H and proof Π, and outputs an acceptance bit b{0,1}.

Note the difference between the 𝖴𝗉𝖡𝖠𝖱𝖦’s interface and the interface of a plain 𝖡𝖠𝖱𝖦: first, the 𝖴𝗉𝖡𝖠𝖱𝖦’s update procedure does not require access to all the statements and witness, only to the current 𝖴𝗉𝖡𝖠𝖱𝖦 (H,Π) and the new statement and witness (x,w). In addition, the 𝖴𝗉𝖡𝖠𝖱𝖦 (H,Π) directly exposes a hash H of the statements, in addition to the proof Π. This differs from plain 𝖡𝖠𝖱𝖦s, where only the proof is exposed (implicitly, there is still a hash of the statements, but it is part of the proof and is not accessible to the user of the 𝖡𝖠𝖱𝖦). For our applications it is crucial to expose the hash, because in a reactive computation model it is meaningless to say that a computation starting in configuration 𝖼𝖿0 and ending in 𝖼𝖿t is “correct”; we can only say that it is correct with respect to the input that arrived as the computation was ongoing. Thus, the 𝖨𝖵𝖢 verifier requires access to a hash of the statements (which include the input), not just the proof of their conjunction.

Our 𝖴𝗉𝖡𝖠𝖱𝖦 satisfies the usual succinctness and index hiding properties of a 𝖡𝖠𝖱𝖦, but completeness and somewhere argument of knowledge are strengthened as follows:

  • Incremental completeness: if 𝒱(𝗁𝗄,𝖼𝗋𝗌,,H,Π)=1 and (x,w)=1, then we also have 𝒱(𝗁𝗄,𝖼𝗋𝗌,,H,Π)=1, where (H,Π)=𝒰(𝗁𝗄,𝖼𝗋𝗌,,H,Π,x,w).

  • Somewhere argument of knowledge: upon using the trapdoor version of 𝖦𝖾𝗇, programmed to location i, the extractor extracts not only a witness wi, but also a statement xi and an opening ρ proving that H indeed opens to x in the index i.

The opening ρ extracted by is crucial to the soundness of our 𝖨𝖵𝖢 (discussed below), but it is non-trivial to obtain: at the time the i-th statement and witness are added to the 𝖴𝗉𝖡𝖠𝖱𝖦, we do not yet know what the opening to index i will be, because future statements added to the 𝖴𝗉𝖡𝖠𝖱𝖦 will change it. We show that we can use the structure of Merkle trees and auxiliary information computed at update time to compute this opening in hindsight.

Supporting consistency checks.

Our 𝖨𝖵𝖢 requires the ability to claim that two extracted instances are consistent with each other, for a definition of “consistent” that is supplied by the user. To that end, we extend the syntax above, and give the update and verification procedures two additional inputs: a Turing machine 𝒞(,) specifying the consistency check, and a “last instance” x, which is intended to be the last statement added to the 𝖴𝗉𝖡𝖠𝖱𝖦. The incremental completeness guarantee now applies only when 𝒞(x,x)=1, that is, only when the new statement x is “consistent” with the preceding statement x. Also, the extractor of the somewhere argument of knowledge guarantee now additionally extracts a previous instance x and a respective opening ρ, and we require in addition to the previous requirements that (1) H opens to x in location i1 and this is proved by the opening ρ, and (2) 𝒞(x,x)=1. Finally, in the version which supports consistency checks we also require a useful property that we call last-statement collision-resistance: it is computationally hard to find a tuple (,H,Π,𝒞), two different last statements x0x1, and an opening ρ, such that 𝒱 accepts (𝗁𝗄,𝖼𝗋𝗌,,H,Π,𝒞,x0), but ρ proves that H opens to x1 in the location of the final instance.

3.2 Lifting One-Step Delegation into 𝗜𝗩𝗖 using 𝗨𝗽𝗕𝗔𝗥𝗚s

We now outline our generic 𝖨𝖵𝖢 construction using 𝖴𝗉𝖡𝖠𝖱𝖦s (Theorem 1). Let be the computation model whose executions we would like to incrementally prove correct; we assume that the 𝖨𝖵𝖢 prover also runs in the model . However, the verifier may be computationally weaker, and runs in some other model 𝕍. We require that the 𝖴𝗉𝖡𝖠𝖱𝖦’s prover and verifier run in the models and 𝕍, respectively; this is not a significant limitation, because in our construction both are space-efficient Turing machines.

Suppose we have a (non-incremental) delegation scheme (𝖦𝖾𝗇,𝒫,𝒱) that can succinctly prove one-step computations in , and let 𝒜(C,Λ,T) be an algorithm (represented as an LTS). Let 𝒱 be an algorithm in 𝕍 that implements the verifier 𝒱, with the parameters of the delegation scheme (e.g., the 𝖼𝗋𝗌, the algorithm and the security parameter) hardwired: 𝒱 takes as input digests h,h, a label λΛ and a proof π, interprets h,h as digests h=𝖣𝗂𝗀𝖾𝗌𝗍(𝖼𝖿),h=𝖣𝗂𝗀𝖾𝗌𝗍(𝖼𝖿), and computes the output of the verifier 𝒱 on (h,λ,h,π).

Our 𝖨𝖵𝖢 prover is quite simple: it maintains an 𝖴𝗉𝖡𝖠𝖱𝖦 for the language 𝒱, viewed as an 𝖭𝖯-language where the statement is the triplet (h,λ,h) and the witness is the one-step delegation proof π (so that 𝒱((h,λ,h),π)=1 iff the verifier 𝒱 of the one-step delegation scheme accepts). We use a simple consistency check which requires that for any two consecutive statements (h,λ,h) and (g,σ,g) we have h=g. The 𝖨𝖵𝖢 prover runs alongside the algorithm 𝒜; whenever 𝒜 transitions from 𝖼𝖿 to 𝖼𝖿 upon receiving input λ, the 𝖨𝖵𝖢 prover computes h=𝖣𝗂𝗀𝖾𝗌𝗍(𝖼𝖿),h=𝖣𝗂𝗀𝖾𝗌𝗍(𝖼𝖿), and uses 𝒫 to obtain a proof π for the (digested) transition 𝖼𝖿λ𝖼𝖿. Then it updates the 𝖴𝗉𝖡𝖠𝖱𝖦 by adding the instance-witness pair ((h,λ,h),π).

The prove soundness, we show that if an adversary 𝒜 convinces the verifier to accept two contradictory proofs π0,π1 for final digests h0h1 with respect to the same initial digest h𝗌𝗍𝖺𝗋𝗍, input hash hin and step number T, then for each i=0,,T1, a similar adversary 𝒜i can do the same when we use the CRS generator of the 𝖴𝗉𝖡𝖠𝖱𝖦 in trapdoor mode to bind location i. This allows us to extract instances xi0=(hi0,λi0,hi+10),xi1=(hi1,λi1,hi+11) from the two respective proofs, alongside with their respective witnesses, which are proofs for the state transition in the delegation scheme: wi0=πi0 and wi1=πi1. We then prove by induction on i that in the ith experiment described above, we have hi+10=hi+11 with overwhelming probability . Then, using the last-statement collision resistance property for experiment T, we argue that it must be that ht0=h0 and ht1=h1, which implies that final digests were the same, h0=h1, a contradiction.

To prove the ith induction step, we use the index hiding property to move from the induction hypothesis experiment into a hybrid experiment where the 𝖼𝗋𝗌 is binding in both indices i1,i, and then use the consistent argument of knowledge property of the 𝖴𝗉𝖡𝖠𝖱𝖦, the soundness property of the underlying delegation scheme, and the collision resistance property of the hash family to prove that hi0=hi1 in this hybrid experiment. We finally use the index hiding property again to move into the next experiment of the induction, where the 𝖼𝗋𝗌 is only binding on i.

One way in which this construction and its analysis differ from previous 𝖨𝖵𝖢 constructions (e.g., [20, 11]) is the explicit use of consistency checks to enforce equality between the last and first configurations (respectively) of every two successive transitions; prior work, which did not have consistency checks, used somewhat ad-hoc solutions to ensure this equality.

3.3 Constructing an Updatable Hash-and-𝗕𝗔𝗥𝗚

Our 𝖴𝗉𝖡𝖠𝖱𝖦 construction is similar to [20], with the main differences being the extractor’s ability to extract an opening in hindsight, and the support for consistency checks, which also requires extraction of the opening to the next-to-last statement. We briefly review the parts of the construction that are similar to [20], and then explain how the unique features of the 𝖴𝗉𝖡𝖠𝖱𝖦 (which are not present in [20]) are implemented.

In [20] (as in prior work on delegation and 𝖨𝖵𝖢), the proof of a conjunction of statements x1,,xk with corresponding witnesses w1,,wk is represented as a forest of complete binary trees. The leaves of the trees are individual statements and witnesses, and each inner node intuitively represents a proof for the conjunction of its two children, so that the root of each tree (informally) proves all the statements represented by its leaves. We do not store the entire forest, but rather only the root of each tree; in addition, we make sure that there is always at most one tree of any given height, so that the total number of trees is O(logk).

We refer to the height of a trees as its level, and we define a different verifier for each level: at level 0 (a leaf), the verifier is simply the 𝖭𝖯-verifier of the language, which takes (xi,wi) and accepts or rejects. At levels >0, each node stores a 𝖡𝖠𝖱𝖦 proof asserting that the level-(1) verifier accepts both of its children. The witness for each child is the level-(1) 𝖡𝖠𝖱𝖦 proof that it represents, if the child is an inner node, or if the child is a leaf, the witness wi for the statement represented by the leaf. In turn, the level- verifier is the verifier of the 𝖡𝖠𝖱𝖦 constructed for level-. To add a new statement and witness (xk+1,wk+1), the prover creates a new leaf for (xk+1,wk+1). It then repeatedly merges any two consecutive trees of the same level , by creating a new level-(+1) node with a 𝖡𝖠𝖱𝖦 asserting that the roots of both trees are accepted by the level- verifier, and then discarding the two level- roots.

To extract the i-th witness, we find the tree root containing statement i (this is determined by the index i and the levels of the trees, as all trees are complete). From the root, we descend down the tree to the leaf representing the i-th statement and witness, at each step using the extractor of the 𝖡𝖠𝖱𝖦 at the current node to obtain the 𝖡𝖠𝖱𝖦 proof of the child to which we descend, until we arrive at a leaf; in [20], at the leaf we extract the i-th witness wi, which we then return.

Maintaining an explicit hash of statements, and tying it to the proof.

In the 𝖴𝗉𝖡𝖠𝖱𝖦 we expose to the user a hash with local openings of the statements that went into the 𝖴𝗉𝖡𝖠𝖱𝖦 (which is not done in prior work). This is straightforward: we maintain a separate hash forest, with the same structure as the proof forest described above – at the leaves we hash the statements themselves, and each inner node is the hash of its two children. To tie the proof forest to the hash forest so that it “refers” to the same statements and supports extraction, we modify the level- verifier: at leaf nodes (=0), the verifier takes the statement stored in the leaf of the hash forest and the witness stored in the leaf of the proof forest, and checks that the 𝖭𝖯-verifier accepts them. At inner nodes (>0), the verifier checks that the current node h in the hash forest indeed stores the hash of its two children h0,h1 (in addition to verifying the level- 𝖡𝖠𝖱𝖦 as before). The witness for this claim is the pair (h0,h1), i.e., the hashes represented by the children.

Extracting openings in hindsight.

The extractor of the 𝖴𝗉𝖡𝖠𝖱𝖦 must return the i-th statement xi and a corresponding opening in the hash forest, in addition to the witness wi whose extraction we described above. Extracting the statement xi is easy: as we descend towards the i-th leaf, we hold at each point a 𝖡𝖠𝖱𝖦 proof for some node in the proof forest, and the hash of the corresponding node in the hash forest. We extract from the 𝖡𝖠𝖱𝖦 proof both the 𝖡𝖠𝖱𝖦 proof of the child to which we descend, and also the hash at that child – recall that the hashes (h0,h1) of both children are part of the witness. This allows us to continue our descent, until we arrive at a leaf in the proof forest, which stores the witness wi, and simultaneously a leaf in the hash forest, which stores the statement xi.

To extract an opening ρi to index i in the hash forest, we rely on the structure of a Merkle tree opening – see Figure 1. The opening is assembled as we recurse down the tree: at each node h in the hash tree, we descend to some child hb (for b{0,1}), but the witness that we extract provides both h0 and h1, that is, it provides the sibling of the node to which we descend. We append this sibling to the opening, and continue our descent.

Figure 1: The Merkle tree opening to location i consists of all of the siblings of the nodes on the path from the root to the ith leaf. In this example, the paths from the root vε to the leaves v101,v110 are indicated with red arrows and ellipses and with blue arrows and rectangles, respectively; the openings to nodes v101,v110 are indicated with dashed red ellipses and blue rectangles, respectively.

Supporting consistency checks.

Fix a consistency-checking machine 𝒞(,). In order to support consistency checks, we store additional information in the proof forest, which allows us to locate and open the last statement added. We also modify the verifiers of the proof forest, to check that this auxiliary information correctly reflects the structure of the forest.

We observe that the opening to index i1 consists of three parts, ordered top-down each of which might be empty (see Figure 1 for an illustration):

  1. 1.

    A prefix consisting of the opening to the lowest common ancestor of i1 and i: this part of the opening to index i1 is shared with the opening to index i (in Figure 1, the lowest common ancestor is v1, and the opening to it is v0).

  2. 2.

    A middle part consisting of a single node – the right child of the lowest common ancestor of i1 and i, where the paths to i1 branch left and right, respectively (in Figure 1, this is v11).

  3. 3.

    A suffix consisting of the opening to from the left child of the common ancestor down to index i1, which must be the rightmost child in the subtree. Importantly, this suffix is the same as the opening from the root of a Merkle tree containing only the first i1 statements (in Figure 1, this is v100), which we can compute at the time statement i is added (i.e., it does not require us to know what future statements will be added). While the trees containing i1 and/or i may be merged with other trees in the future, the opening from the lowest common ancestor of i1,i to i1 does not change.

The description above assumes that i1 and i are in the same tree in the forest. If they are not, then i1 is the rightmost leaf in its tree, and i is the leftmost leaf in its tree; the first two parts described above are empty, and the third part is simply the opening from the root to the rightmost leaf in the tree containing i1.

We already saw how to extract an opening to index i, and during this process we obtain the first two parts of the opening to index i1: the opening from the root to the lowest common ancestor v of i1 and i, as well as the right child v1 of v (which is on the path down to i). It remains to obtain the third part: the opening to the leaf that precedes the leftmost leaf in v1’s subtree.

Obtaining this information at extraction time requires us to store additional information when we construct the hash tree: when a node v is constructed, we store (,h,ρ) at node v, where and h are the level and hash root (respectively) of the tree containing the leaf immediately preceding the leftmost leaf in v’s subtree, and ρ is the opening to this rightmost leaf (from the root h). We emphasize that this information is computed and stored at construction time, and may be rendered inaccurate by future updates: for example, h may no longer be the root of the tree containing the desired leaf, as that tree can be merged with other trees. Nevertheless, our observation above shows that the information we store at construction time is exactly what we need to compute the opening to the preceding statement: as we descend to index i, we identify the lowest common ancestor v of i1 and i, where the path to index i1 diverges from the path to i; we descend to the right child v1 of v, and take ρ from v1 to complete the opening to index i1.

We must also modify the 𝖡𝖠𝖱𝖦 proofs and verifiers at each level, to ensure that the additional information is correct. For nodes at level 1, the 𝖡𝖠𝖱𝖦 now asserts an asymmetric conjunction, which states as before that the level-(1) verifier accepts each child node (with an appropriate witness), but also that each child of the current node “points correctly” towards the tree containing the leaf that immediately preceded its subtree at construction time: the left child of a node v must point towards the same leaf that node v itself points to, whereas the right child of v must point towards the left child of v (hence the asymmetry).

Finally, at each leaf node i we additionally store the preceding statement xi1, which allows us to extract xi1 together with xi. The level-0 verifier checks that 𝒞(xi1,xi) accepts (i.e., statement xi1 is “consistent” with xi), and also that if (,h,ρ) is the extra information stored at leaf i, then h indeed opens to xi1 at index 21 using the opening ρ.

3.4 Delegating One-Round Massively Parallel Computations

In the MPC model, n space-bounded machines communicate in synchronized rounds. Each machine has s bits of memory, and in each round it can send and receive messages from any other machine, provided the total number of bits sent or received does not exceed s. In this section we outline how we use 𝖴𝗉𝖡𝖠𝖱𝖦s to construct a one-round delegation scheme for MPC, which we then lift into 𝖨𝖵𝖢 using Theorem 1.

One MPC round as a RAM program.

We observe that one round of MPC on n machines can be described as a RAM program, which takes a vector of the machines’ initial states (𝗌𝗍(1),,𝗌𝗍(n)), and outputs the machines’ states in the end of the round ((𝗌𝗍(1),,𝗌𝗍(n)). Each state 𝗌𝗍(i) or 𝗌𝗍(i) is an s-bit vector, where s is the space bound of an individual machine. To construct a delegation scheme for one-round-MPC, we imitate a delegation scheme for the program above. However, while a RAM program is executed on a single machine that can access any place in its random-access memory, in the MPC model, the “memory” is partitioned across the n machines. Fortunately, existing RAM delegation schemes have the property that constructing the proof does not require access to the entire memory configuration: it is enough to have a hash with local openings of the memory, and openings to the locations that are accessed by the algorithm in each step. Thus, to construct our desired RAM-delegation-like proof for the MPC model, we need to go through the following three stages: (1) Obtain a hash of the state vector (𝗌𝗍(1),𝗌𝗍(n)); (2) For each machine i[n], obtain openings of the above hash value to the messages m1i,,mki (where ks) that machine i receives during the round333We assume for simplicity that the messages each machine sends are stored as part of its state at the beginning of the round. ; and (3) Using the openings, prove the transition (𝗌𝗍(1),,𝗌𝗍(n))(𝗌𝗍(1),,𝗌𝗍(n)). The main challenge in this scheme is that each stage must be implemented in the MPC network: we do not truly have random access to the state assignments, because these are actual states of individual machines. For all three stages, our solution is based on having the n machines simulate some process on a tree-structured network. This network is an s-ary tree with n leaves which represent the states of the n actual machines, and the rest of the nodes are virtual nodes, simulated by the n real machines.

Using a virtual tree-structured network.

To obtain a hash of the state assignment (𝗌𝗍(1),,𝗌𝗍(n)), we aggregate the hash up the tree: the leaves send their state to their parents, and each inner node, upon receiving values from its s children, hashes the values it received and sends them up to its parent. The root of the tree then obtains a hash of the entire state assignment. In order for each machine i[n] to obtain an opening to its state 𝗌𝗍(i), we proceed this time down the tree, with each inner node receiving from its parent a partial opening down to its index, extending it to an opening for each of its children’s indices, and sending each extended opening to the corresponding child. Each inner node is able to extend the opening because it is the one that hashed all of its children’s values together. Eventually, each machine i[n] receives from its parent a complete opening down to index i. Finally, we construct a proof for the alleged RAM computation (𝗌𝗍(1),,𝗌𝗍(n))(𝗌𝗍(1),,𝗌𝗍(n)). To do so, we first observe that this transition is defined by n separate computations, and for each i[n], we prove that when the network state assignment is (𝗌𝗍(1),,𝗌𝗍(n)), the next state of machine i is 𝗌𝗍(i). Each such statement can be proved at machine i, as follows. Let j be a machine that sends message mji to machine i during the round. Recall that after the previous stage, machine j has an opening from the global hash to its state 𝗌𝗍(j). Machine j now computes an opening from 𝗌𝗍(j) to mji and sends this opening to machine i. Each machine, upon receiving these openings, uses a RAM-delegation prover to prove that its transition 𝗌𝗍(i)𝗌𝗍(i+1) is legal.

The remaining challenge is to aggregate the individual proofs of the machines into one global succinct proof while maintaining soundness. To do this we use the virtual network again: we proceed up the tree, with each node sending its current proof up to its parent. Upon receiving the s proofs from its children, each inner node uses an 𝖴𝗉𝖡𝖠𝖱𝖦 to obtain a proof of the conjunction of its children’s statements. Finally, at the root of the tree, we obtain our one succinct proof for the entire transition (𝗌𝗍(1),,𝗌𝗍(n))(𝗌𝗍+(1),,𝗌𝗍+(n)). We remark that the soundness of this scheme is non-trivial, and to argue soundness we have to use special properties of the hash family (shortly, that an opening to xi always contains the hash of (x1,,xi1)).

3.5 Incrementally Verifying Distributed Graph Algorithms

We briefly discuss how we obtain incrementally verifiable computation for CONGEST algorithms. Importantly, in the delegation schemes which exist for this model [2, 3], the verification takes one communication round between the nodes, and the proof is considered accepted if and only if all nodes accept. For this reason, our 𝖴𝗉𝖡𝖠𝖱𝖦 does not trivially apply to this model, so we cannot simply apply our lifting theorem to the existing constructions. To resolve this, instead of using the existing delegation schemes to construct 𝖨𝖵𝖢 directly, we first show that the existing delegation schemes can be transformed into delegation schemes for a different model which verification does not include communication. Instead, the nodes have access to labels which are assigned to their edges. In this model, we can apply our theorem as 𝖴𝗉𝖡𝖠𝖱𝖦s are easily implemented there. Finally, we make some observations about the verifier communication in the distributed delegation scheme of [3], which allow us to use only one round of communication to verify many computation rounds.

4 Updatable Hash-and-𝗕𝗔𝗥𝗚s (𝗨𝗽𝗕𝗔𝗥𝗚s)

In this section we define and construct an updatable hash-and-𝖡𝖠𝖱𝖦 scheme, with and without consistency checks. Since the syntax and definition of the two versions mostly overlap, we define the notion once, and give one construction, where all of the parts which are only relevant to the version with consistency checks appear in gray. Specifically, in the syntax some inputs and outputs are obligatory and relevant only for the consistency checks version and in the definition, some properties are extended for the consistency checks version.

Syntax.

An 𝖴𝗉𝖡𝖠𝖱𝖦 is associated with a recursive hash family with local opening

𝖬𝖳=(𝖬𝖳.𝖦𝖾𝗇,𝖬𝖳.𝖧𝖺𝗌𝗁,𝖬𝖳.𝖮𝗉𝖾𝗇,𝖬𝖳.𝖵𝖾𝗋𝗂𝖿𝗒)

and consists of the following algorithms.

  • 𝖦𝖾𝗇(1λ): A randomized setup algorithm that takes as input a security parameter 1λ, It outputs a common reference string 𝖼𝗋𝗌.

  • 𝖳𝖦𝖾𝗇(1λ,i)(𝖼𝗋𝗌,𝗍𝖽): A randomized setup trapdoor algorithm that takes as input a security parameter 1λ, and an index i. It outputs a common reference string 𝖼𝗋𝗌, and a trapdoor 𝗍𝖽.

  • 𝒰(𝗁𝗄,𝖼𝗋𝗌,,H,Π,x,w,𝒞,x)(H,Π): A deterministic, polynomial-time update algorithm that takes as input a hash key 𝗁𝗄, a common reference string 𝖼𝗋𝗌, a machine , a hash value H, a proof Π, and a new statement x and witness w. Optionally, for the consistency checks version, it also takes a consistency checking machine 𝒞, and a previous statement x. It outputs a hash value H and a new proof Π.

  • 𝒱(𝗁𝗄,𝖼𝗋𝗌,,H,Π,𝒞,x)b{0,1}: A deterministic, polynomial-time verifier algorithm that takes a hash key 𝗁𝗄, a common reference string 𝖼𝗋𝗌, a machine , a hash value H, and proof Π. Optionally, for the consistency checking version, it also takes a consistency check machine 𝒞 and a last statement x. It outputs an acceptance bit b.

  • (𝗁𝗄,𝗍𝖽,,H,Π,𝒞)(x,ρ,w,x,ρ): A deterministic, polynomial-time extraction algorithm that takes as input a hash key 𝗁𝗄, a trapdoor 𝗍𝖽, a machine , a hash value H, and a proof Π. Optionally, for the consistency checks version, it also takes a consistency check machine 𝒞. It outputs a statement x, an opening ρ, and a proof π. Optionally, in the consistency checks version, it also outputs a previous statement x and opening ρ.

Definition 2 (𝖴𝗉𝖡𝖠𝖱𝖦).

An updatable batch argument satisfies the following properties.

Incremental Completeness.

For any λ, machines , and 𝒞, hash key 𝗁𝗄 in the support of 𝖬𝖳.𝖦𝖾𝗇(1λ) and 𝖼𝗋𝗌 in the support of 𝖦𝖾𝗇(1λ):

  • The verifier always accepts an empty proof: 𝒱(𝗁𝗄,𝖼𝗋𝗌,,ε,ε,𝒞,ε)=1.

  • For every k<2λ, a hash set H such that 𝖬𝖳.𝗌𝗂𝗓𝖾(H)=k, proof Π, new statement x and witness w, and for the consistency checks version, a consistency checks machine 𝒞 and last statement x, if 𝒱(𝗁𝗄,𝖼𝗋𝗌,,H,Π,𝒞,x)=1, 𝒞(x,x)=1, and (x,w)=1, then 𝒱(𝗁𝗄,𝖼𝗋𝗌,,H,Π,𝒞,x)=1.

Efficiency and Succinctness.

In the completeness experiment above, after applying 𝒰 for k<2λ times with instance-witness pairs (x1,w1),,(xk,wk):

  • The size of the reference string 𝖼𝗋𝗌 and the size of the hash value H are both poly(λ), and the size of the proof Π is O(m)+poly(λ), where m is the maximal size of an instance xi or a witness wi for i[k].

  • The verification algorithm runs in time (||+|𝒞|)poly(λ,|x|,|H|,|Π|).

Index hiding.

For every poly-size adversary 𝒜, there exists a negligible function negl() such that for every λ and index i2λ,

|Pr[𝒜(𝗁𝗄,𝖼𝗋𝗌)=1|𝗁𝗄𝖬𝖳.𝖦𝖾𝗇(1λ)𝖼𝗋𝗌𝖦𝖾𝗇(1λ)]Pr[𝒜(𝗁𝗄,𝖼𝗋𝗌)=1|𝗁𝗄𝖬𝖳.𝖦𝖾𝗇(1λ)𝖼𝗋𝗌,𝗍𝖽𝖳𝖦𝖾𝗇(1λ,i)]|negl(λ).

Somewhere Consistent Argument of Knowledge.

For any poly-size adversary 𝒜, and polynomials t1=t1(λ), t2=t2(λ), k=k(λ), for the experiments 𝖤𝗑𝗉0,,𝖤𝗑𝗉k1, defined as follows:

𝖤𝗑𝗉i={(𝗁𝗄,𝖼𝗋𝗌,𝗍𝖽)𝖳𝖦𝖾𝗇(1λ,i)(,H,Π,C,x)𝒜(𝗁𝗄,𝖼𝗋𝗌)(x,ρ,w,x,ρ)(𝗁𝗄,𝗍𝖽,,H,Π,𝒞)},

there exists a negligible function negl() such that

Pr𝖤𝗑𝗉0[Hε𝖬𝖳.𝗌𝗂𝗓𝖾(H)k(λ)𝒱(𝗁𝗄,𝖼𝗋𝗌,,H,Π,𝒞,x)=1(t1(x,w)=0𝒞t2(ε,x)=0𝖬𝖳.𝖵𝖾𝗋𝗂𝖿𝗒(𝗁𝗄,H,0,x,ρ)=0)]negl(λ),

and for every λ and index i=i(λ)[k1],

Pr𝖤𝗑𝗉i[Hε𝖬𝖳.𝗌𝗂𝗓𝖾(H)k(λ)𝒱(𝗁𝗄,𝖼𝗋𝗌,,H,Π,𝒞,x)=1(t1(x,w)=0𝒞t2(x,x)=0𝖬𝖳.𝖵𝖾𝗋𝗂𝖿𝗒(𝗁𝗄,H,i,x,ρ)=0𝖬𝖳.𝖵𝖾𝗋𝗂𝖿𝗒(𝗁𝗄,H,i1,x,ρ)=0)]negl(λ).

where for a machine M, input x{0,1}, and t, Mt(x)=1 if and only if M accepts x within t steps.

Last-Statement Collision-Resistance.

In the version with consistency chekcs, for any poly-size adversary 𝒜, and polynomial k=k(λ), for the following experiment:

𝖤𝗑𝗉={𝖼𝗋𝗌𝖦𝖾𝗇(1λ)𝗁𝗄𝖬𝖳.𝖦𝖾𝗇(1λ)(,H,Π,𝒞,x1,x2,ρ)𝒜(𝗁𝗄,𝖼𝗋𝗌)}

there exists a negligible function negl() such that for every λ:

Pr𝖤𝗑𝗉[𝖬𝖳.𝗌𝗂𝗓𝖾(H)=k(λ)𝒱(𝗁𝗄,𝖼𝗋𝗌,,H,Π,𝒞,x1)=1x1x2𝖬𝖳.𝖵𝖾𝗋𝗂𝖿𝗒(𝗁𝗄,H,k1,x2,ρ)=1]
negl(λ).
Theorem 3.

Updatable hash-and-𝖡𝖠𝖱𝖦 exist assuming either: (1) Polynomial hardness of LWE; (2) Subexponential hardness of DDH; (3) Polynomial hardness of DDH and k-Lin.

4.1 Construction from Rate-1 𝗕𝗔𝗥𝗚s and Recursive Hash Families

Let 𝖡𝖠𝖱𝖦=(𝖡𝖠𝖱𝖦.𝖦𝖾𝗇,𝖡𝖠𝖱𝖦.𝒫,𝖡𝖠𝖱𝖦.𝒱,𝖡𝖠𝖱𝖦.) be a rate-1 somewhere extractable batch argument for 𝖭𝖯, and let ={λ}λ a collision-resistant hash family ensemble. Let 𝖬𝖳=(𝖬𝖳.𝖦𝖾𝗇,𝖬𝖳.𝖧𝖺𝗌𝗁,𝖬𝖳.𝖮𝗉𝖾𝗇,𝖬𝖳.𝖵𝖾𝗋𝗂𝖿𝗒) be the recursive hash family with local opening which is the result of constructing Merkle forests from the ensemble ; that is:

  • 𝖬𝖳.𝖦𝖾𝗇(1λ) randomly chooses 𝗁𝗄λ.

  • 𝖬𝖳.𝖧𝖺𝗌𝗁(𝗁𝗄,x1,,xn) uses 𝗁𝗄 to construct a Merkle forest over x1,,xn, that is, a set of Merkle trees of descending heights. It outputs the list of roots of trees, each coupled with its height.

  • 𝖬𝖳.𝖮𝗉𝖾𝗇(𝗁𝗄,x1,,xn,i) returns the opening path from the respective tree in the forest.

  • 𝖬𝖳.𝖵𝖾𝗋𝗂𝖿𝗒(𝗁𝗄,𝖵𝖺𝗅,xi,i,ρ), finds the respective root 𝗏𝖺𝗅 in 𝖵𝖺𝗅 using i and then checks there that r opens to xi in the respective location using the opening path ρ.

In what follows we describe the construction of an updatable hash-and-𝖡𝖠𝖱𝖦 scheme (𝖦𝖾𝗇,𝖳𝖦𝖾𝗇,𝒰,𝒱,).

Moreover, we denote by 𝖬𝖳.𝖫(𝖵𝖺𝗅) the set of all heights of roots in the set 𝖵𝖺𝗅, and by 𝖬𝖳.𝗌𝗂𝗓𝖾(𝖵𝖺𝗅) the size of the hashed content in the set 𝖵𝖺𝗅: 𝖫(𝖵𝖺𝗅)2.

𝗚𝗲𝗻(𝟏𝝀).

  1. 1.

    For every [λ], set 𝖼𝗋𝗌𝖡𝖠𝖱𝖦.𝖦𝖾𝗇(1λ). Set 𝖼𝗋𝗌=(𝖼𝗋𝗌1,,𝖼𝗋𝗌).

𝗧𝗚𝗲𝗻(𝟏𝝀,𝒊).

  1. 1.

    Let i1iλ be i’s bit representation, from least to most significant bit. For every [λ], set (𝖼𝗋𝗌,𝗍𝖽)𝖡𝖠𝖱𝖦.𝖳𝖦𝖾𝗇(1λ,m,i). Set 𝖼𝗋𝗌=(𝖼𝗋𝗌1,,𝖼𝗋𝗌λ) and 𝗍𝖽=(𝗍𝖽1,,skλ). Set 𝗍𝖽=(𝖼𝗋𝗌,i,𝗍𝖽).

We now define a series of verifiers: {𝒱}, using a series of helper, parametrised machines {}, and a helper algorithm 𝖬𝖾𝗋𝗀𝖾, all of which will take part in the following 𝖴𝗉𝖡𝖠𝖱𝖦 algorithms 𝒰,𝒱,.

𝓥𝟎(𝗵𝗸,𝓜,𝒉,𝒘,𝓒).

  1. 1.

    Parse: w=(x,w). Parse w=(x,π,h,)=(x,(w,x,ρ),h,).

  2. 2.

    Verify: h=λ(𝗁𝗄,x).

  3. 3.

    Verify: (x,w)=1.

  4. 4.

    Verify: 𝒞(x,x)=1.

  5. 5.

    If =ε, verify h=x=ρ=ε.

  6. 6.

    If ε, verify 𝖬𝖳.𝖵𝖾𝗋𝗂𝖿𝗒(𝗁𝗄,h,21,x,ρ,)=1.

  7. 7.

    Accept if and only if all checks pass.

𝓜[𝗵𝗸,𝗰𝗿𝘀,𝓜,𝒙,𝓒,𝒉,](𝒊,𝒘~) for >𝟎.

  1. 1.

    Parse x=(h0,h1).

  2. 2.

    If =1, verify 𝒱0(𝗁𝗄,,hi,w~,𝒞)=1.
    Otherwise, verify 𝒱1(𝗁𝗄,𝖼𝗋𝗌,,hi,w~,𝒞)=1.

  3. 3.

    Parse w~=(x,π,h,).

  4. 4.

    If i=0, verify h=h and =.

  5. 5.

    If i=1, Verify h=h0, and =1.

  6. 6.

    Accept if and only if all checks pass.

𝓥(𝗵𝗸,𝗰𝗿𝘀,𝓜,𝒉,𝒘,𝓒) for >𝟎.

  1. 1.

    Parse 𝖼𝗋𝗌=(𝖼𝗋𝗌1,,𝖼𝗋𝗌), and set 𝖼𝗋𝗌=(𝖼𝗋𝗌1,,𝖼𝗋𝗌1) (for =1, set 𝖼𝗋𝗌=ε).

  2. 2.

    Parse: w=(x,π,h,), and x=(h0,h1).

  3. 3.

    Verify: h=λ(𝗁𝗄,x).

  4. 4.

    Let =[𝗁𝗄,𝖼𝗋𝗌,,x,𝒞,h,]. Verify 𝖡𝖠𝖱𝖦.𝒱(𝖼𝗋𝗌,,π)=1.

𝗠𝗲𝗿𝗴𝗲(𝗵𝗸,𝗰𝗿𝘀,𝓜,𝑯,𝚷,𝓒,𝒉,,𝝆𝘀𝘁𝗮𝗿𝘁)(𝑯,𝚷,𝝆𝘀𝘁𝗮𝗿𝘁).

  1. 1.

    Parse 𝖼𝗋𝗌=(𝖼𝗋𝗌1,,𝖼𝗋𝗌λ).

  2. 2.

    ρ+=ε.

  3. 3.

    While there exist {(hi,i)}i{0,1}H such that 0=1:444We assume here implicitly that the newer tuple is (h1,1) and the older one is (h0,0). This could be made formal with more notation, but we decided to omit it for the sake of simplicity and readability.

    1. (a)

      Set w0,w1 to be such that (w0,0)Π and (w1,1)Π.

    2. (b)

      Set x=(h0,h1) and h=(𝗁𝗄,x).

    3. (c)

      Set =0+1.

    4. (d)

      Set 𝖼𝗋𝗌=(𝖼𝗋𝗌1,,𝖼𝗋𝗌1)

    5. (e)

      Let =[𝗁𝗄,𝖼𝗋𝗌,,x,𝒞,h,].

    6. (f)

      Set π=𝖡𝖠𝖱𝖦.𝒫(𝖼𝗋𝗌,,(w0,w1)).

    7. (g)

      Parse w0=(x0,π0,h0,0).

    8. (h)

      Set w=(x,π,h0,0).

    9. (i)

      Set ρ+=h0ρ+.

    10. (j)

      If 0=max𝖬𝖳.𝖫(H), set ρ𝗌𝗍𝖺𝗋𝗍=h1ρ𝗌𝗍𝖺𝗋𝗍.

    11. (k)

      Set Π=(Π{(w,)})\{(wi,i)}{0,1}.

    12. (l)

      Set H=(H{(h,)})\{(hi,i)}{0,1}.

  4. 4.

    Output (H,Π,ρ𝗌𝗍𝖺𝗋𝗍).

We continue to define the remaining algorithms 𝒰,𝒱,.

𝓤(𝗵𝗸,𝗰𝗿𝘀,𝓜,𝚷,𝒙,𝒘,𝓒,𝒙).

  1. 1.

    Parse 𝖼𝗋𝗌=(𝖼𝗋𝗌1,,𝖼𝗋𝗌λ).

  2. 2.

    Set h=(𝗁𝗄,x).

  3. 3.

    If Πε, parse Π=(Π,𝖺𝗎𝗑), 𝖺𝗎𝗑=(h,ρ,,ρ𝗌𝗍𝖺𝗋𝗍,x𝗌𝗍𝖺𝗋𝗍), and set Π=Π. Otherwise, set h=ρ==ρ𝗌𝗍𝖺𝗋𝗍=ε, and x𝗌𝗍𝖺𝗋𝗍=x.

  4. 4.

    Set w=(x,w). Set π=(w,x,ρ), and w=(x,π,h,).

  5. 5.

    Set H=H{(h,)}, and Π=Π{(w,)}.

  6. 6.

    Set (H,Π,ρ+,ρ𝗌𝗍𝖺𝗋𝗍)=𝖬𝖾𝗋𝗀𝖾(𝗁𝗄,𝖼𝗋𝗌,,H,Π,𝒞,h,,ρ𝗌𝗍𝖺𝗋𝗍).

  7. 7.

    Set +=min𝖬𝖳.𝖫(H), and set h+ to be s.t (h+,+)H.

  8. 8.

    Set 𝖺𝗎𝗑=(h+,ρ+,+,x𝗌𝗍𝖺𝗋𝗍,ρ𝗌𝗍𝖺𝗋𝗍).

  9. 9.

    Set Π=(Π,𝖺𝗎𝗑)

  10. 10.

    Output (H,Π).

𝓥(𝗵𝗸,𝗰𝗿𝘀,𝓜,𝑯,𝚷,𝓒,𝒙).

  1. 1.

    Parse 𝖼𝗋𝗌=(𝖼𝗋𝗌1,,𝖼𝗋𝗌λ), and for every [λ], set 𝖼𝗋𝗌=(𝗁𝗄,𝖼𝗋𝗌1,,𝖼𝗋𝗌).

  2. 2.

    If either of the following is true, then verify all of them are true, and if so accept and finish: (1) H=ε, (2) Π=ε and (3) x=ε. In any other case, continue.

  3. 3.

    Parse Π=(Π,𝖺𝗎𝗑), and 𝖺𝗎𝗑=(h,ρ,,x𝗌𝗍𝖺𝗋𝗍,ρ𝗌𝗍𝖺𝗋𝗍), and set Π=Π.

  4. 4.

    Verify that {w:(w,)Π}=𝖬𝖳.𝖫(H), and that for every (h1,1),(h2,2)H, we have 12.

  5. 5.

    For every 𝖬𝖳.𝖫(H), for h,w such that (h,)H and (w,)Π, verify: 𝒱(𝗁𝗄,𝖼𝗋𝗌,,h,w,𝒞)=1 (For =0, omit 𝖼𝗋𝗌 from the input).

  6. 6.

    Verify 𝖬𝖳.𝖵𝖾𝗋𝗂𝖿𝗒(𝗁𝗄,H,0,x𝗌𝗍𝖺𝗋𝗍,ρ𝗌𝗍𝖺𝗋𝗍)=1.

  7. 7.

    Verify 𝒞(ε,x𝗌𝗍𝖺𝗋𝗍)=1.

  8. 8.

    Verify that =min𝖬𝖳.𝖫(H) and that (h,)𝖬𝖳.𝖫(H).

  9. 9.

    Let k=𝖬𝖳.𝖫(H)2. Verify 𝖬𝖳.𝖵𝖾𝗋𝗂𝖿𝗒(𝗁𝗄,H,k1,x,ρ)=1.

  10. 10.

    Accept if all checks pass.

𝓔(𝘁𝗱,𝗵𝗸,𝓜,𝑯,𝚷,𝓒).

  1. 1.

    Parse 𝗍𝖽=(𝖼𝗋𝗌,i,𝗍𝖽), 𝖼𝗋𝗌=(𝖼𝗋𝗌1,,𝖼𝗋𝗌λ), and 𝗍𝖽=(𝗍𝖽1,,𝗍𝖽λ).

  2. 2.

    Let i0iλ1 be i’s bit representation, from least significant bit to most significant bit.

  3. 3.

    Set 𝖬𝖳.𝖫(H) to be such that

    𝖬𝖳.𝖫(H)>21<i𝖬𝖳.𝖫(H)21.
  4. 4.

    Parse Π=(Π,𝖺𝗎𝗑), and set Π=Π.

  5. 5.

    Set h,w to be such that (h,)H and (w,)Π.

  6. 6.

    Set ρ=ε. Set ρ=ε.

  7. 7.

    Set =.

  8. 8.

    If i>0, let be the index of the most significant bit where i and i1 disagree.

  9. 9.

    While >0:

    1. (a)

      Parse w=(x,π,h,), and x=(h0,h1).

    2. (b)

      Set 𝖼𝗋𝗌=(𝖼𝗋𝗌1,,𝖼𝗋𝗌1), and let =[𝗁𝗄,𝖼𝗋𝗌,,x,𝒞,h,]. Set w=𝖡𝖠𝖱𝖦.(𝗍𝖽,,π).

    3. (c)

      Set =1.

    4. (d)

      Set ρ=h1iρ.

    5. (e)

      If i>0, >, set ρ=h1iρ. If =, set ρ=hiρ.

  10. 10.

    Parse π=(w,x,ρ).

  11. 11.

    Set ρ=ρρ.

  12. 12.

    Output (x,ρ,w) additionally, (x,ρ).

5 One-step Delegation to IVC via UpBARGs

In this section we show how to use 𝖴𝗉𝖡𝖠𝖱𝖦 to lift a delegation scheme for one step into an 𝖨𝖵𝖢, using our 𝖴𝗉𝖡𝖠𝖱𝖦, in a generic manner: for deterministic computational models and 𝕍, we define and construct incrementally verifiable 𝕍- delegation scheme, in which computations in the model are incrementally proven using a -algorithm to a verifier runs which is in a 𝕍-algorithm.

Below we formally define our notion of 𝕍- delegation scheme. We then present our construction.

5.1 Incrementally Verifiable 𝕍- Delegation.

Syntax.

Incrementally Verifiable 𝕍- Delegation consists of the following algorithms:

  • 𝖦𝖾𝗇(1λ)𝖼𝗋𝗌: A randomized setup algorithm that takes as input a security parameter 1λ and outputs a common reference string 𝖼𝗋𝗌.

  • 𝖣𝗂𝗀𝖾𝗌𝗍(𝖼𝗋𝗌,𝖼𝖿)h: A -algorithm that takes a reference string 𝖼𝗋𝗌, and a configuration 𝖼𝖿𝖢𝖥[]. It outputs digest h.

  • 𝖫𝖻𝗅𝖣𝗂𝗀𝖾𝗌𝗍(𝖼𝗋𝗌,𝗅𝖻𝗅)H: A -algorithm that takes a reference string 𝖼𝗋𝗌 and a label 𝗅𝖻𝗅𝖫𝖻𝗅[]. It outputs digest 𝗁𝗅𝖻𝗅.

  • 𝒰(𝖼𝗋𝗌,,𝖼𝖿0,𝖼𝖿t,𝗅𝖻𝗅t,t,Ht,Πt)𝖼𝖿t+1,Ht+1,Πt+1: A -algorithm that takes a reference string 𝖼𝗋𝗌, a a -algorithm , an initial configuration 𝖼𝖿0, a current configuration 𝖼𝖿t, a label 𝗅𝖻𝗅t, a number of steps t, a label digest Ht, and a proof Πt. It outputs a new configuration 𝖼𝖿t+1, a new label digest Ht+1, and a new proof Πt+1.

  • 𝒱(𝖼𝗋𝗌,,h,Ht,h,t,Πt)b: A 𝕍 algorithm that takes a reference string 𝖼𝗋𝗌, a -algorithm , an initial digest h, a possibly empty hash of labels Ht, a final digest h, a number of steps t, and a proof Πt. It outputs an acceptance bit b.

Definition 4 (𝕍- Incrementally verifiable Delegation).

A 𝕍- incrementally verifiable delegation scheme satisfies the same collision resistance succinctness, and soundness properties as a (non-incremental) 𝕍- delegation scheme. In addition, it satisfies the following incremental completeness property: For any λ, 1 algorithm and 𝖼𝗋𝗌 in the support of 𝖦𝖾𝗇(1λ):

  • The verifier accepts the 0-steps statement with an empty proof. For every hash value h: 𝒱(𝖼𝗋𝗌,,h,ε,h,0,ε)=1.

  • For every t<2λ, initial digest h0, configuration 𝖼𝖿t, label 𝗅𝖻𝗅t, hash of labels Ht and proof Πt, we have that for 𝗁t𝖣𝗂𝗀𝖾𝗌𝗍(𝖼𝗋𝗌,𝖼𝖿t), if 𝒱(𝖼𝗋𝗌,,h0,Ht,ht,t,Πt)=1, then 𝒱(𝖼𝗋𝗌,,h0,Ht+1,ht+1,t+1,Πt+1)=1 where ht+1=𝖣𝗂𝗀𝖾𝗌𝗍(𝖼𝗋𝗌,𝖼𝖿t+1) and (𝖼𝖿t+1,Ht+1,Πt+1)=𝒰(𝖼𝗋𝗌,,𝖼𝖿t,𝗅𝖻𝗅t,Ht,Πt).

5.2 Construction

In our construction, we use a 𝕍- delegation scheme, and a 𝕍- 𝖴𝗉𝖡𝖠𝖱𝖦, defined below.

Definition 5 (𝕍- 𝖴𝗉𝖡𝖠𝖱𝖦).

A 𝕍- 𝖴𝗉𝖡𝖠𝖱𝖦 has the syntax of an updatable hash-and-𝖡𝖠𝖱𝖦 (see Definition 2) and satisfies the same properties, with the following generalizations:

  • In the input to 𝒰,𝒱, instead of being Turing machines, ,𝒞 are -algorithms, which can also take labels in their input if is a model of labeled algorithms.

  • 𝒫 is a algorithm and 𝒱 is a 𝕍 algorithm.

  • In the associated hash family 𝖬𝖳, 𝖬𝖳.𝖧𝖺𝗌𝗁 is a -algorithm and 𝖬𝖳.𝖵𝖾𝗋𝗂𝖿𝗒 is a 𝕍-algorithm.

Moreover, we use an extension to the usual syntax of hash family with local opening which allows us to hash different vectors separately using the same invocation, that is: 𝖬𝖳.𝖧𝖺𝗌𝗁(𝗁𝗄,(x1,,xk),(y1,,yk))=(hx,hy). Note that using simply a pair of Merkle trees instead of one allows for such hash families with all the properties of hash families with local opening.

Let 𝖴𝗉𝖡𝖠𝖱𝖦=(𝖴𝗉𝖡𝖠𝖱𝖦.𝖦𝖾𝗇,𝖴𝗉𝖡𝖠𝖱𝖦.𝖳𝖦𝖾𝗇,𝖴𝗉𝖡𝖠𝖱𝖦.𝒰,𝖴𝗉𝖡𝖠𝖱𝖦.𝒱,𝖴𝗉𝖡𝖠𝖱𝖦.) be an updatable hash-and-𝖡𝖠𝖱𝖦 scheme for 𝖭𝖯 , associated with the recursive hash family with local openings 𝖬𝖳=(𝖬𝖳.𝖦𝖾𝗇,𝖬𝖳.𝖧𝖺𝗌𝗁,𝖬𝖳.𝖮𝗉𝖾𝗇,𝖬𝖳.𝖵𝖾𝗋𝗂𝖿𝗒), which in turn admits the extended syntax mentioned above. Let 𝖣𝖾𝗅=(𝖣𝖾𝗅.𝖦𝖾𝗇,𝖣𝖾𝗅.𝖣𝗂𝗀𝖾𝗌𝗍,𝖣𝖾𝗅.𝖫𝖻𝗅𝖣𝗂𝗀𝖾𝗌𝗍,𝖣𝖾𝗅.𝒫,𝖣𝖾𝗅.𝒱) be a one-step 𝕍- delegation scheme. For our construction we use the extended syntax for hash sets of the 𝖬𝖳 family, and the extended syntax for 𝖴𝗉𝖡𝖠𝖱𝖦 that is extractable in 2 locations. As with regular 𝖡𝖠𝖱𝖦s, this could be achieved for 𝖴𝗉𝖡𝖠𝖱𝖦s by doubling the proof and CRS size.

We first define for every -algorithm , reference string 𝖼𝗋𝗌 and hash value h two helper -algorithms, 𝒞[,𝖼𝗋𝗌,h] and [,𝖼𝗋𝗌], and then continue to define the scheme’s algorithms.

Helper algorithms 𝓒[𝓜,𝗰𝗿𝘀,𝒉] and 𝓜[𝓜,𝗰𝗿𝘀].

  • 𝒞[,𝖼𝗋𝗌,h](x1,x2): If x1=ε, parse x2=(h2,h2) and accept if and only if h2=h. Otherwise, Parse x1=(h1,h1) and x2=(h2,h2), and verify that h1=h2.

  • [,𝖼𝗋𝗌](x,w): Parse (x,x)=(((h1,h2),𝗁𝗅𝖻𝗅),π),
    and verify 𝖣𝖾𝗅.𝒱(𝖼𝗋𝗌,,h1,𝗁𝗅𝖻𝗅,h2,1,π)=1.

𝗚𝗲𝗻(𝟏𝝀).

  1. 1.

    𝗁𝗄=𝖬𝖳.𝖦𝖾𝗇(1λ).

  2. 2.

    𝖼𝗋𝗌𝖡𝖠=𝖴𝗉𝖡𝖠𝖱𝖦.𝖦𝖾𝗇2(1λ).

  3. 3.

    𝖼𝗋𝗌𝖣𝖾𝗅=𝖣𝖾𝗅.𝖦𝖾𝗇(1λ).

  4. 4.

    Output 𝖼𝗋𝗌=(𝗁𝗄,𝖼𝗋𝗌𝖡𝖠,𝖼𝗋𝗌𝖣𝖾𝗅).

𝓤(𝗰𝗿𝘀,𝓜,𝗰𝗳𝟎,𝗰𝗳𝒕,𝗹𝗯𝗹𝒕,𝒕,𝑯𝒕,𝚷𝒕)𝗰𝗳𝒕+𝟏,𝑯𝒕+𝟏,𝚷𝒕+𝟏.

  1. 1.

    Parse 𝖼𝗋𝗌=(𝗁𝗄,𝖼𝗋𝗌𝖡𝖠,𝖼𝗋𝗌𝖣𝖾𝗅).

  2. 2.

    Parse Π=(H𝖡𝖠,Π𝖡𝖠,x). (If Π=ε, set Π𝖡𝖠=H𝖡𝖠=x=ε.)

  3. 3.

    Set 𝖼𝖿t+1=1(𝖼𝖿t,𝗅𝖻𝗅t).

  4. 4.

    Set ht+1=𝖣𝖾𝗅.𝖣𝗂𝗀𝖾𝗌𝗍(𝖼𝗋𝗌𝖣𝖾𝗅,𝖼𝖿t+1).

  5. 5.

    Set 𝗁𝗅𝖻𝗅t+1=𝖣𝖾𝗅.𝖫𝖻𝗅𝖣𝗂𝗀𝖾𝗌𝗍(𝖼𝗋𝗌𝖣𝖾𝗅,𝗅𝖻𝗅t).

  6. 6.

    Set x=((ht,ht+1),𝗁𝗅𝖻𝗅t).

  7. 7.

    Set π=𝖣𝖾𝗅.𝒫(𝖼𝗋𝗌𝖣𝖾𝗅,,𝖼𝖿t,1).

  8. 8.

    Set h0=𝖣𝖾𝗅.𝖣𝗂𝗀𝖾𝗌𝗍(𝖼𝗋𝗌𝖣𝖾𝗅,𝖼𝖿0).

  9. 9.

    Set (H𝖡𝖠,Π𝖡𝖠)=𝖴𝗉𝖡𝖠𝖱𝖦.𝒰2(𝗁𝗄,𝖼𝗋𝗌𝖡𝖠,[,𝖼𝗋𝗌𝖣𝖾𝗅],H𝖡𝖠,Π𝖡𝖠,x,π,𝒞[,𝖼𝗋𝗌𝖣𝖾𝗅,h0],x).

  10. 10.

    Parse H𝖡𝖠=(H,Ht+1).

  11. 11.

    Set Πt+1=(H𝖡𝖠,Π𝖡𝖠,x).

  12. 12.

    Output (𝖼𝖿t+1,Ht+1,Πt+1).

𝓥(𝗰𝗿𝘀,𝓜,𝒉𝟎,𝑯𝒕,𝒉𝒕,𝒕,𝚷𝒕)𝒃.

  1. 1.

    Parse 𝖼𝗋𝗌=(𝗁𝗄,𝖼𝗋𝗌𝖡𝖠,𝖼𝗋𝗌𝖣𝖾𝗅).

  2. 2.

    If Π=ε, verify that h0=ht and that t=0, and finish. Otherwise, continue.

  3. 3.

    Parse Πt=(H𝖡𝖠,Π𝖡𝖠,x).

  4. 4.

    Parse H𝖡𝖠=(H,Ht), and verify that Ht=Ht.

  5. 5.

    x=((ht1~,ht~),𝗁𝗅𝖻𝗅t) and verify ht~=ht.

  6. 6.

    Verify t=𝖬𝖳.𝗌𝗂𝗓𝖾(H𝖡𝖠).

  7. 7.

    Verify 𝖴𝗉𝖡𝖠𝖱𝖦.𝒱2(𝗁𝗄,𝖼𝗋𝗌𝖡𝖠,[,𝖼𝗋𝗌𝖣𝖾𝗅],H𝖡𝖠,Π𝖡𝖠,𝒞[,𝖼𝗋𝗌𝖣𝖾𝗅,h0],x)=1.

  8. 8.

    Accept if all checks pass.

References

  • [1] Abtin Afshar and Rishab Goyal. Verifiable streaming computation and step-by-step zero-knowledge. Cryptology ePrint Archive, Paper 2025/251, 2025. URL: https://eprint.iacr.org/2025/251.
  • [2] Eden Aldema Tshuva, Elette Boyle, Ran Cohen, Tal Moran, and Rotem Oshman. Locally verifiable distributed SNARGs. In TCC, pages 65–90. Springer, 2023. doi:10.1007/978-3-031-48615-9_3.
  • [3] Eden Aldema Tshuva and Rotem Oshman. Fully Local Succinct Distributed Arguments. In DISC, pages 1:1–1:24. Schloss Dagstuhl – Leibniz-Zentrum für Informatik, 2024. doi:10.4230/LIPIcs.DISC.2024.1.
  • [4] Eli Ben-Sasson, Alessandro Chiesa, Eran Tromer, and Madars Virza. Scalable zero knowledge via cycles of elliptic curves. Algorithmica, 79:1102–1160, 2017. doi:10.1007/S00453-016-0221-0.
  • [5] Nir Bitansky, Ran Canetti, Alessandro Chiesa, and Eran Tromer. Recursive composition and bootstrapping for snarks and proof-carrying data. In STOC, pages 111–120, 2013. doi:10.1145/2488608.2488623.
  • [6] Alessandro Chiesa and Eran Tromer. Proof-carrying data and hearsay arguments from signature cards. In ICS (Vol. 10), pages 310–331, 2010. URL: http://conference.iiis.tsinghua.edu.cn/ICS2010/content/papers/25.html.
  • [7] Arka Rai Choudhuri, Sanjam Garg, Abhishek Jain, Zhengzhong Jin, and Jiaheng Zhang. Correlation intractability and snargs from sub-exponential ddh. In Crypto, pages 635–668. Springer, 2023. doi:10.1007/978-3-031-38551-3_20.
  • [8] Arka Rai Choudhuri, Abhishek Jain, and Zhengzhong Jin. Non-interactive batch arguments for NP from standard assumptions. In Annual International Cryptology Conference, pages 394–423. Springer, 2021. doi:10.1007/978-3-030-84259-8_14.
  • [9] Arka Rai Choudhuri, Abhishek Jain, and Zhengzhong Jin. SNARGs for P from LWE. In FOCS, pages 68–79, 2021.
  • [10] Pratish Datta, Abhishek Jain, Zhengzhong Jin, Alexis Korb, Surya Mathialagan, and Amit Sahai. Incrementally verifiable computation for np from standard assumptions. In Annual International Cryptology Conference, pages 611–642. Springer, 2025. doi:10.1007/978-3-032-01907-3_20.
  • [11] Lalita Devadas, Rishab Goyal, Yael Kalai, and Vinod Vaikuntanathan. Rate-1 non-interactive arguments for batch-NP and applications. In FOCS, pages 1057–1068, 2022. doi:10.1109/FOCS54457.2022.00103.
  • [12] Yuval Emek, Yuval Gil, and Shay Kutten. Locally Restricted Proof Labeling Schemes. In 36th International Symposium on Distributed Computing (DISC 2022), volume 246, pages 20:1–20:22, 2022. doi:10.4230/LIPIcs.DISC.2022.20.
  • [13] Dario Fiore and Ida Tucker. Efficient zero-knowledge proofs on signed data with applications to verifiable computation on data streams. In CCS, pages 1067–1080, 2022. doi:10.1145/3548606.3560630.
  • [14] Rachit Garg, Kristin Sheridan, Brent Waters, and David J Wu. Fully succinct batch arguments for NP from indistinguishability obfuscation. In Theory of Cryptography Conference, pages 526–555. Springer, 2022. doi:10.1007/978-3-031-22318-1_19.
  • [15] Yael Kalai, Alex Lombardi, Vinod Vaikuntanathan, and Daniel Wichs. Boosting batch arguments and RAM delegation. In Proceedings of the 55th Annual ACM Symposium on Theory of Computing (STOC), pages 1545–1552, 2023. doi:10.1145/3564246.3585200.
  • [16] Yael Kalai and Omer Paneth. Delegating ram computations. In TCC, pages 91–118. Springer, 2016.
  • [17] Yael Tauman Kalai, Omer Paneth, and Lisa Yang. How to delegate computations publicly. In Proceedings of the 51st Annual ACM SIGACT Symposium on Theory of Computing, pages 1115–1124, 2019. doi:10.1145/3313276.3316411.
  • [18] Amos Korman, Shay Kutten, and David Peleg. Proof labeling schemes. In PODC, pages 9–18, 2005. doi:10.1145/1073814.1073817.
  • [19] Silvio Micali. Computationally sound proofs. SIAM Journal on Computing, 30(4):1253–1298, 2000. doi:10.1137/S0097539795284959.
  • [20] Omer Paneth and Rafael Pass. Incrementally verifiable computation via rate-1 batch arguments. In FOCS, pages 1045–1056, 2022. doi:10.1109/FOCS54457.2022.00102.
  • [21] Amit Sahai and Brent Waters. How to use indistinguishability obfuscation: deniable encryption, and more. In Proceedings of the forty-sixth annual ACM symposium on Theory of computing, pages 475–484, 2014. doi:10.1145/2591796.2591825.
  • [22] Janwillem Swalens, Lode Hoste, Emad Heydari Beni, and Lieven Trappeniers. zkstream: a framework for trustworthy stream processing. In International Middleware Conference, pages 252–265, 2024. doi:10.1145/3652892.3700763.
  • [23] Paul Valiant. Incrementally verifiable computation or proofs of knowledge imply time/space efficiency. In TCC, pages 1–18. Springer, 2008. doi:10.1007/978-3-540-78524-8_1.
  • [24] Brent Waters and David J Wu. Batch arguments for NP and more from standard bilinear group assumptions. In Crypto, pages 433–463. Springer, 2022. doi:10.1007/978-3-031-15979-4_15.