一种基于超级账本fabric的零知识身份认证方法
技术领域
1.本发明提供一种基于超级账本fabric的零知识身份认证方法,属于区块链技术领域。
背景技术:2.当前互联网的技术日新月异,正处于快速发展阶段,web3.0网络的提出让互联网达到了一个全新发展的水平,而区块链技术的快速发展,更使得web3.0网络的实现成为可能。web3.0网络是去中心化的网络,在这种网络体系中,我们需要拥有统一的身份认证系统,每个人的身份信息由自己掌握。在传统的身份认证技术中,个人信息常常存储在可信的第三方机构中,并非由个人掌握。因此将区块链技术的不可篡改性和零知识证明技术的零信息传递特性进行结合对信息安全保障具有重大意义。
3.当前环境下的身份认证大多都通过第三方认证中心数字签名、数字证书的颁发,一旦这些第三方平台被攻击,很有可能导致个人信息的篡改及泄露,而零知识证明能够很好的对身份信息进行隐藏,区块链技术又使得相关信息不可被篡改,这就大大提升了信息的安全性。因此将区块链技术与和零知识证明结合起来有非常重要的研究意义。
4.fabric是linux基金会推出的超级账本项目(hyperledger)中的一个子项目,是目前应用最广泛的联盟区块链平台,对fabric平台的改进具有广阔的应用前景。零知识证明技术允许一方(证明者)向另一方(验证者)证明陈述是真实的,而不会泄露超出陈述本身有效性的任何信息,所以零知识证明能够很好的将信息进行加密隐藏。zk-snark是简洁非交互式的零知识论证,是零知识证明协议的一种,相较于其他零知识协议,该协议生成的证明文件小,验证速度快,适用于身份验证方向的应用。
5.本发明将fabric区块链平台与zk-snark技术进行了结合。尽管fabric区块链本身自带了identitymix用户身份匿名的零知识证明技术,但无法运用在身份验证上,结合zk-snark零知识证明,可将用户证明信息存储在fabric中,便于网站对用户进行身份验证。因此,为面向web3.0网络环境,本发明提出一种基于超级账本fabric的零知识身份认证方法,旨在设计一款统一的身份认证平台。该方法利用区块链技术,使得上链数据信息难以攻击且不被篡改,又通过零知识证明技术将用户的身份证明信息进行隐藏,使得信息的安全性大大提高。
技术实现要素:6.鉴于现有技术中的上述缺陷或不足,本发明提供一种基于超级账本fabric的零知识身份认证方法。该方法将zk-snark零知识证明技术与fabric区块链技术结合,达到了在网站平台进行身份认证的同时,用户信息既防篡改又难以泄露的能力。
7.本发明的技术方案是:一种基于超级账本fabric的零知识身份认证方法,包括如下:
8.step1.将zk-snark零知识证明技术与fabric客户端连接,定义用户的证明信息;
9.step2.在fabric链码api(fabric-chaincode-go)上增加接口,用于存储用户的证明信息,以及检验证明信息上链的合法性;
10.step3.最后在客户端(fabric-sdk-node)上增加了网站的调用接口,用于进行访问控制、用户的身份验证。
11.作为本发明的方案,所述step1中的具体步骤如下:
12.step1.1.定义新的多项式自动生成命令接口,用于用户的可信设置,通过接口自动生成多项式、公共输入和私有输入;
13.step1.2.定义电路编译compilecircuit命令接口,自动编译上述生成的多项式文件,用以生成多项式约束;
14.step1.3.定义可信设置trustedsetup命令接口,用以生成可信设置文件,是验证用户的证明信息之一;
15.step1.4.定义证明生成器generateproofs命令接口,用以生成proof文件,是验证用户的证明信息之一;
16.进一步地,step2中:在fabric链码api(fabric-chaincode-go)上增加接口,用于存储用户的证明信息,以及检验证明信息上链的合法性。
17.为存储zk-sanrk生成的证明信息,需要在链码的设计上进行调整,在保证证明信息能够根据链码上链的同时,还需确定证明信息文件具有合法性,且客户端可以获取文件上传的结果。
18.进一步地,step3中,在客户端(fabric-sdk-node)上增加了网站的调用接口,用于进行访问控制、用户的身份验证,具体步骤如下:
19.step3.1.定义权限访问接口,用以根据用户和网站不同角色的访问给予不同的权限。用户访问时,可以进行注册并只能查看自己的证明信息;网站访问时,不可注册,不可直接查看证明信息,在查看用户证明信息时需要用户的访问权限;
20.step3.2.定义新的身份验证verify命令接口,通过查询step1中生成的证明信息,完成对用户身份的验证。
21.本发明的有益效果是:本发明能够实现在面向web3.0网络环境下,通过零知识证明和fabric区块链技术的结合,在网站平台上进行统一身份验证的同时,用户信息既防篡改又不被泄露的目的。
附图说明
22.图1为zk-snark中groth16协议运行流程;
23.图2为用户注册流程图;
24.图3为用户注册证明信息示意图;
25.图4为网站调用及验证流程图;
26.图5为网站验证用户信息示意图;
27.图6为本发明的流程图。
具体实施方案
28.实施例1:如图1-图6所示,一种基于超级账本fabric的零知识身份认证方法,包括
如下:
29.step1.将zk-snark零知识证明技术与fabric客户端连接,定义用户的证明信息;
30.step2.在fabric链码api(fabric-chaincode-go)上增加接口,用于存储用户的证明信息,以及检验证明信息上链的合法性;
31.step3.最后在客户端(fabric-sdk-node)上增加了网站的调用接口,用于进行访问控制、用户的身份验证。
32.作为本发明的方案,所述step1中的具体步骤如下:
33.step1.1.定义新的多项式自动生成命令接口,用于用户的可信设置,通过接口自动生成多项式、公共输入和私有输入;
34.step1.2.定义电路编译compilecircuit命令接口,自动编译上述生成的多项式文件,用以生成多项式约束;
35.step1.3.定义可信设置trustedsetup命令接口,用以生成可信设置文件,是验证用户的证明信息之一;
36.step1.4.定义证明生成器generateproofs命令接口,用以生成proof文件,是验证用户的证明信息之一;
37.根据zk-snark中groth16协议,协议流程如图1所示,再结合用户注册阶段流程如图2所示,用户需在上链前在本地计算机使用下列接口生成自己的身份证明信息,如图3所示。
38.用户首先要输入主输入和附属输入存入客户端,compilecircuit阶段生成门电路模板,起约束输入作用,这是由用户和客户端共同生成的,使得电路模板具有随机性,不易被破解,且在这一阶段将主输入、附属输入和电路模板组合为见证;trustedsetup阶段根据上一阶段编译的电路模板,生成证明密钥及验证密钥;generateproofs阶段通过compilecircuit阶段生成的见证和trustedsetup阶段生成的证明密钥生成证明文件。
39.进一步地,step2中:在fabric链码api(fabric-chaincode-go)上增加接口,用于存储用户的证明信息,以及检验证明信息上链的合法性。
40.为存储zk-snark生成的证明信息,需要在链码的设计上进行调整,在保证证明信息能够根据链码上链的同时,还需确定证明信息文件具有合法性,且客户端可以获取文件上传的结果。
41.表1为定义的链码内容结构
[0042][0043][0044]
进一步地,step3中,在客户端(fabric-sdk-node)上增加了网站的调用接口,用于进行访问控制、用户的身份验证,具体步骤如下:
[0045]
step3.1.定义权限访问接口,用以根据用户和网站不同角色的访问给予不同的权限。用户访问时,可以进行注册并只能查看自己的证明信息;网站访问时,不可注册,不可直接查看证明信息,在查看用户证明信息时需要用户的访问权限;
[0046]
step3.2.定义新的身份验证verify命令接口,通过查询step1中生成的证明信息,完成对用户身份的验证。
[0047]
根据网站调用阶段,如图4所示,在用户访问网站,网站需对用户身份进行验证。网站管理员通过客户端进入fabric区块链,使用用户id对链上的信息进行查看及调用,这一阶段需要用户给予网站访问权限。网站管理员调用用户的证明信息,并通过客户端verify命令接口进行验证,若为真,则允许访问,如图5所示;若为假,则拒绝访问。
[0048]
这样在面向web3.0网络环境时,任一网站均可对用户进行统一验证,既可保证用户证明信息不可篡改,又可保证查看证明信息时不泄露用户身份。
[0049]
上面结合附图对本发明的具体实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。