A linkable vector commitment scheme which allows one to prove in zero-knowledge that a committed value is contained in a public vector commitment. For a vector commitment of size N, we achieve O(log(N)) online prover time assuming O(N log(N)) preprocessing and O(N) storage.
DRI: Anca Nitulescu
Joint work with: Arantxa Zapico, Vitalik Buterin, Dmitry Khovratovich, Mary Maller, Mark Simkin
Paper: Caulk: Lookup Arguments in Sublinear Time in CCS22
For privacy-preserving applications it is vital to make proofs zero-knowledge, i.e. hiding the element that is asserted to be in a commitment to a big table, while still establishing a certain relationship, or link, to that element.
Applications include membership proofs, ring signatures, anonymous credentials and other schemes:
https://docs.google.com/presentation/d/18B9aVpT3Z1KRbobkTTCbNNH3I_kSw5bviZvMEPH_CFY/embed?start=false&loop=false&
Caulk is a special case of a more general family of protocols that add a property called position-hiding linkability to vector commitment schemes.
This primitive asserts that all (hidden) entries committed in an element $cm$ are also (publicly) committed to in a committed table $C$.
Position-hiding refers to the fact that no information about which elements were taken to
construct $cm$ should be leaked.
Caulk can be used for the case of proving membership of a single element ($๐ = 1$)
Caulk extension to $๐$-subsets ($๐ > 1$) proofs, with some values from the subvector possibly repeating can be seen as a lookup table, and is thus a prover efficient alternative to schemes such as Plookup.
https://www.youtube.com/watch?v=uEssF2WzIeU
Caulkโs prover is almost 100 times as fast as Merkle trees instantiated with a Poseidon Hash and Groth16 zkSNARK on top, and 10 times as fast as the RSA accumulator. Although the latter stays constant while Caulkโs time grows slowly, Caulk will still perform better for all values $๐$ that can be consider practical.