Intuitions Behind the Range Proofs of Bulletproof: Part 1
In this video I quickly go over the amazing post from the dalek implementation of bulletproof, which itself goes over the range proof protocol of Bulletproofs: Short Proofs for Confidential Transactions and More.
Note that if you don’t know what bulletproof or IPA are, you can check my previous writing on the subject.
To summarize, the way I see the rangeproof protocol built on top of bulletproof/IPA is that you’re proving execution of a circuit with:
- input := a (hiding) commitment to the bits of , and an intermediary value
- expected output := something based on , the (hiding) commitment to
if you can prove the execution of that circuit (which essentially checks that values are bits, and that they are the correct bit decomposition of ) correctly, then you convinced the verifier that is n-bit.
The circuit is written as a single inner product where:
- are intermediary values in our circuit, computed from and respectively to embody the circuit logic (unlike other intermediary values, these can be computed by the verifier directly)
- is an intermediary value that contains the expected output, so we need to prove how it connects with the expected output
Then it is rewritten as blinded polynomials where the blinding factors are hidden behind powers of in order to hide the real computation in the constant terms. That is we still have .
The verifier samples a random evaluation point in order to check that at a single point (which shows that it is most likely true everywhere, relying on our good old Schwartz-Zippel lemma).
the proof that the inner product itself is delegated to the IPA proof system, so most of the complexity there is to understand:
- how the intermediary variables are calculated from the committed inputs ( and )
- how the result of the inner product matches what is expected
The blinding is what makes it more complicated, and we’ll talk about that in part2.
EDIT: part 2 is here.