随笔: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 UserDU)是证明者,而Validators是验证者。 DUDApp(智能合约)发送服务请求,其中包含计算结果RDApp要求),DU私人输入的哈希h,证明π和签名σa。该请求由验证者验证。)

技术图片

 图2 算术电路

 

  在zk-AuthFeed中,我们采用三个向量作为输入:一个是DApp用户的私有数据向量x =x1x2...xnr),第二个是用于计算DApp的公共参数向量c =c1c2...ch),第三个是元数据的公共向量a =IDT),其中IDTrDU的身份,时间信息和随机数。 随机数r用于屏蔽用户输入。

 

  zk-AuthFeed为图2所示的zk-DASNARK电路生成zk-SNARK证明π。然后DUDApp发送以下值进行验证:证明π,向量ca,计算结果R,哈希值hDAh上的数字签名σaDApp可以验证R确实是从某些x计算而来的,而h确实是通过将xm哈希在一起而得出的。 此外,DApp针对h检查签名σa的有效性,以确保x真实可信。关键zk-AuthFeed电路可确保相同的x被用来生成RhRh是靠x唯一生成的。如果h已由DA签名保证了h的真实性,则计算结果R也是由真实数据x获得

 

 

6. zk-AuthFeed系统也包含五个步骤:

  1.(系统设置程)System Setup输入安全参数λ后,将执行zk-DASNARK.S-

etup(1λ)以获取公共参数ppzk-AuthFeed中的DAzk-DASNARK中扮演DA的角色。它拥有一个密钥对(pkaska)。 DU扮演证明人P的角色,并从数据认证方DA获得唯一的ID

   2.(密钥生成)Key Generation。根据DApp所需的计算任务,构造电路C。然后将公共参数pp和电路C作为输入,一个受信任的生成器运行zk-DASNARK.KeyGenppC)以输出证明密钥pk和验证密钥vk,以进行证明生成和证明验证。或者,可以使用多方计算协议来生成密钥对[21]

  3.(数据生成和身份验证)Data Generation and Authentication。根据DApp的要求,DU允许DA获得数据私人数据xDU approaches DA to obtain data x然后,DA运行zk-DASNARK.DataAuthskax为哈希值h生成一个签名σa,该签名是根据xIDTr的哈希值计算得出的。根据zk-DASNARK.DataAuth的规范,DA首先将验证x的真实性xID标识的DU用户关联),再对哈希值进行签名

  4. (DApp服务请求)DApp Service Request DU检查DApp规范并从DApp获取公共输入cDU提取其私人数据x(以r扩展)和辅助输入a = {IDT}。然后执行zk DASNARK.Provepkxca)以获得πpk加密,vk解密以及DApp所需的计算结果R和哈希值h。最后,DUDApp发送包含(πRhσa)的服务请求。该请求将以交易形式发送到区块链上DApp的地址。

  5. (DApp服务响应)DApp Service Response。验证器收到请求后,每个验证器都会运行DApp智能合约的相应功能,该智能合约独立执行zk-DASNARK.VerifyvkpkaπcaRhσa)。如果验证功能的输出为0,则验证程序将放弃该交易;否则,验证者将使用计算结果R执行DAppDApp的执行取决于验证者的共识,因此,只有大多数验证者接受证明,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被馈送到支付电路,因此该输出对其他电路是隐藏的。付款承诺本质上是从DUDApp的付款,可以由另一个zk-SNARK证明(如Zerocash)花费。

技术图片

3

  B. (保留身份隐私)Preserve Identity Privacy

  如图3所示,DU的身份ID和时间T在区块链上发布,每个人都可以访问(对于公共区块链)。 DUzk-AuthFeed中的唯一ID标识,因此DU与他/她的数据相关联。这是为了防止恶意DU使用他人的数据作为自己的数据。因此,应使用安全的凭证方案来生成DUID,我们协议中的所有患者都可以识别该ID。当DU第二次与DApp交互时,DU需要显示其身份,以便DApp可以识别他/她。例如,在DU已签署医疗保险DApp并支付了保险费之后,DU需要显示其身份才能提出索赔。在此过程中,将公开身份信息,因此对手知道DU谁,何时以及DUDApp交互的内容。

  为了解决这个问题,一个直接的解决方案是使用匿名凭证方案,例如[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

java BigDecimal add 等方法遇到的问题