本文来自网络抓取,如果侵权请联系删除

作者:区块链学习 来源:区块链百科

简介:本文内容由区块链分析师整理编辑
主要讲解的内容是:我们将把数学看成一个黑盒子,试着建立一些关于如何使用的感官,并给出一个简单的应用案例,以太坊最近集成zk-SNARK的工作。 ......的相关信息,具体详情阅读下文。

本文中,我们将从实际的角度对zk-SNARK进行概述。

我们将把数学算作一个黑盒子,试着树立一些关于如何使用的感官,并给出一个简略的应用案例,以太坊最近集成zk-SNARK的工作。

整常识证实

整常识证实的目标是考证者能压服自己,证实者具有一个机密参数的常识,这个进程称为见证,它满足某种关系,而不消向考证者或任何人泄漏证物。

我们可以把它更具体地懂得为一个法式,记作C,有两个输入:C(x, w)。输入x是大众输入,w是机密见证输入。法式的输出是布尔值boolean,即true或false。然后给出一个特定的大众输入x,证实考证者知道一个机密输入w,使得C(x,w) ==true。

【译者弥补常识点:boolean 数据类型 boolean 变量存储为 8 位(1 个字节)的数值情势,但只能是 True 或是 False。当作为一个构造函数(带有运算符new)调用时,Boolean() 将把它的参数转换成一个布尔值,并且返回一个包括该值的 Boolean 工具。如果作为一个函数(不带有运算符 new)调用时,Boolean() 只将把它的参数转换成一个原始的布尔值,并且终究返回这个值。】


我们将重点评论辩论非交互式整知识证实non-interactive zero knowledge proofs,这意味着证实自己是一组数据,无需考证者交互便可考证。

示例法式

假定Bob给出了某个值的哈希值H,并且他愿望Alice证实知道哈希值为H的某值s。通常,Alice会通过向Bob供给s来证实这一点,之后Bob会哈希盘算并检讨即是H。

然而,假定Alice不想向Bob泄漏某数值s,而只是想证实她知道。她可以使用zk-SNARK。

使用以下法式来描写Alice的场景,这里编写为Javascript函数:

科普丨zk-SNARK在以太坊上的案例树模配图(1)

换句话说:法式吸收大众哈希值x和机密值w,如果w的SHA-256哈希即是x,则返回true。

使用函数C(x,w)办理Alice的问题,Alice需要创立一个证据,证实她具有s,使得C(H,s)== true,而不用表现s。 这是zk-SNARKs办理的一般问题。

zk-SNARK的界说

科普丨zk-SNARK在以太坊上的案例树模配图(2)

zk-SNARK算法由G、P、V三种算法组成,界说如下:

密钥天生器G吸收一个机密参数lambda和一个法式C,并天生两个公然可用的密钥、一个考证密钥pk和一个考证密钥vk。这些值是一次天生的大众参数,只需要为给定法式C。

考证者P以考证密钥pk、大众输入x和私有见证w作为输入,算法天生prf = P(pk, x, w),证实考证者知道私有见证w,满足法式要求。

考证者V盘算V(vk, x, prf),如果证实准确则返回true,否则返回false。因此,如果证实法式知道见证w满足C(x,w) == true,则该函数返回true。

注意天生器中使用的机密参数lambda。这个参数有时会使zk- SNAEK的实际应用变得很辣手。这样是缘由,任何知道这个参数的人都能天生真证实。具体来讲,给定任何法式C和大众输入x,知道lambda的人可以天生一个证实真prf,使V(vk, x, fake_prf)在不知道机密w的情况下盘算为真。

因此,天生器的运转需要一个非常安全的规矩,以确保无人知晓以及参数无从保存。这就是为什么Zcash团队为了天生证实密钥和考证密钥而进行了极为复杂的典礼,同时确保在此进程中烧毁了“有毒废料toxic waste”参数lambda。

zk-SNARK的示例法式

为了让Alice证实她知道上述例子的机密值,Alice和Bob将如何在实际中使用zk-SNARK?

首先,如上所述,我们将使用以下函数界说的法式:

科普丨zk-SNARK在以太坊上的案例树模配图(3)

第一步是让Bob运转生成器G,以便创立证实密钥pk和考证密钥vk。第一次随机产生lambda,并使用它作为输入:

科普丨zk-SNARK在以太坊上的案例树模配图(4)

如上所述,当心处理参数lambda,因为如果Alice知道lambda值,她能够创立伪证实。Bob将与Alice同享pk和vk。

Alice现在将饰演证实者的脚色。她需要证实自己知道散列哈希H的值s,输入pk, H, s运转证实算法P生成证实prf:

科普丨zk-SNARK在以太坊上的案例树模配图(5)

接下来Alice将prf证实供给给Bob, Bob运转考证函数V(vk, H, prf),返回true,证实Alice准确地知道了机密s。Bob确信Alice知道机密,但是Alice不需要向Bob泄漏机密。

可反复使用的证实和考证密钥

上述例子,如果Bob想向Alice证实他知道一个机密,就不能使用zk-SNARK。这是因为Alice不知道Bob有没有保留参数lambda,所以Bob有可能捏造证实。

如果一个法式对许多人都有效(例如Zcash的例子),那么一个自力于Alice和Bob的所托第三圆可以运转生成器并创立证实密钥pk和考证密钥vk,这样就不会有人知道lambda。

任何信赖第三圆没有做弊的人都可以在将来交互中使用这些密钥。

zk-SNARK的以太坊应用

开辟者已经开始将zk-SNARK整合到以太坊中。这是怎么样的? 具体来说,考证算法构建的区块以预先编译合约的情势添加到以太坊。做法如下:生成器在链中运转以生成证实密钥和考证密钥。然后,任何证实者都可以使用证实密钥来创立证明,这也是链中操纵。然后使用证明、考证密钥和大众输入作为输入参数,在智能合约中运转通用考证算法。然后,考证算法的结果可用于触发其他链上活动。

示例:匿名生意业务

科普丨zk-SNARK在以太坊上的案例树模配图(6)

以下是zk-SNARK如何实现以太坊隐私的简略示例。假定我们有一个简略的代币合约。 通常,代币合约的焦点是从地点到余额的映照:

科普丨zk-SNARK在以太坊上的案例树模配图(7)

我们保留相同的基本焦点,除了采取余额哈希值调换余额:

科普丨zk-SNARK在以太坊上的案例树模配图(8)

我们不会隐蔽生意业务的发件人或收件人,但我们将能够隐蔽余额和发送金额。此属性有时称为机密事件。

将使用两个zk-SNARK将代币从一个帐户发送到另一个帐户,一个由发件人创立,另一个由吸收者创立。

通常情况下,在一个代币合约中,一个生意业务巨细Value是有效的,需要考证以下几点:

科普丨zk-SNARK在以太坊上的案例树模配图(9)

因此,zk-SNARK需要证明的是,哈希值的更新婚配余额更改,这是建立的。

这个意思是发送圆将自己的初始余额和生意业务值作为私有输入,而初始余额、停止余额和Value的哈希值作为大众输入。同样的,接收者也会使用自己的初始余额和Value作为秘密输入,初始余额、期末余额和Value的哈希值作为大众输入。

下面是我们将用于发送方zk-SNARK的法式,其中x表示大众输入,w表示私有输入。

科普丨zk-SNARK在以太坊上的案例树模配图(10)

接收方使用的法式如下:

科普丨zk-SNARK在以太坊上的案例树模配图(11)

程序检讨发送余额是否大于发送的值,并检讨所有哈希值是否婚配。一组受信赖的人员将为用zk-SNARK生成证明和验证密钥,它们称为confTxSenderPk、confTxSenderVk、confTxReceiverPk和confTxReceiverVk。

在代币合约中使用zk-SNARK看起来是这样的:

科普丨zk-SNARK在以太坊上的案例树模配图(12)

因此,区块链独一更新是余额的哈希值,而不是余额自己。但是,我们可以知道所有余额都已准确更新,因为我们可以检讨自己是否已经通过验证。

注意事项

上述匿名生意业务计划主要是提供一个如何在以太坊上使用zk-SNARK的实际例子。为了在此基本上创立壮大的失密生意业务计划,我们需要办理许多问题:

  • 用户需要在客户端查询余额,如果你失去了余额,那么这些代币将无法规复。余额可能使用从署名密钥派生的密钥在链上加密存储。

  • 余额需使用32字节数据,并将熵编码为余额的一部分,以防止反向散列哈希盘算余额的能力。

  • 需要处理发送到未使用地点的Edge Case。

  • 发送者与接收者需要交互才能发送。可能有一个体系,其中发送者使用他们的证据来启动生意业务,且接收者在区块链上会看到“待处理的接收生意业务”并且终究确认。

原文链接:

https://media.consensys.net/introduction-to-zksnarks-with-examples-3283b554fc3b

作者:Christian Lundkvist

译者:Mavis

以上就是区块链资讯网分享关于" 科普丨zk-SNARK在以太坊上的案例示范"的相关内容了,希望对你起到一定的帮助,想了解更多的区块链新闻敬请关注本站!

<<免责声明:本文仅代表作者本人观点,并不代表小牛币读之观点,本网站对作者观点不承担任何担保责任_区块链资讯-比特币行情-区块链是什么新闻资讯网