我无法理解用于在没有受信任设置的情况下生成非交互式零知识证明的库(子弹证明) https://github.com/jpmorganchase/BulletProofLib
零知识证明应用于拍卖https://courses.csail.mit.edu/6.857/2019/project/18-doNascimento-Kumari-Ganesan.pdf 有一个包含以下代码的附录,该附录可与BulletProofLib一起使用,对此我有几个问题。我的目标是 使用该库既可以进行如本文所述的反向拍卖中的私人投标,也可以用于承包商在投标工作时的私人投标。
第17和18行是否定义了范围的最小值和最大值? 假设某个出价者想要出价单个值而不是范围,可以使用此库吗? 在示例中,第15行使用值16,16的含义是什么? 如果证明者和验证者位于不同的计算机系统上,我假设我可以发送 在第34行中,对verifier.verify的调用参数是否已验证到远程系统? 参数需要加密,对吗?
1 package edu.stanford.cs.crypto.efficientct.rangeproof;
2 import java.math.BigInteger;
3 import edu.stanford.cs.crypto.efficientct.GeneratorParams;
4 import edu.stanford.cs.crypto.efficientct.VerificationFailedException;
5 import edu.stanford.cs.crypto.efficientct.algebra.BouncyCastleECPoint;
6 import edu.stanford.cs.crypto.efficientct.algebra.C0C0Group;
7 import edu.stanford.cs.crypto.efficientct.algebra.GroupElement;
8 import edu.stanford.cs.crypto.efficientct.commitments.PeddersenCommitment;
9 import edu.stanford.cs.crypto.efficientct.util.ProofUtils;
10
11 public class MainBullet {
12
13 public static void main(String[] args) throws VerificationFailedException {
14 C0C0Group curve = new C0C0Group();
15 int n = 16;
16 GeneratorParams parameters = GeneratorParams.generateParams(n,curve);
17 BigInteger x1 = BigInteger.valueOf(10);
18 BigInteger x2 = BigInteger.valueOf(20);
19 BigInteger x_diff = x2.subtract(x1);
20 BigInteger r1 = ProofUtils.randomNumber();
21 BigInteger r2 = ProofUtils.randomNumber();
22 BigInteger r_diff = r2.subtract(r1);
23 GroupElement v1 = parameters.getBase().commit(x1, r1);
24 GroupElement v2 = parameters.getBase().commit(x2, r2);
25 PeddersenCommitment<?> witness1 = new PeddersenCommitment<>(parameters.getBase(),x1, r1);
26 PeddersenCommitment<?> witness2 = new PeddersenCommitment<>(parameters.getBase(),x2, r2);
27 PeddersenCommitment<?> witness = new PeddersenCommitment<>(parameters.getBase(), x_diff,r_diff);
28 GroupElement diff = parameters.getBase().commit(x_diff, r_diff);
29 GroupElement other = v2.subtract(v1);
30 System.out.println( diff.equals(other) );
31 RangeProofProver prover = new RangeProofProver();
32 RangeProof proof = prover.generateProof(parameters, diff, witness);
33 RangeProofVerifier verifier = new RangeProofVerifier();
34 verifier.verify(parameters, other, proof);
35 }
36 }