Zk-snarks为区块链的隐私保驾护航

区块链最初的想法是实现交易事务的完全开放,这使网络的任何成员能够验证每笔交易并监管社区。

但隐私不只是道德层面上的,即使用户没有做错任何事,也有正当理由保守其隐私。

因此,加密货币需要隐私。但是,如何才能保持去中心化网络的安全性并在区块链中保持隐私?

区块链规定货币交易应该是公开的,但实际上现实世界的用户更喜欢其历史具备隐私性。

那么如何才能在区块链中拥有隐私,同时拥有用户所需的安全性和隐私权?

比特币作为原始的区块链,激发了后来者更多的想法和加密货币的技术。区块链应该是匿名的,分布的,快速的,廉价的……公共的。

即每个人都应该能够看到账户交易的历史,执行一种暴徒监视,其中每个用户都会监控其他用户的行为。

但这是我们想要的嘛?

比特币吸引了众多不同的人群,其中一些早期支持者希望当前的货币体系崩溃,而比特币将成为更公平的替代品。

但最终,这是一种反乌托邦主义的观点,它将带来深刻的社会变革和远远超出我们想象的后果。

不是每个人都对比特币的技术成就感兴趣和兴奋,并不认为最初的理想是纯粹的美好,而且人们厌恶公开他们的财务历史。

事务的公共性是建立区块链安全性的一种方式,网络的每个成员验证交易是否合法并防止欺诈者制造虚假货币或从其他账户窃取资金。

通过精确提供私人事务,在不需要交换透明度的情况下提供安全性,是今后的一大方向。

目前正在探索几种技术,包括环形签名(Monero),Mimblewimble(Grin,Beam),以及最近的以太坊智能合约,它实现了机密性(Zether)。

但我更倾向于 Zk-snarks.

零知识证明是一种数学结构,它使得证明人(Peggy)向验证者(Victor)展示她知道一个秘密而不会泄露这个秘密

那么可以在零知识中证明什么?

前提是要有一些可以公开验证的秘密,即Victor会知道这个秘密是存在的,但是不知道它具体是什么。

以保险柜为例,简单来说钥匙可以打开保险箱:只要看到Peggy打开保险箱就会让Vitor相信佩吉知道保险柜的密码。但Victor无法看到Peggy在进入保险柜时具体按下了什么键。

 

上述只是其中最简单的例子,技术含量非常低。

在现实的区块链中,需要对数字对象和概念进行证明。

用户可以使用Zero Knowledge Proofs隐藏智能合约中的重要信息。

以太坊中的智能合约是公开的:任何人都可以看到智能合约中的内容,它们本质上是计算的每一步骤。

但透露其内容并不是必要的,区块链实质上是一个账本,里面有账户和余额。这包括比特币,但也包括ZCash和Ripple。
其他用包括财产分类账本或包含游戏数据的区块链:即角色及其财产。

在这种区块链中,事务主要是将一定数量的代币(无论是唯一对象还是货币金额)所有权从一个账户转移到另一个账户。

其规则显而易见:如果收取费用,税款或佣金而不保留在系统中,系统的总余额必须保持不变或减少的金额是可预见和确定的。

此外不需要通过在每个时刻总结整个系统来重新计算余额:只需要证明交易中涉及的账户变化,这样更有效率。

那么,不变量是根据这些账户的总余额计算的。

举个例子,如果用户想要保密所有账户的余额和每笔交易中发送的金额,可以在区块链中存储包含账户和账户余额的哈希值。

在两个账户之间的每笔事务中,向区块链发送两个账户的新状态,这意味着新的哈希值,以及零知识证明两个账户的账户余额之间的差异是对称的。

定义变量:

s0[A] --> A账户的初始余额
s1[A] --> A账户的最终余额
s0[B] --> B账户的初始余额
s1[B] --> B账户的最终余额

证明部分:

Public input:
hA0 = hash(s0[A])
hA1 = hash(s1[A])
hB0 = hash(s0[B])
hB1 = hash(s1[B])

Secret Witness:
wA0 = s0[A]
wA1 = s1[A]
wB0 = s0[B]
wB1 = s1[B]

Verification --- check all of these are true:
hash(wA0) == hA0
hash(wA1) == hA1
hash(wB0) == hB0
hash(wB1) == hB1
wA0 + wB0 == wA1 + wB1

上面的只是零知识证明部分,并不涉及 Snarks。

非交互式

这意味着 Peggy 和 Victor 不需要通过对话进行交互,但这也会以一些隐藏条件作为代价,譬如不能保证证明是实时的。

即Victor无法确定证明是在验证时创建的,也不能确定它是由Peggy创建的,只能确定原始证明创建者知道这个secret。

但从另一个角度来说,这赋予了用户一定的自由度,任何人都可以检验证据而无需设置新的交互过程,网络中的任意一方都可以验证交易,从而通过信任数目来实现去中心化,即不依赖于单一的权限来验证证明的正确性。

Succinctness

zk - snark的另一个重要特性是简洁。

证明和验证密钥的体量都很小,这使得验证非常迅速,可以在链上进行。

这使得智能合约能够有效地利用zk - snark来验证机密数据上事务的正确性。在一般情况下,由于一些原因,包括可靠的随机性、证明体量的大小和对witness编码的复杂性,证明必须是链下构造的。

zk - snark是一种神奇的技术,可以为区块链提供隐私。我希望这篇文章能帮助读者理解它们的运作。

Leave a Reply

Your email address will not be published.