GingerWallet 是由 zkSNACKs 前员工维护的 WasabiWallet 的分叉,遇到了一个重大漏洞。值得注意的是,开发者 drkgry 披露了这个漏洞,它可能允许恶意协调者在 coinjoin 回合中完全取消匿名化用户的输入和输出,从而完全抵消 coinjoin 过程可能提供的任何隐私好处。
Wasabi 2.0 是对 Wasabi coinjoin 协调方法的全面重新设计。新系统从使用固定面额混合金额的 Zerolink 框架过渡到允许动态多面额金额的 Wabisabi 协议。这种转变需要从同质盲令牌转向称为密钥验证匿名凭证 (KVAC) 的动态凭证系统。这个创新的系统允许用户注册盲法金额,防止其他用户的硬币被盗,而不会向服务器透露可能相关的明文金额,从而防止单独输入的所有权链接。
当用户开始参与轮次时,他们会从协调器服务器请求有关轮次的信息。服务器使用 RoundCreated 参数中名为 maxAmountCredentialValue 的值进行响应,这是服务器可以颁发的最高值凭据。可以根据此处设置的值来识别每个凭证颁发。
但是,为了节省带宽,客户端交叉验证此信息的几种建议方法从未实施过。此遗漏允许恶意协调器在用户开始注册其输入时为每个用户分配唯一的 maxAmountCredentialValue。因此,在发送给协调器的后续消息中,协调器可以根据此值识别用户。
通过使用唯一标识符“标记”每个用户,恶意协调者可以辨别哪些输出归哪些用户所有,从而抵消了 coinjoin 带来的所有隐私好处。
值得注意的是,drkgry 似乎是独立发现并真诚地披露的。然而,在 Wabisabi 的设计阶段在 zkSNACKs 的团队成员完全意识到了这个问题。
Yuval Kogman,也被称为 nothingmuch,在 2021 年提出了这个问题。Kogman 是设计了后来的 Wabisabi 协议的开发者,也是与 István András Seres 一起实际指定完整协议的设计者之一。
不幸的是,如果没有 Kogman 的建议,以及他在讨论标记攻击的原始拉取请求中提出的绑定到实际 UTXO 的完全所有权证明,标记漏洞就没有得到充分解决。发送到客户端的数据未绑定到特定的轮次 ID,这意味着恶意协调者仍然可以通过为用户分配唯一的轮次 ID,然后简单地复制必要的数据并在发送任何消息之前为每个用户重新分配每个唯一的轮次 ID 来执行类似的攻击。
这并不是当前 Wasabi 2.0 实施中的唯一漏洞。这些漏洞是开发团队在实施阶段偷工减料的结果。这里需要吸取的教训是稳健和安全设计的重要性,尤其是在处理需要高度隐私和安全的敏感金融交易时。
发布视图: 600