本文介绍了以太坊上的隐私解决方案Semaphore及其应用MicroMix,阐明了Semaphore在提供用户交易隐私方面的重要性,以及其实施的技术细节和实际应用。Semaphore允许用户匿名广播信号并防止重复信号,从而实现了安全的交易混合。本文还探讨了未来的计划以及如何使用Semaphore进行更多零知识应用。
铁路信号灯。来源:WikiMedia Commons
今年,以太坊经历了一种隐私的复兴。在社区中著名成员的鼓励下,研究人员、程序员和DAO资助者合作加速了隐私解决方案的构思和实施,特别是那些使用零知识证明的解决方案。我们现在正处于一个关键的隐私构件从研究阶段进入生产阶段的时期:Semaphore,一种匿名信号传递的手段。
Semaphore 是一个名为 MicroMix 的ETH和ERC20代币混合器的基础。在不久的将来,它可以用于其他隐私增强应用,例如匿名登录、匿名DAO、匿名投票和新闻报道。
这篇技术博客文章将解释Semaphore和MicroMix的工作原理,以及Semaphore如何使MicroMix以非托管的方式为用户提供交易隐私。它还将描述其性能和权衡,最后概述Semaphore如何启用其他原本不切实际的零知识应用。
读者应该了解以太坊智能合约的工作原理和一些基本加密知识,但不需要熟悉零知识证明。
Semaphore最初由Barry WhiteHat、Harry Roberts和Kobi Gurkan构思,它是一个系统,允许任何以太坊用户对一个任意字符串表示支持,且只揭示他们已被先前批准这样做,而不显露他们的具体身份。具体来说,它允许用户:
(i) 匿名证明他们的身份属于注册身份集合,同时:
(ii) 在合约中公开存储一个任意字符串,仅当该字符串对用户及合约当前的外部无效标识符是唯一时(稍后再对此进行详细说明)。这意味着在相同的外部无效标识符下,无法对同一信息进行双重信号广播。
Semaphore 由智能合约和零知识证明组件组成,这些组件协同工作。智能合约处理状态、权限和链上证明验证。零知识组件在链下工作,使用户能够生成证明,如果这些证明是有效的,智能合约则可以更新其状态。
当用户注册其身份时,他们只需将一个EdDSA公钥的哈希值和两个随机密钥发送到合约,合约将其存储在Merkle树中。此哈希称为身份承诺,随机密钥即为身份无效标识符和身份陷阱。
广播信号则更复杂,有两个部分:(a)匿名证明注册用户集合的成员资格,以及(b)通过外部无效标识符防止双重信号。
零知识证明允许用户在不揭示部分或全部数据的情况下证明他们在某些数据上进行了定义好的操作。
Semaphore使用一种称为zk-SNARKs的零知识证明形式。虽然zk-SNARKs的工作原理超出了这篇文章的范围,读者可以参考其他材料,例如Christian Lundkvist 的介绍以获取更多信息。
在Semaphore中,用户创建一个关于以下内容的证明:
例如:假设有三个用户:Alice、Bob和Charlie。他们首先在合约中注册身份,合约的外部无效标识符为123
,然后广播他们的信号。由于这是他们第一次广播信号,合约接受他们的交易:
一段时间后,Charlie尝试发送另一个信号,但合约拒绝了它,因为他之前已对外部无效标识符123
进行了信号广播:
然而,如果外部无效标识符改为456
,Charlie现在可以再次发送信号:
这些特性——匿名会员证明和防止双重信号——使Semaphore适合其第一个用例,即链上混合器。
混合器帮助以太坊用户获得隐私,因为其区块链在其他情况下是公开和透明的。混合器就像一个秘密圣诞老人礼物交换:从一组人那里收集具有等值的礼物,然后重新分配。不同之处在于,在一个混合器中,收件人应没有办法知道最初是谁买了礼物。
许多混合器,如Ether Mixer,是托管的和中心化的。不幸的是,这意味着用户必须信任它们不会逃跑或者存储日志,这可能会使存款去匿名化。
非托管和去中心化的混合器则没有这些缺点。它们接受资金存款并在执行提现时提供三个关键保证:
MicroMix使用一个Solidity合约(以下简称Mixer合约),使用Semaphore的实例来强制执行这些保证。当用户存款时,MicroMix在其Semaphore合约中注册一个身份,并在他们提现时广播一个定制信号。由于Semaphore防止双重信号,因此它也从而防止了MicroMix中的双重支出。
此外,MicroMix处理ETH和代币转账,并将费用转移到指定地址。这一费用机制使得能够激励第三方中继用户的提款交易。这意味着收件人不需要已拥有ETH,也不需要存款者找到办法发送所需的小额ETH来完成交易,这样会违背混合器的目的。
MicroMix目前已作为原型在Kovan测试网推出,用户界面非常简单,网址是https://micromix.app。用户界面鼓励用户在UTC午夜之后等候再进行提款,以此增加他们的匿名性。它不告知用户匿名性集的规模,因为这个数字可能会产生误导;攻击者可以通过自己的交易填充存款池,制造庞大匿名性集的假象,从而去匿名化毫无戒心的用户。
MicroMix支持ETH和ERC20代币混合。网站https://micromix.app上的合约和用户界面支持Kovan DAI,用户可以通过在Kovan网络创建MakerDAO CDP在https://cdp.makerdao.com获得。
下面的表格列出了Mixer和Semaphore合约在用户存入ETH时所采取的步骤:
存款示例:
交易哈希: 0x48a382d431185bc82890dd2f1153d66c1b070ed89cccc25fb586afb095567e51
身份无效标识符: 8031d226cb7115017239bad18ecd4564df45f9de1eaf8e593bdc7fd27d10f
身份陷阱: e89e6ecdf7d117ae23fd1b046e3a40123f80e4ae75d5f06a86a1c0b5b5797b
身份承诺: 0xb79092fd0e907d744bc49ef63c2632f90e5c105a232b43647e168fa6faa27f4ac83c00d9
如上所示,Mixer合约负责管理资金,而Semaphore合约仅负责身份注册。这种关注点的分离在用户提款资金时发生的事情的下表中也同样明显:
提款示例:
交易哈希: 0x43e2ca81b7dd4d23fcc8a2191b09ef0a2e7469f23051a8f79052d75b02f8d502
信号: 0x5b062792493047ca4a1221d185ba7bc1fc57062126cc325aa24893357b53aa1a
zk-SNARK证明数据: “a”:[“1077…”,”5651…"], “b”:[[“7028…”,”1337…"],[“1583…”,”1665…"]], “c”:[“1732…”,”7771…"]
根: 10809627771503708857700183002420472828948270490531531173285172676430182712980
无效标识符哈希: 9546065020171513013039253193555976067181611145828641232207963883960520778776
信号哈希: 266960622224311701018629012248271412276308136479127641500588150958540834508
外部无效标识符: 1182878175203544938066023463435688736234343990113
接收者地址: 0x6158E689cae143532864A9502374AB4eE1690681
费用: 1000000000000000
wei
与Mixer一样,其他零知识用例也可以使用Semaphore作为基础层。这是因为关注点分离的原则。例如,Semaphore与混合器合约传递给它的信号的内容无关。混合器合约只处理资金转移,并将零知识信号与双重支出保护的责任委托给Semaphore。
用例: 混合器
外部无效标识符: 混合器的合约地址
信号: 接收者的地址、转发者的地址和费用的哈希。
结果: 只有存款者可以提取资金,双重支出是不可行的。
同样,建立在Semaphore之上的其他应用将遵循相同的原则。具体来说,他们将以不同方式设置Semaphore的外部无效标识符和信号,以达到不同的结果。
例如,服务提供商可以使用Semaphore为隐私导向的客户提供匿名登录,这样当客户登录时,服务提供商只能知道他们是注册客户,但不知道他们是哪个客户。
用例: 匿名登录
外部无效标识符: 服务提供商URL的哈希。
信号: 登录Token(如PASETO)和服务提供商公钥的哈希。
结果: 只有注册用户可以登录,已登录用户可以使用登录Token进行身份验证。
在这个假设的构造中,我们假设用户已经将他们的EdDSA公钥注册于服务提供商,并且该服务是无状态的。当用户匿名广播登录Token的哈希时,服务提供商可以将其保存到他们的数据库并允许认证请求(例如API调用),这些请求包含的登录Token在哈希后与信号匹配。
一次存款交易约需110万Gas,一次提现约需77万Gas。高存款费用主要是由于所有身份承诺都存储在链上,并且选择的Merkle树深度为20。鉴于以太坊主网当前的区块Gas限制为800万Gas,并假设平均区块时间为15秒,填满Semaphore的存款至少需要1个月,前提是每个区块包含最多存款交易。
有兴趣的读者可以在这里查看用于计算此数据的电子表格。还需要进一步的工作,以计算不同树高的Gas成本。
Semaphore团队寻求与其他基于zk-SNARK的混合器和以太坊钱包提供商合作,以汇聚共同的合约、线路以及标准,以提供最佳的匿名性作为公共利益。它还将继续开发其他有用的零知识应用,并支持社区的部署和采用。
对这些话题感兴趣的读者可以随时加入Semaphore Society Telegram频道参与讨论并获取更新,想要获取MicroMix具体更新的读者可以加入MicroMix General Discussion频道。
- 原文链接: medium.com/coinmonks/to-...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!