零知识证明学习(五)— zkSNARKs(构造多项式)

zkSNARK-密码学基础

本节接着上一节继续讲

零知识

因为验证者可能从证明者发送的信息抽取关于多项式 p ( x ) p(x) p(x)的更多信息,让我们考虑证明者提供的信息: g p , g p ′ , g h g^p,g^{p'},g^h gp,gp,gh。主要做的验证: g p = ( g h ) t ( s ) , ( g p ) α = g p ′ g^p = (g^h)^{t(s)},(g^p)^{\alpha}=g^{p'} gp=(gh)t(s),(gp)α=gp。这个问题是我们怎么进行有效的验证,信息还不被抽取呢?一个问答是:我们使用一个随机数 δ \delta δ偏移这些值,例如: ( g p ) δ (g^p)^{\delta} (gp)δ。现在,为了抽取这个知识,需要找到这个随机数,然而这是不可能。我们展示一下详细的偏移过程,证明者抽取随机数 δ \delta δ,并做为证明值的幂次: ( g p ( s ) ) δ , ( g h ( s ) ) δ , ( g α p ( s ) ) δ (g^{p(s)})^{\delta},(g^{h(s)})^{\delta},(g^{\alpha p(s)})^{\delta} (gp(s))δ,(gh(s))δ,(gαp(s))δ,发送给验证者核验: ( g p ) δ = ( ( g h ) δ ) t ( s ) , ( ( g p ) δ ) a l p h a = ( g p ′ ) δ (g^p)^{\delta}=((g^h)^{\delta})^{t(s)},((g^p)^{\delta})^{alpha}=(g^{p'})^{\delta} (gp)δ=((gh)δ)t(s),((gp)δ)alpha=(gp)δ

非交互性

从上述方案来看,我们设计的是一个交互式零知识证明方案。为什么是这种情况呢?因为证明只对原始的验证者有效,没有人(其他验证者)可以信任相同的证明,因为:

  • 验证者可能与证明者勾结,揭露那些允许伪造证明的秘密参数 s , α s,\alpha s,α
  • 验证者自己也可以出于同样的原因生成假证明
  • 验证者一定要存储 α , t ( s ) \alpha ,t(s) α,t(s),直到相关证明被验证,这就使得额外的攻击可能会泄露秘密参数

因此,为了证明一个陈述(在这种情况下是多项式的知识),需要与每个验证者进行单独的交互。而交互式证明系统也有它的用例,例如当一个证明者只想说服一个专门的验证者,这样证明就不能被重复用来向其他人证明相同的陈述,当一个人需要同时(例如,在像区块链这样的分布式系统中)或永久地说服许多人时,它是非常低效的。证明者将被要求一直保持在线,并对每个验证程序执行相同的计算。因此,我们需要秘密参数是可重用的,公开的,值得信任的和不可滥用的。我们需要如何安全的保护产生的参数 ( t ( s ) , α ) (t(s), \alpha) (t(s),α),我们可以用验证者在发送给证明者之前加密 s s s的相同方式加密它们。然而,我们使用的同态加密不支持两个加密值的相乘,这对于 t ( s ) t(s) t(s) h h h的加密相乘以及 p p p α α α的加密相乘的验证检查都是必需的,因此,引出下述方法。

加密值乘法(Multiplication of Encrypted Values)

密码配对(双线性映射)是一种数学结构,表示为一个函数 e ( g ∗ , g ∗ ) e(g^*,g^*) e(g,g),考虑到两个加密的输入(例如: g a , g b g^a,g^b ga,gb)从一组数据允许它们映射确定性乘积表示的一组不同的输出的数字,例如: e ( g a , g b ) = e ( g , g ) a b e(g^a,g^b)=e(g,g)^{ab} e(ga,gb)=e(g,g)ab

在这里插入图片描述

由于源数集和输出数集是不同的,因此配对的结果不能作为另一个配对操作的输入。我们可以将输出集(也称为目标集)视为来自另一个世界。因此,我们不能将结果乘以另一个加密的值,根据名称本身的建议,我们一次只能将两个加密的值相乘。在某种意义上,它类似于一个哈希函数,它将所有可能的输入值映射到可能输出值集合中的一个元素,而且它不是简单的可逆的。

双线性映射函数 e ( g ∗ , g ∗ ) e(g^*,g^*) e(g,g)的一个基本的(技术上不正确的)数学类比是,有一种方法可以交换每个输入的底数和指数,这样底数 g g g在转换为指数的过程中被修改,例如, g a → a g g^a \to a^g gaag。然后将交换后的两个输入相乘,使原始的a和b值在相同的指数下相乘, e ( g a , g b ) = a g ⋅ b g = ( a b ) g e(g^a,g^b)=a^g \cdot b^g=(ab)^g e(ga,gb)=agbg=(ab)g。因此,由于在交换过程中使用另一个配对中的结果 ( a b ) g (ab)^g (ab)g(例如, e ( ( a b ) g , g c ) e((ab)^g,g^c) e((ab)g,g

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值