# RareSkills Authors - Groth16 Explained (Highlights) ![rw-book-cover|256](https://static.wixstatic.com/media/935a00_99800e3e4b574642a0520aa3bdfe1866~mv2.png/v1/fill/w_800,h_800,al_c,q_90/935a00_99800e3e4b574642a0520aa3bdfe1866~mv2.png) ## Metadata **Review**:: [readwise.io](https://readwise.io/bookreview/38850709) **Source**:: #from/readwise #from/reader **Zettel**:: #zettel/fleeting **Status**:: #x **Authors**:: [[RareSkills Authors]] **Full Title**:: Groth16 Explained **Category**:: #articles #readwise/articles **Category Icon**:: 📰 **URL**:: [www.rareskills.io](https://www.rareskills.io/post/groth16) **Host**:: [[www.rareskills.io]] **Highlighted**:: [[2024-03-21]] **Created**:: [[2024-03-21]] ## Highlights - It uses auxiliary elliptic curve points from the trusted setup to prevent forged proofs. ([View Highlight](https://read.readwise.io/read/01hsdyxt2rj9t8096yexaxjtma)) ^695421222 - We need to force the prover to be honest without introducing too much computational overhead. The first algorithm to accomplish this was “[Pinocchio: Nearly Practical Verifiable Computation](https://eprint.iacr.org/2013/279.pdf).” This was usable enough for zcash to base the first version of their blockchain on it. ([View Highlight](https://read.readwise.io/read/01hsdz08mj7az8616x55p385r6)) ^695421400 - However, groth16 was able to accomplish the same thing in much fewer steps, and the algorithm is still widely in use today, as no algorithm since has produced as efficient a verifier step (though other algorithms have eliminated the trusted setup or significantly reduced the amount of work for the prover). ([View Highlight](https://read.readwise.io/read/01hsdz0g0wjfncn37c693pw71r)) ^695421425 - These are created by the trusted setup agent randomly sampling α and β, creating elliptic curve points [αG] and [βG] and then destroying α and β. ([View Highlight](https://read.readwise.io/read/01hsf5xgy17s2hh48nbt4astgw)) ^695633803 - Under the new formula, the prover can no longer invent A, B and compute C, or invent C and derive A and B. ([View Highlight](https://read.readwise.io/read/01hsf64t7tmgwwvdxsca63xws2)) ^695634747 - However, the term βu(τ) + αv(τ) + w(τ) can be precomputed at τ at the trusted setup. ([View Highlight](https://read.readwise.io/read/01hsf6qfsc8vf0e4e3r1vz97hs)) ^695636419 - The underlined parts are what we send to the prover. ([View Highlight](https://read.readwise.io/read/01hsf6x91afadeb732np1kjhg9)) ^695637131 ![XA0Fhe](https://blog.iany.me/uploads/202403/kGE1ax/XA0Fhe.png) - The only thing that changes from above is that [C] is computed over the private inputs, instead of the entire witness vector. ([View Highlight](https://read.readwise.io/read/01hsf71fdmj8wta9xrvp3xabs9)) ^695641174 - and the verifier has to compute the public portion using the elliptic curve points from the trusted setup. This is the new verification formula ([View Highlight](https://read.readwise.io/read/01hsf72e0ewm0ch4w1hmw6j40y)) ^695642422 - To prevent this, the trusted setup agent divides w₀(τ) and w₁(τ) by a secret variable γ the prover portion by a different variable δ. ([View Highlight](https://read.readwise.io/read/01hsf77ek6jqgbsyda7ghj8h29)) ^695649232 - The [γ] and [δ] terms will cancel out if the prover truly used the polynomials from the trusted setup. The prover (and verifier) do not know the field element that corresponds to [δ], so they cannot cause the terms to cancel out unless they use the values from the trusted setup. ([View Highlight](https://read.readwise.io/read/01hsf76tg3ngsn27q3er7vqz1b)) ^695648737 - Our scheme is not yet truly zero knowledge. If an attacker is able to guess our witness vector (which is possible if there is only a small range of valid inputs, e.g. secret voting from privileged addresses), then they can verify their guess is correct by comparing their constructed proof to the original proof. ([View Highlight](https://read.readwise.io/read/01hsf7ehmpm9e089f16tqpafzp)) ^695656857 - To do this, we introduce another random shift, but this time at the proving phase instead of the setup phase. ([View Highlight](https://read.readwise.io/read/01hsf7etre873pghn7ft7ks552)) ^695657059