我不告诉你谜底,你怎么晓得我晓得谜底

3天前 (11-22 13:45)阅读1回复0
猪脚
猪脚
  • 管理员
  • 注册排名6
  • 经验值73325
  • 级别管理员
  • 主题14665
  • 回复0
楼主

你问我一个问题,假设我给你准确谜底,你给我付一笔费用。但是,我不克不及间接告诉你谜底,因为,假设我告诉了你谜底,你可能不付费。

关于那种两难场景,怎么处理?

那种处理办法就是密码学中的零常识证明。

今天,我就用一个简单的例子,以浅近易懂的体例,以手稿的形式和各人分享零常识证明。

假设我们生活在一个十分原始的社会,算术就是一种很深邃的学问,没有几小我懂。我是其时的一个算术家,他人有算术问题城市来付费问我。

那时,你有一个算术问题问我:3x5=?

我当然晓得谜底,3x5=15,但是因为我担忧你晓得我给你谜底后不付费,所以,我不克不及间接告诉你谜底,而是通过零常识证明来向你证明我确实晓得谜底。你验证证明之后,付费给我。那么我才会告诉你谜底。

那我们看零常识证明是若何工做来处理那个两难问题的。

起首,如上图,把3x5=15,表达成计算机的门电路的形式。为了通用性的阐明,用代数的形式再画一遍门电路,那时,a1=3,a2=5,a3=15。

进一步,把右边的输进想象成一个多项式A(x),右边的输进为一个多项式B(x),输出为另一个多项式C(x),整个那个乘秘诀电路,用P(x)来表达。那个就是零常识证明神异的处所,最早想到那个的人,实是天才!怎么神异,听渐渐道来。

既然P(x)是一个多项式,那么总能够让x等于某个数,那时P(x)=0。因为P(x)是一个开放的多项式,那么无妨设x=1时,P(x)=0。当然,你也能够设x=2时,P(x)=0,自在抉择。

如上图,利用x=1,P(x)=0。因为A1(x), A2(x), A3(x), B 1(x), B2(x), B3(x), C 1(x), C2(x), C3(x)都是开放多项式。那么,假定如上图, A1(1)=1, B2(1)=1, C3(1)=1,其它的都为0。

那时,神异的工作就发作了,P(1)=A(1)xB(1)-C(1)=a1xa2-a3=0。

啊哈,那就是要证明问题的谜底。

a1xa2=a3

3x5=15

问题的谜底包罗在了多项式的系数中了!!!

问题的证明酿成了只要证明那个多项式P(x)在x=1时,P(x)=0!!!

那么,那个多项式是什么呢?

为了称心以上前提,假设为更低阶的一次多项式。

别离求出:

A(x)=23x-20

B(x)=23x-18

C(x)=23x-8

接着能够算出P(x):

因为P(x)有1那个零根,所以能够合成成h(x)*t(x)的形式,并设t(x)=x-1,那么h(x)=529x-368。如下图。

到此,问题就酿成了:

我假设晓得3x5=15,那么我就必需能推出那个多项式,那么我就要向你证明我晓得那个多项式P(x)=h(x)*t(x)=(529x-368)*(x-1)!那个多项式有x=1那个零根!

怎么证明我晓得那个多项式?

有x=1那个零根,两边都晓得,因为需要靠它来验证!那么,能够验证当x等于此外值时,P(x)是不是准确?假设你设x=2,那时,如下图。

那时,你(图中角色B),计算出t(2)=2-1=1, P(2)=690。你把P(2)的值保留,告诉我(图中角色A)x=2,t(2)=1,让我计算h(2)且把成果告诉你。你拿到h(2),就能够查抄h(2)*t(2)是不是等于你保留的P(2)。假设等于,证明我晓得那个P(x)多项式,证明我晓得3x5=15!

零常识问题到此就根本处理了,当然,此中有些平安破绽的问题,就需要用传统的密码学,离散对数算法,和同态加密算法来处理了。

好比,你告诉我的是明文的x=2,t(2)=1,那时我可能能通过那些明文猜出h(2),而不是通过计算h(x)来得到h(2)。那时,你能够加密那些明文,好比2酿成E(2),t(2)酿成E(t(2)),x^r酿成E(x^r)(r=0,1,...),然后你把那些加密数值告诉我,我根据加密数值,计算出E(h(2)),传给你,你就能够利用同态加密算法验证E(h(2))*E(t(2))=E(p(2))。

以上是假定你晓得多项式P(x),能算出x等于任何值时的P(x),好比P(2)。但是,现实的情状是你不晓得P(x),只晓得t(x),因为有哪些零根是两边都晓得的验证点。

那时,你能够对本来的加密数值停止“偏移”,然后再将偏移后的数值加密,将原数值的密文和原数值偏移后加密的密文都发送给我,我需要在那两个密文长进行同样的操做,你在收到成果后能够查抄两个成果之间能否仍是存在原先的偏移量。那种办法称为“Knowledge-of-Exponent Assumption”(KEA)。如许只要我用晓得的多项式h(x),是的,必需晓得多项式h(x),才气算出两个成果,别无他法。而你拿到我发给你的两个成果就能够查验偏移量,而不是P(x)来验证我确实晓得多项式,并且是用多项式来计算的两个成果。

到此为行,我给你证明了我晓得隐含谜底3x5=15的多项式P(x),从多项式P(x),你是反推不出3x5=15那个谜底的(是的,类似hash,单向的)!

那就是关于那个问题的零常识证明,那种证明机造,能够妥帖到任何问题的证明。

0
回帖

我不告诉你谜底,你怎么晓得我晓得谜底 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息