随笔:zk-AuthFeed How to Feed Authenticated Data into Smart Contract with Zero Knowledge理解
Posted dc-lin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了随笔:zk-AuthFeed How to Feed Authenticated Data into Smart Contract with Zero Knowledge理解相关的知识,希望对你有一定的参考价值。
1. 论文的背景是:
当区块链技术应用于现实生活中的系统时,智能合约可能需要接收敏感数据来执行其代码。例如,分布式的医疗保险智能合同需要访问个人健康数据。因此,保证发送给智能合约的数据的隐私性和真实性至关重要,这样每个人都可以在不泄露敏感数据的情况下验证数据信息。
2. 论文的大致框架是:
提出使用zk-AuthFeed来确保提供给智能合约的数据真实性和隐私性,并且不会将输入数据透露给任何人。 zk-AuthFeed是基于zk-DASNARK方法的,这是一个将zk-SNARK技术和数字签名相集成的组件,可以有效地实现目标。
论文后半部分分析了zk-AuthFeed的安全性和性能,并提供增强功能以改善其隐私。并在以太坊上实现zk-AuthFeed的实验,以验证论文设计的可行性并评估其性能。
区块链和智能合约中隐私保护的两个重点:数据真实性和数据隐私性
3. 接下来描述下什么是zk-SNARK:
zk-SNARK是用于为输入和输出之间的关系提供零知识证明,可用于加密货币或可验证的计算的隐私保护。例如,在不公开输入/输出值的情况下,验证输入值的总和等于交易中输出值的总和。
4. 然后zk-DASNARK由5部分组成:
第一个是设置步骤主要是生成之后使用的参数pp。
第二个是生成秘钥的步骤,该秘钥是用于后序对证明的加解密,类似于私钥签名公钥验证。
第三个是数据认证方对用户数据进行验证和签名。
第四个用户用自己的私人数据x和公共数据c和a来计算结果R和哈希值,并用证明秘钥pk生成证明。图2就是用户利用一个计算电路将三个数据输入生成数据。
最后一个是认证者对证明人发来的消息进行验证。
5. 之后就是论文最为主要的zk-AuthFeed系统,它由四个参与方组成:
•数据验证器(DA)。数据验证器是一个独立且受信任的数据源,它生成真实数据,并使用其私钥ska为DApp的用户签名数据。DA知道用户的数据,但它永远不会将数据透露给任何人(这里有点类似第三方,我认为应该还是会存在第三方信任问题)。每个用户都可以使用相应的公共密钥pka验证签名的数据。
•DApp用户(DU)。 DApp用户想要访问DApp提供的分布式服务,这需要输入他/她的私人真实数据。
•验证者(Validators)。验证者是验证提交到区块链系统的交易的区块链维护者(矿工)。他们运行共识算法来生成一个包含已验证交易的新区块。
•分布式应用程序(DApp)。 DApp在区块链上以智能合约的形式提供服务。例如,一种分布式医疗保险计划。
一个具体的例子是医疗保险方案,该方案需要经过身份验证的医疗报告才能签署。然后DU是要签署该计划的人,数据身份验证者是一家受信任的医院,验证者是区块链维护者,而DApp是一种去中心化的医疗保险智能合约。
图1 zk-AuthFeed系统模型
(注:DApp User(DU)是证明者,而Validators是验证者。 DU向DApp(智能合约)发送服务请求,其中包含计算结果R(DApp要求),DU私人输入的哈希h,证明π和签名σa。该请求由验证者验证。)
图2 算术电路
在zk-AuthFeed中,我们采用三个向量作为输入:一个是DApp用户的私有数据向量x =(x1,x2,...,xn,r),第二个是用于计算DApp的公共参数向量c =(c1,c2,...,ch),第三个是元数据的公共向量a =(ID,T),其中ID,T和r是DU的身份,时间信息和随机数。 随机数r用于屏蔽用户输入。
zk-AuthFeed为图2所示的zk-DASNARK电路生成zk-SNARK证明π。然后DU向DApp发送以下值进行验证:证明π,向量c和a,计算结果R,哈希值h和DA在h上的数字签名σa。 DApp可以验证R确实是从某些x计算而来的,而h确实是通过将x和m哈希在一起而得出的。 此外,DApp针对h检查签名σa的有效性,以确保x真实可信。关键点是zk-AuthFeed电路可确保相同的x被用来生成R和h(即R和h是靠x唯一生成的)。如果h已由DA签名保证了h的真实性,则计算结果R也是由真实数据x获得的。
6. zk-AuthFeed系统也包含五个步骤:
1.(系统设置程序)System Setup。输入安全参数λ后,将执行zk-DASNARK.S-
etup(1λ)以获取公共参数pp。zk-AuthFeed中的DA在zk-DASNARK中扮演DA的角色。它拥有一个密钥对(pka,ska)。 DU扮演证明人P的角色,并从数据认证方DA获得唯一的ID。
2.(密钥生成)Key Generation。根据DApp所需的计算任务,构造电路C。然后将公共参数pp和电路C作为输入,一个受信任的生成器运行zk-DASNARK.KeyGen(pp,C)以输出证明密钥pk和验证密钥vk,以进行证明生成和证明验证。或者,可以使用多方计算协议来生成密钥对[21]。
3.(数据生成和身份验证)Data Generation and Authentication。根据DApp的要求,DU允许DA获得数据私人数据x(DU approaches DA to obtain data x)。然后,DA运行zk-DASNARK.DataAuth(ska,x)为哈希值h生成一个签名σa,该签名是根据x,ID,T和r的哈希值计算得出的。根据zk-DASNARK.DataAuth的规范,DA首先将验证x的真实性(x与ID标识的DU用户关联),再对哈希值进行签名。
4. (DApp服务请求)DApp Service Request。 DU检查DApp规范并从DApp获取公共输入c。 DU提取其私人数据x(以r扩展)和辅助输入a = {ID,T}。然后执行zk DASNARK.Prove(pk,x,c,a)以获得π(pk加密,vk解密)以及DApp所需的计算结果R和哈希值h。最后,DU向DApp发送包含(π,R,h,σa)的服务请求。该请求将以交易形式发送到区块链上DApp的地址。
5. (DApp服务响应)DApp Service Response。验证器收到请求后,每个验证器都会运行DApp智能合约的相应功能,该智能合约独立执行zk-DASNARK.Verify(vk,pka,π,c,a,R,h,σa)。如果验证功能的输出为0,则验证程序将放弃该交易;否则,验证者将使用计算结果R执行DApp。DApp的执行取决于验证者的共识,因此,只有大多数验证者接受证明,DApp才能接受该证明。
以上就是zk-AuthFeed系统的总体思想。
7. 之后论文还对其中的一些细节进行了考虑并对其进行改进:
A.(保护输出隐私)Preserve Output Privacy
论文提出的zk-AuthFeed可以使用zk-DASNARK证明来保护DU输入的隐私。但是,该方案仍会泄漏有关输出的信息。当zk AuthFeed被医疗保险DApp使用时,输入将是包含多个数字数据的签名医疗检查报告:年龄,体重,身高,血压等。DApp的计算函数F是被保险DApp用于计算作为输出的保险费的公式,以便DU可以支付保险费以签署保险计划。但是,我们当前的zk-AuthFeed无法保护输出,并且它对所有人都是公开的。尽管此类信息不会直接泄漏个人隐私,但是仍然不希望将其发布在区块链上。
为了向公众隐藏输出,可以使用类似的zk-SNARK证明在不公开输出的情况下产生证明。有了相同的证明,DU也可以将输出的金额作为保险费支付。随着Zerocash [4]使用特殊的zk-SNARK证明实现匿名支付,我们的zk-SNARK证明可以与Zerocash zk SNARK证明集成在一起,从而实现输出隐私和付款隐私。为此,证明算法需要产生对应于图3所示电路的证明。注意,计算电路的输出R被馈送到支付电路,因此该输出对其他电路是隐藏的。付款承诺本质上是从DU到DApp的付款,可以由另一个zk-SNARK证明(如Zerocash)花费。
图3
B. (保留身份隐私)Preserve Identity Privacy
如图3所示,DU的身份ID和时间T在区块链上发布,每个人都可以访问(对于公共区块链)。 DU由zk-AuthFeed中的唯一ID标识,因此DU与他/她的数据相关联。这是为了防止恶意DU使用他人的数据作为自己的数据。因此,应使用安全的凭证方案来生成DU的ID,我们协议中的所有患者都可以识别该ID。当DU第二次与DApp交互时,DU需要显示其身份,以便DApp可以识别他/她。例如,在DU已签署医疗保险DApp并支付了保险费之后,DU需要显示其身份才能提出索赔。在此过程中,将公开身份信息,因此对手知道是DU谁,何时以及DU与DApp交互的内容。
为了解决这个问题,一个直接的解决方案是使用匿名凭证方案,例如[22]。但这会使整个系统过于复杂,因此我们提出了以下基于zk-SNARK的解决方案。可以将DU的身份用作两个SHA256电路的专用输入,如图4所示。第一个哈希电路输出h,该h与先前的zk-SNARK保险付款证明相匹配。第二个哈希电路输出h,必须由数据认证者签名才能进行保险索赔。在医疗保险案件中,受信任的医院充当数据验证者,并在DU的医疗费用数据上提供签名。索赔计算电路将输出补偿金额R,该补偿金额将通过支付电路支付给DU。
图4
以上是关于随笔:zk-AuthFeed How to Feed Authenticated Data into Smart Contract with Zero Knowledge理解的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode Best Time to Buy and Sell Stock with Transaction Fee
[动态规划]714 Best Time to Buy and Sell Stock with Transaction Fee
[leetcode] 714. Best Time to Buy and Sell Stock with Transaction Fee
算法: 买卖股票并且有手续费714. Best Time to Buy and Sell Stock with Transaction Fee
算法: 使用交易费买卖股票的最佳时机714. Best Time to Buy and Sell Stock with Transaction Fee