随着智能合约在以太坊中的应用,如何保护智能合约的隐私,也成了很多人关注的方向,本文将简要讲述智能合约是如何保护隐私的,有哪几种方案,他们的核心思想以及优劣。
内容整理自吴逸飞博士在一块链习技术的分享。吴逸飞博士,目前是智能合约隐私项目 ARPA 的合伙人,前区块链项目 Lots 的 Tech Lead,东京大学理学博士,北京大学数学理学双学士。
本文关键词:Commit and Reveal、可信执行环境(TEE)、同态加密(HE)、多方安全计算(MPC)
以下为分享整理,为了更加易读,有删改。(更新整理中)
1、交易隐私和智能合约隐私
在中本聪创造比特币之后,点对点转账系统,有两个比较大的方向延伸,一个是像以太坊一样,支持图灵完备的计算机,增加了智能合约,可以支持开发和运行DApp的系统。另一个方向是像ZCash和Monero的虚拟货币,增加了交易的隐私,使得转账方和接收方以及金额都不能被第三方所知道。
那我们能不能将智能合约和隐私结合起来,同时支持匿名以及智能合约的功能,那这实际上就是隐私智能合约。
所谓合约隐私有两种。第一种是代码可以做隐私,第二种是智能合约的输入和输出的隐私。这里主要讲的是第二种智能合约输入输出的隐私,第一种在讲混淆电路的时候也会提到。
2、智能合约为什么需要隐私及应用场景
其实在以太坊官方案例中就有投票和拍卖的例子。比如你希望在链上通过智能合约做一个拍卖程序,大家肯定不希望别人在出价的时候,就可以知道你出了多少钱。如果别人可以看到,就可以知道用什么策略战胜你了。
那这里的需求就是在拍卖结束前,都不知道别人出价是多少。这个合约本身也比较简单,这个在当前以太坊上也可以实现,后面在 Commit-Reveal 中会讲到。
那我要讲的是未来世界,假设很多应用都可以在区块链上跑了,比如机器学习。有这样一个场景,就是对于罕见病例的研究。因为有些病例比较罕有,可能在某个医院只有几例,那医院又不愿意完全自己的数据以及患者的个人信息。
科研人员想通过智能学习算法研究这些病例,就很难获得足够的数据样本,如果有链上的智能合约可以跑一个智能学习的算法,每家医院将几个病例分享出去,又不用暴露病人的具体数据。科学人员就可以将数据形成数据集进行研究,医院也不用担心病人数据隐私泄露被侵犯。
3、Commit and Reveal
现实世界的解决方案,很多智能合约开发者可能都知道,那就是Commit-revel,比如刚才拍卖的例子中,我们想要每个人出一个价格,又不想在拍卖结束之前,把这个价格公布出来,那每个人就可以生成一个随机的Salt和message,
我们把Salt和价格一起做一个Hash,然后把Hash公布到链上,等拍卖结束,价格和Salt提交到链上去,Hash的特性确保了你不能修改价格。
那就可以在简单的应用做智能合约隐私,至少像是Dice2Win真实代码中就用到了Commit-Reveal。
4、零知识证明
零知识证明就是 Zero—Knowledge Proof,Zchah就是基于这个技术发明的,以太坊上也有一些应用。简单的说,可以举个例子。
假设我拥有快速检查金库有多少金币的技能。你要如何检验我是否正确有这个能力,最好的方法是你知道金库有多少钱。那一种方式就是随便找一个金库,放入或者拿出几个金币,让我让我重新重新数一下这个金库,说出多了或者少了多少金币。那如果重复很多次,每次都说对的话,那其实就证明了我拥有这个能力。
在这个例子中,我并不用告诉你这个金库里有多少个金币,我只需要告诉你多了或者少了几个金币,就可以知道我是否拥有这个技能。
如果有一个函数f(x), 已知有一个解y,需要提交一个证明,这是证明就是零知识证明,证明我们知道一个x,满足f(x)=y,但是不泄露任何关于x的信息。
具体现实比如zk-SNARK,解决方式就是把f(x)表示成一个算数电路,只有加和乘。要证明每个算数门都计算正确,我要检查的就是。
1.每个加法门的两个输入相加等于输出
2.每个乘法门的两个输入的乘积等于输出
3.门与门之间的连接正确
如果我能证明所有的门都成立,那么就可以证明我知道答案并且是对的。
一些比较有名的零知识证明系统包括zk-SNARK和正在研究期间的zk-STARK。zk-SNARK就是“zero-knowledge Succinct Non-interactive ARgument of Knowledge”的缩写。
zero-knowledge 是指除了知道所证明的有用信息之外,不能知道所有其他有用信息。
succinct 是指验证过程不涉及大量数据传输以及验证算法简单;
Non-interactive 非交互式,证明人无需与验证人进行交互。
知道zk-SNARK的人可能知道ZCash中有一个 trusted setup,它需要一些人来生成一些废料,保证系统的运行。目前主流的研究方向zk-STARK无需 trested setup,它可以确保有 Transparent 这个特性,并且有抗量子计算机的特性。
说了这么多,可能还是不知道怎么一回事。我们通过例子来说明一下,我们怎样在以太坊上通过智能合约制作一个简易版的ZCash。
每次存入这个系统中一个ETH,也可以从系统中取出ETH,但是无法知道建立关联