admin管理员组

文章数量:1530013

Perdersen加密 Hyperledger实现

  • Perdersen承诺
  • 代码实现

Perdersen承诺

Pedersen 承诺是一个满足完美隐藏、计算绑定的同态承诺协议,其完美隐藏性不依 赖与任何困难性假设,计算绑定依赖于离散对数假设(DLA),其构造分为 3 个阶段:

  1. 初始化阶段 setup:选择阶为大素数 q 的乘法群 G、生成元,G= =,公开元祖 (g,h,q);
  2. 承诺阶段 commit:承诺方选择随机数 r 作为盲因子,计算承诺值,然后发送 comm 给 接收者;
  3. 打开阶段 open:承诺方发送(v,r)给接收者,接收者验证 comm 是否等于 , 如果相等则接受,否则拒绝承诺。

代码实现

   /**
     * Setup
     * @param ctx context, String security
     * generate params
     */
    @Transaction(name = "Setup", intent = Transaction.TYPE.SUBMIT)
    public void Setup(final Context ctx, final String security) {
   
        ChaincodeStub stub = ctx.getStub();
        int securityInt = Integer.parseInt(security);

        //生成p,q需要满足大质数性质
        BigInteger p = BigInteger.probablePrime(2 * securityInt, new Random());
        BigInteger q = p.multiply(BigInteger.valueOf(2)).add(BigInteger.valueOf(1));

        //生成g,h只需要在1到q-1的范围内 
        Random random = new Random();
        BigInteger g = new BigInteger(String.valueOf(random.nextInt(q.intValue()) + 1)) ;
        BigInteger s = new BigInteger(String.valueOf(random.nextInt(q.intValue()) + 1)) ;

        //根据相应关系计算h
        BigInteger h = g.modPow(s,q);


        //put参数
        stub.putStringState("q", String.valueOf(p));
        stub.putStringState("g", String.valueOf(g

本文标签: PerdersenHyperledgerJava