前序博客 Compressed sigma-Protocol Theory and Practical Application to Plug & Play Secure Algorithmics学习笔记。
本人就 Thomas Attema等人2020年论文《Compressed sigma-Protocol Theory and Practical Application to Plug & Play Secure Algorithmics》做了相应的代码实现,具体见:
- https://github.com/3for/Compressed_sigma-protocol
在该代码库中,目前仅基于Discrete Logarithmic assumption做了相应的实现,RSA assumption 和 Knowledge-of-Exponent Assumption 暂未实现:
-
Discrete Logarithmic assumption 采用的是curve25519-dalek。 使用Pedersen vector commitment scheme的一个主要缺陷是所需generators的数量与vector dimension成正比。如需commit to an n n n-dimensional vector,则需要 n + 1 n+1 n+1 generators of the group G \mathbb{G} G。同时,对于compressed ∑ \sum ∑-protocol Π c \Pi_c Πc,其verification time与dimension n n n呈正比。【因此设计了5.3.1和5.3.2场景,可减少generator数量的需求。】
-
基本的 nizk、scalar 实现参考了Spartan库,但是Spartan库中的
bullet.rs
【主要基于Hyrax,实现了zero-knowledge属性,但是存在Prover cheat问题,具体参见issue:Add another challenge in dotproduct proof? #33】reduce到 n = 1 n=1 n=1,本文根据论文reduce到了 n = 2 n=2 n=2,且不要求zero-knowledge,具体见: https://github.com/3for/Compressed_sigma-protocol/blob/main/src/nizk/nozk_noinv_bullet.rs -
polynomial 实现参考了 algebra库 中的
poly
模块,由于curve25519不是FFT friendly的,所以只实现了Field
trait,而未实现FFTField
trait。 -
该论文中的各种protocol实现见
sigma_protocol
目录下,*.rs 命名与protocol对应。