CN109858281A - 一种基于零知识证明的区块链账户模型隐私保护方法 - Google Patents
一种基于零知识证明的区块链账户模型隐私保护方法 Download PDFInfo
- Publication number
- CN109858281A CN109858281A CN201910104512.5A CN201910104512A CN109858281A CN 109858281 A CN109858281 A CN 109858281A CN 201910104512 A CN201910104512 A CN 201910104512A CN 109858281 A CN109858281 A CN 109858281A
- Authority
- CN
- China
- Prior art keywords
- remaining sum
- zero knowledge
- zero
- account
- plaintext
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
本发明公开了一种基于零知识证明的区块链账户模型隐私保护方法,包括以下步骤:转账人将明文余额转换为零知识余额;对零知识余额进行转账操作;转账人更新自己的余额;收款人更新自己的余额;用户将零知识余额转换为明文余额。本发明将零知识证明和区块链账户模型结合,实现了交易数据的隐私保护,可以有效保证数据不被泄漏。通过本发明技术方案,明文的数据交易将会被隐藏,虽然知道双方进行了某笔无标记的交易,但是当同时进行许多笔交易时,就会产生许多个发送方与接收方,这样每笔特定交易的双方就被掩盖起来了,无法将交易双方对应起来,并且交易金额完全保密。
Description
技术领域
本发明属于区块链及信息安全技术领域,具体涉及一种基于零知识证明的区块链账户模型隐私保护方法。
背景技术
区块链作为一种不可篡改和不可伪造的分布式账本,实质上是一种链式数据结构,这种链式数据结构特点在于按照时间顺序将数据区块以顺序相连的方式组合。区块链***分为UTXO(unspend transaction output)和账户两种模型体系,账户模型***中由每一个账户负责对应的事务处理,类似于银行账户,这也是我们日常生活中最成熟的交易模型;UTXO是指地址上所有未花费交易的总和,它的最小单位是交易,每个交易对应到金额。区块链中每一个参与者都能够获得完整的数据备份,所有交易数据都是公开和透明的,这个是区块链的特点,这种特点对于某些应用是优点,但在很多情况下这是个缺点,现有的绝大部分具有隐私保护(即保护交易双方信息以及交易内容不被第三方知晓)功能的区块链如zcash是基于UTXO的。
关于区块链的隐私保护问题,目前有混币、环签名、同态加密、零知识证明等几种方式:
混币原理(CoinJoin)的实现思路是割裂输入地址和输出地址之间的关系。在一个交易中,假如有很多人参与,其中包括大量输入和输出,这样会比较难在输入和输出中找出每个人的对应对,这样一来,输入与输出之间的联系被事实上割裂;多次混币、每次少量币,效果更好。此方法虽然高度匿名,但其风险评估不到位,必须信赖匿名的第三方。
环签名是一种简化的类群签名,它因为签名由一定的规则组成一个环而得名。在环签名方案中,环中一个成员利用他的私钥和其他成员的公钥进行签名,但却不需要征得其他成员的允许,而验证者只知道签名来自这个环,但不知到谁是真正的签名者。环签名解决了对签名者完全匿名问题,环签名允许一个成员代表一组人进行签名而***漏签名者的信息,但环签名技术只解决了交易者匿名问题,无法对交易内容进行隐私保护。
同态加密是一种无需对加密数据进行提前解密就可以执行计算的方法,通过使用同态加密技术在区块链上存储数据可以达到一种完美的平衡,不会对区块链属性造成任何重大的改变,可利用加法同态加密技术隐藏区块链上的交易金融和用户余额,且保证其余用户对公共账目上余额的操作,但同态加密无法确认交易的一致性,缺少对交易有效性的验证环节。
零知识证明作为一种密码学技术,起源于最小泄漏证明,证明者能够在不向验证者泄漏关于被证明消息的情况下使验证者相信该消息是正确的;零知识证明技术即可以证明消息的正确性,又可以***露消息的具体信息。相应地,目前流行的zk-SNARK(zero-knowledge Succinct Non-interactive ARgument of Knowledge)即为零知识证明的标准代码库,已经成功应用到匿名数字货币ZeroCash中,而基于零知识证明得区块链账户模型隐私保护方法目前应用较少。
现有的基于账户模型的区块链模型比如以太坊并不能保护用户的隐私,交易的双方以及金额都会明文记录在区块中,任何人都可以查看这些内容,故本发明的目的就在于为交易双方保护隐私。
发明内容
鉴于上述,本发明提供了一种基于零知识证明的区块链账户模型隐私保护方法,将零知识证明和区块链账户模型结合,实现了交易数据的隐私保护,可以有效保证数据不被泄漏。
一种基于零知识证明的区块链账户模型隐私保护方法,包括如下步骤:
(1)转账人将明文余额转换为零知识余额;
(2)对零知识余额进行转账操作;
(3)转账人更新自己的余额;
(4)收款人更新自己的余额;
(5)用户将零知识余额转换为明文余额。
其中步骤(1)必须先执行,步骤(2)~(4)可循环执行,步骤(5)的执行可选可不选。
进一步地,所述步骤(1)的具体实现过程为:首先定义明文余额转换为零知识余额的零知识转化函数Mint;然后调用函数Mint对指定账户的明文余额进行转化并产生相应的零知识证明,该证明内容包括:
①证明转化前指定账户的零知识余额确实是由该账户已有的明文余额币值转化而来;
②证明当前指定账户待转化的零知识余额确实是由明文余额币值转化而来且币值小于该账户当前持有的明文余额;
③证明转化操作完成后指定账户的零知识余额确实为转化前的零知识余额与新转化的零知识余额的累加。
进一步地,所述步骤(2)的具体实现过程如下:
2.1转账人选择一个随机数,并利用椭圆曲线的基点在椭圆曲线上相应生成一个随机的点;
2.2使用Diffie-Hellman密钥交换(一种确保共享KEY安全穿越不安全网络的方法,目的在于使得两个用户安全地交换一个秘密密钥,以便用于以后的报文加密)计算得到收款人相应的随机化公私钥;
2.3定义转账交易函数Send,调用函数Send进行转账操作并产生相应的零知识证明,该证明内容包括:
①证明转账人当前的零知识余额确实是由转账人已有明文余额转化而来的且已有的零知识余额大于待转账的零知识余额;
②待转账的零知识余额确实是由转账人实际转账的明文余额转化而来的;
2.4待转账的零知识余额使用默克尔树进行组织处理,记录在以零知识余额rtcmt为树根的默克尔树上(记录在区块头部);
2.5交易双方所共享的参数使用收款人随机化公钥加密,转账交易产生后,转账人将该交易的哈希值通过链下告知收款人,转账交易记录上链,转账人当前账户的零知识余额所对应的序列号链上公开。
进一步地,所述步骤(3)的具体实现过程如下:对于记录在区块链上的转账交易,定义相应的转账人更新零知识余额函数Update,转账人通过调用函数Update进行零知识余额更新操作并产生相应的零知识证明,该证明内容包括:
①证明存在一个零知识余额,确实是由转账人账户的明文余额转化而来,并记录在以零知识余额rtcmt为树根的默克尔树上,此过程中使用的参数为交易发起方在转账操作中生成转账交易所缓存的参数;
②证明转账人当前的零知识余额确实是由其账户的明文余额币值转化而来;
③证明更新后账户的零知识余额确实为转账人账户已有的零知识余额与转账消耗的零知识余额的差值;
最后,转账人根据转账交易变量使用一个新的序列号关联更新后的零知识余额,并通过矿工共识验证后更新转账人的零知识余额。
进一步地,转账人账户的零知识余额发生改变后,需使用一个新的序列号关联起来,以保证同一个零知识余额不被多次花费,当前账户内零知识余额减去已转账的零知识余额确定更新后的零知识余额。
进一步地,所述步骤(4)的具体实现过程如下:
4.1收款人根据记录在区块链上的转账交易中的属性值,计算其随机公钥对应的私钥,并利用该私钥解密交易双方所共享的参数;
4.2定义收款人更新零知识余额函数Deposit,收款人通过调用函数Deposit进行零知识余额更新操作并产生相应的零知识证明,该证明内容包括:
①证明存在一个新产生的零知识余额记录在以零知识余额rtcmt为根的默克尔树上;
②证明收款人当前的零知识余额确实是由其账户的明文余额币值转化而来;
③证明更新后账户的零知识余额确实为收款人账户已有的零知识余额与转账收到的零知识余额的加和;
4.4最终共识验证上述零知识证明的合法性,验证存款账户的数字签名(即将摘要信息用发送者的私钥加密,与原文一起传送给接收者,保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生)是相对于随机化公钥的合法签名,并通过矿工共识验证后更新收款人的零知识余额。
进一步地,新产生的零知识余额参数中包含收款人的随机化公钥,收款人需产生对应的合法签名才能将该款项存入收款人的账户中,并且随机化公钥仅限使用一次,即公布后不可再次使用。
进一步地,所述步骤(5)的具体实现过程为:首先,定义零知识余额转化为明文余额的转化函数Redeem,用户通过调用函数Redeem进行账户内零知识余额转化为明文余额的操作并产生相应的零知识证明,该证明内容包括:
①证明指定账户当前的零知识余额确实与该账户已有的零知识余额相对应;
②证明当前账户待转化的零知识余额确实是由要转换的明文余额币值转化而来,并且要转换的明文余额币值小于或等于该账户已持有的零知识余额所对应的明文余额;
③证明转化操作完成后账户的零知识余额确实为转化前的零知识余额与新转化的零知识余额的差值。
进一步地,所述零知识证明是根据相应哈希值和约束关系产生的,所述哈希值则根据区块链账户的明文余额、随机数以及余额序列号进行哈希运算得到。
步骤(1)将明文余额转换为零知识余额,明文余额不一定是账户全部的明文余额,步骤(5)将零知识余额转换为明文余额,零知识余额也不一定是账户全部的零知识余额;所述账户所持有的余额是零知识余额和明文余额共存的,账户当前持有明文余额和零知识余额所对应的明文余额的加和是该账户当前的总资产。
本发明能够实现区块链技术及隐私保护应用需求的有机结合,便于隐私数据的有序及范式管理,同时能够极大地避免隐私数据的非法窃取提升隐私保护的安全性。本发明中明文的数据交易将会被隐藏,虽然知道双方进行了某笔无标记的交易,但是当同时进行许多笔交易时,就会产生许多个发送方与接收方,这样每笔特定交易的双方就被掩盖起来了,无法将交易双方对应起来,并且交易金额完全保密。
附图说明
图1(a)为Mint函数的交易结构体示意图。
图1(b)为Send函数的交易结构体示意图。
图1(c)为Update函数的交易结构体示意图。
图1(d)为Deposit函数的交易结构体示意图。
图1(e)为Redeem函数的交易结构体示意图。
图2为本发明完整转账交易的***流程示意图。
图3为账户A和账户B间的转账默克尔树示意图。
图4为账户状态树MPT(Merkle Patricia Tree)示意图。
具体实施方式
为了更为具体地描述本发明,下面结合附图及具体实施方式对本发明的技术方案进行详细说明。
实施例一:只考虑区块链中两个参与者发送方A和接收方B。
(1)假定账户A的明文余额要转化为零知识余额,使用Mint进行转化,具体如下:
1.1定义明文余额转换为零知识余额的零知识转化函数Mint。
1.2调用Mint,进行明文余额转换为零知识余额操作,命令TxMint=(nonce,pkA,value,snA old,cmtA,proofm,sigA),将指定账户的明文余额进行转化,其结构体如图1(a)所示。
其中:TxMint为Mint的交易结构体,nonce为随机数;value为被转化的明文币值;snA old为A执行Mint操作前已有的零知识余额所对应的序列号;cmtA=SHA256(valueold+value|sn|r)为账户A最新的零知识余额;proofm为zk-SNARK零知识证明;sigA为A的数字签名。
Mint前账户A的余额情况:{balanceA,cmtA old}。
Mint后账户A的余额情况:{balanceA-value,cmtA},其中balance代表明文余额。
1.3明文余额转换为零知识余额的零知识证明proofm用来证明:
①证明转化前账户的的零知识余额确实是由该账户的已有明文余额币值转化而来:cmtA old=SHA256(valueA old|snA old|rA old)是对应于valueold的零知识余额。
②证明当前账户待转化的零知识余额确实是由明文余额币值转化而来,并且币值小于该账户当前已有的明文余额:cmt=SHA256(value|sn|r)是对应于value的零知识余额,并且value小于等于balanceA。
③证明转化操作完成后的零知识余额确实是转化前的零知识余额和新转化的零知识余额的累加:cmtA=SHA256(valueold+value|sn’A|r’A)。
初始化时,每个账户都拥有一个明文余额和一个零知识余额(此时的零知识余额对应的明文余额为0);第一次执行Mint操作后,明文余额发生改变,敌手能确切地知道零知识余额对应的明文余额。当该账户执行一次Send或Deposit交易后,敌手将无法推算账户零知识余额所对应的明文余额。
(2)对零知识余额进行转账操作,假定账户A,B当前的零知识余额为cmtA,cmtB:
cmtA=SHA256(valueA|snA|rA)
cmtB=SHA256(valueB|snB|rB)
A和B的公私钥分别是(skA,pkA)和(skB,pkB)
A对B进行转账,操作如下:
2.1账户A选择一个随机数sA,利用椭圆曲线的基点生成相应椭圆曲线上一个随机的点,其对应的公钥为R=sAP,P为区块链所使用的椭圆曲线的生成元。
2.2使用Diffie-Hellman密钥交换计算可得随机化公私钥为(H(sA·pkB)+skB,H(sA·pkB)P+pkB)=(H(skB·R)+skB,H(skB·R)P+pkB)=(skB’,pkB’)。
2.3定义转账交易函数Send,调用转账交易函数Send,A产生转账交易,命令TxSend=(snA,cmts,R,auxA,proofs),其中成员变量cmts=SHA256(values|pkB’|sns|rs|snA)为新产生的余额;R为A选择的随机数的公钥;auxA=EncpkB’(values|sns|rs|snA)为交易双方共享参数,用于接收方计算cmts,其结构体如图1(b)所示。
2.4在转账过程中零知识证明proofs如下内容:
①cmtA=SHA256(valueA|snA|rA),并且snA所对应的账户余额valueA大于values。
②cmts=SHA256(values|pkB’|sns|rs|snA)。注意在这里pkB’未泄露给任何人,属于保密信息;然后,cmts使用默克尔树进行组织处理,记录在以rtcmt为树根的默克尔树上(记录在区块头部)。
转账交易产生后,A将该交易的hash通过链下告知B;转账交易记录在区块链上后,由于A的账户余额序列号已经被公开,不允许再使用(可看作被锁定),A需使用Update操作,根据TxSend使用一个新的序列号关联、更新自己的账户余额。
(3)Update让转账人(A)更新自己的余额,解锁账户余额;对于记录在区块链上的转账交易TxSend=(snA,cmts,R,auxA,proofs),A作为转账人产生证明proofu,证明如下内容:
①存在一个cmts=SHA256(values|pkB’|sns|rs|snA)记录在以rtcmt为根的默克尔树上,此处的参数为交易发起方(A)生成TxSend所缓存的参数。
②A当前的账户余额为cmtA=SHA256(valueA|snA|rA);注意cmts和cmtA之间使用了同样snA。
③更新后的账户余额为cmt’A=SHA256(valueA-values|sn’A|r’A),更新操作交易具体内容为:TxUpdate=(rtcmt,cmt’A,pkA,proofu),其结构体如图1(c)所示。
最终共识验证通过后将A的余额更新为cmt’A。
上述交易cmts通过snA关联cmtA,然后通过cmtA和cmts之间的value确定更新后的余额cmt’A;其中通过默克尔树隐藏了到底是哪个cmts,同时snA也隐藏起来,保护转账人的隐私。
(4)Deposit将接收到的款项存入收款人(B)的账户中,具体如下:
4.1收款人B对于记录在区块链上的转账交易TxSend=(snA,cmts,auxA,proofs),B作为收账人计算skB’=H(skB·R)+skB,pkB’=H(skB·R)P+pkB),然后使用skB’解密DecskB’(auxA)=(values|sns|rs|snA)。
4.2利用以上参数产生证明proofd,证明如下内容:
①存在一个cmts=SHA256(values|pkB’|sns|rs|snA)记录在以rtcmt为根的默克尔树上。
②B当前的账户余额为cmtB=SHA256(valueB|snB|rB)。
③更新后的账户余额为cmt’B=SHA256(valueB+values|sn’B|r’B),存款操作交易具体内容为:TxDeposit=(rtcmt,snB,cmt’B,pkB,pk’B,sigB,proofd),其结构体如图1(d)所示。
4.3最终共识验证proofd的合法性,验证sigB是相对于公钥pk’B的合法签名,验证通过后将B的余额更新为cmt’B。
上述交易中,cmts中包含pkB’,收款人需产生对应的合法签名sigB才能将该款项存入B的账户中,并且pkB’仅限使用一次,即公布后不可再次使用。
(5)Redeem操作将用户将账户内零知识余额转化为明文余额,假定账户B的零知识余额转化为明文余额,使用Redeem进行转化:
5.1定义零知识余额转化为明文余额的转化函数Redeem,令TxRedeem=(nonce,pkB,snB old,cmtB,value,proofr,sig),其结构体如图1(e)所示,其中nonce为随机数,cmtB为账户B经Redemm后的零知识余额,value为要转换明文币值,r为随机数,proof为zk-SNARK零知识证明,sig为B的数字签名,该Redeem操作将B的零知识余额转化为明文余额。
Redeem前账户B的余额情况:{balanceB,cmtB old}
Redeem后账户B的余额情况:{balanceB+value,cmtB}
5.2proofr为zk-SNARK证明,证明如下内容:
①cmtB old=SHA256(valueB old|snB old|rB old)是对应于valueold的零知识余额。
②cmt=SHA256(value|sn|r)是对应于value的零知识余额,并且value小于等于valueB old。
③cmtB=SHA256(valueold-value|sn’B|r’B)。
Mint操作将明文余额转换为零知识余额,明文余额并不一定是账户全部的明文余额;Redeem操作将零知识余额转换为明文余额,零知识余额也不一定是账户全部的零知识余额;一个账户所持有的余额是零知识余额和明文余额共存的。比如,账户A当前持有明文余额为10,零知识余额对应的明文余额为80,则账户A的资产为90,所述用户包括且不限于转账人和收款人。
实施例二:
(1)账户A(公钥pkA=0x64cf...)的明文余额要转化为零知识余额,使用Mint进行转化:
区块链***为A生成随机数nonce=0x3a4d…和r=0x41b9…,A被转换的明文币值value=0x0a26…,***会为A生成序列号snA old=0xed9a…,计算出cmtA=SHA256(value|sn|r)=0x91b2…代表零知识余额,***生成零知识证明proofm=0x724c…,交易参数:
TxMint=(nonce,pkA,value,snA old,cmtA,proofm,sigA)
TxMint=(0x3a4d…,0x64cf...,0x0a26…,0xed9a…,0x91b2…,0x724c…,0x23ca…)
Mint操作将A的明文余额转化为零知识余额,即:
Mint前账户A的余额情况:{balanceA,cmtA old}
Mint后账户A的余额情况:{balanceA-value,cmtA}
proofm为zk-SNARK证明,证明如下内容:
①cmtA old=SHA256(valueA old|snA old|rA old)是对应于valueold的零知识余额。
②cmt=SHA256(value|sn|r)是对应于value的零知识余额,并且value小于等于balanceA。
③cmtA=SHA256(valueold+value|sn’A|r’A)。
(2)Send操作为A向B零知识余额转账操作,图2为完整转账交易***流程,账户A,B当前的零知识余额为cmtA,cmtB:
cmtA=SHA256(valueA|snA|rA)
cmtA=SHA256(0x0a36…|0x0d9a…|0x41b9…)=0x91b2…
cmtB=SHA256(valueB|snB|rB)
cmtB=SHA256(0x103b…|0x09b1…|0x3a38…)=0x8a1d…
A和B的公私钥分别是(skA,pkA)=({0x228b...,0x5f68...,…},0x64cf...)和(skB,pkB)=({0x63ad...,0x77c8...,…},0x69c2...)。
2.1***为A生成随机数sA,其对应的公钥为R=sAP=0x177a...,P为区块链所使用的椭圆曲线的生成元。
2.2使用Diffie-Hellman密钥交换计算可得随机化公私钥为(H(sA·pkB)+skB,H(sA·pkB)P+pkB)=(H(skB·R)+skB,H(skB·R)P+pkB)=(skB’,pkB’)=({0x368a...,0x5d61...,…},0x140a...)。
2.3A产生转账交易:
***生成cmts=SHA256(values|pkB’|sns|rs|snA)=0x349d...,cmts为新产生的余额,auxA=EncpkB’(values|sns|rs|snA)=EncpkB’(0x0a11…|0xe015…|0xca01…|0xed9a…)=0x87ad...,auxA为交易双方共享参数,用于接收方计算cmts,***生成proofs=0x30a1...证明如下内容:
①cmtA=SHA256(valueA|snA|rA)=0x91b2...,并且snA所对应的账户余额valueA大于values。
②cmts=SHA256(values|pkB’|sns|rs|snA)=0x349d...,注意在这里pkB’未泄露给任何人,属于保密信息;然后,cmts使用默克尔树进行组织处理,记录在以rtcmt为树根的默克尔树上(记录在区块头部),如图3所示。
③最后生成转账交易TxSend=(snA,cmts,R,auxA,proofs)=(0xed9a...,0x349d...,0x177a...,0x87ad...,0x30a1...)。
转账交易产生后,A将该交易的hash通过链下告知B;转账交易记录在区块链上后,由于A的账户余额序列号已经被公开,不允许再使用(可看作被锁定),A需使用Update操作,根据TxSend使用一个新的序列号关联、更新自己的账户余额。
(3)Update操作让转账人(A)更新自己的余额,解锁账户余额;对于记录在区块链上的转账交易TxSend=(snA,cmts,R,auxAproofs),***为转账人(A)产生证明proofu=0xe15a...,证明如下内容:
①存在一个cmts=SHA256(values|pkB’|sns|rs|snA)=0x349d...,记录在以rtcmt=0xda01...为根的默克尔树上,此处的参数为交易发起方(A)生成TxSend所缓存的参数。
②A当前的账户余额为cmtA=SHA256(valueA|snA|rA)=0x91b2…;注意cmts和cmtA之间使用了同样snA。
③更新后的账户余额为cmtA’=SHA256(valueA-values|sn’A|r’A)=0xbd01,更新操作交易参数为:
TxUpdate=(rtcmt,cmtA’,pkA,proofu)=(0xda01...,0xbd01…,0x64cf...,0xe15a...)
最终矿工验证通过后将A的余额更新为cmtA’。
上述交易cmts通过snA关联cmtA,然后通过cmtA和cmts之间的value确定更新后的余额cmtA’;其中通过默克尔树隐藏了到底是哪个cmts,同时snA也隐藏起来,保护转账人的隐私,如图4所示。
(4)Deposit操作将接收到的款项存入收款人(B)的账户中,B对于记录在区块链上的转账交易TxSend=(snA,cmts,auxA,proofs)=(0xed9a...,0x349d...,0x177a...,0x87ad...,0x30a1...),B作为收账人计算出skB’=H(skB·R)+skB={0x368a...,0x5d61...,…},pkB’=H(skB·R)P+pkB)=0x140a...;然后使用skB’解密DecskB’(auxA)=(values|sns|rs|snA)=(0x0a11...|0xe015...|0xca01...|0xed9a...),最后利用以上参数产生证明proofd=0x9ad5...,证明如下内容:
①存在一个cmts=SHA256(values|pkB’|sns|rs|snA)=0x349d...记录在以rtcmt为根的默克尔树上。
②B当前的账户余额为cmtB=SHA256(valueB|snB|rB)=0x8a1d...。
③更新后的账户余额为cmtB’=SHA256(valueB+values|sn’B|r’B)=0x932c...,存款操作交易参数为:
TxDeposit=(rtcmt,snB,cmt’B,pkB,pk’B,sigB,proofd)=(0xda01...,0x09b1…,0x932c...,0x69c2...,0x140a...,0x471c…,0x9ad5...)
最终矿工验证proofd的合法性,验证sigB是相对于公钥pk’B的合法签名,验证通过后将B的余额更新为cmt’B。
上述交易中,cmts包含pkB’,收款人需产生对应的合法签名sigB才能将该款项存入B的账户中,并且pkB’仅限使用一次,即公布后不可再次使用。
(5)Redeem操作将账户B(公钥pk=0x69c2...)的零知识余额转化为明文余额:***生成随机数nonceB’=0x510b...,cmtB=SHA256(valueB|snB|rB)=0x932c...为redeem转换后的零知识余额,生成value=0x17e0...为该redeem交易要转换的明文币值,生成零知识证明proofr=0x33e1...,sigB’=0x180a...为B对本次交易的数字签名。
Redeem前账户B的余额情况:{balanceB,cmtB old}
Redeem后账户B的余额情况:{balanceB+value,cmtB}
交易参数为:TxRedeem=(nonce,pkB,snB old,cmtB,value,proofr,sig)=(0x510b...,0x69c2...,0x06d2...,0x932c...,0x17e0...,0x33e1...,0x180a...)
proofr为zk-SNARK证明,证明如下内容:
①cmtB old=SHA256(valueB old|snB old|rB old)是对应于valueold的零知识余额。
②cmt=SHA256(value|sn|r)是对应于value的零知识余额,并且value小于等于valueB old。
③cmtB=SHA256(valueold-value|sn’B|r’B)。
以上涉及到的术语包括:
事务(Transaction,Tx):类似于比特币中数字货币的转账交易,在本发明中称为事务(transaction);一个区块中包含多个事务,由矿工运行共识算法将区块添加到区块链上。
cmt(coin commitment),对当前零知识余额的承诺。
sn(serial number),对零知识余额的序列号,防止双花。
上述对实施例的描述是为便于本技术领域的普通技术人员能理解和应用本发明。熟悉本领域技术的人员显然可以容易地对上述实施例做出各种修改,并把在此说明的一般原理应用到其他实施例中而不必经过创造性的劳动。因此,本发明不限于上述实施例,本领域技术人员根据本发明的揭示,对于本发明做出的改进和修改都应该在本发明的保护范围之内。
Claims (9)
1.一种基于零知识证明的区块链账户模型隐私保护方法,包括如下步骤:
(1)转账人将明文余额转换为零知识余额;
(2)对零知识余额进行转账操作;
(3)转账人更新自己的余额;
(4)收款人更新自己的余额;
(5)用户将零知识余额转换为明文余额。
2.根据权利要求1所述的区块链账户模型隐私保护方法,其特征在于:所述步骤(1)的具体实现过程为:首先定义明文余额转换为零知识余额的零知识转化函数Mint;然后调用函数Mint对指定账户的明文余额进行转化并产生相应的零知识证明,该证明内容包括:
①证明转化前指定账户的零知识余额确实是由该账户已有的明文余额币值转化而来;
②证明当前指定账户待转化的零知识余额确实是由明文余额币值转化而来且币值小于该账户当前持有的明文余额;
③证明转化操作完成后指定账户的零知识余额确实为转化前的零知识余额与新转化的零知识余额的累加。
3.根据权利要求1所述的区块链账户模型隐私保护方法,其特征在于:所述步骤(2)的具体实现过程如下:
2.1转账人选择一个随机数,并利用椭圆曲线的基点在椭圆曲线上相应生成一个随机的点;
2.2使用Diffie-Hellman密钥交换计算得到收款人相应的随机化公私钥;
2.3定义转账交易函数Send,调用函数Send进行转账操作并产生相应的零知识证明,该证明内容包括:
①证明转账人当前的零知识余额确实是由转账人已有明文余额转化而来的且已有的零知识余额大于待转账的零知识余额;
②待转账的零知识余额确实是由转账人实际转账的明文余额转化而来的;
2.4待转账的零知识余额使用默克尔树进行组织处理,记录在以零知识余额rtcmt为树根的默克尔树上;
2.5交易双方所共享的参数使用收款人随机化公钥加密,转账交易产生后,转账人将该交易的哈希值通过链下告知收款人,转账交易记录上链,转账人当前账户的零知识余额所对应的序列号链上公开。
4.根据权利要求3所述的区块链账户模型隐私保护方法,其特征在于:所述步骤(3)的具体实现过程如下:对于记录在区块链上的转账交易,定义相应的转账人更新零知识余额函数Update,转账人通过调用函数Update进行零知识余额更新操作并产生相应的零知识证明,该证明内容包括:
①证明存在一个零知识余额,确实是由转账人账户的明文余额转化而来,并记录在以零知识余额rtcmt为树根的默克尔树上,此过程中使用的参数为交易发起方在转账操作中生成转账交易所缓存的参数;
②证明转账人当前的零知识余额确实是由其账户的明文余额币值转化而来;
③证明更新后账户的零知识余额确实为转账人账户已有的零知识余额与转账消耗的零知识余额的差值;
最后,转账人根据转账交易变量使用一个新的序列号关联更新后的零知识余额,并通过矿工共识验证后更新转账人的零知识余额。
5.根据权利要求4所述的区块链账户模型隐私保护方法,其特征在于:转账人账户的零知识余额发生改变后,需使用一个新的序列号关联起来,以保证同一个零知识余额不被多次花费,当前账户内零知识余额减去已转账的零知识余额确定更新后的零知识余额。
6.根据权利要求3所述的区块链账户模型隐私保护方法,其特征在于:所述步骤(4)的具体实现过程如下:
4.1收款人根据记录在区块链上的转账交易中的属性值,计算其随机公钥对应的私钥,并利用该私钥解密交易双方所共享的参数;
4.2定义收款人更新零知识余额函数Deposit,收款人通过调用函数Deposit进行零知识余额更新操作并产生相应的零知识证明,该证明内容包括:
①证明存在一个新产生的零知识余额记录在以零知识余额rtcmt为根的默克尔树上;
②证明收款人当前的零知识余额确实是由其账户的明文余额币值转化而来;
③证明更新后账户的零知识余额确实为收款人账户已有的零知识余额与转账收到的零知识余额的加和;
4.4最终共识验证上述零知识证明的合法性,验证存款账户的数字签名是相对于随机化公钥的合法签名,并通过矿工共识验证后更新收款人的零知识余额。
7.根据权利要求6所述的区块链账户模型隐私保护方法,其特征在于:新产生的零知识余额参数中包含收款人的随机化公钥,收款人需产生对应的合法签名才能将该款项存入收款人的账户中,并且随机化公钥仅限使用一次,即公布后不可再次使用。
8.根据权利要求1所述的区块链账户模型隐私保护方法,其特征在于:所述步骤(5)的具体实现过程为:首先,定义零知识余额转化为明文余额的转化函数Redeem,用户通过调用函数Redeem进行账户内零知识余额转化为明文余额的操作并产生相应的零知识证明,该证明内容包括:
①证明指定账户当前的零知识余额确实与该账户已有的零知识余额相对应;
②证明当前账户待转化的零知识余额确实是由要转换的明文余额币值转化而来,并且要转换的明文余额币值小于或等于该账户已持有的零知识余额所对应的明文余额;
③证明转化操作完成后账户的零知识余额确实为转化前的零知识余额与新转化的零知识余额的差值。
9.根据权利要求2~4、6和8任一权利要求所述的区块链账户模型隐私保护方法,其特征在于:所述零知识证明是根据相应哈希值和约束关系产生的,所述哈希值则根据区块链账户的明文余额、随机数以及余额序列号进行哈希运算得到。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910104512.5A CN109858281B (zh) | 2019-02-01 | 2019-02-01 | 一种基于零知识证明的区块链账户模型隐私保护方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910104512.5A CN109858281B (zh) | 2019-02-01 | 2019-02-01 | 一种基于零知识证明的区块链账户模型隐私保护方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109858281A true CN109858281A (zh) | 2019-06-07 |
CN109858281B CN109858281B (zh) | 2020-09-18 |
Family
ID=66897489
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910104512.5A Active CN109858281B (zh) | 2019-02-01 | 2019-02-01 | 一种基于零知识证明的区块链账户模型隐私保护方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109858281B (zh) |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110647765A (zh) * | 2019-09-19 | 2020-01-03 | 济南大学 | 协同学习框架下基于知识迁移的隐私保护方法及*** |
CN110766400A (zh) * | 2019-10-22 | 2020-02-07 | 全链通有限公司 | 基于区块链的交易记录处理方法、记账节点及介质 |
CN110958110A (zh) * | 2019-12-09 | 2020-04-03 | 趣派(海南)信息科技有限公司 | 一种基于零知识证明的区块链隐私数据管理方法和*** |
CN111177225A (zh) * | 2020-01-02 | 2020-05-19 | 支付宝(杭州)信息技术有限公司 | 账户状态存在性证明方法及装置和状态查询方法及装置 |
CN111428268A (zh) * | 2020-03-24 | 2020-07-17 | 山东大学 | 基于区块链的v2g交易隐私保护方法、设备及*** |
CN111460499A (zh) * | 2020-03-31 | 2020-07-28 | 中国电子科技集团公司第三十研究所 | 一种保护隐私的基于Merkletree的区块链用户属性集核验方法 |
CN111859409A (zh) * | 2020-04-14 | 2020-10-30 | 北京熠智科技有限公司 | 用于财务***的数据处理方法以及装置、设备、存储介质 |
CN112182640A (zh) * | 2020-09-04 | 2021-01-05 | 山东大学 | 基于区块链的汽车分时租赁交易方法 |
CN112365252A (zh) * | 2020-07-31 | 2021-02-12 | 深圳市网心科技有限公司 | 基于账户模型的隐私交易方法、装置及相关设备 |
CN112436944A (zh) * | 2020-11-06 | 2021-03-02 | 深圳前海微众银行股份有限公司 | 一种基于pow的区块链共识方法及装置 |
CN112734423A (zh) * | 2020-12-31 | 2021-04-30 | 杭州趣链科技有限公司 | 一种基于区块链的交易方法及终端设备 |
CN113222758A (zh) * | 2021-05-08 | 2021-08-06 | 华中科技大学 | 以隐私为前提的联盟链交易信息监管方法、***、终端 |
CN113821817A (zh) * | 2021-11-22 | 2021-12-21 | 支付宝(杭州)信息技术有限公司 | 基于区块链的数据处理方法、装置、设备及*** |
CN114554424A (zh) * | 2020-11-25 | 2022-05-27 | 鼎桥通信技术有限公司 | 终端组呼方法和终端设备 |
CN114785509A (zh) * | 2021-01-20 | 2022-07-22 | 杭州链网科技有限公司 | 一种基于区块链的可信计算存储方法 |
EP4141768A1 (en) * | 2021-08-27 | 2023-03-01 | ETH Zurich | Method and system for a central bank digital currency with unlinkable transactions and privacy preserving regulation |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1996041316A2 (en) * | 1995-06-07 | 1996-12-19 | Kravitz David W | Off-line compatible electronic cash method and system |
US20140279551A1 (en) * | 2011-10-22 | 2014-09-18 | Gideon Samid | Minting and Use of Digital Money |
CN108171511A (zh) * | 2017-12-26 | 2018-06-15 | 陈晶 | 一种具有隐私保护功能的区块链模型 |
CN108288159A (zh) * | 2018-03-07 | 2018-07-17 | 物数(上海)信息科技有限公司 | 基于多区块链的跨链交易方法、***、设备及存储介质 |
CN108335106A (zh) * | 2018-01-24 | 2018-07-27 | 深圳壹账通智能科技有限公司 | 基于区块链的零知识多账本兑换转账方法、装置及存储介质 |
CN108418689A (zh) * | 2017-11-30 | 2018-08-17 | 矩阵元技术(深圳)有限公司 | 一种适合区块链隐私保护的零知识证明方法和介质 |
CN108764874A (zh) * | 2018-05-17 | 2018-11-06 | 深圳前海微众银行股份有限公司 | 基于区块链的匿名转账方法、***及存储介质 |
CN108764875A (zh) * | 2018-05-17 | 2018-11-06 | 深圳前海微众银行股份有限公司 | 区块链的转账方法、装置、***和计算机可读存储介质 |
CN109257182A (zh) * | 2018-10-24 | 2019-01-22 | 杭州趣链科技有限公司 | 一种基于同态的密码学承诺与零知识范围证明的区块链隐私保护方法 |
-
2019
- 2019-02-01 CN CN201910104512.5A patent/CN109858281B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1996041316A2 (en) * | 1995-06-07 | 1996-12-19 | Kravitz David W | Off-line compatible electronic cash method and system |
US20170249607A1 (en) * | 2007-04-19 | 2017-08-31 | Gideon Samid | Minting and Use of Digital Money |
US20140279551A1 (en) * | 2011-10-22 | 2014-09-18 | Gideon Samid | Minting and Use of Digital Money |
CN108418689A (zh) * | 2017-11-30 | 2018-08-17 | 矩阵元技术(深圳)有限公司 | 一种适合区块链隐私保护的零知识证明方法和介质 |
CN108171511A (zh) * | 2017-12-26 | 2018-06-15 | 陈晶 | 一种具有隐私保护功能的区块链模型 |
CN108335106A (zh) * | 2018-01-24 | 2018-07-27 | 深圳壹账通智能科技有限公司 | 基于区块链的零知识多账本兑换转账方法、装置及存储介质 |
CN108288159A (zh) * | 2018-03-07 | 2018-07-17 | 物数(上海)信息科技有限公司 | 基于多区块链的跨链交易方法、***、设备及存储介质 |
CN108764874A (zh) * | 2018-05-17 | 2018-11-06 | 深圳前海微众银行股份有限公司 | 基于区块链的匿名转账方法、***及存储介质 |
CN108764875A (zh) * | 2018-05-17 | 2018-11-06 | 深圳前海微众银行股份有限公司 | 区块链的转账方法、装置、***和计算机可读存储介质 |
CN109257182A (zh) * | 2018-10-24 | 2019-01-22 | 杭州趣链科技有限公司 | 一种基于同态的密码学承诺与零知识范围证明的区块链隐私保护方法 |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110647765A (zh) * | 2019-09-19 | 2020-01-03 | 济南大学 | 协同学习框架下基于知识迁移的隐私保护方法及*** |
CN110647765B (zh) * | 2019-09-19 | 2022-04-12 | 济南大学 | 协同学习框架下基于知识迁移的隐私保护方法及*** |
CN110766400A (zh) * | 2019-10-22 | 2020-02-07 | 全链通有限公司 | 基于区块链的交易记录处理方法、记账节点及介质 |
CN110958110A (zh) * | 2019-12-09 | 2020-04-03 | 趣派(海南)信息科技有限公司 | 一种基于零知识证明的区块链隐私数据管理方法和*** |
CN110958110B (zh) * | 2019-12-09 | 2023-04-07 | 趣派(海南)信息科技有限公司 | 一种基于零知识证明的区块链隐私数据管理方法和*** |
CN111177225A (zh) * | 2020-01-02 | 2020-05-19 | 支付宝(杭州)信息技术有限公司 | 账户状态存在性证明方法及装置和状态查询方法及装置 |
CN111177225B (zh) * | 2020-01-02 | 2023-05-23 | 支付宝(杭州)信息技术有限公司 | 账户状态存在性证明方法及装置和状态查询方法及装置 |
CN111428268A (zh) * | 2020-03-24 | 2020-07-17 | 山东大学 | 基于区块链的v2g交易隐私保护方法、设备及*** |
CN111428268B (zh) * | 2020-03-24 | 2022-08-02 | 山东大学 | 基于区块链的v2g交易隐私保护方法、设备及*** |
CN111460499A (zh) * | 2020-03-31 | 2020-07-28 | 中国电子科技集团公司第三十研究所 | 一种保护隐私的基于Merkletree的区块链用户属性集核验方法 |
CN111859409A (zh) * | 2020-04-14 | 2020-10-30 | 北京熠智科技有限公司 | 用于财务***的数据处理方法以及装置、设备、存储介质 |
CN112365252A (zh) * | 2020-07-31 | 2021-02-12 | 深圳市网心科技有限公司 | 基于账户模型的隐私交易方法、装置及相关设备 |
CN112182640A (zh) * | 2020-09-04 | 2021-01-05 | 山东大学 | 基于区块链的汽车分时租赁交易方法 |
CN112436944A (zh) * | 2020-11-06 | 2021-03-02 | 深圳前海微众银行股份有限公司 | 一种基于pow的区块链共识方法及装置 |
CN112436944B (zh) * | 2020-11-06 | 2023-04-07 | 深圳前海微众银行股份有限公司 | 一种基于pow的区块链共识方法及装置 |
CN114554424A (zh) * | 2020-11-25 | 2022-05-27 | 鼎桥通信技术有限公司 | 终端组呼方法和终端设备 |
CN112734423A (zh) * | 2020-12-31 | 2021-04-30 | 杭州趣链科技有限公司 | 一种基于区块链的交易方法及终端设备 |
CN114785509A (zh) * | 2021-01-20 | 2022-07-22 | 杭州链网科技有限公司 | 一种基于区块链的可信计算存储方法 |
CN113222758A (zh) * | 2021-05-08 | 2021-08-06 | 华中科技大学 | 以隐私为前提的联盟链交易信息监管方法、***、终端 |
EP4141768A1 (en) * | 2021-08-27 | 2023-03-01 | ETH Zurich | Method and system for a central bank digital currency with unlinkable transactions and privacy preserving regulation |
WO2023025600A1 (en) * | 2021-08-27 | 2023-03-02 | Eth Zurich | Method and system for a central bank digital currency with unlinkable transactions and privacy preserving regulation |
CN113821817A (zh) * | 2021-11-22 | 2021-12-21 | 支付宝(杭州)信息技术有限公司 | 基于区块链的数据处理方法、装置、设备及*** |
Also Published As
Publication number | Publication date |
---|---|
CN109858281B (zh) | 2020-09-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109858281A (zh) | 一种基于零知识证明的区块链账户模型隐私保护方法 | |
CN111008836B (zh) | 一种隐私安全转账支付方法、装置、***及存储介质 | |
US20230421375A1 (en) | Threshold digital signature method and system | |
CN106961336B (zh) | 一种基于sm2算法的密钥分量托管方法和*** | |
CN111211907B (zh) | 一种物流区块链的信息隐私保护与监管方法及*** | |
CN111654363B (zh) | 一种基于群签名和同态加密的联盟链隐私保护方法 | |
CN106549749A (zh) | 一种基于加法同态加密的区块链隐私保护方法 | |
CN103444128B (zh) | 密钥pv签名 | |
CN108768652A (zh) | 一种可抗量子攻击的联盟区块链底层加密方法 | |
JP2002534701A (ja) | 寄託されない署名専用キーを用いた自動回復可能な自動可能暗号システム | |
CN110648229A (zh) | 一种半公开的区块链***及交易方法 | |
CN104184588A (zh) | 基于身份的不可拆分数字签名方法 | |
CN111738857B (zh) | 应用于区块链的隐匿支付证明的生成与验证方法及装置 | |
CN113393225B (zh) | 数字货币加密支付方法及*** | |
US9286602B2 (en) | Secure financial transactions | |
CN112488682B (zh) | 一种区块链的三方转账方法及装置 | |
CN103493428B (zh) | 数据加密 | |
CN113014386A (zh) | 基于多方协同计算的密码*** | |
CN109784920B (zh) | 一种基于区块链的交易信息审计方法及装置 | |
Bauer et al. | Transferable E-cash: A cleaner model and the first practical instantiation | |
CN110943845A (zh) | 一种轻量级两方协同产生sm9签名的方法及介质 | |
Yasusaka et al. | Privacy-preserving pre-consensus protocol for blockchains | |
CN116664298A (zh) | 基于区块链的去中心化数据交易***的实现方法和装置 | |
Ahubele et al. | Secured electronic voting system using RSA Key encapsulation mechanism | |
CN110363513A (zh) | 基于区块链的联合支付方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |