一文读懂全同态加密EVM协议fhEVM

作者:ZAMA,翻译:xiaozou

fhEVM为全同态加密项目ZAMA开发的使用全同态加密的 EVM 机密智能合约协议。

区块链作为一种去中心化数据存储和处理机制,需要透明度以使网络成员就系统的状态达成共识。这种透明度本身就意味着隐私方面的巨大挑战,因为所有链上数据都是广泛分布并公开可见的,即使隐藏在匿名地址后面也是如此。

如何解决这一挑战,同时确保现有区块链的强大安全保障,是一个正在进行探索的研究领域。如果没有相应的解决方案,区块链的透明性会阻碍某些有用应用的采用,所以区块链的广泛使用便取决于如何解决这一隐私挑战。

fhEVM的目标是解决通用(图灵完备)区块链(如以太坊)的这一挑战。我们认为,智能合约开发实现可扩展的唯一途径就是不要求开发人员具备密码学方面的专业知识。因此,我们的解决方案旨在提供流畅且直观的开发人员体验。此外,成功的隐私保护解决方案必须支持常用区块链用例和设计模式,例如轻松组合来自不同用户的数据,将加密数据保存在链上,以及智能合约组合。

我们提出的这个解决方案是基于全同态加密(FHE)和阈值协议的结合。所有数据都在链上,所有人都可以使用,其中一些数据是以加密形式存在的。由于同态函数求值的确定性,每个人都可以对加密数据进行计算,并使用典型的共识协议。这也有意保留了区块链透明性的一个关键好处:执行的计算仍然是公开的,而只有正在计算中的数据是隐藏的。

1fhEVM的贡献

本文将介绍创新的区块链组件,以及如何使用这些组件构建基于以太坊虚拟机(EVM)的区块链,支持加密值的计算。具体贡献如下:

· fhEVM,它将Zama的开源FHE库TFHE-rs [Zam22]集成到一个典型的EVM中,将同态操作作为预编译的合约公开。

· 基于分布式阈值协议[DDE+23]的解密机制[Sma23],可防止恶意智能合约的不良操作,但对于诚信的智能合约开发人员来说却是灵活且友好的。

· Solidity库使智能合约开发人员可以轻松地在其合约中使用加密数据,无需更改编译工具。

请注意,虽然这里给出的展示是基于EVM区块链的,但我们的方法非常通用,也可以支持其他区块链,例如基于WASM的区块链。另外,还可以轻松使用非阈值类解密机制。

2、用例

链上加密值增强甚至揭示了区块链的许多用例,下面列举一些。

2.1 加密ERC-20代币

同质化的ERC-20代币标准是区块链的重要标准。然而,由于区块链系统的公开性,ERC-20代币持有者的个人余额是公开的,仅仅提供匿名地址就可能会导致个人隐私问题。由于fhEVM支持在智能合约中使用加密值,因此可以构建ERC-20代币标准的加密版本。为此,只需将余额的数据类型从整数更改为加密整数,并将每个操作替换为各自的FHE对应项即可。

2.2 盲拍

首价密封拍卖允许竞标者私下提交投标,这样就不会有人知道他们的出价。当投标结束时,确定最高出价者并宣布其为获胜者。盲拍鼓励竞标者出价不超过他们心中的拍卖品价值。这种拍卖形式可以自然而然地使用加密值完全在链上实现,而无需可信实体对明文出价执行计算,这与基于承诺或零知识证明的解决方案不同。使用加密ERC-20代币,竞标者只需将加密金额转移到盲拍智能合约中,然后比较出价以确定并宣布获胜者。

2.3 增强隐私的DAO

去中心化自治组织(DAO)作为一种没有中央权威的创建自治社区的方式,在区块链领域变得越来越流行。他们依靠智能合约来执行规则,并根据成员的投票进行决策。一般来说,DAO都有自己的金库,由其成员通过提案进行管理。提案由成员投票表决,只有在投票通过后才能执行。这里的投票系统可以通过ERC-20代币合约来实现,其中,成员持有的代币数量可反映其投票权。因此,链上加密值使DAO成员能够进行秘密投票。

使用加密金库,DAO还可以在拍卖中公平竞争,防止其他人提前知晓资金细节(即投标能力)。

2.4 去中心化身份标识符

去中心化身份标识符(DID)是一种新型标识符,可为个人和组织提供可验证的具有自主权的数字身份。利用加密数据,位于fhEVM中的智能合约能够安全地存储和处理用户身份相关敏感信息,从而在整个过程中保护用户隐私。

例如,中央机构或政府可以在智能合约中发布授权用户的加密出生日期。随后,被授权方可以在必要时查询智能合约,以获得有关用户年龄的信息(例如,他们是否达到法定年龄)。

3、相关工作

有多种方法可以对隐私输入进行智能合约计算。虽然一些解决方案可以使用多种技术,但我们大致将这些技术分为四类:

零知识(ZK)证明、可信执行环境(TEE)、安全多方计算(MPC)和同态加密(HE)。

3.1零知识(ZK)证明

ZK证明通过只在链上保存提交的数据和正确计算证明来应对隐私挑战。然而,这些数据必须是明文形式才能进行计算,这意味着必须在某个地方保存数据的明文副本。当计算只需要来自某一方的数据时,这种方法很有效,但是对于要求多方数据的应用程序来说,又该怎么办?

ZCash [BCG+14]和Monero [Mon23]在交易中为发送方和接收方双方提供匿名性,同时使用Pedersen承诺[Ped92]对交易代币的数量进行隐私保护。

Zexe [BCG+20]和VeriZexe [XCZ+23]允许使用zkSNARKs在零现金类区块链中评估任意脚本。相关限制就是,既然多个智能合约或多方无法访问链上的加密状态,输入数据必须被至少一方获知才能生成zkSNARK。目前,使用这种方法更新加密状态而不泄露是不可能的。

Hawk [KMS+16]使用ZK证明,智能合约的输入被显示给执行计算的受信管理器。

我们的解决方案是直接对加密数据进行计算,这意味着聚集混合来自多方用户的数据很简单,计算可以在链上进行。

3.2可信执行环境(TEE

基于TEE的区块链系统仅将加密数据存储在链上,并通过解密包含解密密钥[YXC+18, KGM19, CZK+19, SCR23, Oas23, Pha23]的secure enclave内的数据来执行计算。这类解决方案的安全性取决于解密密钥是否安全地包含在secure enclave中。这使得用户依赖于secure enclave硬件及其依赖于远程证明机制的制造商。

enclave方法多次被证易受几种边信道攻击[VMW+18, LSG+18, KHF+19, vMK+21, TKK+22, vSSY+22],包括仅仅查看内存访问模式泄漏的攻击[JLLJ+23]。

3.3多方计算(MPC

zkHawk [BCT21]和V-zkHawk [BT22]使用MPC协议取代Hawk [KMS+16]中的可信管理器,所有输入方都需要在线参与。

Eagle [BCDF23]改进了Hawk结构,让客户将他们的输入外包给MPC引擎,由MPC引擎为他们进行计算。Eagle还为外包的MPC引擎增加了可识别中止和公共可验证性等功能。尽管在Eagle中,输入方不一定要一直在线,但他们需要至少与MPC引擎进行一轮交互以提供输入[DDN+16]。

虽然他们的黄皮书非常详细,但其中并没有关于Partisia [Par23]如何实现隐私保护存储的信息。

3.4同态加密(HE

已经提出了一些基于部分同态加密的同态加密解决方案,这限制了可执行操作类型,因此只支持特定类别的智能合约和应用程序。例如,Zether [BAZB20]使用基于ElGamal的加密方案,确保资金的秘密转移。但当涉及到更复杂的智能合约时,这还不足以实现完全保密。

Zkay [SBG+19]定义了如何使用FHE执行以太坊智能合约,但使用的是持有解密密钥的可信第三方。smartFHE [SWA23]使用BFV [FV12]作为底层(HE)块构建FHE。在他们的设置中,各钱包在本地运行BFV密钥生成过程,以获得一个公钥密钥对。多个钱包的密钥不同,因此为了执行更复杂的智能合约,例如盲拍,需要运行分布式密钥生成协议并生成joint (pk, sk)。然后,计算中涉及的密文需要在新的pk下重新加密,在同态执行盲拍后,需要运行分布式解密协议以获得结果(尽管分布式解密协议在他们的文档中并没有详细说明)。

PESCA [Dai22]使用与我们类似的架构,使用了全局公钥pk,每个人都使用它来加密自己的余额,并使用阈值FHE协议来帮助解密输出。一个主要的区别在于,他们的阈值协议以q = p为素数进行模运算,而我们的阈值协议适用于ring Zq,其中q通常是2的幂。另一个不同之处在于,在PESCA中,阈值FHE模数q与参与方数n呈指数关系;也就是说,与非阈值方案相比,密文模数必须增加(n!)3倍。

已有一些以太坊改进提案(EIP)探讨了向EVM添加同态加密存储的想法。