• RangeProof范围证明


    Pedersen Commitment对应C = r*G + v*H;

    将金额v表示成二进制形式:v = bn…b2,b1,b0,bi属于{0、1};

    将私钥r对应拆分为n个随机数分片之和:r = an…+ a2 + a1;

    将C对应拆分为n个Ci分片之和:C = Cn…+C2+C1; 其中Ci = ai*G + bi*(2^i)*H;

    取Ci、Ci – (2^i)*H为环签名的公钥集,则当bi = 0时,Ci = ai*G,bi = 1时,Ci – (2^i)*H = ai*G;

    两者必然有一个等于ai*G,被选择为环签名的真正的密钥对<ai, ai*G>,进行环签名,形成n个2元环签名,也就证明了v的二进制数值长度为n的正整数。验证者并不知道2元环签名中哪一个是真正的密钥对,因此无法推导出bi究竟是1还是0。

    矿工只需进行两步验证:1、Ci之和是否等于C;2、各个环签名是否正确;

    范围证明技术只认无符号正整数,假设采用8bit无符号整数表达金额,若v为负数(-1),那么在补码表示法中,高位全部都是1,v就会被误认为是255进行处理,这就会导致C = Cn…+C2+C1不能成立,无法通过验证,这就确保了v的值没有二意性,只能为正整数。

    Bulletproofs RangeProof

    是输入的金额(原始消息)

    Comm 是用普邓森见证加密的密文(根据原始消息 + 随机数得到)

    对 v 进行左、右简单处理,之后用普邓森见证加密(新原始消息 + 新随机数),得到 A,散列哈希得到 Cy

    随机数 S 也是用普邓森见证生成的,主要是方便后续使用,散列哈希得到 Cz

    T1、T2,原理相同,都是使用普邓森见证生成的,主要是方便后续使用,它们两者散列哈希得到 Cx

    内积(略)

    Tau,Th 展开的多项式

    Mu,随机数 & Cx (即 T1、T2)得到

    type RangeProof struct {

    Comm ECPoint 密文1

    A ECPoint 密文2

    S ECPoint 随机数1

    T1 ECPoint 随机数2

    T2 ECPoint 随机数3

    Tau *http://big.Int 密文3

    Th *http://big.Int 密文4

    Mu *http://big.Int 随机数5

    IPP InnerProdArg 密文6

    // challenges

    Cy *http://big.Int 指纹1

    Cz *http://big.Int 指纹2

    Cx *http://big.Int 指纹3

    }

    普邓森见证

    散列哈希

    A => Cy

    S => Cz

    T1, T2 => Cx

    普邓森见证(机密交易),多项式扩展

    Tau, Th => lhs

    Comm => rhs

    内积 = 展开的多项式

    内积,内乘积(也可分为3步)

    Th, IPP; A, S, Mu

    Mu, IPP => InnerProductVerifyFast

  • 相关阅读:
    各种素材类精品网站
    Java如何设置代理ip
    Spring事务的实现方式和原理以及隔离级别?
    Spring 是什么?
    线程池中阻塞队列的作用?为什么是先添加队列而不是先创建最大线程?
    为什么用线程池?解释下线程池参数
    并发三大特性
    ThreadLocal的原理和使用场景。
    谈谈对线程安全的理解
    sleep,wait,join,yield
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13312594.html
Copyright © 2020-2023  润新知