本发明涉及区块链技术领域,尤其涉及一种零知识证明方法、装置及计算机可读存储介质。
背景技术:
零知识证明(zero—knowledgeproof),是由s.goldwasser、s.micali及c.rackoff在20世纪80年代初提出的。它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。零知识证明实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。
目前,零知识证明技术在涉及数据安全较为重要的领域的应用越来越多,所使用的证明协议也多种多样。其中,乘法证明协议(commitmentmultiplicationprotocol)用来证明一个加密数字是另外两个加密数字相乘后的加密乘积。现有乘法证明协议主要依赖多方安全计算,这些乘法证明协议不但计算过程非常复杂,计算量大,而且还会有多轮数据交互,总体效率非常差。而不依赖多方安全计算的乘法证明协议又会产生大量参数,从而导致耗费大量存储空间,实用性差。
因此,如何保证既提高乘法证明协议的计算效率,又能有效控制证明产生的数据大小,已经成为一个亟待解决的技术问题。
技术实现要素:
鉴于以上内容,本发明提供一种零知识证明方法、装置及计算机可读存储介质,其主要目的在于既提高乘法证明协议的计算效率,又能有效控制证明产生的数据大小。
为实现上述目的,本发明提供一种零知识证明方法,该方法包括:
由一个或多个可信第三方创建基点g、h、i,并上传至公共数据存储系统;
证明发起方根据所述基点创建加密乘积数据[ab]并设置对应的密钥z;
证明发起方根据所述基点创建乘法证明,在已知加密数据[a]和[b]但并不知道原始数据a和b的前提下证明所述加密乘积数据[ab]加密的数据是数据a和数据b的乘积;
任何第三方根据所述基点校验所述乘法证明。
可选地,所述基点g是预先设置的公共参数,所述基点h和i是根据所述基点g由一个可信第三方设置或多个可信第三方协同设置。
可选地,所述一个或多个可信第三方生成一个随机数α,并通过h=g^α,i=h^α=g^αα得到所述基点h与i。
可选地,在所述证明发起方根据所述基点创建加密乘积数据[ab]并设置对应的密钥z的步骤中:
证明发起方通过第一公式创建所述加密乘积数据[ab],并将所述密钥z设置为ay bx,其中,所述第一公式为[ab]=g^ab*h^(ay bx)=g^ab*h^z,x为加密数据a的密钥,y为加密数据b的密钥。
可选地,所述证明发起方根据所述基点创建乘法证明的步骤包括:
证明发起方使用xy作为私钥,it^xy作为公钥,创建所述乘法证明,其中:
所述公钥it^xy通过第二公式获得,所述第二公式为it^xy=e(i^xy,g);
证明发起方根据所述私钥xy对证明交易请求中的参数进行数字签名得到sig_xy,并将所述sig_xy作为所述乘法证明进行公开。
可选地,所述任何第三方根据所述基点校验所述乘法证明的步骤包括:
获取公开的所述sig_xy;
通过第三公式计算得出与所述sig_xy对应的公钥p_xy,其中,所述第三公式为p_xy=e([a],[b])/e([ab],g)=(gt^ab*ht^(ay bx)*it^xy)/(gt^ab*ht^(ay bx))=it^xy;
通过所述公钥p_xy检测所述sig_xy是否是与p_xy对应的私钥xy签署的;
若检测出所述sig_xy是所述私钥xy签署的,表示对所述乘法证明检验通过。
可选地,所述证明发起方根据所述基点创建乘法证明的步骤包括:
设置数据p=xy,并将所述数据p作为所述乘法证明进行公开。
可选地,所述任何第三方根据所述基点校验所述乘法证明的步骤包括:
获取公开的所述数据p;
通过第三公式计算出公钥p_xy,其中,所述第三公式为p_xy=e([a],[b])/e([ab],g)=(gt^ab*ht^(ay bx)*it^xy)/(gt^ab*ht^(ay bx))=it^xy;
通过第四公式检验所述乘法证明,其中,所述第四公式为p_xy==it^xy,若所述第四公式成立则表示对所述乘法证明检验通过。
此外,为实现上述目的,本发明还提供一种零知识证明装置,包括存储器、处理器,所述存储器上存储有可在所述处理器上运行的零知识证明系统,所述零知识证明系统被所述处理器执行时实现如上述的零知识证明方法的步骤。
进一步地,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有零知识证明系统,所述零知识证明系统可被至少一个处理器执行,以使所述至少一个处理器执行如上述的零知识证明方法的步骤。
本发明提出的零知识证明方法、装置及计算机可读存储介质,提供了一种新的不依赖多方安全计算的乘法证明的创建和检验方案,所创建的乘法证明只相当于一个数字签名sig_xy或可公开数字p的大小,且任何第三方通过简单公式计算即可检验所述乘法证明是否通过。这个证明协议不但计算效率高而且证明产生的数据很小,非常适用于区块链等公共数据存储和分布式数据库。
附图说明
图1为本发明零知识证明方法较佳实施例的流程图;
图2为本发明零知识证明装置较佳实施例的示意图;
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
本发明提供一种零知识证明方法。
参照图1所示,为本发明零知识证明方法较佳实施例的流程图。
在本发明零知识证明方法一实施例中,该方法支持任何证明发起方提出交易来证明一个对应加密乘积数据是另外两个对应已知加密数据的乘积,并支持任何第三方对所述证明进行检验,该方法包括步骤:
s1、由一个或多个可信第三方创建基点g、h、i,并上传至公共数据存储系统;
s2、证明发起方根据所述基点创建加密乘积数据[ab]并设置对应的密钥z;
s3、证明发起方根据所述基点创建乘法证明,在已知加密数据[a]和[b]但并不知道原始数据a和b的前提下证明所述加密乘积数据[ab]加密的数据是数据a和数据b的乘积。
s4、任何第三方根据所述基点校验所述乘法证明。
在对本发明方案进行说明之前,对用到的名词、符号、算法进行说明。
名词定义:
独立数据存储系统:指的是区块链网络、分布式数据库、云端服务器、分布式系统等第三方平台。
双线性映射:对于任意的g1∈g1;g2∈g2;a,b∈zp,均有e(g1^a,g2^b)=e(g1,g2)^ab成立。其中,e称为双线性映射。本发明不对g1和g2顺序进行限制,g1可以等于g2。为方便表述,以下描述都以e(g^a,g^b)=e(g,g)^ab来呈现。在本发明中e(g,g)^ab也可以用gt^ab来代表。
离散对数:已知有限循环群g=<g>{g^n|k=0,1,2,...},及其生成元g和阶n=|g|,在离散对数问题的运算中存在h=g^n,其中,g是基,由于离散对数问题的复杂性,很难在知道h和g的情况下计算出整数n的值。因此,本发明中涉及的运算环境为基于椭圆曲线上的运算,椭圆曲线中,基是一个点不是数。
佩德森承诺(pedersencommitment)加密算法:在离散对数问题的运算环境下,a为原文,x为密钥,对a加密后的密文[a]=g^a*h^x,其中,g与h各代表一个基,h=g^n。佩德森承诺算法具有加法同态特性并可以作为双线性映射公式中的参数(输入因子)。
加法同态加密算法:具有加法同态特性,即r和s是域,加密算法e:r→s具有加法同态特性,则如果存在有效算法⊕,使得e(x y)=e(x)⊕e(y)或者x y=d(e(x)⊕e(y))成立;且该加密算法加密后得到的值可以作为双线性映射中的参数(输入因子),即e(g1^a,g2^b)中的g1^a或g2^b。
符号定义:
[a]是对原文a加密后的密文,[b]是对原文b加密后的密文。本发明需要创建出密文[ab]并向第三方证明[ab]是a和b的乘积的加密密文。其中:
[a]=g^a*h^x;
[b]=g^b*h^y;
[ab]=g^ab*h^z;
x为加密数据a的密钥;y为加密数据b的密钥;z为加密数据ab的密钥。
优选地,所述公共数据存储系统可以是云端存储也可以是区块链网络。所述公共数据存储系统主要用于存储公共参数(所述基点),也可以存储所述加密乘积数据、已知加密数据和与乘法证明协议有关的参数等。当证明发起方提出交易来证明一个对应加密乘积数据是另外两个对应已知加密数据的乘积后,任何第三方可以根据所述公共参数、对应加密乘积数据、对应已知加密数据和与乘法证明协议有关的参数来判定对应加密乘积数据是否是两个对应已知加密数据的乘积。
在步骤s1中,由一个可信第三方创建所述基点g,h,i,或由多个可信第三方一起创建所述基点g,h,i。其中,g是公共参数,h和i是一个可信第三方设置或多个可信第三方自己的平台通过网络(如互联网、区块链网络)协同设置并上传至所述公共数据存储系统中的。
具体地,可信第三方生成一个随机数α,并基于预先设置的基点g,通过h=g^α,i=h^α=g^αα得到基点h与i。
在步骤s2中,证明发起方通过第一公式创建密文[ab],并将其密钥z设置为ay bx。
其中,所述第一公式为:
[ab]=g^ab*h^(ay bx)
=g^ab*h^z
x为加密数据a的密钥;y为加密数据b的密钥。
例如,数据a为货物单价,数据b为货物数量,数据ab为发票金额(发票金额=货物单价*货物数量)。
在步骤s3中,证明发起方使用xy(代表上述x和y的乘积)作为私钥,it^xy作为公钥,创建所述乘法证明。
所述公钥it^xy可以通过第二公式获得,也可以根据基点i直接生成。用所述私钥xy对该证明交易请求有关参数(具体什么参数在本实施例中不做限制)进行数字签名得到sig_xy,并公开sig_xy。所述公开的sig_xy就是所述乘法证明。
其中,所述第二公式为:
it^xy=e(i^xy,g)
在步骤s4中,任何第三方可以通过以下方式校验所述乘法证明:
(1)获取公开的sig_xy。
(2)通过第三公式计算得出与sig_xy对应的公钥p_xy。
其中,所述第三公式为:
p_xy=e([a],[b])/e([ab],g)
=(gt^ab*ht^(ay bx)*it^xy)/(gt^ab*ht^(ay bx))
=it^xy
(3)通过p_xy检测sig_xy是否是与p_xy对应的私钥xy签署的。
在本实施例中,通过传统对数字签名验证的方式来检测sig_xy是否是与p_xy对应的私钥xy签署的,具体方式在此不再赘述。
(4)若检测出sig_xy是与p_xy对应的私钥xy签署的,代表[ab]加密的数据是数据a和数据b的乘积,即对所述乘法证明检验通过。
例如,[ab]加密的数据ab为发票金额,数据a为货物单价,数据b为货物数量,当检验出[ab]加密的数据是数据a和数据b的乘积时,即发票金额=货物单价*货物数量,银行可以验证发票真实性。
上述校验方案的原理为:如果证明发起方不知道xy,或者选择了非xy的值z为私钥,那么因为离散对数问题,证明发起方不知道基点h和基点i的对应关系,就无法创建出加密份额ab对应的秘钥“?”(g^ab*h^?);也同样无法创建出任何其他加密份额c(任意值)对应的秘钥“?”(g^c*h^?);更无法创建出对加密份额ab的rangeproof(范围证明)。
可选地,在步骤s3中,还可以设置数据p=xy,并公开p。所述公开的p就是所述乘法证明。
在步骤s4中,任何第三方可以通过以下方式校验所述乘法证明:
(1)获取公开的p。
(2)通过所述第三公式计算出p_xy。
(3)通过第四公式检验所述乘法证明。
其中,所述第四公式为:
p_xy==it^xy
若所述第四公式成立则检验通过。
该方案相对于上一方案所产生的数据更小,所需要的存储空间更小。
本发明实施例提出了一种新的不依赖多方安全计算的乘法证明的创建和检验方案,所创建的乘法证明只相当于一个数字签名sig_xy或可公开数字p的大小,且任何第三方通过简单公式计算即可检验所述乘法证明是否通过。这个证明协议不但计算效率高而且证明产生的数据很小,非常适用于区块链等公共数据存储和分布式数据库。
本发明还提出一种零知识证明装置。参照图2所示,为本发明零知识证明装置较佳实施例的示意图。
在本实施例中,零知识证明装置1适用于上述零知识证明方法,该零知识证明装置1包括:存储器11、处理器12及网络接口13。
其中,存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、磁性存储器、磁盘、光盘等。存储器11在一些实施例中可以是所述零知识证明装置1的内部存储单元,例如该零知识证明装置1的硬盘。存储器11在另一些实施例中也可以是所述零知识证明装置1的外部存储设备,例如该零知识证明装置1上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,存储器11还可以既包括该零知识证明装置1的内部存储单元也包括外部存储设备。
存储器11不仅可以用于存储安装于该零知识证明装置1的应用软件及各类数据,例如,与所述零知识证明方法对应的零知识证明系统10的程序代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
处理器12在一些实施例中可以是一中央处理器(centralprocessingunit,cpu)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器11中存储的程序代码或处理数据,例如,与所述零知识证明方法对应的零知识证明系统10的程序代码等。
网络接口13可选的可以包括标准的有线接口、无线接口(如wi-fi接口),通常用于在该零知识证明装置1与其他电子设备之间建立通信连接。零知识证明装置1的组件11-13通过通信总线相互通信。
图2仅示出了具有组件11-13的零知识证明装置1,本领域技术人员可以理解的是,图2示出的结构并不构成对零知识证明装置1的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
本发明之零知识证明装置的具体实施方式与上述零知识证明方法的具体实施方式大致相同,在此不再赘述。
此外,本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质中包括与所述零知识证明方法对应的零知识证明系统10的程序代码,所述与所述零知识证明方法对应的零知识证明系统10的程序代码被处理器执行时实现如所述零知识证明方法的步骤。
本发明之计算机可读存储介质的具体实施方式与上述零知识证明方法的具体实施方式大致相同,在此不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本发明的专利保护范围内。
1.一种零知识证明方法,其特征在于,该方法包括:
由一个或多个可信第三方创建基点g、h、i,并上传至公共数据存储系统;
证明发起方根据所述基点创建加密乘积数据[ab]并设置对应的密钥z;
证明发起方根据所述基点创建乘法证明,在已知加密数据[a]和[b]但并不知道原始数据a和b的前提下证明所述加密乘积数据[ab]加密的数据是数据a和数据b的乘积;
任何第三方根据所述基点校验所述乘法证明。
2.根据权利要求1所述的零知识证明方法,其特征在于,所述基点g是预先设置的公共参数,所述基点h和i是根据所述基点g由一个可信第三方设置或多个可信第三方协同设置。
3.根据权利要求2所述的零知识证明方法,其特征在于,所述一个或多个可信第三方生成一个随机数α,并通过h=g^α,i=h^α=g^αα得到所述基点h与i。
4.根据权利要求1所述的零知识证明方法,其特征在于,在所述证明发起方根据所述基点创建加密乘积数据[ab]并设置对应的密钥z的步骤中:
证明发起方通过第一公式创建所述加密乘积数据[ab],并将所述密钥z设置为ay bx,其中,所述第一公式为[ab]=g^ab*h^(ay bx)=g^ab*h^z,x为加密数据a的密钥,y为加密数据b的密钥。
5.根据权利要求4所述的零知识证明方法,其特征在于,所述证明发起方根据所述基点创建乘法证明的步骤包括:
证明发起方使用xy作为私钥,it^xy作为公钥,创建所述乘法证明,其中:
所述公钥it^xy通过第二公式获得,所述第二公式为it^xy=e(i^xy,g);
证明发起方根据所述私钥xy对证明交易请求中的参数进行数字签名得到sig_xy,并将所述sig_xy作为所述乘法证明进行公开。
6.根据权利要求5所述的零知识证明方法,其特征在于,所述任何第三方根据所述基点校验所述乘法证明的步骤包括:
获取公开的所述sig_xy;
通过第三公式计算得出与所述sig_xy对应的公钥p_xy,其中,所述第三公式为p_xy=e([a],[b])/e([ab],g)=(gt^ab*ht^(ay bx)*it^xy)/(gt^ab*ht^(ay bx))=it^xy;
通过所述公钥p_xy检测所述sig_xy是否是与p_xy对应的私钥xy签署的;
若检测出所述sig_xy是所述私钥xy签署的,表示对所述乘法证明检验通过。
7.根据权利要求4所述的零知识证明方法,其特征在于,所述证明发起方根据所述基点创建乘法证明的步骤包括:
设置数据p=xy,并将所述数据p作为所述乘法证明进行公开。
8.根据权利要求7所述的零知识证明方法,其特征在于,所述任何第三方根据所述基点校验所述乘法证明的步骤包括:
获取公开的所述数据p;
通过第三公式计算出公钥p_xy,其中,所述第三公式为p_xy=e([a],[b])/e([ab],g)=(gt^ab*ht^(ay bx)*it^xy)/(gt^ab*ht^(ay bx))=it^xy;
通过第四公式检验所述乘法证明,其中,所述第四公式为p_xy==it^xy,若所述第四公式成立则表示对所述乘法证明检验通过。
9.一种零知识证明装置,其特征在于,所述装置包括存储器、处理器,所述存储器上存储有可在所述处理器上运行的零知识证明系统,所述零知识证明系统被所述处理器执行时实现如权利要求1-8中任一项所述的零知识证明方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有零知识证明系统,所述零知识证明系统可被至少一个处理器执行,以使所述至少一个处理器执行如权利要求1-8中任一项所述的零知识证明方法的步骤。
技术总结