CN113222747A - 一种区块链隐私交易方法 - Google Patents
一种区块链隐私交易方法 Download PDFInfo
- Publication number
- CN113222747A CN113222747A CN202011611626.8A CN202011611626A CN113222747A CN 113222747 A CN113222747 A CN 113222747A CN 202011611626 A CN202011611626 A CN 202011611626A CN 113222747 A CN113222747 A CN 113222747A
- Authority
- CN
- China
- Prior art keywords
- integral
- hash
- private
- circuit
- input
- 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
- 238000000034 method Methods 0.000 title claims description 43
- 238000012795 verification Methods 0.000 claims abstract description 59
- 238000004364 calculation method Methods 0.000 claims abstract description 30
- 238000012546 transfer Methods 0.000 claims description 84
- 150000003839 salts Chemical class 0.000 claims description 53
- 230000006870 function Effects 0.000 claims description 36
- 238000012905 input function Methods 0.000 claims description 10
- 241000607479 Yersinia pestis Species 0.000 claims description 7
- 238000004458 analytical method Methods 0.000 claims description 5
- 238000009938 salting Methods 0.000 claims description 5
- 239000013598 vector Substances 0.000 claims description 4
- 238000013461 design Methods 0.000 claims description 3
- 238000011161 development Methods 0.000 claims description 2
- 238000004519 manufacturing process Methods 0.000 claims description 2
- 238000012545 processing Methods 0.000 abstract description 4
- 238000005516 engineering process Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001629 suppression Effects 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6245—Protecting personal data, e.g. for financial or medical purposes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/71—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
- G06F21/72—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information in cryptographic circuits
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Business, Economics & Management (AREA)
- Health & Medical Sciences (AREA)
- Finance (AREA)
- General Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Accounting & Taxation (AREA)
- Computer Security & Cryptography (AREA)
- Strategic Management (AREA)
- Mathematical Physics (AREA)
- General Business, Economics & Management (AREA)
- Technology Law (AREA)
- Development Economics (AREA)
- Marketing (AREA)
- Economics (AREA)
- Medical Informatics (AREA)
- Databases & Information Systems (AREA)
- Storage Device Security (AREA)
Abstract
本发明利用一种区块链隐私交易方法,本发明提出了链下计算/链上验证的处理框架,并提供了在联盟链上的整个框架的工具链。本发明使用工具链,极大地降低了在联盟链上实现链下计算/链上验证的逻辑的门槛。只需要使用DSL语言编写电路,就能使用本发明工具库实现链下计算,同时可以导出联盟链上对应的智能合约,实现对应电路的证明验证。
Description
技术领域
本发明属于区块链领域,具体涉及基于一种基于区块链的隐私交易方法。
背景技术
2018年提出了链下计算/链上验证的处理框架,并提供了整个框架的工具链。链下计算/链上验证的思想很早就有,但是能提供比较完善的工具链的实属难得。目前很难使用实现零知识证明用于链下计算/链上验证。
当前业内能应用的零知识证明技术以本发明技术为主,全称为“Zero-KnowledgeSuccinct Non-Interactive Argument ofKnowledge”,中文名称为:简明非交互零知识证明。能被用来证明一个论断为真,论断的形式为:“对于指定的公开的断言程序F和公开输入x,我知道私密的输入w,能够使F(x,w)=true”。传统区块链整个交易或者计算(Tx)的内容都是存储在区块链上,并且每个节点都需要执行整个交易或者计算。本发明将计算移到链下,并生成证明,链上只需要验证证明是否正确,从而确认相应的计算。链下计算/链上验证的方式有一些好处:1)提供隐私的能力2)降低链上数据存储3)减少链上的计算量。
提出链下计算/链上验证的处理框架,并提供了在联盟链上的整个框架的工具链;极大地降低了在联盟链上实现链下计算/链上验证的逻辑的门槛。只需要使用DSL语言编写电路,就能使用本发明工具库实现链下计算,同时可以导出联盟链上对应的智能合约,实现对应电路的证明验证。
对于建立过程来说,虽然它生成的一对公钥pk和vk是公开的信息,它其中的运算步骤需要引入一些秘密的值,如果这些值被泄露,会导致攻击者可以轻易的生成一个假的证明来满足验证程序。这要求这一过程必须由一个可信的第三方来运行,这给实际应用带来了挑战。目前业内正在积极探索应对这一问题的解决方法。
发明内容
为克服现有技术的不足,本发明提供一种区块链隐私交易方法,为达此目的, 本发明采用以下技术方案:包括以下步骤:
步骤一、
创建Setup过程,生成证明Prover流程和验证Verifier流程;
分步骤1、创建Setup过程是将给定的断言程序转化为约束电路;
分步骤2、同时会生成一对公钥,为第一证明者公钥pk和第一验证者公钥vk,分别供生成证明Prover和验证Verifier两个流程使用;
步骤二、
分步骤1、生成证明Prover流程;证明者根据证明者自己知道的私密输入w,和公开的输入x,x和w为实数;以及所述第一证明者公钥pk,运行算法生成一个证明π;
分步骤2、验证Verifier流程;验证Verifier的验证算法输入为证明π和公开输入x,以及所述第一验证者公钥vk,输出为验证通过或不通过;
步骤三、对于每个能满足约束程序的私密输入w和公开输入x,任何一个有效的证明π都是能使验证Verifier的验证算法通过;
步骤四、对于每个不满足约束电路的公开输入x,任何人不能够在多项式时间内生成一个有效的证明π使得使验证的验证算法通过;对于每个由私密输入w和公开输入x 生成的证明π,π不能揭露关于私密输入w的任何信息;
证明π具有常数大小;空间复杂度为O(1),验证Verifier的验证算法的时间复杂度为O(k),k为公开输入x的大小;
步骤五、使用发明工具链开始计算证明,计算证明的流程由如下的命令组成:
命令compile:编译电路;作用为使用DSL描述电路设计和开发电路进行计算证明;
命令Setup:设置;对于每个DSL描述电路,在生成证明之前,必须创建Setup 过程一次,生成CRS数据;CRS数据为共同参考数据集(common reference string);把验证者发给证明者的数据变成CRS数据,CRS数据通过可信的方式产生,作为一种全体节点的共识,在所有交易的验证过程中使用;
命令compute-witness:计算证明;在提供私有输入的和公有输入的同时,步骤五自动根据DSL描述电路计算出对应的计算证明;
命令generate-proof:生成证明信息;
命令export-verifier:导出验证工具;导出验证工具用于导出在联盟链上部署的证明验证合约;
步骤六、开始从DSL描述电路生成联盟链上部署的证明验证合约:
对DSL描述电路进行描述;
设定field是DSL描述电路的基本数据类型;
一个field代表一个整数,范围[0,p-1],其中p为大的质数;
field前面加上私有关键词,说明field的数据是私有的;
DSL描述电路的描述文件以.code为后缀;包括有:
cli:用于命令行接口实现;
fs_resolver:用于文件的系统解析;
parser:.code:用于DSL描述电路的代码解析;
pest_ast:用于解析DSL描述电路为AST(AbstractSyntaxTree);
stdlib:用于预实现的电路,预实现的电路包括有sha256函数、pedersenhash 函数、ecc计算;
core:用于实现核心逻辑的代码;
步骤七、将步骤六的分为三部分执行:CLI代码,解析电路以及调用bellman模块生成电路/证明;
CLI代码是公共语言基础CLI语言生成的代码(Common LanguageInfrastructure),CLI代码用于定义一个与平台无关的代码执行环境,CLI代码支持执行的环境是Windows系统或者Linux系统;
bellman模块是一个软件库,用于验证协议的算法;
步骤八、从CLI代码的命令行为起点,解析电路,调用bellman相关接口,实现DSL描述电路的生成、验证证明的生成、以及验证逻辑相关的代码;
步骤七、编译命令编译.code为后缀的描述文件描述的DSL描述电路;
通过解析器模块解析.code为后缀的描述文件;
解析器模块使用语法解析库对.code为后缀的描述文件描述的DSL描述电路的程序进行语法解析;进行语法解析后,通过语法树生成模块生成语法树;最后再通过拍平模块,将电路拍平;最后编译后的程序,用拍平程序表示;
即将.code为后缀的描述文件描述的DSL描述电路的程序由多个拍平功能构成,每个拍平功能中包含参数和拍平状态,拍平状态为描述电路的语言一种表达式;
解析完成的.code为后缀的描述文件描述的DSL描述电路的程序会存放在临时文件中,所述临时文件为当前目录下的输出文件中;
通过bellman模块,调用bellman模块中的库的函数生成随机数;并算出对应的CRS数据,在生成CRS数据之前,需要综合分析电路生成.code为后缀的描述文件描述的DSL描述电路的程序的语言;
计算证明命令指定输入参数,生成满足.code为后缀的描述文件描述的DSL描述电路的程序的语言限制的所有变量对应的值;
获得满足.code为后缀的描述文件描述的DSL描述电路的程序的语言限制的所有变量对应的值,执行电路逻辑,记录相应变量的值;
利用生成证明信息命令,使用计算证明生成的证明信息,以及创建生成的CRS数据,生成证明信息;
产生证明函数调用bellman库的随机创造所述生成证明信息;
输出验证命令,导出联盟链上可以部署的验证证明的智能合约;
通过定义宏变量的模版程序的输入验证函数,针对当前的.code为后缀的描述文件描述的DSL描述电路以及CRS数据,替换相应宏变量,生成真实的验证电路的智能合约;
当收到证明者公钥pk、私密输入w,并且满足F(x,w)=true;证明算法开始运行,并生成一个证明π,F(x,w)=true用于实现给定F和x,根据私密输入w能够满足 F(x,w)=true,但是不泄露关于私密输入w的任何信息;
验证程序收到验证者公钥vk,公开输入x和证明π后开始运行;
步骤八、设定断言程序的运算复杂度T;并公开的输入x的大小k,其中T正比于约束电路的大小,即生成的约束的数量N,N>=k,x,T,N为实数;
步骤九、验证程序的执行时间与k相关,与T无关;
证明π与k,T都无关,具有常数大小;验证者公钥vk和k成正比,与T无关;建立和生成证明的过程是和T相关;证明者公钥pk的大小与T相关;
步骤十、对隐私账户的积分隐匿,在隐私账户之间互相转账时,转账金额隐匿,在隐私账户和公开账户之间互相转账时,转账金额不隐匿;具体为:
每个隐私账户在创建之时生成一个256bit的私密的随机数d作为私钥,并将ecc椭圆曲线g^d作为公钥存储到链上,bit表示信息的最小单位,是二进制数的一位包含的信息或2个选项中特别指定1个的需要信息量;
需要隐私保护的积分数据在链上加盐的hash后存储,盐是账户的私钥d;加盐的hash的计算过程为:Hash(IVa异或salt1+balance+IVb异或salt2),其中,IVa 和IVb是sha256算法的初始向量,为128bit,salt1和salt2是一个256bit的盐的前后部分,在每笔交易的转账金额中,发送者和接收者双方的私钥通过能确保共享私钥安全穿越不安全网络的算法决定盐的值;balance为需要隐私保护的积分数据,为 256bit;Hash的结果为256bit;
隐私账户之间转账的发送者函数为:
公开输入函数:发送者当前积分数量的加盐的Hash,本次积分转账的积分数量的Hash,发送者当前积分数量减去本次积分转账后的余额的加盐的Hash,发送者的公钥g^d1,接收者的公钥g^d2;d1为发送者的私密随机数,d2发送者的私密随机数;
私密输入函数:发送者当前的积分数量,本次积分转账的积分数量,发送者转账后的余额,发送者的私密随机数d1;
发送者的函数约束:
加盐Hash(发送者当前的积分数量,d1)==发送者当前积分数量的加盐Hash;
Hash(本次积分转账的积分数量,g^d1*d2)==本次积分转账的积分数量的Hash;
发送者当前积分减去本次积分转账后的余额>0;
加盐Hash(发送者转账后的积分数量,d1)==发送者当前积分数量减去本次积分转账后的余额的加盐Hash;
隐私账户之间转账的接收者函数为:
公开输入函数:接收者当前积分数量的加盐Hash,本次积分转账的积分数量的Hash,接收者当前积分数量减去本次积分转账后的余额的加盐Hash,发送者的公钥 g^d1,接收者的公钥g^d2;
私密输入函数:接收者当前的积分数量,本次积分转账的积分数量,接收者转账后的余额,接收者的私密随机数d2;
接收者的函数约束:g^d2==传入的公开输入接收者的公钥;加盐Hash(接收者当前的积分数量,d2)==接收者当前积分数量的加盐Hash;Hash(本次积分转账的积分数量,g^(d1*d2))==本次积分转账的积分数量的Hash;加盐Hash(接收者转账后的积分数量,d2)==接收者当前积分加上本次积分转账后的余额的加盐Hash;
隐私账户之间互相转账的链上验证程序为:
公开输入函数:发送者当前积分数量的加盐Hash,本次积分转账的积分数量的Hash,发送者当前积分数量减去本次积分转账后的余额的加盐Hash;
接收者当前积分数量的加盐Hash,接收者当前积分数量减去本次积分转账后的余额的加盐Hash;
输入证明为:发送者证明,接收者证明;
执行逻辑为:如果发送者证明验证通过且接收者证明验证通过,修改发送者当前在链上的积分数量的Hash为发送者当前积分数量减去本次积分转账后的余额的加盐Hash;接收者当前在链上的积分数量Hash为接收者当前积分数量减去本次积分转账后的余额的加盐Hash;
步骤十一:隐私账户和公开账户之间转账时不用隐匿金额,隐私账户的断言程序里不送入积分数量的Hash,积分数量作为一个公开的输入;不用积分数量金额和加盐后的hash,所以也不用送入对方的公钥,不用运行确保共享私钥安全穿越不安全网络的算法来计算g^(d1*d2)。
具体实施方式
下面结合具体实施方式来进一步说明本发明的技术方案。本发明技术方案区块链隐私交易方法过程为:创建setup过程,生成证明Prover和验证Verifier。
1.创建Setup:创建过程是将给定的断言程序传化为约束电路的过程。并且它同时会生成一对公钥,证明者公钥pk和验证者公钥vk,分布供如下两个流程使用 2.生成证明Prover:证明者根据自己知道的私密输入w,和公开的输入x,以及证明者公钥pk,运行算法生成一个证明π
3.验证Verifier:验证算法输入为证明π和公开输入x,以及验证者公钥vk,输出为验证通过或不通过
对于每个能满足约束程序的私密输入w和公开输入x,任何一个有效的证明π <-P(pk,x,w)都是能使验证算法V(vk,x,π)=1通过的
对于每个不满足约束电路的公开输入x,任何人不能够在多项式时间内生成一个有效的证明π使得V(vk,x,π)=1
对于每个由私密输入w和公开输入x生成的证明π<-P(pk,x,w),π不能揭露关于w的任何信息
证明π具有常数大小O(1),验证程序的时间复杂度为O(k),k为公开输入x的大小
传统区块链整个交易或者计算(Tx)的内容都是存储在区块链上,并且每个节点都需要执行整个交易或者计算。本发明将计算移到链下,并生成证明,链上只需要验证证明是否正确,从而确认相应的计算。链下计算/链上验证的方式有一些好处:1) 提供隐私的能力2)降低链上数据存储3)减少链上的计算量。
传统的区块链和本发明的区别如下所示:
本发明工具链可以很方面地提供某种计算的证明,整个流程由如下的步骤(命令)组成:1.compile-编译电路。对于想证明的计算,需要设计和开发电路。本发明采用DSL(Domain Specific Language)描述电路。本发明也提供了一些常用的电路库(SHA256,椭圆曲线的计算等等)。
2.setup-设置。对于每个电路,在生成证明之前,必须setup一次,生成CRS。
3.compute-witness-生成witness。在提供了private/public输入的情况下,本发明自动根据电路计算出对应的witness。
4.generate-proof-生成证明信息。
5.export-verifier-导出验证工具。比如在联盟链上,export-verifier可以导出可在联盟链上部署的证明验证合约。
从电路的DSL描述,最后到生成联盟链上的智能合约的流程:
DSL电路示例
本发明给出了详细的电路描述和编译的说明,可以查看链接。
DSL电路描述,判断a的平方是否等于b,等于返回1,不等于返回0:
def main(private field a,field b)->(field):
field result=if a*a==b then 1 else 0 fi
return result
field是DSL电路的基本数据类型。一个field代表一个整数,范围[0,p-1],其中p为大的质数。field前面加上关键词private,说明这个field的数据是 private的,属于“witness”。电路的描述文件以.code为后缀。
本文中使用的本发明源代码的最后一个commit信息如下:
commit 87312a55e94055f14f95afeaa2790783d79a1ee5 Author:schaeffthibaut@schaeff.fr Date:Sun Jun 23 13:35:03 2019+0200
remove invalid test case
cli:命令行接口实现。
fs_resolver:文件系统解析。
parser:.code电路代码解析。
pest_ast:解析电路为AST(Abstract Syntax Tree)。
stdlib:一些预实现的电路(比如,sha256函数,pedersen hash函数,ecc相关计算)。
core:本发明的核心逻辑代码。解析.code电路,调用bellman相关接口,实现电路的生成,proof的生成和验证。
简单的说,本发明的逻辑分为三部分:CLI代码,电路的解析(pest/ast)以及调用bellman生成电路/证明。以下从CLI命令行为起点,解析逻辑相关的代码。
compile命令
compile命令编译.code描述的电路:
./compile-i sample.code
编译的逻辑在core/src/compile.rs模块的compile_aux函数中。
通过parser模块解析.code电路。电路程序的语法定义在parser/src/.pest文件中。也就是说,电路程序使用pest库进行语法解析。进行语法解析后,通过pest_ast 模块生成ast(语法树)。最后再通过flatten模块,将电路“拍平”。最后编译后的程序,用FlatProg表示(定义在core/src/flat_absy/mod.rs):
pub struct FlatProg{
///FlatFunctions of the program
pub functions:Vec>,
}
pub struct FlatFunction{
///Name of the program
pub id:String,
///Arguments of the function
pub arguments:Vec,
///Vector of statements that are executed when running the function
pub statements:Vec>,
///Typed signature
pub signature:Signature,
}
也就是说,一个电路程序由一个个的FlatFunction构成,每个FlatFunction 中包含参数以及一系列的FlatStatement(描述电路的一种语言表达式)。解析完成的电路程序会存放在临时文件中(当前目录下的output文件中)。
setup命令
setup命令生成CRS。
./setup
本发明提供几种方案:PGHR13,G16和GM17。默认采用G16的方案。
核心逻辑在core/src/proof_system/bn128/g16.rs的setup函数中。
通过core/proof_system/utils/bellman模块,调用bellman库中的 generate_random_parameters函数生成随机数,并算出对应的CRS数据。注意,在生成CRS数据之前,需要综合分析电路生成描述电路的一种语言。
compute-witness命令
compute-witness命令,指定输入参数,生成满足电路描述电路的一种语言限制的所有变量对应的值。如下是示例电路对应的compute-witness的命令,示例电路对应的a为337,b为113569:
./compute-witness-a 337113569
核心逻辑在core/src/ir/interpreter.rs的execute函数中。获得满足电路的所有变量的值,就是“执行”一下电路逻辑,记录相应变量的值即可。
generate-proof命令
generate-proof命令,使用compute-witness生成的witness信息,以及 setup生成的CRS数据,生成proof证明。
./generate-proof
核心逻辑在core/src/proof_system/bn128/g16.rs的generate_proof函数中。调用bellman库的create_random_proof生成证明。
export-verifier命令
export-verifier命令,导出联盟链上可以部署的验证证明的智能合约。
./export-verifier
核心逻辑在core/src/proof_system/bn128/g16.rs的 export_solidity_verifier函数中。在g16.rs中,定义了一个Groth16证明验证的模版程序(其中一部分如下):
这个模版程序定义了一些“宏变量”(vk_a,vk_b,vk_gamma,vk_delta等等)。export-verifier函数,针对当前的电路以及CRS信息,替换相应“宏变量”,生成真实的验证电路的智能合约。
对于建立过程来说,虽然它生成的一对公钥pk和vk是公开的信息,它其中的运算步骤需要引入一些秘密的值,如果这些值被泄露,会导致攻击者可以轻易的生成一个假的证明来满足验证程序。这要求这一过程必须由一个可信的第三方来运行,这给实际应用带来了挑战。目前业内正在积极探索应对这一问题的解决方法。
任何收到证明者公钥pk并且知道私密输入w能够满足F(x,w)=true的人能够运行生成证明算法生成一个证明π,它证明了”给定F和x,我知道一个私密输入w能够满足F(x,w)=true“,但是没有泄露关于w的任何信息,除了这个论断本身。
任何收到验证者公钥vk,公开输入x和证明π的人都能够去运行运行验证程序。
用公式描述算法的各个过程如下:
性能分析:
整体算法的时间复杂度依赖于如下因素:
1.断言程序的运算复杂度T
2.公开输入x的大小k
其中T正比于约束电路的大小,即生成的约束的数量N,N>=k,并且包括一些其他的运算相关的中间变量,因为运算逻辑越复杂,所需要的中间变量就越多,所以N和实际的运算量T成正比关系。一般来说,N远大于k。
关于本发明算法,最关键的效率的特性是:
1.验证程序的执行时间只和k相关,而与T无关
2.证明π具有常数大小(与k,T都无关)
3.验证者公钥vk和k成正比(与T无关)
以上过程对于区块链架构来说,是每个验证者节点都必须要运行的,可以看出它们都与断言程序的实际的运算量T无关,所以我们可以认为零知识证明将运算负担转到了链下,即证明生成方,而链上只需承担少许的验证计算。
但是,建立和生成证明的过程是和T相关的。证明者公钥pk的大小也与T相关,这导致它通常比较大。对于这两部分有效率的运行,业内也正在积极的讨论用分布式解决的方案。但是无论如何,它们属于链下的运算,而链上的运算负担确实被减轻了。这使得本发明成为解决区块链运算和存储可扩展性问题的一个热门方案,当前关于这个具有代表性的架构是本发明的,它包含了对链下merkle tree和转账运算的证明。
隐私账户的积分隐匿
隐私账户之间互相转账,转账金额隐匿
隐私账户和公开账户之间互相转账,转账金额不隐匿
具体方案设计如下:
每个隐私账户在创建之时生成一个256bit的私密的随机数d作为私钥,并将ecc椭圆曲线g^d作为公钥存储到链上
需要隐私保护的积分数据在链上以加盐后hash的形式来存储。具体计算过程为:Hash(IVa xor salt1+balance+IVb xor salt2),其中,IVa和IVb是sha256算法的初始向量,为128bit,salt1和salt2是一个256bit的盐的前后部分,对于对积分的加盐Hash而言,这个盐就是账户的私钥d。对于每笔交易的转账金额来说,这个盐由发送者和接收者双方的私钥通过Diffie hellman算法决定;balance为需要隐私保护的积分数据,为256bit。Hash的结果为256bit。
私账户之间转账,断言程序设计:
Function发送者函数:
公开输入:发送者当前积分的加盐Hash,本次转账的积分的Hash,发送者当前积分减去本次转账后的余额的加盐Hash,发送者的公钥g^d1,接收者的公钥g^d2
私密输入:发送者当前的积分,本次转账的积分,发送者转账后的积分,发送者的私密随机数d1
约束:
1).g^d1=传入的公开输入发送者的公钥
2).加盐Hash(发送者当前的积分,d1)==发送者当前积分的加盐Hash
3).Hash(本次转账的积分,g^d1d2)==本次转账的积分的Hash
4).发送者当前积分减去本次转账后的余额>0
5).加盐Hash(发送者转账后的积分,d1)==发送者当前积分减去本次转账后的余额的加盐Hash
Function接收者函数:
公开输入:接收者当前积分的加盐Hash,本次转账的积分的Hash,接收者当前积分减去本次转账后的余额的加盐Hash,发送者的公钥g^d1,接收者的公钥g^d2
私密输入:接收者当前的积分,本次转账的积分,接收者转账后的积分,接收者的私密随机数d2
约束:
1).g^d2==传入的公开输入接收者的公钥
2).加盐Hash(接收者当前的积分,d2)==接收者当前积分的加盐Hash
3).Hash(本次转账的积分,g^d1d2)==本次转账的积分的Hash
4).加盐Hash(接收者转账后的积分,d2)==接收者当前积分加上本次转账后的余额的加盐Hash
链上验证程序:
公开输入:发送者当前积分的加盐Hash,本次转账的积分的Hash,发送者当前积分减去本次转账后的余额的加盐Hash
接收者当前积分的加盐Hash,接收者当前积分减去本次转账后的余额的加盐Hash
输入证明:发送者证明,接收者证明
执行逻辑:
如果发送者证明验证通过且
接收者证明 验证通过
修改发送者当前在链上的积分Hash为发送者当前积分减去本次转账后的余额的加盐Hash
接收者当前在链上的积分Hash为接收者当前积分减去本次转账后的余额的加盐Hash
4.隐私账户和公开账户之间转账
和上述隐私账户之间转账的设计相比,区别是:
1).金额不用隐匿,所以隐私那一方的断言程序里可以不用送入金额的Hash,金额变成一个公开的输入而不是私密的输入了
2).因为不用验证金额和加盐hash,所以也不用送入对方的公钥,不用运行Diffie hellman算法来计算g^d1d2。
对于这两部分有效率的运行,业内也正在积极的讨论用分布式解决的方案。但是无论如何,它们属于链下的运算,而链上的运算负担确实被减轻了。这使得本发明成为解决区块链运算和存储可扩展性问题的一个热门方案,当前关于这个具有代表性的架构是本发明的,它包含了对链下默克尔树和转账运算的证明。
除了应用本发明的方案来解决区块链的存储和计算的可扩展性,本发明技术还可以用来解决客户的数据隐私和涉及隐私数据的运算和链上验证问题。具体应用场景比如:匿名支付,匿名竞拍,匿名投票,选择性披露,供应链金融。
在本项目中,本发明被拟用来解决汽车积分系统相关的隐私问题。假设一部分客户需要对他们的积分做保密的存储,同时又需要支持他们的隐私数据能够与别的账户的公开的积分账户做转账和交易。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉该技术的人在本发明所揭露的技术范围内,可轻易想到的变化或替换, 都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
有益效果:本发明提出了链下计算/链上验证的处理框架,并提供了在联盟链上的整个框架的工具链。本发明使用工具链,极大地降低了在联盟链上实现链下计算/ 链上验证的逻辑的门槛。只需要使用DSL语言编写电路,就能使用本发明工具库实现链下计算,同时可以导出联盟链上对应的智能合约,实现对应电路的证明验证。
Claims (1)
1.步骤一、创建Setup过程,生成证明Prover流程和验证Verifier流程;分步骤1、创建Setup过程是将给定的断言程序转化为约束电路;分步骤2、同时会生成一对公钥,为第一证明者公钥pk和第一验证者公钥vk,分别供生成证明Prover和验证Verifier两个流程使用;步骤二、分步骤1、生成证明Prover流程;证明者根据证明者自己知道的私密输入w,和公开的输入x,x和w为实数;以及所述第一证明者公钥pk,运行算法生成一个证明π;分步骤2、验证Verifier流程;验证Verifier的验证算法输入为证明π和公开输入x,以及所述第一验证者公钥vk,输出为验证通过或不通过;步骤三、对于每个能满足约束程序的私密输入w和公开输入x,任何一个有效的证明π都是能使验证Verifier的验证算法通过;步骤四、对于每个不满足约束电路的公开输入x,任何人不能够在多项式时间内生成一个有效的证明π使得使验证的验证算法通过;对于每个由私密输入w和公开输入x生成的证明π,π不能揭露关于私密输入w的任何信息;证明π具有常数大小;空间复杂度为O(1),验证Verifier的验证算法的时间复杂度为O(k),k为公开输入x的大小;步骤五、使用发明工具链开始计算证明,计算证明的流程由如下的命令组成:命令compile:编译电路;作用为使用DSL描述电路设计和开发电路进行计算证明;命令Setup:设置;对于每个DSL描述电路,在生成证明之前,必须创建Setup过程一次,生成CRS数据;CRS数据为共同参考数据集(common reference string);把验证者发给证明者的数据变成CRS数据,CRS数据通过可信的方式产生,作为一种全体节点的共识,在所有交易的验证过程中使用;命令compute-witness:计算证明;在提供私有输入的和公有输入的同时,步骤五自动根据DSL描述电路计算出对应的计算证明;命令generate-proof:生成证明信息;命令export-verifier:导出验证工具;导出验证工具用于导出在联盟链上部署的证明验证合约;
步骤六、开始从DSL描述电路生成联盟链上部署的证明验证合约:
对DSL描述电路进行描述;
设定field是DSL描述电路的基本数据类型;
一个field代表一个整数,范围[0,p-1],其中p为大的质数;
field前面加上私有关键词,将field的数据设定私有;
DSL描述电路的描述文件以.code为后缀;包括有:
cli:用于命令行接口实现;
fs_resolver:用于文件的系统解析;
parser:.code:用于DSL描述电路的代码解析;
pest_ast:用于解析DSL描述电路为AST(AbstractSyntaxTree);
stdlib:用于预实现的电路,预实现的电路包括有sha256函数、pedersenhash函数、ecc计算;
core:用于实现核心逻辑的代码;
步骤七、将步骤六的分为三部分执行:CLI代码,解析电路以及调用bellman模块生成电路/证明;
CLI代码是公共语言基础CLI语言生成的代码(Common Language Infrastructure),CLI代码用于定义一个与平台无关的代码执行环境,CLI代码支持执行的环境是Windows系统或者Linux系统;
bellman 模块是一个软件库,用于验证协议的算法;
步骤八、从CLI代码的命令行为起点,解析电路,调用bellman相关接口,实现DSL描述电路的生成、验证证明的生成、以及验证逻辑相关的代码;
步骤七、编译命令编译.code为后缀的描述文件描述的DSL描述电路;
通过解析器模块解析.code为后缀的描述文件;
解析器模块使用语法解析库对.code为后缀的描述文件描述的DSL描述电路的程序进行语法解析;进行语法解析后,通过语法树生成模块生成语法树;最后再通过拍平模块,将电路拍平;最后编译后的程序,用拍平程序表示;
即将.code为后缀的描述文件描述的DSL描述电路的程序由多个拍平功能构成,每个拍平功能中包含参数和拍平状态,拍平状态为描述电路的语言一种表达式;
解析完成的.code为后缀的描述文件描述的DSL描述电路的程序会存放在临时文件中,所述临时文件为当前目录下的输出文件中;
通过 bellman 模块,调用bellman模块中的库的函数生成随机数;并算出对应的CRS数据,在生成CRS数据之前,需要综合分析电路生成.code为后缀的描述文件描述的DSL描述电路的程序的语言;
计算证明命令指定输入参数,生成满足.code为后缀的描述文件描述的DSL描述电路的程序的语言限制的所有变量对应的值;
获得满足.code为后缀的描述文件描述的DSL描述电路的程序的语言限制的所有变量对应的值,执行电路逻辑,记录相应变量的值;
利用生成证明信息命令,使用计算证明生成的证明信息,以及创建生成的CRS数据,生成证明信息;
产生证明函数调用bellman库的随机创造所述生成证明信息;
输出验证命令,导出联盟链上可以部署的验证证明的智能合约;
通过定义宏变量的模版程序的输入验证函数,针对当前的.code为后缀的描述文件描述的DSL描述电路以及CRS数据,替换相应宏变量,生成真实的验证电路的智能合约;
当收到证明者公钥pk、私密输入w,并且满足F(x,w)=true;证明算法开始运行,并生成一个证明π,F(x,w)=true用于实现给定F和x,根据私密输入w能够满足F(x,w)=true,但是不泄露关于私密输入w的任何信息;
验证程序收到验证者公钥vk,公开输入x和证明π后开始运行;
步骤八、设定断言程序的运算复杂度T;并公开的输入x的大小k,其中T正比于约束电路的大小,即生成的约束的数量N,N>=k,x,T,N为实数;
步骤九、验证程序的执行时间与k相关,与T无关;
证明π与k,T都无关,具有常数大小;验证者公钥vk和k成正比,与T无关;建立和生成证明的过程是和T相关;证明者公钥pk的大小与T相关;
步骤十、对隐私账户的积分隐匿,在隐私账户之间互相转账时,转账金额隐匿,在隐私账户和公开账户之间互相转账时,转账金额不隐匿;具体为:
每个隐私账户在创建之时生成一个256bit的私密的随机数d作为私钥,并将ecc椭圆曲线g^d作为公钥存储到链上,bit表示信息的最小单位,是二进制数的一位包含的信息或2个选项中特别指定1个的需要信息量;
需要隐私保护的积分数据在链上加盐的hash后存储,盐是账户的私钥d;加盐的hash的计算过程为:Hash(IVa 异或 salt1+balance+IVb 异或 salt2),其中,IVa和IVb是sha256算法的初始向量,为128bit,salt1和salt2是一个256bit的盐的前后部分,在每笔交易的转账金额中,发送者和接收者双方的私钥通过能确保共享私钥安全穿越不安全网络的算法决定盐的值;balance为需要隐私保护的积分数据,为256bit;Hash的结果为256bit;
隐私账户之间转账的发送者函数为:
公开输入函数:发送者当前积分数量的加盐的Hash,本次积分转账的积分数量的Hash,发送者当前积分数量减去本次积分转账后的余额的加盐的Hash,发送者的公钥g^d1,接收者的公钥g^d2;d1为发送者的私密随机数,d2发送者的私密随机数;
私密输入函数:发送者当前的积分数量,本次积分转账的积分数量,发送者转账后的余额,发送者的私密随机数d1;
发送者的函数约束:
加盐Hash(发送者当前的积分数量,d1)==发送者当前积分数量的加盐Hash;
Hash(本次积分转账的积分数量,g^d1*d2)==本次积分转账的积分数量的Hash;
发送者当前积分减去本次积分转账后的余额>0;
加盐Hash(发送者转账后的积分数量,d1)==发送者当前积分数量减去本次积分转账后的余额的加盐Hash;
隐私账户之间转账的接收者函数为:
公开输入函数:接收者当前积分数量的加盐Hash,本次积分转账的积分数量的Hash,接收者当前积分数量减去本次积分转账后的余额的加盐Hash,发送者的公钥g^d1,接收者的公钥g^d2;
私密输入函数:接收者当前的积分数量,本次积分转账的积分数量,接收者转账后的余额,接收者的私密随机数d2;
接收者的函数约束:g^d2==传入的公开输入接收者的公钥;加盐Hash(接收者当前的积分数量,d2)==接收者当前积分数量的加盐Hash;Hash(本次积分转账的积分数量,g^(d1*d2))==本次积分转账的积分数量的Hash;加盐Hash(接收者转账后的积分数量,d2)==接收者当前积分加上本次积分转账后的余额的加盐Hash;
隐私账户之间互相转账的链上验证程序为:
公开输入函数:发送者当前积分数量的加盐Hash,本次积分转账的积分数量的Hash,发送者当前积分数量减去本次积分转账后的余额的加盐Hash;
接收者当前积分数量的加盐Hash,接收者当前积分数量减去本次积分转账后的余额的加盐Hash;
输入证明为:发送者证明,接收者证明;
执行逻辑为:如果发送者证明验证通过且接收者证明验证通过,修改发送者当前在链上的积分数量的Hash为发送者当前积分数量减去本次积分转账后的余额的加盐Hash;接收者当前在链上的积分数量Hash为接收者当前积分数量减去本次积分转账后的余额的加盐Hash;
步骤十一:隐私账户和公开账户之间转账时不用隐匿金额,隐私账户的断言程序里不送入积分数量的Hash,积分数量作为一个公开的输入;不用积分数量金额和加盐后的hash,所以也不用送入对方的公钥,不用运行确保共享私钥安全穿越不安全网络的算法来计算g^(d1*d2)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011611626.8A CN113222747B (zh) | 2020-12-31 | 2020-12-31 | 一种区块链隐私交易方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011611626.8A CN113222747B (zh) | 2020-12-31 | 2020-12-31 | 一种区块链隐私交易方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113222747A true CN113222747A (zh) | 2021-08-06 |
CN113222747B CN113222747B (zh) | 2024-01-26 |
Family
ID=77085940
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011611626.8A Active CN113222747B (zh) | 2020-12-31 | 2020-12-31 | 一种区块链隐私交易方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113222747B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113986250A (zh) * | 2021-12-23 | 2022-01-28 | 杭州趣链科技有限公司 | 零知识证明电路优化方法、装置、终端设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017079652A1 (en) * | 2015-11-05 | 2017-05-11 | Pulsifer Allen | Cryptographic transactions system |
CN108418783A (zh) * | 2017-09-01 | 2018-08-17 | 矩阵元技术(深圳)有限公司 | 一种保护区块链智能合约隐私的方法、介质 |
CN108418689A (zh) * | 2017-11-30 | 2018-08-17 | 矩阵元技术(深圳)有限公司 | 一种适合区块链隐私保护的零知识证明方法和介质 |
CN110428249A (zh) * | 2019-07-25 | 2019-11-08 | 重庆邮电大学 | 一种基于零知识证明的侧链小额支付系统 |
CN111314086A (zh) * | 2020-02-11 | 2020-06-19 | 上海宓猿信息技术有限公司 | 一种区块链隐私协议的实现方法 |
CN111345005A (zh) * | 2017-11-09 | 2020-06-26 | 区块链控股有限公司 | 在区块链上记录验证密钥的系统 |
CN111882437A (zh) * | 2020-08-11 | 2020-11-03 | 神话科技传媒(深圳)有限公司上海分公司 | 一种具有图灵完备智能合约的区块链实现方法 |
CN112861184A (zh) * | 2021-03-29 | 2021-05-28 | 中信银行股份有限公司 | 资产证明的验证与生成方法、装置及电子设备 |
-
2020
- 2020-12-31 CN CN202011611626.8A patent/CN113222747B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017079652A1 (en) * | 2015-11-05 | 2017-05-11 | Pulsifer Allen | Cryptographic transactions system |
CN108418783A (zh) * | 2017-09-01 | 2018-08-17 | 矩阵元技术(深圳)有限公司 | 一种保护区块链智能合约隐私的方法、介质 |
CN111345005A (zh) * | 2017-11-09 | 2020-06-26 | 区块链控股有限公司 | 在区块链上记录验证密钥的系统 |
CN108418689A (zh) * | 2017-11-30 | 2018-08-17 | 矩阵元技术(深圳)有限公司 | 一种适合区块链隐私保护的零知识证明方法和介质 |
CN110428249A (zh) * | 2019-07-25 | 2019-11-08 | 重庆邮电大学 | 一种基于零知识证明的侧链小额支付系统 |
CN111314086A (zh) * | 2020-02-11 | 2020-06-19 | 上海宓猿信息技术有限公司 | 一种区块链隐私协议的实现方法 |
CN111882437A (zh) * | 2020-08-11 | 2020-11-03 | 神话科技传媒(深圳)有限公司上海分公司 | 一种具有图灵完备智能合约的区块链实现方法 |
CN112861184A (zh) * | 2021-03-29 | 2021-05-28 | 中信银行股份有限公司 | 资产证明的验证与生成方法、装置及电子设备 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113986250A (zh) * | 2021-12-23 | 2022-01-28 | 杭州趣链科技有限公司 | 零知识证明电路优化方法、装置、终端设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113222747B (zh) | 2024-01-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3707871B1 (en) | System for recording verification keys on a blockchain | |
CN111316615B (zh) | 使用调解器计算机系统确保计算机程序正确执行的系统和方法 | |
US20240078541A1 (en) | Computer-implemented system and method for exchange of data | |
CN111801910A (zh) | 基于证明验证的用于认证链外数据的系统和方法 | |
Mouris et al. | Zilch: A framework for deploying transparent zero-knowledge proofs | |
CN114358782A (zh) | 区块链交易审计方法、装置、设备及存储介质 | |
CN111640018B (zh) | 一种区块链交易存在性验证方法及装置 | |
CN113435121A (zh) | 基于联邦学习的模型训练验证方法、装置、设备及介质 | |
CN113222747B (zh) | 一种区块链隐私交易方法 | |
Maddali et al. | VeriBlock: A novel blockchain framework based on verifiable computing and trusted execution environment | |
CN112488683A (zh) | 一种区块链的链下交易方法及装置 | |
Covaci et al. | NECTAR: non-interactive smart contract protocol using blockchain technology | |
CN114298842A (zh) | 应用于区块链的dapp的状态数据的管理方法及装置 | |
CN116488816A (zh) | 一种基于区块链网络的数据处理方法、装置及存储介质 | |
Yang et al. | Reducing gas consumption of tornado cash and other smart contracts in ethereum | |
WO2022153576A1 (ja) | コード生成装置、コード生成システム、コード生成方法、及びプログラム | |
Tyagi | A Review on Zero Knowledge Proof Vulnerabilities in Zcash | |
KR20220101469A (ko) | 동적 연산을 통한 검증이 가능한 영지식 증명 시스템 및 증명 방법 | |
CN116011016A (zh) | 一种用于联盟链中私有数据集的保护系统及方法 | |
CN117709953A (zh) | 范围证明方法、装置、设备及存储介质 | |
Gava et al. | Mechanised verification of distributed state-space algorithms for security protocols | |
Zhang et al. | Research on the Data Authenticity Verification Method Based Onblockchain and Zk-Snarks in Data Trading | |
Malladi | How to prevent type-flaw and multi-protocol attacks on cryptographic protocols under Exclusive-OR |
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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 200120 building C3, No. 101 Eshan Road, China (Shanghai) pilot Free Trade Zone, Pudong New Area, Shanghai Applicant after: Shanghai Lingshuzhonghe Information Technology Co.,Ltd. Address before: C3, 101 Eshan Road, Pudong New Area, Shanghai, 200120 Applicant before: NENG LIAN TECH. LTD. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |