bulletproofs范围证明算法向量内积承诺怎么改进的

改进的向量内积时间复杂度怎么算的
还有张凡等人提出的一种高效的范围证明方案中的CT cs代表什么含义

你可以不用花钱的,可以后台私信我交流交流
推荐你一个文献:Coppersmith, D., & Winograd, S. (1990). Matrix multiplication via arithmetic progressions. Journal of Symbolic Computation, 9(3), 251-280.
github链接:https://github.com/dalek-cryptography/bulletproofs

1、改进的向量内积时间复杂度的计算方法为:O(n²)
2、张凡等人提出的一种高效的范围证明方案中的CT cs代表的是:CT代表文心一言,cs是计算机科学领域的专业术语,代表复杂系统。

Bulletproofs 范围证明算法中的向量内积承诺,是指对两个向量进行内积运算后,对结果进行承诺,以便进行验证。具体来说,假设有两个向量 a 和 b,它们的长度均为 n。则它们的内积运算可以表示为:

c = a · b = a[1] * b[1] + a[2] * b[2] + ... + a[n] * b[n]

其中,c 表示内积的结果。

为了进行验证,需要对 c 进行承诺,即生成一个承诺值,使得只有知道对应的秘密值才能打开承诺。在 Bulletproofs 中,可以使用 Pedersen 承诺来实现。Pedersen 承诺的生成过程如下:

  • 随机生成两个大素数 p 和 q,满足 p > q。
  • 随机生成一个值 r,使得 0 <= r < q。
  • 计算承诺值 C = rG + cH,其中 G 和 H 是椭圆曲线上的基点,c 是要承诺的值。

这样,就可以将内积结果 c 进行承诺。

在原始的 Bulletproofs 中,对两个向量进行内积运算的时间复杂度为 O(n^2),其中 n 是向量长度。这个时间复杂度比较高,不太适合大规模的应用。因此,后来的研究者们提出了一些优化方法,例如使用 FFT 算法,可以将时间复杂度降低到 O(n log n)。

另外,为了进一步优化验证效率,可以使用批量验证技术。具体来说,可以将多个承诺值和对应的挑战值一起进行验证,从而减少验证时间和空间复杂度。

至于张凡等人提出的高效范围证明方案中的 CT 和 cs,它们的含义如下:

  • CT:代表“commitment”,即承诺。在范围证明中,CT 可以用于表示一个值的承诺,以便进行验证。
  • cs:代表“challenge”,即挑战。在范围证明中,cs 是由验证者随机生成的挑战值,用于验证承诺的正确性。

在张凡等人的方案中,CT 和 cs 的生成方式与 Bulletproofs 中的 Pedersen 承诺类似,但有一些细节上的不同。具体来说,CT 和 cs 的生成方式可以参考相关的论文和代码实现。

以下是一些关于 Bulletproofs 范围证明算法和相关优化的参考文献:

  1. Bünz, B., Bootle, J., Boneh, D., Poelstra, A., & Wuille, P. (2018). Bulletproofs: Short proofs for confidential transactions and more. In Proceedings of the 2018 ACM SIGSAC Conference on Computer and Communications Security (pp. 315-329).

  2. Bünz, B., Bootle, J., Boneh, D., Poelstra, A., Wuille, P., & Maxwell, G. (2018). Bulletproofs: Efficient range proofs for confidential transactions. Cryptology ePrint Archive, Report 2017/1066.

  3. Danezis, G., & Fournet, C. (2018). Efficient zero-knowledge arguments for arithmetic circuits in the discrete log setting. In Proceedings of the 2018 ACM SIGSAC Conference on Computer and Communications Security (pp. 1333-1348).

  4. Zhang, F., Katz, J., Papamanthou, C., & Roeder, T. (2019). Efficient and private data retrieval with bounded error. In Proceedings of the 2019 ACM SIGSAC Conference on Computer and Communications Security (pp. 1117-1134).

  5. Zhang, F., Katz, J., Papamanthou, C., & Roeder, T. (2020). Efficient and private data retrieval with bounded error (extended version). Cryptology ePrint Archive, Report 2020/149.

  6. Zhang, F., Katz, J., Papamanthou, C., & Roeder, T. (2021). Efficient and private range proofs with logarithmic communication. Cryptology ePrint Archive, Report 2021/122.

在之前的Bulletproofs范围证明算法中,实现向量内积承诺时存在高计算开销和存储成本等问题。为了改进这个问题,有学者提出使用基于FRI(Fast Reed-Solomon Interactive Oracle Proofs)技术构造的MIMC(Merkle Tree-Structured Interpolation and Commitment)技术来实现向量内积承诺,使得计算开销和存储成本都得以优化。

改进后的向量内积时间复杂度可以通过两个因素来衡量:计算复杂度和存储复杂度。在MIMC技术中,计算复杂度是 $O(k\cdot \log n)$,其中k表示输入向量的长度,n表示叶子节点的个数。存储复杂度则被优化到 $O(n)$,相较原来的 $O(k)$ 有所提升。

CT cs指的是张凡等人提出的高效范围证明方案中的一个变量的名称,具体含义视具体算法而定。通常来说,在Zero-Knowledge证明中,这些变量代表着某种隐藏的值或随机数。
在张凡等人提出的高效范围证明方案中,CT cs指的是一个变量,用于表示一个向量的承诺。其中,向量承诺是一种对向量进行的加密操作,用于保护向量的隐私性,同时可以通过向量承诺完成向量内积的验证。

具体而言,张凡等人提出的高效范围证明方案中,首先使用 Pedersen commitment 对一个向量进行承诺,得到一个哈希值 h。然后,将向量分成若干个子向量,并对每个子向量进行一次承诺操作,得到一个随机数 r 和哈希值 h'。这里,CT cs就代表着这个承诺的随机数 r。之后,可以使用这些承诺和对应的随机数,完成向量内积的验证等操作。

在Zero-Knowledge证明中,通常会使用一些随机数、哈希函数等技术,来隐藏证明者的敏感信息,同时确保证明的正确性和可验证性。因此,CT cs 在张凡等人提出的高效范围证明方案中,就是用于完成这种隐藏和验证的变量之一。

可能优化方式

第一阶段
prover:

构造a L a_La 
L
​    
 和a R a_Ra 
R
​    
 ,使a L a_La 
L
​    
 满足< a L , 2 n > = v <a_L,2^n>=v<a 
L
​    
 ,2 
n
 >=v,a R = a L − 1 n a_R=a_L-1^na 
R
​    
 =a 
L
​    
 −1 
n
 .
构造一个a L a_La 
L
​    
 ,a R a_Ra 
R
​    
 的承诺A = h α g a L h a R A=h^\alpha g^{a_L}h^{a_R}A=h 
α
 g 
a 
L
​    
 
 h 
a 
R
​    
 
 
随机选取盲因子s L s_Ls 
L
​    
 ,s R s_Rs 
R
​    
 
构造一个s L s_Ls 
L
​    
 ,s R s_Rs 
R
​    
 的承诺S = h ρ g s L h s R S=h^\rho g^{s_L}h^{s_R}S=h 
ρ
 g 
s 
L
​    
 
 h 
s 
R
​    
 
 
将A和S发送给verifier。
verifier:随机选取y,z两个值。将这两个值发送给prover

第二阶段
prover:

随机选取τ 1 , τ 2 \tau_1,\tau_2τ 
1
​    
 ,τ 
2
​    
 ,用于做t(x)中一次项和二次项系数的特征值。
构造关于t(X)一次项和二次项系数的承诺$T_i=g{t_i}h{\tau_i},i= \left{ 1,2\right} $
将T 1 T_1T 
1
​    
 ,T 2 T_2T 
2
​    
 发送给verifier。
verifier:随机选取x,发送给prover。

第三阶段
prover:

根据verifier给定的x,计算l ( x ) l(x)l(x)和r ( x ) r(x)r(x)。
计算t ( x ) = < l ( x ) , r ( x ) > t(x)=<l(x),r(x)>t(x)=<l(x),r(x)>
计算τ x = τ 2 ⋅ x 2 + τ 1 ⋅ x + z 2 ⋅ γ \tau_x=\tau_2\cdot x^2+\tau_1\cdot x+z^2\cdot \gammaτ 
x
​    
 =τ 
2
​    
 ⋅x 
21
​    
 ⋅x+z 
2
 ⋅γ,其中γ \gammaγ是随机选取的
计算μ = α + ρ ⋅ x \mu = \alpha + \rho \cdot xμ=α+ρ⋅x
生成关于v的承诺V:V = g v h γ V = g^{v}h^{\gamma}V=g 
v
 h 
γ
 
将τ x , μ , t ( x ) , l ( x ) , r ( x ) , V \tau_x,\mu,t(x),l(x),r(x),Vτ 
x
​    
 ,μ,t(x),l(x),r(x),V发送给verifier。
第四阶段
verifier:

验证t(x):判断g t ( x ) h τ x g^{t(x)}h^{\tau_x}g 
t(x)
 h 
τ 
x
​    
 
 是否等于V z 2 ⋅ g δ ( y , z ) ⋅ T 1 x ⋅ T 2 x 2 V^{z^2}\cdot g^{\delta(y,z)}\cdot T^x_1 \cdot T^{x^2}_2V 
z 
2
 
 ⋅g 
δ(y,z)
 ⋅T 
1
x
​    
 ⋅T 
2
x 
2
 
​    
 

根据a L a_La 
L
​    
 ,a R a_Ra 
R
​    
 ,s L s_Ls 
L
​    
 ,s R s_Rs 
R
​    
 生成的承诺A,S,生成L(x)和R(x)的承诺P:P = A ⋅ S x ⋅ g − z ⋅ ( h ‘ ) z ⋅ y n + z 22 n P=A\cdot S^x \cdot \pmb g^{-z} \cdot (\pmb h^`)^{z\cdot y^n+z^2\cdot 2^n}P=A⋅S 
x
 ⋅ 
g
​    
  
g
​    
 
​    
 g 
−z
 ⋅( 
h
  
h
 
 h 
‘
 ) 
z⋅y 
n
 +z 
22 
n
 
 

其中h ‘ = ( h 1 , h 2 y − 1 , h 3 y − 2 , . . . , h n y − n + 1 ) h^`=(h_1,h_2^{y^{-1}},h_3^{y^{-2}},...,h_n^{y^{-n+1}})h 
‘
 =(h 
1
​    
 ,h 
2
y 
−1
 
​    
 ,h 
3
y 
−2
 
​    
 ,...,h 
n
y 
−n+1
 
​    
 )

利用生成的承诺P,判断l ( x ) l(x)l(x)和r ( x ) r(x)r(x)是否正确:判断P是否等于h μ ⋅ g l ⋅ ( h ‘ ) r h^\mu \cdot \pmb g^l\cdot (\pmb h^`)^rh 
μ
 ⋅ 
g
​    
  
g
​    
 
​    
 g 
l
 ⋅( 
h
  
h
 
 h 
‘
 ) 
r
 

判断t ( x ) t(x)t(x)是否等于l ( x ) , r ( x ) l(x),r(x)l(x),r(x)

改进的向量内积的时间复杂度可以通过分析算法的具体实现来确定。一般来说,向量内积的朴素实现需要进行 $n$ 次乘法和 $n-1$ 次加法,时间复杂度为 $O(n)$。如果对向量进行预处理,例如使用分块技术或者哈希技术,可以将向量内积的时间复杂度降低到 $O(\sqrt{n})$ 或者 $O(1)$。具体的时间复杂度取决于算法的实现方式和具体的输入数据。
对于张凡等人提出的高效的范围证明方案中的 CT 和 cs,具体含义如下:

  • CT:Commitment to the vector,是一个向量的承诺值,用于证明向量的正确性。CT 通常是一个哈希值或者加密值,可以通过向量中的元素计算得到。在证明过程中,需要将 CT 提交给验证者进行验证。
  • cs:Challenge string,是验证者生成的随机字符串,用于挑战证明者。在证明过程中,验证者会生成一个随机字符串,然后将该字符串发送给证明者,要求证明者使用该字符串计算向量的承诺值。如果证明者计算出的承诺值与之前提交的 CT 不一致,则证明失败。
    综上所述,CT 和 cs 是高效的范围证明方案中的重要概念,用于证明向量的正确性和验证证明者的计算结果。
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    回答: bulletproofs范围证明算法中的向量内积承诺可以通过使用批量验证技术来改进。批量验证技术是利用一次验证多个证明的能力,从而减少验证的时间复杂度。改进后向量内积的时间复杂度为O(log n),其中n为该向量的大小。改进后的具体步骤如下:

    STEP 1: 将向量拆分成多个小向量并计算他们的哈希值。

    STEP 2: 创建一个向量内积承诺(Commitment)来包含拆分后的所有小向量。

    STEP 3: 在证明向量的范围时,使用向量承诺而不是单个承诺来验证向量内积的正确性。

    STEP 4: 在证明完成后,使用批量验证技术来验证所有的证明。

    高效的范围证明方案中的CT cs指的是基于Sigma协议和Pedersen承诺的高效承诺范围证明方案的组成部分,其中CT表示“隐藏模板”,cs表示“伪随机量”。这个方案可以通过批量验证技术来提高时间复杂度,从而大大减少验证时间。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

CT表示在零知识证明中需要证明的承诺,cs表示在证明阶段由验证方生成的证明挑战字符串