推进区块链交易隐私和合规性:对创新工程实践的见解

本文为机器翻译
展示原文

作者: @gyllone @Madao-3 @xiangxiecrypto

一、简介

区块链隐私和监管合规性正在经历动态转变,这受到@vbuterin@ameensol的关键工作的显着启发,他们富有洞察力的论文《区块链隐私和监管合规性:迈向实用均衡》以及关于许可隐私池的启发性论坛帖子,已经为理解维护交易隐私和遵守监管规范之间的复杂平衡奠定了基础框架。这些资源深入探讨了在不断发展的区块链环境中同步隐私与合规性的挑战和可行的解决方案。

他们的工作的一个关键要点是“诚实地址集”的概念,它深刻地影响了我们实现第二代隐私协议的方法。在此框架中,关联集提供商(ASP)成为 zk-credit 系统中信用的关键促进者,提供了一种结构化的方法来评估和证明用户的信用度。同时,会员证明确保交易中的所有参与者都是诚实地址集的一部分,增强了我们协议的安全性,并为用户提供了更安全、更值得信赖的环境。

总而言之,Buterin 和 Soleimani 的工作有助于指导我们开发既维护隐私又遵守法规的区块链系统。通过将这些概念集成到我们的系统中,我们已经能够创建更安全、更高效、更保护隐私的第二代协议。

2. 组件

2.1 基础设施

用户的可替代资产被散列到二元默克尔树中。假设叶子节点初始化为常数值H'=\mathrm{Hash}(0) H = H a s h ( 0 )直到任何资产占据叶子的槽位,则叶子节点应更新为H= \mathrm{Hash}(标识符\|\金额\|\承诺) H = H a s h ( i d e n t i f i e r | 数量_ _ _ _ _ | 承诺) 其中标识符identifier资产关联标签例如用户地址 金额amount资产数量_ _ _ asset 存储在叶子节点 commitment = \ mathrm { Hash } ( secret ) c o m m i t me n t = Hash ( secret ) 带有秘密secret是拥有该资产的用户的密钥。

对于未使用的叶子节点槽位,用户可以将资产存入池中并在提供资产和承诺的同时获得该槽位。对于提现,用户应提供提现金额、新叶哈希、标识符子集和 snark 证明。

默克尔树
默克尔树1401×842 66.4 KB

2.2 UTXO 证明

提现机制的设计与UTXO模型类似。用户选择一组指示其资产的叶节点作为输入,然后将剩余余额散列到新的叶节点作为输出。总投入与总产出之间的差额就是撤回的金额。

现在令 ULO 源列表为L L ,对于每个索引为i\in L i L的 ULO,我们必须首先验证其存在性,然后计算电路中相应叶子的无效符,如下所示:

\begin{aligned}commitment_i&=\mathrm{Hash}(secret_i)\\nullifier_i&=\mathrm{Hash}(secret_i^{-1})\\leaf_i&=\mathrm{Hash}(identifier_i \ | \ amount_i \ | \ commit_i)\\root&=\mathrm{MerkleProof}(leaf_i, \paths)\end{对齐}
承诺_ _ _ _ _ _ _ _ _ _ =哈希(秘密i ) _ _ _ _ _ _ _ _无效i _ _ _ _ _ _ _ = H ash ( secret 1 i ) _ _ _ _ _ _ _阿菲_ _ _ =哈希(标识符i _ _ _ _ _ _ _ _ _ _ _ _ | 金额i _ _ _ _ _ | 承诺i ) _ _ _ _ _ _ _ _ __ _ _ = Merkle Proof ( leaf i , _ _ _ _ _ _ _ _ _ _ _ _ 路径) _ _ _ _

接下来,我们需要证明电路内的总输入量等于总输出量,然后生成叶子输出。以下等式表示这一点:

\begin{aligned}\sum_{i\in L}amount_i&=amount_w + amount_o\\commitment&=\mathrm{Hash}(secret)\\leaf&=\mathrm{Hash}(identifier \ | \ amount_o \ | \commitment) \结束{对齐}
Σ i L a m o u n t i =金额w +金额o _ _ _ _ _ _ _ _ _ _承诺_ _ _ _ _ _ _ _ _ =哈希秘密 _ _ _ _ _ _ _ _叶子_ _ _ =哈希标识符_ _ _ _ _ _ _ _ _ _ _ _ | 金额_ _ _ _ _ _ | 承诺 _ _ _ _ _ _ _ _ _

其中amount_w a m o u n t w为提币金额, amount_o a m o u n to输出金额。

在上面的过程中,我们设置了\{nullifier_i\}_{i\in L } { n u l l i f i e r i } i L leaf l e a f root rootamount_wa m o u n t电路的公共变量,由Plonk构造。

2.3 无罪证明

2.3.1 为什么不采用 Merkle 证明

ZKT 网络中的无罪证明在于证明输入来自用户构造的任意集合,同时确保该集合对任何人公开可用。通常,该集合可以组织成一个新的 Merkle Tree,并且用户应该证明每个输入也是 Merkle Tree 的叶节点(事实上,Tornado Cash v2 和隐私池等注重隐私的解决方案都采用了这种设计)。

显然,如果集合很小,用户的隐私就会受到损害。如果集合太大,生成相应的 Merkle 树会在 EVM 上产生巨大的 Gas 成本,因为 EVM 原始地没有集成 ZK 友好的哈希函数(Poseidon Hash),而创建 Merkle 树的哈希复杂度为 O(n)。

我们特此采用Plookup来构造成员资格证明,而不是 Merkle 证明。在我们的会员证明中,Plookup 有2 个主要优点。

  • 在证明阶段,我们不需要对每个ULO进行merkle证明,这大大减少了电路尺寸。

  • 在验证阶段,我们不需要在EVM中进行哈希运算。仅需要一对椭圆曲线。

2.3.2 Plookup嵌入

假设用户从源 ULO 中提供了大小为m m的标识符集,表示为\mathbf{t} t ,然后我们用 0 填充集合\mathbf{t} t ,直到它满足电路大小n n的大小。

\mathbf{t}=\{\mathrm{id}_0,...,\mathrm{id}_{m-1},0,...,0\}
t = { i d 0 , . , i d m 1 , 0 , . , 0 }

此外,我们定义\mathbf{q_T} q T ,满足q_{Ti}\cdot t_i = 0 q T i t i = 0

q_{Ti}=\left\{\begin{matrix}0, &\ i \leq m\\1, &\ i > m\end{matrix}\right.
q Ti = { 0 , _ 1 , >

\mathbf{f} f为查询表:

f_i = q_{Ki}\cdot c_i=\left\{\begin{matrix}c_i, &\ \mathrm{如果\the}\i\mathrm{\gate\is\a\lookup\gate}\\0, &\ \mathrm{否则}\end{矩阵}\对。
f i = q K i c i = { c i , 如果_ _ _  _ _ _ _ A 抬头_ _ _ _ _ _ _ _ 0 , 否则_ _ _ _ _ _ _ _
q_{Ki}=\left\{\begin{矩阵}1, &\ \mathrm{如果\} \ i\mathrm{\门\是\a\查找\门}\\0, &\ \mathrm{否则}\end{矩阵}\right。
q K i = { 1 , 如果_ _ _  _ _ _ _ A 抬头_ _ _ _ _ _ _ _ 0 , 否则_ _ _ _ _ _ _ _

其中c_i c i是Plonk算术门中定义的输出见证,当c_i c i表示标识符见证时我们激活它。 q_{Ki} q K i是打开/关闭查找门的选择器。

然后我们只需通过 Plookup 证明\mathbf{f} f\mathbf{t} t的子集即可。

在验证阶段,除了 zk-SNARK 证明验证外,我们还验证\mathbf{t} t\{1, \omega, \omega^2, ..., \omega^{m-1 处的开局证明}\} { 1 , ω , ω 2 , . , ω m 1 }来确认\mathbf{t} t中每个标识符的正确性,无需任何哈希操作。

3. 关联集提供者

关联集提供商(ASP)机制允许第三方监督成员列表。与证明者类似,ASP 为最终用户提供证明服务。相关地址以及潜在的经过证明和密封的数据被提交给指定的 ASP 智能合约。在ZKT Network中,任何实体都可以注册为ASP。选择使用哪个 ASP 取决于最终用户和 Dapp 的选择。

数据类别可以由 ASP 定义,允许支持来自 web2 的各种潜在数据,例如信用评分、KYC 结果等。用于证明通过标准传输层安全 (TLS) 协议获得的任何数据(例如, HTTPS)并为了容纳大量潜在数据,我们建议在 ASP 中使用 MPC-TLS 样式算法。这种方法最初由 DECO 引入,并由 PADO 进行了显着改进,本文对此进行了进一步详细介绍。在此框架内,用户可以向证明者证明数据确实来自预期来源,而不会泄露任何其他信息。

我们在下图中列出了基本的工作流程。

asp工作流
asp-工作流程1920×1080 88.7 KB

会员名单中是否包含数据是酌情决定的。这种灵活性源于数据输入可能只是二进制(是/否)的情况。在这种情况下,智能合约接受标记为“是”的地址,从而允许省略不必要的数据条目。然而,当密封数据具有附加含义时,可以引入可编程性。例如,ASP 可能会证明用户的 FICO 分数并将加密分数存储在智能合约中。随后,Dapp 可以设计出更具适应性的提款条件。例如,FICO 分数较高的用户可能有资格提取较大数量的代币,而 FICO 分数较低的用户可能只能提取较小数量的代币。这为设计不同的应用程序带来了更高程度的灵活性。

4. 客户端加速方案

为了增强 ZKT 网络系统的用户体验和效率,我们重点关注客户端计算优化。这种优化对于减少用户设备的计算负担并加速交易和验证过程至关重要。

4.1 WebAssembly 集成

我们与 WebAssembly (Wasm) 的集成允许直接在用户浏览器中执行复杂的加密证明生成过程。通过将 Rust 代码编译到 WebAssembly,我们显着减少了对集中式服务器的依赖,并提高了系统响应能力和效率。

4.2 本地计算优化

4.2.1 交易决策逻辑

在我们的UTXO模型中,每个用户的资金都表示为加密的NOTES,每个NOTES对应特定数量的资产(例如ETH)。我们的系统智能地选择适当的NOTES组合来满足提款请求。例如,如果用户拥有 1 ETH、1 ETH、2 ETH 和 3 ETH 的票据,并希望提取 2.5 ETH,我们的系统会自动使用 1 ETH、1 ETH 和 2 ETH 的票据。

4.2.2 新存款证明的生成

在使用某些NOTES进行交易后,我们的系统会生成与剩余金额相对应的新存款证明。继续前面的例子,在花费 1 ETH、1 ETH 和 2 ETH 票据后,会创建一个新的 1.5 ETH 存款证明,确保交易后资金的安全有效管理。

4.2.3 Chrome插件和iOS应用程序中的实现

为了实现这种计算优化,我们在 Chrome 插件和 iOS 应用程序中实施了定制策略。 Chrome插件利用浏览器的处理能力优化了NOTE选择和新的证明生成过程。相比之下,我们的iOS应用程序采用多线程技术来加速这些计算,充分利用iOS设备的高性能。

4.3 缓存策略

我们实施了缓存策略来减少冗余计算和网络请求。关键数据(例如 Merkle Tree 的部分内容)会缓存在用户设备上,以便在后续交易或验证中快速检索,从而减少网络流量并显着提高整体系统性能。

4.4 用户体验提升

最后,我们高度重视增强用户体验。这不仅涉及到技术上的优化,还涉及到界面设计上的改进。我们确保用户界面直观且交易过程无缝。实时反馈和详细的错误消息增强了用户的信任度和满意度。

综上所述,我们的客户端加速解决方案是增强ZKT Network系统性能的关键策略。通过这些技术和方法的应用,我们不仅提高了交易的速度和效率,还优化了用户体验,使ZKT Network成为更强大、更友好的区块链隐私平台。

5.这是什么意思?

在ZKT Network,我们致力于实现一个宏伟愿景:通过平衡区块链交易隐私与全球合规标准来引领技术革命。我们的创新超越了技术领域,探索隐私与合规性平衡的新领域。

因此,我们热忱邀请区块链领域的研究人员和专家参与我们的项目,为推动该领域的发展提供反馈和建议。 ZKT Network期待您的专业见解和协作,共同开发更全面、更有效的区块链隐私解决方案。

我们还鼓励社区成员根据他们的要求探索基于我们框架的创新应用程序。 ZKT Network渴望与您一起畅想未来,共同面对挑战,构建更加安全、合规、创新的区块链世界。

在ZKT Network,我们相信通过集体智慧和协作努力,我们能够实现隐私保护与合规性的完美融合,创造充满可能性的未来。

六、总结

这篇文章深入探讨了在区块链技术中实现隐私保护和监管合规之间平衡的方法和实践。通过结合诚实地址集、zk-credit 和会员证明的创新应用,我们演示了如何在遵守监管标准的同时维护用户隐私。重点不仅限于技术和系统架构,还包括工程实践和用户体验性能的增强。我们的目标是建立一个安全、高效的区块链系统,提供卓越的用户体验。第二代隐私交易协议代表着向前迈出的一步,意味着更美好的明天,隐私不仅仅是一个功能,而是一种常态。


相关赛道:
来源
免责声明:以上内容仅为作者观点,不代表Followin的任何立场,不构成与Followin相关的任何投资建议。
喜欢
54
收藏
17
评论