基于零知识证明的智能合约认证数据隐私保护方法与流程

文档序号:17373746发布日期:2019-04-12 23:04阅读:1424来源:国知局
基于零知识证明的智能合约认证数据隐私保护方法与流程

本公开涉及区块链技术领域,特别是涉及基于零知识证明的智能合约认证数据隐私保护方法。



背景技术:

本部分的陈述仅仅是提高了与本公开相关的背景技术,并不必然构成现有技术。

随着加密货币比特币的空前成功,区块链技术飞速发展,引领了互联网领域一次新的技术浪潮。作为一个无中心服务器的分布式系统,区块链不依赖于任何一方的正确执行。一旦被记录在区块链上,就无法再对其进行更改,这种不可篡改性保证了区块链上交易的完整性,从而建立信任关系。

智能合约是在区块链上运行的程序,其执行必须通过共识来确认。智能合约的存在,使区块链能够处理比资金转移更复杂的逻辑。区块链技术与智能合约相结合,已经应用于许多领域:金融,保险,公证,房地产,彩票,投票,供应链,智能电网,医疗保险,物联网和云计算等。

当区块链应用于实际场景以实现智能合约的自动执行时,与现实世界交互是不可避免的。区块链上的智能合约需要从现实世界中获取一些信息作为输入,以便计算结果,按照预先确定的规则执行。然而,并非所有从现实世界到智能合约的输入都可以对外公开。例如,医疗保险的智能合约需要将被保险人的年龄,职业,性别和体检报告作为输入。出于对隐私的保护,这些数据不能对外公开。另一方面,即使医疗保险使用联盟链维护,并对其采用访问控制机制来防止隐私泄露,个人医疗信息仍然会泄露给维护联盟链的节点。从本质上讲,这类问题即如何在不泄露任何隐私的情况下将经过认证的真实数据提供给区块链上的智能合约,保证发送到区块链的数据的隐私性和真实性,显得至关重要。

零知识证明,就是指证明者知道或拥有某一消息,在不向验证者提供任何有用的信息的情况下,能够使验证者相信某个论断是正确的一种方法。大量事实证明,如果能够将零知识证明用于数据认证,将会有效解决许多问题。相应地,目前零知识证明的最新技术有zk-snarks(zero-knowledgesuccinctnon-interactiveargumentofknowledge),zk-starks(zero-knowledgescalabletransparentargumentsofknowledge),bulletproofs等。其中,zk-snark已经成功应用到匿名数字货币zerocash中。

数字签名是公钥加密技术与数字摘要技术相结合的应用。数字签名在许多方面等同于传统的手写签名,在一些国家已具有法律意义。正确实现的数字签名比手写类型更难以伪造。此外,一些不可否认数字签名方案能够提供时间戳,即使私钥泄露,也能保证签名的有效性。



技术实现要素:

为了解决现有技术的不足,本公开提供了基于零知识证明的智能合约认证数据隐私保护方法,其具有保证输入数据的隐私性和真实性,在不泄漏敏感信息的情况下,每个人都可以验证数据的真实性;

本公开提供了基于零知识证明的智能合约认证数据隐私保护方法;

基于零知识证明的智能合约认证数据隐私保护方法,包括:

可信数据认证机构da(dataauthenticator),去中心化应用的用户du(dappuser),验证者v(validator)以及基于智能合约的去中心化应用dapp(decentralizedapp);

步骤(1):初始化:可信数据认证机构da进行初始化,输入安全参数λ,利用零知识证明系统zkp的zkp.setup(1λ)获得公共参数pp;

所述可信数据认证机构da选取数字签名机制∏=(keygen,sign,verify),运行∏.keygen生成公钥/私钥对(pka,ska);

所述可信数据认证机构da为去中心化应用的用户du生成唯一的id,将(pp,pka)对外公布;

所述可信数据认证机构da根据基于智能合约的去中心化应用dapp所需的计算任务,构建电路c;

步骤(2):生成密钥对:密钥生成器将公共参数pp和电路c作为输入,运行零知识证明系统zkp的zkp.keygen(pp,c)算法,生成密钥对(pk,vk),其中证明密钥pk用于生成证明,验证密钥vk用于验证证明;

步骤(3):数据认证:可信数据认证机构da将个人私密数据和签名私钥ska作为输入,运行算法,对数据进行签名认证并产生签名σa;

步骤(4):生成证明:去中心化应用的用户du证明者终端将私密数据作为电路c的输入值,将计算结果r和哈希值h作为算术电路c的输出值,输入到电路c中;所述去中心化应用的用户du执行零知识证明系统zkp的算法生成证明π;

步骤(5):验证证明:验证者v运行verify(vk,pka,π,r,h,σa)算法,验证证明π是否正确;验证通过则证明计算结果r是正确的,否则证明计算结果r是错误的。

作为一些可能的实现方式,所述步骤(1)的零知识证明系统,包括:

所述零知识证明系统zkp=(setup,keygen,prove,verify),是但不局限于zk-snarks,zk-starks和bulletproofs;

zkp.setup(1λ)用于初始化零知识证明系统的公共参数pp;

zkp.keygen(pp,c)用于生成证明密钥对(pk,vk),其中证明密钥pk用于生成证明,验证密钥vk用于验证证明;

用于生成证明π,证明计算结果r是由真实有效的数据计算所得;

zkp.verify(vk,π,r,h)用于验证证明π以判断数据的真实有效性和计算结果r的正确性;

所述零知识证明系统中使用相同电路的情况下,公共参数pp仅初始化一次,所述公共参数pp用于zkp.keygen(pp,c)生成密钥对,以及证明生成和验证的计算。

作为一些可能的实现方式,所述步骤(1)中所述可信数据认证机构da选取数字签名机制π=(keygen,sign,verify),是但不局限于ecdsa和rsa;

π.keygen(1λ)用于初始化签名算法,生成签名密钥对(pka,ska);

π.sign(ska,data)用于对数据data进行签名,并产生签名σa;

π.verify(pka,data,σa)用于对签名σa进行验签。

作为一些可能的实现方式,所述步骤(1)的计算任务,包括:

所述基于智能合约的去中心化应用dapp根据计算需求,构造算术等式;所述去中心化应用的用户du向所述dapp证明其提供的数据满足等式关系。

假设所述基于智能合约的去中心化应用dapp所需的计算任务为等式h=hash(<x1,x2,...,xn,r>|id|t),所述去中心化应用的用户du向所述基于智能合约的去中心化应用dapp证明自己知道h对应的哈希原象为x1,x2,...,xn、r、id、t,而不向所述基于智能合约的去中心化应用dapp泄露x1,x2,...,xn和r;

相同的计算任务使用同一个电路,电路具有可重复性。

作为一些可能的实现方式,所述步骤(1)的构建电路c:

将所述去中心化应用的用户du的私密输入作为电路c的输入,将所述去中心化应用dapp所需的计算结果r和哈希值h作为电路c的输出,以证明所述去中心化应用dapp所需的计算结果r确实是由所述可信数据认证机构da认证的数据作为输入计算而来;

所述电路c包括加、减、乘、除、比较或哈希计算的组合,组合的形式根据基于智能合约的去中心化应用dapp所需的计算任务中预先设定的形式来决定。

作为一些可能的实现方式,所述步骤(2)的零知识证明系统在使用相同电路的情况下,密钥对(pk,vk)仅初始化一次。

作为一些可能的实现方式,所述步骤(3)的算法的具体步骤为:

所述可信数据认证机构da利用所述去中心化应用的用户du的身份id和当前时间t,将所述du的私密输入进行扩展,扩展后变为

所述可信数据认证机构da将扩展的私密输入进行哈希运算,获得h=hash(x1,x2,...,xn,r|id|t);

所述可信数据认证机构da基于私钥ska,运行π.sign(ska,h)算法,为扩展的私密输入的哈希值生成签名σa=π.sign(ska,hash(<x1,x2,...,xn,r>|id|t));

所述哈希运算函数hash()包括但不局限于sha256、sha3哈希函数。

作为一些可能的实现方式,所述步骤(4)的计算结果r为所述去中心化应用dapp所需的计算结果,该数值通过所述去中心化应用的用户du的私密输入结合所述去中心化应用dapp对外公布的公共相关系数计算得到。

作为一些可能的实现方式,所述步骤(5)的verify(vk,pka,π,r,h,σa)算法的具体步骤为:

验证者v将验证签名的公钥pka,哈希值h和签名σa,输入到签名验证算法π.verify(pka,h,σa)中,验证哈希值h的签名σa是否有效;如果无效,则输出0;

如果有效,则继续利用零知识证明系统zkp的zkp.verify(vk,π,r,h)验证证明π是否正确,如果验证均通过,则证明计算结果r是正确的,否则证明计算结果r是错误的。

与现有技术相比,本公开的有益效果是:

1、本公开所提出的技术,保证智能合约的数据真实性和隐私,并且不会向其他人泄露输入数据,确保输入数据的真实有效性。

2、本公开可以用于各种区块链系统,以确保数据的真实性和隐私性。

3、本公开中通过区块链记录服务提供端用户产生的证明,任何验证者都可以进行访问验证,真正实现去中心化。

附图说明

构成本申请的一部分的说明书附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。

图1为实施例1认证数据隐私保护的基本电路结构示意图。

图2为实施例1基于零知识证明的智能合约认证数据隐私保护方法的系统框架示意图。

图3为实施例1保护明文输出的认证数据隐私保护的电路结构示意图。

图4为实施例1防止恶意用户欺诈的认证数据隐私保护的电路结构示意图。

图5为实施例1以太坊和zk-snarks为例实现的系统框架示意图。

具体实施方式

应该指出,以下详细说明都是例示性的,旨在对本申请提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本申请所属技术领域的普通技术人员通常理解的相同含义。

需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本申请的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。

基于零知识证明的智能合约认证数据隐私保护方法,包括:

可信数据认证机构da(dataauthenticator),基于智能合约的去中心化应用的用户du(dappuser),验证者v(validator)以及基于智能合约的去中心化应用dapp(decentralizedapp)。

所述数据认证机构(da)是一个独立且可信的数据源。所述da将生成可靠的数据并使用其私钥ska为dapp用户du的数据进行签名。此外,da知道数据生成的时间以及数据所有者,但它绝不会将此数据透露给其他dapp用户du。每个dapp用户du都可以使用相应的公钥pka验证数据的签名。

所述du需要将自己的私密的真实数据作为输入,以获取由dapp提供的去中心化服务。由于隐私问题,所述du希望在享受服务的同时保护隐私。

所述验证者v(validator)是区块链维护者(矿工),用于验证提交给区块链系统的事务。所述验证者们通过运行共识算法来生成包含已验证事务的新区块。同样,智能合约可以在区块链上执行。

所述去中心化应用程序(dapp)在区块链上以智能合约的形式提供服务。例如,一种去中心化的医疗保险计划,以去中心化的智能合约方式为个人提供保险服务。

所述dapp用户du向所述dapp(智能合约)发送服务请求,其中包含所述dapp所需的计算结果、所述du私密输入的哈希值、证明和签名。所述验证者v对服务请求进行验证通过后,所述dapp为其用户提供服务。

所述du将三个向量作为输入:第一个向量是所述du的私密数据向量第二个向量是公共参数向量用于计算dapp所需的计算结果r,第三个向量是辅助数据其中id,t和r是所述du的身份标识,时间信息和随机数,随机数r用于混淆所述dapp用户du的输入。

进一步地,所述du将三个向量作为认证数据隐私保护的基本电路的输入,计算结果r和哈希值h作为认证数据隐私保护的基本电路的输出。所述计算结果r是所述dapp执行某些特定操作所必需的,所述哈希值h则用于验证的真实性。

进一步地,所述零知识证明系统为认证数据隐私保护的基本电路生成零知识证明π。所述du向所述dapp发送以下变量验证计算结果的正确性:证明π,向量计算结果r,哈希值h以及h上的数字签名σa。所述dapp验证r确实是计算的结果,而哈希值h确实是通过计算得到的,以保证使用相同的来生成r和h。所述dapp检查签名σa的有效性,以确保真实性。

所述基于零知识证明的智能合约认证数据隐私保护方法由5个步骤组成,详细说明如下。

a、系统设置:输入安全参数λ,利用零知识证明系统zkp的zkp.setup(1λ)获得公共参数pp。所述da选取安全的数字签名机制π=(keygen,sign,verify),生成公钥/私钥对(pka,ska);所述da为去中心化应用的用户du生成唯一的id,将(pp,pka)对外公布;所述da根据dapp所需的计算任务,构建电路c。

进一步地,所述零知识证明系统zkp=(setup,keygen,prove,verify),是但不局限于zk-snarks,zk-starks和bulletproofs。zkp.setup(1λ)用于初始化零知识证明系统的公共参数pp;zkp.keygen(pp,c)用于生成证明密钥对(pk,vk),其中证明密钥pk用于生成证明,验证密钥vk用于验证证明;用于生成证明π,证明计算结果r是由真实有效的数据计算所得;用于验证证明π以判断数据的真实有效性和计算结果r的正确性;所述零知识证明系统中使用相同电路的情况下,公共参数pp仅初始化一次,所述公共参数pp用于zkp.keygen(pp,c)生成密钥对,以及证明生成和验证的计算。

进一步地,所述da选取的安全数字签名机制п=(keygen,sign,verify),可以是但不局限于ecdsa和rsa。π.keygen(1λ)用于初始化签名算法,生成签名密钥对(pka,ska);π.sign(ska,data)用于对数据data进行签名,并产生签名σa;π.verify(pka,data,σa)用于对签名σa进行验签。

进一步地,所述dapp根据计算需求,构造算术等式;所述去中心化应用的用户du向所述基于智能合约的去中心化应用dapp证明其提供的数据满足等式关系。假设所述基于智能合约的去中心化应用dapp所需的计算任务为等式h=hash(<x1,x2,...,xn,r>|id|t),所述去中心化应用的用户du向所述基于智能合约的去中心化应用dapp证明自己知道h对应的哈希原象为x1,x2,...,xn、r、id、t,而不向所述基于智能合约的去中心化应用dapp泄露x1,x2,...,xn和r;相同的计算任务使用同一个电路,电路具有可重复性。

进一步地,所述电路c将所述du的私密输入公共参数向量和辅助数据作为电路输入,将所述基于智能合约的去中心化应用dapp所需的计算结果r和哈希值h作为电路输出,以证明所述基于智能合约的去中心化应用dapp所需的计算结果r确实是由所述可信数据认证机构da认证的数据和公共参数向量作为输入计算而来,如图1所示;所述电路c可以进行加、减、乘、除、比较和哈希电路的组合,实现更加复杂的算术电路。

b、密钥生成:可信密钥产生器将公共参数pp和电路c作为输入,运行零知识证明系统zkp的zkp.keygen(pp,c)算法,生成密钥对(pk,vk),其中证明密钥pk用于生成证明,验证密钥vk用于验证证明。

进一步地,所述零知识证明系统可以是但不局限于zk-snarks,zk-starks和bulletproofs;零知识证明系统中使用相同电路的情况下,公共参数pp和密钥对(pk,vk)仅初始化一次。

c、数据生成和认证:根据dapp的要求,所述du向所述da请求以获得其个人数据可信数据认证机构da将个人私密数据和签名私钥ska作为输入,运行算法,对数据进行签名认证并产生签名σa。根据dataauth算法,所述da将验证的真实性,并且将与所述du的id标识相关联。

进一步地,所述算法的具体步骤为:所述da利用所述du的身份id和当前时间t,将所述du的私密输入进行扩展;所述da将扩展的私密输入进行哈希运算,获得h=hash(x1,x2,...,xn,r|id|t);所述da基于私钥ska,运行π.sign(ska,h)算法,为扩展的私密输入的哈希值生成签名σa=π.sign(ska,hash(<x1,x2,...,xn,r>|id|t));所述哈希运算函数hash()可以是但不局限于sha256、sha3等哈希函数。

d、dapp服务请求:所述du检查dapp规则并从所述dapp获取公共输入所述du获取其私密的数据(用r扩展)和辅助输入以及所述dapp所需的计算结果r和哈希值h。所述du执行零知识证明系统的zkp的算法以获得证明π。所述du向所述dapp发送包含(π,r,h,σa)的服务请求。所述请求将以dapp地址的事务(tx)的形式发送到区块链上。

进一步地,所述计算结果r为所述dapp所需的计算结果,该数值通过所述du的私密输入结合所述dapp对外公布的公共相关系数计算得到。

e、dapp服务响应:接收到服务请求后,每个所述验证者v都运行dapp智能合约的相应功能,该功能调用算法。如果验证函数的输出为0,所述验证者v将丢弃此事务;验证函数的输出为1,所述验证者v用计算结果r执行dapp。执行dapp取决于验证者们的共识,因此只有当大多数验证者接受证明时,才能证明dapp验证的证明是有效的。

进一步地,所述算法的具体步骤为:所述验证者v将验证签名的公钥pka,哈希值h和签名σa,输入到签名验证算法π.verify(pka,h,σa)中,验证哈希值h的签名σa是否有效;如果无效,则输出0;如果有效,则继续利用零知识证明系统zkp的验证证明π是否正确,如果验证均通过,则证明计算结果r是正确的,否则证明计算结果r是错误的的。

进一步地,任何具有固定和简单计算电路的dapp都可以使用基于零知识证明技术的上述过程来执行,以保护du的隐私。从理论上讲,也可以实现有限循环的dapp。复杂的计算电路将导致证明者(即du)的成本增高。根据零知识证明技术,无论dapp计算功能有多复杂,验证者的计算成本都是固定的。

进一步地,由于所述电路将计算结果r作为输出,并且对每个用户都是公开的。为了隐藏明文输出r,可以使用类似的零知识证明算法为r产生证明而不公开r。同时,du还可以支付r金额作为保费,以保护输出和支付隐私。所述da可以构造对应于图3所示电路;所述du使用zkp.prove()算法产生对应相应的电路证明。注意,计算电路的输出将作为支付电路的输入,因此计算电路输出对其他输出是隐藏的。

进一步地,为防止恶意du使用他人的数据作为自己的数据。应该使用安全凭证方案来生成所述du的id,以区分所述du。所述du的id标识可以作为两个sha256电路的私密输入,如图4电路所示。第一个sha256电路输出h,它匹配先前的保险费用支付的证明。第二个sha256电路输出h',h'必须由保险索赔的da签名。

进一步地,所述基于零知识证明的智能合约认证数据隐私保护方法的系统框架可由三大模块组合实现,包括基于智能合约的去中心化应用dapp、零知识证明模块以及区块链系统。所述零知识证明模块可以是但不局限于zk-snarks,zk-starks和bulletproofs。所述dapp是在区块链上运行的智能合约。所述区块链可以是但不局限于以太坊ethereum。

术语解释:

零知识证明系统(zeroknowledgeproof,zkp);

事务(transaction,tx):类似于比特币中数字货币的转账交易,在本申请中称为事务(transaction);一个区块中包含多个事务,由矿工运行共识算法将区块添加到区块链上。

实施例一

为了更清楚地阐述本公开,一个具体实例是医疗保险计划,该方案需要借助医院认证的医疗报告才能注册报名。基于智能合约的去中心化应用dapp用户du是想要签署该计划的人,数据认证机构da是受信任的医院,验证者v是区块链维护者,dapp是去中心化的医疗保险智能合约,如图2所示。以以太坊和zk-snarks为例的医疗保险智能合约的认证数据隐私保护方案,如图5所示。以下通过该具体实例进行阐述:

a、系统设置:输入安全参数λ=80,运行zk-snarks.setup(1λ)以获得公共参数pp。选取ecdsa作为选取的安全数字签名机制。此外,da拥有一个签名机制的公钥/私钥对(pka,ska)=(0x6044c69f…,{0x225bf5a8…,0x5f18…,…})。du从da获得唯一的id=0x957a…=(149,122,…)。

b、密钥生成:根据dapp所需的计算任务,构建电路c,如图1、图3或图4所示。可信密钥产生器将公共参数pp和电路c作为输入,运行zk-snarks.keygen(pp,c)算法,输出用于证明生成的证明密钥pk={{(0x1c4d…,0x453c…),(0x2ab2…,0x4710…),…},{(0x42ae…,0x637b…),(0x9285…,0x2b4c…),…},{(0xc021…,0x375f…),(0x753c…,0x538a…),…},{(0x412a…,0x3409…),(0x832b…,0x4096…),…},{(0x2ef1…,0xab37…),(0x3cd6…,0x232c…),…}},以及用于证明验证的验证密钥vk={(0x973c…,0x2f99…),(0x6fed…,0x2bd3…),(0xca7a…,0x205a…),(0xf24f…,0x1c81…),(0x20c7…,0x2553…),(0x2bf8…,0x1cae…),(0xbaaa…,0x1086…),{(0xd445…,0x3030…),(0x10ab…,0x1c7e…),…}}。

c、数据生成和认证:根据基于智能合约的去中心化应用dapp的要求,假定个人数据的形式为(年龄、身高、体重、血压、心率、肺活量、随机数),则du将自己的个人数据进行打包,向da请求以获得其个人数据其中,du的个人隐私数据为:年龄36岁、身高177cm、体重65kg、血压(105mmhg,70mmhg)、心率75次、肺活量3800ml=(14,216)、随机数r=0x8cb48d1b…=(140,180,141,27,…);另外,du的身份id=0x957a…=(149,122,…)和当前时间t=20180901=(1,51,239,165)。da运行算法产生签名σa=0x96f3ba163366bfac687b…,该签名作用在du的身份id和当前时间t的哈希值上。根据dataauth算法,da将验证的真实性,并且将与所述du的id标识相关联。

d、dapp服务请求:du检查dapp规则并从dapp获取公共输入du获取其私密的数据(用r=(140,180,141,27,…)扩展)和辅助输入以及dapp所需的计算结果r=3244=10×36+2×177+7×65+8×(105+70)+9×70和哈希值du执行算法以获得证明π={(2057…,2644…),(3920…,1382…),(1519…,8915…),(9716…,1262…),(1832…,1834…),(1917…,1050…),(2052…,1082…),(1840…,5570…)}。du向dapp发送包含(π,r,h,σa)的服务请求。该请求将以dapp地址的事务(tx)的形式发送到区块链上。

e、dapp服务响应:接收到服务请求后,每个验证者v都运行dapp智能合约的相应功能,该功能调用算法。若验证函数的输出为1,则验证者v用计算结果r=3244执行dapp,通过支付电路扣除等量金额,如图3所示,同时为du提供相应的保险计划服务。

du注册dapp医疗保险并支付保费后,若后期发生理赔,则du需要证明身份以进行索赔。通过索赔计算电路将输出补偿金额r,该金额将通过支付电路支付给du,如图4所示。

以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1