LambdaClass技术负责人Federico Carrone 于今日在推特上介绍了用于检测ETH地址匿名性的开源工具Tutela。并科普了Tornado cash的匿踪原理与该工具背后的技术原理。

Tornado cash 与匿名集

我们在LambdaClass 为Tornado Cash 进行了一系列工作,Tornado Cash 是一个混币器,它允许用户存入以太币,并透过另一个帐户提款,打破两个钱包在链上的关联。以下是关于该项目的讨论,其中包含我们正在做的事情的详细资讯:

目前,Tornado Cash 允许你在池中存入特定数量的以太币,存入后你会收到一份链上证明,你可以再之后使用此证明将存款提取到你选择的任何一个钱包地址。其逻辑是,因为有很多人会在同一个资金池存入相同数量的以太币,因此每次提款都可能会是这些人中的任何一个,这个概念被称为「匿名集(Anonymity Set)」。

随着存款数量的增加,资金池的隐私性也将随之提升,因为每笔存款都会与其他存款混合再一起。不幸的是,用户可能会因为很多因素,在使用Tornado cash 时损害了自己的隐私。这不仅对滥用应用程式的用户不利,同时也削弱了所有存款者的隐私,为什么会这样呢

因为如果存款与取款地址因为某些原因而被找到关联性,便可以推断其余提款与存款与此地址没有关连,换句话说,该地址将不再是匿名集的一部分!这就是为什么Tornado cash 社群发起了一项赏金计画,我们与史丹佛大学的一个团队一起参与其中,以帮助该平台的用户。我们正在创建一个工具,让用户能够知道每个资金池的匿名集的真实大小,并帮他们找出影响地址匿名性的潜在错误操作。

我们开发了一系列启发式与工具,使我们能够找出具有关联性的存款和提款地址。以下是我们对这些启发式的个别解释。我们还有很多工作正在进行中,我们正在将它们迁移到Julia 和Pluto。你也可以在这里看到代码与实作!

启发式1:提款时重复使用存款地址

这是最简单且直观的启发式,如果用户从一个钱包存款并使用同一个钱包取款,他们的匿名性就完全无效了。

启发式2:使用特殊的Gas 价格

许多钱包都有自己的Gas 价格估算系统。但是,如果用户手动设置了欲支付的Gas 价格,该自定义价格会被钱包储存并作为其他交易的默认价格。这意味着,如果我们能在存提款的交易纪录中找出唯一一组Gas Price 设置相同的钱包地址,就能将两个地址视为具有潜在关联性,这就是我们启发式2 的逻辑。

启发式3:Tornado Cash 之外的钱包地址关联性

第三个启发式的概念是对存提款地址在Tornado Cash 平台以外进行的交易进行分析,若某一对存提款地址曾与某一个第三方地址多次交互,便可以假设这一对存提款地址属于同一个实体。

这种启发式的逻辑很简单,但要实现并不容易,因为需要分析整个以太坊的链上交易数据,玄找这些地址之间的交易并经过大量的计算才能找出关联性。

启发式4:多重面额揭露

假设你存入3×10 ETH、2×1 ETH、1×0.1 ETH,最终提出32.1 ETH,在这种情况下匿名集将减少至混合相同面额的地址,如果没有其他钱包地址混合了同样面额的以太币,那就能将存提款地址串连起来。

启发式5:匿名挖矿的错误使用

匿名挖矿是一种透过奖励的方式提升匿名性的激励措施,奖励为「匿名积分」,多寡则取决于用户留在池中的时间长短。

用户存入以太币后,Tornado Cash 会在每个区块给予固定数量的「匿名积分」,当用户提款后,可以领取这些积分,而提领的积分数量会被纪录在交易中。

因此,如果用户使用相同的提款或存款地址来提领匿名积分,就可以计算出资产在池中的区块数量!然后我们只需计算存款或取款在哪个区块即可找出对应的相关地址!针对启发式5 的工作还在进行中,但至今为止我们已找出385 个地址之间的关联。

检测地址匿名性的开源工具Tutela

这些启发式算法由众多参与者共同努力构建,应用程式目前仍处于开发阶段,但你可以使用Tutela,该工具将显示你输入之特定地址的相关地址和匿名分数。

这是一项有趣的跨学科工作,涉及来自不同领域的人们。与不认识的人一起工作并不容易,但如果有一个共同的目标,情况就不一样了。由Tornado Cash 社群共同构建的产品是DAO 力量的另一个实例。