首页 / 专利库 / 银行与财务事项 / 数字货币 / 一种数字货币发行总量控制方法及验证方法

一种数字货币发行总量控制方法及验证方法

阅读:385发布:2020-05-11

专利汇可以提供一种数字货币发行总量控制方法及验证方法专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种 数字 货币 发行总量控制方法及验证方法。本发行方法为:1)央行根据各发钞行的身份信息为每一设定发钞行生成对应的身份认证私钥sk1和公钥pk1,并通过秘密传输通道发给对应的设定发钞行;各设定发钞行每次发钞时,随机生成 区 块 链 中使用的私钥skx和公钥pkx;所述发钞行的私钥为SK=(sk1,skx)、公钥为PK=(pk1,pkx);2)所述发钞行对本次发钞量和发钞行身份进行多接收者签密,并将该签密信息附在发钞交易信息中;3)央行根据该发钞交易判断发钞量和发钞行身份是否被篡改,如果未被篡改且对应发钞行有所需的发行量,则允许该发钞行发行本次发钞量;否则拒绝发行。本方法满足发行量可控且安全高效。,下面是一种数字货币发行总量控制方法及验证方法专利的具体信息内容。

1.一种数字货币发行总量控制方法,其步骤包括:
1)央行根据各设定发钞行的身份信息为每一设定发钞行生成对应的身份认证私钥sk1和公钥pk1,并通过秘密传输通道发给对应的设定发钞行;各设定发钞行每次发钞时,随机生成链中使用的私钥skx和公钥pkx;所述发钞行的私钥为SK=(sk1,skx)、公钥为PK=(pk1,pkx);
2)所述发钞行对本次发钞量和发钞行身份进行多接收者签密,并将该签密信息附在发钞交易信息中;
3)央行根据该发钞交易判断发钞量和发钞行身份是否被篡改,如果未被篡改且对应发钞行有所需的发行量,则允许该发钞行发行本次发钞量;否则拒绝发行。
2.如权利要求1所述的方法,其特征在于,生成所述发钞行的私钥SK、公钥PK的方法为:
11)选取一安全参数λ和一个基域Fq,其中q是大素数,且q>2λ;选取一个定义在Fq上的椭圆曲线E(Fq)和E(Fq)上的一个生成元P,生成元P的阶为素数n;选择六个散列函数H1:E(Fq)×E(Fq)→{0,1}w、H2,H3,H4:{0,1}w→{0,1}w和
w是正整数,n-1为循环群 中的最大值;选择对称加密函数Esk()
及其对应的解密函数Dsk(),其中sk表示对称密钥;
12)央行生成自己的身份认证公私钥对(sc,Pc)以及区块链中的公私钥对(sc2,Pc2);其中私钥sc,公钥Pc=sc·P,私钥sc2,公钥Pc2=sc2·P;央行向各设定发钞行公布公共参数pp={q,E(Fq),n,Pc,Pc2,H0,H1,H2,H3,H4,H5,E,D}并指定发钞行的发行量;
13)以发钞行A的身份ID作为输入,央行计算QID=H0(ID)和发钞行A相应的身份认证私钥skA=sc*QID以及身份认证公钥PKA=skA·P;然后央行经由安全信道向发钞行A发送身份认证公私钥对(skA,PKA);
14)发钞行A随机选取 并计算PKx=skx·P,作为本次发钞的区块链公私钥对,得
到发钞行A的完整私钥SK=(skA,skx),完整公钥PK=(PKA,PKx);其中身份认证公私钥对(skA,PKA)固定并不对区块链公开,每次发钞时变换公私钥对(skx,PKx)。
3.如权利要求2所述的方法,其特征在于,发钞行A对本次发钞量v和发钞行身份PKA进行多接收者签密的方法为:
21)发钞行A随机选取σ∈{0,1}w,计算r=H1(σ,PKA),U=r·P;
22)计算FA=r·PKx,KA=r·PKA,TA=H1(KA,FA),Fc=r·Pc2,Kc=r·Pc以及Tc=H1(Kc,Fc);
23)计算 ||表示连接操作;
24)计算对称密钥sk=H4(σ),以及V=Esk(v),Γ=Esk(PKA);
25)计算H=H5(U,V,Γ,PKA,PKx),H′=H6(U,V,Γ,PKA,PKx),W=skA+r*H+skx*H′,Λ=H5(v,σ,CA,Cc,V,Γ,U,W);
26)发钞行A生成密文CT=<(CA,Cc),V,Γ,W,U,Λ>、发钞交易tx=(PKx,CT,Δ),并将该发钞交易tx发布到区块链上;Δ代表防止延展性攻击所需要实现的数据结构。
4.如权利要求3所述的方法,其特征在于,所述步骤3)的实现方法为:
31)央行从区块链上发布的发钞交易tx中提取密文CT=<(CA,Cc),V,Γ,W,U,Λ>;计算K=sc·U,F=sc2·U,T=H1(K,F)以及H2(T);
32)通过CA=H2(T)||Y计算得到Y;Y表示CA移除了H2(T)后的剩余部分;
33)计算
34)设置sk′=H4(σ),计算得到v′=Dsk′(V),PKA′=Dsk′(Γ),H=H5(U,V,Γ,PKA′,PKx),H′=H5(U,V,Γ,PKA′,PKx),Λ′=H5(v′,σ,CA,Cc,V,Γ,U,W);
35)央行寻找PKA′对应的发钞行,判断该发钞交易tx是否为发钞行A发起,如果是发钞行A发起且Λ′==Λ、PKA′+U·H+PKx·H′==P·W,则判定本次发行量v和发钞行身份PKA未被篡改,否则拒绝发行;
36)央行根据维护的发钞行A剩余发行量承诺,判断该发钞行A的剩余发行量是否满足本次发行量v,若满足则更新发钞行A剩余发行量承诺并允许该发钞行A发行本次发钞量;否则拒绝发行。
5.如权利要求2所述的方法,其特征在于,央行的完整公钥为(Pc,Pc2)、完整私钥为(sc,sc2);其中私钥 私钥
6.一种数字货币发行总量验证方法,其步骤包括:
1)央行根据安全参数λ,生成安全系数为λ的满足发钞交易可信证明的电路Circuit,生成证明密钥pkproof和验证密钥(pkproof,vkproof):=KeyGen(1λ,Circuit),并公开安全参数λ、可信电路Circuit、证明密钥pkproof以及验证密钥vkproof;
2)央行分配每一设定发钞行i的发行总量Sumi,随后发起一笔承诺交易,该承诺交易中包含发钞行i的初始剩余量列表 其中 为
该承诺交易发起时最长区块链中最新区块的哈希值,PKi发钞行i的完整公钥;
3)央行监听区块链,当发现新区块new中出现发钞交易,从该发钞交易中得到发行量vi,计算发钞行i新的剩余量承诺 以及生成多个非交互式零知识证明,非交互式零知
识证明πi为发钞行i的非交互式零知识证明;然后将发钞行i的非交互式零知识证明以及更新后的剩余发钞量承诺打包成一笔交易tx进行发布;
4)验证者从区块中获得该交易tx后,对交易指向的区块中所有发钞交易的合法性进行验证。
7.如权利要求6所述的方法,其特征在于,生成零知识证明πi的方法为:
11)设置 txj为第j笔发钞交
易, 为发钞行i进行完前一区块发钞后的剩余量承诺;
12)设置 其中(sc,sc2)为央行的私钥,
为发钞行i进行完前一区块发钞后的发钞剩余量, 为发钞行i进行
完当前区块发钞后的发钞剩余量;
13)生成零知识证明πi:=Prove(pkproof,xi,ai)。
8.如权利要求6或7所述的方法,其特征在于,验证者从区块中获得该交易tx后,对交易指向的区块中所有发钞交易的合法性进行验证的方法为:
21)验证者从交易tx中提取 找到对应区块的可信证明交易,若old==0,则
找到最初发布的承诺交易,提取其中的
22)从tx中提取 找到对应区块中的发钞交易tx1...txj;
23)设置
24)计算bi:=Verify(vkproof,xi,πi),如果验证成功bi=1,否则等于0;
25)输出bA∧bB,如果输出等于1,则判定区块new中的发钞交易在合法范围内。
9.如权利要 求6所述的 方法 ,其特 征在于 ,新的发钞行 剩余量承 诺
10.如权利要求6所述的方法,其特征在于,所述验证者为发钞行或用户。

说明书全文

一种数字货币发行总量控制方法及验证方法

技术领域

[0001] 本发明属于密码学技术领域,涉及一种可信的数字货币发行总量控制方法及验证方法。

背景技术

[0002] 近年来,加密货币逐渐走向成熟,很多国家开始研究链等相关技术,并着手推动央行数字货币的发行。相比于普通货币,央行发行数字货币有助于提高支付效率,降低支付成本,防止逃税和洗钱等。
[0003] 目前,央行发行数字货币还处于研究探索阶段,国际上暂时也没有成功的经验和先例,因而就法定数字货币如何吸收转换区块链技术这一前沿领域的探索和实践有着重要意义。
[0004] 从2008年中本聪提出比特币开始,比特币、以太坊、EOS等一系列加密货币开始发行和流通。这些加密货币不受时间和空间的限制,能够使支付过程相对于传统货币变得更加便捷有效。尤其在跨境交易时,能够快捷方便且低成本的实现资金的快速转移。同时,这些加密货币利用了密码学的算法和协议,采用分布式记账系统,理论上防止了人为的通货膨胀,能够保证货币的安全性,并且具有较好的匿名性。但是,由于这些加密货币的去中心化特性,没有机构或政府给予其信用支撑,理论上不受政府部管控,导致价格波动很大,货币丢失或被盗后无法找回。
[0005] 央行数字货币是由国家央行发行的加密货币。其具备法定地位、国家主权背书和明确的发行责任主体,是真正意义上的货币。相比于去中心化加密货币,国家信用和央行的能可以保证央行数字货币长期具有稳定的价格,更适合实际的使用。虽然已有很多国家正在研究并推动央行数字货币的发行,但是目前还没有国家成功发行央行数字货币。发钞授权、敏感信息保护、发行总量可控等都是央行数字货币面临的问题。另外,去中心化加密货币的一些优点能否保持也受到广泛关注,例如在央行作为发行责任主体后,数字货币能否在技术上预防较大的通货膨胀也是影响央行数字货币广泛流通使用的重要因素。
[0006] 零知识证明是由S.Goldwasser、S.Micali及C.Rackoff在20世纪80年代初提出的密码学验证技术。它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。一些加密货币项目中使用了零知识证明技术来使加密货币获得更良好的属性,例如ZCash中使用零知识证明来实现真正的匿名交易。
[0007] 多接收者签密是当代密码学领域的另一个研究热点。该技术运用到区块链中,可保证交易的可控匿名性。当一则消息需要向多个接收者传输时,传统的加密方案由于要重复多次加密过程,效率和实时性较低,不能满足实际应用需求。因此,多接收者签密方案被提出。在多接受者签密方案中,签密者对一则消息进行一次签密,每个接收者均可使用自己的私钥对接收到的消息的机密性和可靠性进行验证。
[0008] 能够安全有效地发钞是数字货币发行的前提。数字货币的很多性质也需要在发钞操作中得到保证。央行数字货币的发钞操作有以下需求:一是数字货币由央行授权发钞行进行发行操作,二是货币的发行量能够由央行监管,三是发钞行身份和发行金额等敏感信息应能够防止泄露,四是在保证发钞行身份和发行金额隐私性的同时能够让更多参与方相信每次发钞行的发钞行为是合法的。
[0009] 目前,央行发行数字货币还处于研究探索阶段,国际上暂时也没有成功的经验和先例,因而就法定数字货币如何吸收转换区块链技术这一前沿领域的探索和实践有着重要意义。

发明内容

[0010] 为解决上述问题,本发明提供了一种可信的数字货币发行总量控制方法及验证方法。本发明包含两个算法,范围证明密码算法和可信发行量证明算法。其中为满足央行数字货币的央行授权、发行量可控并监管、发钞行身份信息的动态隐藏和发行金额为密态等要求,本发明使用无证书公钥密码体制和多接收者签密技术设计了范围证明密码算法。在该算法中央行根据各个发钞行的身份信息生成身份认证公私钥对,并通过秘密传输通道发给各发钞行。各发钞行每次发钞时,随机生成区块链中使用的不同公私钥对,同时对本次发钞量和发钞行身份进行多接收者签密操作,并将该签密信息附在发钞交易信息中。虽然发钞行每次使用区块链上不同的公私钥,但央行仍能判断该笔发钞交易属于哪个发钞行,并维护一个发钞行剩余发钞量承诺表进行发钞合法性的判断。
[0011] 其中为保证用户无法得知发钞交易中发钞行的身份信息以及发钞金额的前提下,仍能判断发钞行每笔发钞交易是否合法,本发明使用零知识证明技术设计了可信发行量证明算法。在该算法中需要央行维护并发布发钞行剩余发钞量承诺表,该表不直接暴露发钞行身份信息以及剩余发钞量,而是公布以上设定敏感信息的哈希值。央行可通过范围证明密码算法获得区块中发钞交易的详细内容,并根据这些信息生成非交互式零知识证据,将该证据以及更新后的发钞行剩余发钞量承诺表等信息打包成一笔交易进行发布。用户可从该交易中提取信息,对交易指向的区块中所有发钞交易的合法性进行验证。
[0012] 本发明的技术方案为:
[0013] 一种数字货币发行总量控制方法,其步骤包括:
[0014] 1)央行根据各设定发钞行的身份信息为每一设定发钞行生成对应的身份认证私钥sk1和公钥pk1,并通过秘密传输通道发给对应的设定发钞行;各设定发钞行每次发钞时,随机生成区块链中使用的私钥skx和公钥pkx;所述发钞行的私钥为SK=(sk1,skx)、公钥为PK=(pk1,pkx);
[0015] 2)所述发钞行对本次发钞量和发钞行身份进行多接收者签密,并将该签密信息附在发钞交易信息中;
[0016] 3)央行根据该发钞交易判断发钞量和发钞行身份是否被篡改,如果未被篡改且对应发钞行有所需的发行量,则允许该发钞行发行本次发钞量;否则拒绝发行。
[0017] 进一步的,生成所述发钞行的私钥SK、公钥PK的方法为:
[0018] 11)选取一安全参数λ和一个基域Fq,其中q是大素数,且q>2λ;选取一个定义在Fq上的椭圆曲线E(Fq)和E(Fq)上的一个生成元P,生成元P的阶为素数n;选择六个散列函数H1:E(Fq)×E(Fq)→{0,1}w、H2,H3,H4:{0,1}w→{0,1}w和 ,w是正整数,n-1为循环群 中的最大值;选择对称加密函数Esk()及其对应的解密函数Dsk(),其中sk表示对称密钥;
[0019] 12)央行生成自己的身份认证公私钥对(sc,Pc)以及区块链中的公私钥对(sc2,Pc2);其中私钥sc,公钥Pc=sc·P,私钥sc2,公钥Pc2=sc2·P;央行向各设定发钞行公布公共参数pp={q,E(Fq),n,Pc,Pc2,H0,H1,H2,H3,H4,H5,E,D}并指定发钞行的发行量;
[0020] 13)以发钞行A的身份ID作为输入,央行计算QID=H0(ID)和发钞行A相应的身份认证私钥skA=sc*QID以及身份认证公钥PKA=skA·P;然后央行经由安全信道向发钞行A发送身份认证公私钥对(skA,PKA);
[0021] 14)发钞行A随机选取 并计算PKx=skx·P,作为本次发钞的区块链公私钥对,得到发钞行A的完整私钥SK=(skA,skx),完整公钥PK=(PKA,PKx);其中身份认证公私钥对(skA,PKA)固定并不对区块链公开,每次发钞时变换公私钥对(skx,PKx)。
[0022] 进一步的,发钞行A对本次发钞量v和发钞行身份PKA进行多接收者签密的方法为:
[0023] 21)发钞行A随机选取σ∈{0,1}w,计算r=H1(σ,PKA),U=r·P;
[0024] 22)计算FA=r·PKx,KA=r·PKA,TA=H1(KA,FA),Fc=r·Pc2,Kc=r·Pc以及Tc=H1(Kc,Fc);
[0025] 23)计算 ||表示连接操作;
[0026] 24)计算对称密钥sk=H4(σ),以及V=Esk(v),Γ=Esk(PKA);
[0027] 25)计算H=H5(U,V,Γ,PKA,PKx),H′=H6(U,V,Γ,PKA,PKx),W=skA+r*H+skx*H′,Λ=H5(v,σ,CA,Cc,V,Γ,U,W);
[0028] 26)发钞行A生成密文CT=<(CA,Cc),V,Γ,W,U,A>、发钞交易tx=(PKx,CT,Δ),并将该发钞交易tx发布到区块链上;Δ代表防止延展性攻击所需要实现的数据结构。
[0029] 进一步的,所述步骤3)的实现方法为:
[0030] 31)央行从区块链上发布的发钞交易tx中提取密文CT=<(CA,Cc),V,Γ,W,U,Λ>;计算K=sc·U,F=sc2·U,T=H1(K,F)以及H2(T);
[0031] 32)通过CA=H2(T)||Y计算得到Y;Y表示CA移除了H2(T)后的剩余部分;
[0032] 33)计算
[0033] 34)设置sk′=H4(σ),计算得到v′=Dsk′(V),PKA′=Dsk′(Γ),H=H5(U,V,Γ,PKA′,PKx),H′=H5(U,V,Γ,PKA′,PKx),Λ′=H5(v′,σ,CA,Cc,V,Γ,U,W);
[0034] 35)央行寻找PKA′对应的发钞行,判断该发钞交易tx是否为发钞行A发起,如果是发钞行A发起且Λ′==Λ、PKA′+U·H+PKx·H′==P·W,则判定本次发行量v和发钞行身份PKA未被篡改,否则拒绝发行;
[0035] 36)央行根据维护的发钞行A剩余发行量承诺,判断该发钞行A的剩余发行量是否满足本次发行量v,若满足则更新发钞行A剩余发行量承诺并允许该发钞行A发行本次发钞量;否则拒绝发行。
[0036] 进一步的,央行的完整公钥为(Pc,Pc2)、完整私钥为(sc,sc2);其中私钥 私钥 一种数字货币发行总量验证方法,其步骤包括:
[0037] 1)央行根据安全参数λ,生成安全系数为λ的满足发钞交易可信证明的电路λCircuit,生成证明密钥pkproof和验证密钥(pkproof,vkproof):=KeyGen(1 ,Circuit),并公开安全参数λ、可信电路Circuit、证明密钥pkproof以及验证密钥vkproof;
[0038] 2)央行分配每一设定发钞行i的发行总量Sumi,随后发起一笔承诺交易,该承诺交易中包含发钞行i的初始剩余量列表 其中为该承诺交易发起时最长区块链中最新区块的哈希值,PKi发钞行i的完整公钥;
[0039] 3)央行监听区块链,当发现新区块new中出现发钞交易,从该发钞交易中得到发行量vi,计算发钞行i新的剩余量承诺 以及生成多个非交互式零知识证明,非交互式零知识证明πi为发钞行i的非交互式零知识证明;然后将发钞行i的非交互式零知识证明以及更新后的剩余发钞量承诺打包成一笔交易tx进行发布;
[0040] 4)验证者从区块中获得该交易tx后,对交易指向的区块中所有发钞交易的合法性进行验证。
[0041] 生成零知识证明πi的方法为:
[0042] 11)设置 txj为第j笔发钞交易, 为发钞行i进行完前一区块发钞后的剩余量承诺;
[0043] 12)设置 其中(sc,sc2)为央行的私钥,为发钞行i进行完前一区块发钞后的发钞剩余量, 为发钞行i进行
完当前区块发钞后的发钞剩余量;
[0044] 13)生成零知识证明πi:=Prove(pkproof,xi,ai)。
[0045] 进一步的,验证者从区块中获得该交易tx后,对交易指向的区块中所有发钞交易的合法性进行验证的方法为:
[0046] 21)验证者从交易tx中提取 找到对应区块的可信证明交易,若old==0,则找到最初发布的承诺交易,提取其中的
[0047] 22)从tx中提取 找到对应区块中的发钞交易tx1…txj;
[0048] 23)设置
[0049] 24)计算bi:=Verify(vkproof,xi,πi),如果验证成功bi=1,否则等于0;
[0050] 25)输出bA∧bB,如果输出等于1,则判定区块new中的发钞交易在合法范围内。
[0051] 进一步的,新的发钞行剩余量承诺
[0052] 进一步的,所述验证者为发钞行或用户。
[0053] 与现有技术相比,本发明的积极效果为:
[0054] 1.本发明使用多接收者签密和无证书公钥密码体制的思想设计了范围证明密码算法。该算法保证央行数字货币发行操作能够满足央行授权、发行量可控、身份信息的动态隐藏、发行金额为密态等要求,同时拥有较高的安全性和效率。
[0055] 2.本发明利用非交互式零知识证明技术,设计了可信发行量证明算法。该算法实现了可信发钞,即发钞操作能够在不泄露发钞行身份及发钞量等敏感信息的前提下,使区块链中任何参与节点(包括用户)均能验证每次发钞行的发行量是否在发行范围内。这一特性使央行数字货币继承了普通加密货币防止大规模通货膨胀的优点,使公众拥有监管发钞行发行量的权利,有利于央行数字货币的推广和流通。
[0056] 3.对比实验:测试环境为系统ubuntu16.04、内存16GB DDR3 1600MHz、CPUi7-4790@3.6GHz四核,使用C++实现下面两个算法并进行了测试。针对范围证明算法,明文的加密耗时3ms,解密耗时4ms,密文长度为457字节;针对可信发行量证明算法,验证证据仅需
9ms,证据大小为固定的288字节。因此本方案具有毫秒级的运行速率,性能较好,能够满足实际应用,具有较强的实用性。
附图说明
[0057] 图1为本发明方法流程图

具体实施方式

[0058] 为了使本发明的目的、技术方案及优点更加清楚明白,以下参照附图,对本发明作进一步详细说明。
[0059] 一:范围证明密码算法
[0060] 首先描述范围证明密码算法,发钞行的私钥为SK=(sk1,skx),其中sk1为部分私钥,由央行根据发钞行身份信息进行生成,skx为区块链中每次身份动态隐藏变换的私钥。与SK相对应的公钥为PK=(pk1,pkx),pk1由sk1生成,pkx由skx生成。其中公私钥对(sk1,pk1)为身份认证公私钥对,保持不变,并且公钥pk1只有发钞行和央行知道,与发钞行进行身份绑定;公私钥对(skx,pkx)为传统区块链中的公私钥对,由发钞行控制进行动态隐藏,每次动态隐藏均代表公私钥对(skx,pkx)的变换。
[0061] 算法步骤如下:
[0062] 1)系统设置
[0063] 输入安全参数λ,央行选取一个基域Fq,其中q是大素数,且q>2λ。选取一个定义在Fq上的椭圆曲线E(Fq)和E(Fq)上的一个生成元P,生成元P的阶为一个大素数n。然后,央行选择六个散列函数 H1:E(Fq)×E(Fq)→{0,1}w,H2,H3,H4:{0,1}w→{0,1}w和w是正整数, 为最大值为n-1的整数循环群,n-1为循环群 中的
最大值。同时,央行还选择对称加密函数Esk()及其对应的解密函数Dsk(),其中sk表示对称密钥。接下来,央行生成自己的身份认证公私钥对(sc,Pc),其中私钥 公钥Pc=sc·P。
央行生成在区块链中的公私钥对(sc2,Pc2),其中私钥 公钥Pc2=sc2·P。最后,央行向发钞行公布公共参数pp={q,E(Fq),n,Pc,Pc2,H0,H1,H2,H3,H4,H5,E,D}并指定发钞行的发行量。
[0064] 2)提取部分私钥
[0065] 以发钞行A的身份ID∈{0,1}*作为输入,央行计算QID=H0(ID)和发钞行A相应的身份认证私钥skA=sc*QID以及身份认证公钥PKA=skA·P。接下来,央行经由安全信道向发钞行A发送身份认证公私钥对(skA,PKA)。
[0066] 3)设置完整私钥
[0067] 发钞行A随机选取 并计算PKx=skx·P,作为本次发钞的区块链公私钥对。发钞行A的完整私钥为(skA,skx),完整公钥为(PKA,PKx)。其中身份认证公私钥对(skA,PKA)固定并不对区块链公开,每次发钞时变换公私钥对(skx,PKx),做到在区块链中身份的动态隐藏。
[0068] 4)发行量的签密
[0069] 为了做到发钞行A的发行量v在区块链上保密,但是对央行和发钞行A公开。使用了多接收者签密技术,央行和发钞行A可对密文进行解密。发钞行A的私钥为(skA,skx),公钥为(PKA,PKx),央行的公钥为(Pc,Pc2)。发钞行A对发行量v以及身份信息PKA进行如下操作得密文CT:
[0070] a)随机选取σ∈{0,1}w,计算r=H1(σ,PKA),U=r·P。
[0071] b)计算FA=r·PKx,KA=r·PKA以及TA=H1(KA,FA),Fc=r·Pc2,Kc=r·Pc以及Tc=H1(Kc,Fc)。
[0072] c)计算Ci(i∈{A,c}), ||表示连接操作;其中,A代表发钞行,c代表央行,即需要对发钞行和央行分别进行计算得到CA、Cc。
[0073] d)计算对称密钥sk=H4(σ),以及V=Esk(v),Γ=Esk(PKA)。
[0074] e)计算H=H5(U,V,Γ,PKA,PKx),H′=H6(U,V,Γ,PKA,PKx),W=skA+r*H+skx*H′,Λ=H5(v,σ,CA,Cc,V,Γ,U,W)。
[0075] f)设置密文CT=<(CA,Cc),V,Γ,W,U,Λ>,发钞交易tx=(PKx,CT,Δ),Δ代表防止延展性攻击所需要实现的数据结构,例如对交易进行签名。发钞行A将该发钞交易tx发布到区块链上。
[0076] 5)发行量的解密
[0077] 央行首先从区块链上发布的发钞交易tx中提取密文CT=<(CA,Cc),V,Γ,W,U,Λ>,央行和发钞行A可以使用它们的私钥(以央行为例(sc,sc2))进行如下操作:
[0078] a)计算K=sc·U,F=sc2·U,T=H1(K,F)以及H2(T)。
[0079] b)用H2(T)通过Ci=H2(T)||Y找到Ci(i∈{A,c}),Y表示Ci移除了H2(T)后的剩余部分。对于央行和发钞行来说,解密时只匹配属于自己的密文,央行匹配Cc,发钞行匹配CA;以央行为例,只需要截取Cc移除H2(T)后的剩余部分即可得到Y,例如Cc=1001,H2(T)=10,那么Y=01。
[0080] c)计算
[0081] d)设置sk′=H4(σ),得v′=Dsk′(V),PKA′=Dsk′(Γ),H=H5(U,V,Γ,PKA′,PKx),H′=H5(U,V,Γ,PKA′,PKx),Λ′=H5(v′,σ,CA,Cc,V,Γ,U,W)。
[0082] e)央行寻找PKA′对应的发钞行,判断该交易是否为合法的发钞行发起,以及如果Λ′==Λ并且PKA′+U·H+PKx·H′==P·W,则说明发行量v和发钞行身份PKA未被篡改,否则“拒绝”。
[0083] f)为了效率(避免央行遍历区块)和公开可验证的用途,央行维护一个发钞行剩余发行量承诺(可信发行量证明算法详细介绍),判断该发钞行是否有足够的发行量,若有则更新承诺,否则“拒绝”。
[0084] 模块二:可信发行量证明算法
[0085] 接下来介绍可信发行量证明算法,主要思想是用户在不知道发钞行身份和发行金额的情况下,对本区块的发钞交易进行发行量的合法性验证,判断发钞行是否超发货币,从而信任发钞行的发钞行为。以下介绍中会出现央行C、发钞行i{i∈A,B}、央行维护并发布的发钞行剩余量承诺Listi=HASH(PKi‖HASHhead‖Balancei)(其中PKi为发钞行的身份认证公钥并且不对外公开,HASHhead为发钞交易所处区块的哈希值用以保证随机性,防止本区块无该行的发钞交易,Balancei为该行的剩余发钞量)、用户user。
[0086] 当发钞行发出一笔发钞交易时,央行会对这笔交易进行发钞量的合法性验证,并针对该交易所处的区块生成一笔含有非交互式零知识的证明和新的发钞行剩余量承诺的可信证明交易,以供用户在不知道发钞交易源于哪个发钞行以及发行金额隐藏的情况下,对该区块中的发钞交易进行发行量的合法性验证。
[0087] 为简化算法的描述,假定 old代表前一个拥有发钞交易的区块,new代表当前区块以及该区块中的发钞交易为tx1…txj,j为该区块中发钞交易个数。本发明的算法使用Bryan Parno等人提出的Pinocchio协议作为非交互式零知识证明算法,该算法细节不再赘述。为简化算法的描述,假设发钞行i{i∈A,B}为两个,描述如下:
[0088] 1)系统设置
[0089] 央行输入安全参数λ,生成安全系数为λ的满足发钞交易可信证明的电路Circuit,生成证明密钥和验证密钥(pkproof,vkproof):=KeyGen(1λ,Circuit),并公开安全参数λ、可信电路Circuit、证明密钥pkproof以及验证密钥vkproof。
[0090] 2)初始化发钞行剩余量列表
[0091] 央行分配各发钞行的发行总量Sumi{i∈A,B},随后发起一笔承诺交易,交易信息中包含发钞行的初始剩余量列表 其中 为该承诺交易发起时最长区块链中最新区块的哈希值。该列表信息并不暴露发钞行的身份以及发钞金额剩余量。
[0092] 3)生成发钞交易可信证明
[0093] 央行监听区块链,当发现新区块new中出现发钞交易并都满足范围证明算法时,央行根据范围证明算法得到发行量vi,计算新的发钞行剩余量承诺以及生成两个零知识证明πi{i∈A,
B},生成过程如下:
[0094] a)设置 txj为第j笔发钞交易, 为发钞行i进行完前一区块发钞后的剩余量承诺, 为前一区块的头
哈希值(该区块与 所述的前一区块,为同一区块); 为当前区块的头哈希值
(该区块与 所述的当前区块,为同一区块)。
[0095] b)设置 其中(sc,sc2)为央行的私钥,为发钞行i进行完前一区块发钞后的发钞剩余量, 为发钞行i进行
完当前区块发钞后的发钞剩余量。
[0096] c)生成零知识证明πi:=Prove(pkproof,xi,ai),其中xi作为公开输入,ai作为私有输入即证据,i∈A,B。
[0097] d)央行打包信息生成可信证明交易并广播Δ代表防止延展性攻击所需要实现的数据结构,例如对交易进行签名。
[0098] 4)验证可信性证明
[0099] 用户从区块中获得可信证明交易tx后,可通过如下过程对发钞行的发行量进行验证:
[0100] a)从tx中提取 找到对应区块的可信证明交易,若old==0,则找到最初发布的承诺交易,提取其中的
[0101] b)从tx中提取 找到对应区块中的发钞交易记为tx1…txj,j表示该区块中发钞交易的总个数。
[0102] c)设置
[0103] d)计算bi:=Verify(vkproof,xi,πi),如果验证成功bi=1,否则等于0。
[0104] e)输出bA∧bB。输出等于1,用户则相信区块new中的发钞交易在合法范围内。
[0105] 本算法的零知识证明前提是央行发布初始发行量承诺,随后用户验证的可信交易都是基于该承诺来判断发钞行的发钞量是否在最初的承诺范围内,如果央行需动态增加发钞行的发行量,则如同步骤2中再发布一次发行量承诺即可,与初始化承诺的区别在于动态发行量承诺中区块哈希值为上一可信交易中的
[0106] 通过范围证明密码算法和可信发行量证明算法,发钞行可以做到身份的动态隐藏以及不泄露发行金额,用户在无法判断发钞交易属于哪个发钞行、无法读取发行金额以及不知道发行总量的情况下可以对发钞行的行为进行合法性验证。
[0107] 尽管为说明目的公开了本发明的具体内容、实施算法以及附图,其目的在于帮助理解本发明的内容并据以实施,但是本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,各种替换、变化和修改都是可能的。本发明不应局限于本说明书最佳实施例和附图所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈