首页 > 百科 > Zcash、Monero 等隐私最强之盾真的安全吗?了解侧信道攻击
巴比特资讯  

Zcash、Monero 等隐私最强之盾真的安全吗?了解侧信道攻击

摘要:斯坦福大学最新研究成果,侧信道攻击会对 Zcash、Monero、零知识证明等系统的隐私性构成威胁。原文标题:《洒脱喜一周评 | 隐私最强之盾遭遇威胁,区块链如

斯坦福大学最新研究成果,侧信道攻击会对 Zcash、Monero、零知识证明等系统的隐私性构成威胁。

原文标题:《洒脱喜一周评 | 隐私最强之盾遭遇威胁,区块链如何抵御侧信道攻击?》
撰文:Dan Boneh 等,斯坦福大学教授
编译:洒脱喜

在游戏《最终幻想》中,来自兰迪斯共和国的全能战士巴修被称为最强之盾,他身经百战、勇猛果断,被子民视为英雄。而在区块链世界,Zcash、门罗币、零知识证明等存在,也被称为隐私的最强之盾,它们可以有效确保交易信息不被泄露,然而,这个世界真的存在密不透风的墙吗?

本期的学术分享,我们重点推荐斯坦福大学教授 Dan Boneh 等人最新的研究成果《针对匿名交易的远程侧信道攻击》。

Zcash、Monero 等隐私最强之盾真的安全吗?了解侧信道攻击图片来自:tuchong.com

比特币作为最大的加密货币,其交易其实并不是匿名的,众多学术研究已经表明,比特币的交易图可以被有效去匿名化,即使是很多所谓的匿名加密货币也是如此。

而对于那些希望在公共区块链上获得交易隐私的用户而言,像 Zcash、门罗币(Monero)这样的匿名加密货币系统,因使用了相当高级的密码学原语,例如简洁零知识证明(zkSNARKs)和环签名(ring signatures),从而提供了更高程度的不可链接性。那使用这样的系统,用户可以高枕无忧了吗?

实际上,尽管它们拥有了强大的密码学原语保护,但还是会存在一些协议层的隐私攻击方式会对这些系统的隐私性构成威胁,这也是斯坦福大学教授 Dan Boneh 等密码学大牛最新的研究成果。

注:研究者向 Zcash 和 Monero 安全团队披露了这些攻击,并且他们已在最新版本客户端中修复了相关漏洞。例如,Zcash v2.0.7-3 版本客户端引入了初始修复,v2.1.1-1 版本客户端为区块处理中的时间侧信道引入了进一步的修复。而 Monero 则在 v0.15.0 版本客户端中引入了修复。将客户端更新到最新版本的用户,将不易受到此类攻击的威胁。另外,由于攻击需要监视和参与 Zcash 或 Monero 网络,因此此类攻击并不能追溯以往的交易。

匿名支付系统的架构

在描述相关攻击之前,我们先来了解下隐私加密货币(以 Zcash 和 Monero 为例)的一些核心设计概念。这些加密货币是建立在比特币的 UTXO (未花费交易输出)模型之上的,即每笔交易会花费以前交易的输出,并产生新的输出。这些 UTXO 的集合会记录在区块链中,并表示流通中的总货币。

货币的每个用户都拥有一个或多个公钥(也称为地址),并且连接到 P2P 网络以发送和接收交易。

隐私目标:在比特币中,UTXO 是一个(amount,pk)元组(tuple),其中 pk 代表接收者的公钥。为了以后使用这个 UTXO,接收者在相应的密钥下生成一个签名。这样,一笔交易就显示了所用货币的数量、资金的来源(即使用了哪些 UTXO)及其目的地(即新 UTXO 所有者的公钥)。

此外,用户的公钥可链接至其向网络发送交易时连接到的 P2P 节点。

而 Zcash 和 Monero 等匿名加密货币,旨在提供以下更强的隐私保障:

  1. 保密性:交易不披露交易金额;
  2. 不可追踪性:当交易花费 UTXO 时,很难识别交易生成了该 UTXO;
  3. 不可链接性:给定两笔发送到网络的交易(最多有一笔是由对手发送),则对手无法判断它们是否支付相同的地址。此外,给定两个地址,对手无法确定它们是否属于同一用户;
  4. 用户匿名:给定用户地址(即公钥),对手无法确定该地址的所有者如何连接到 P2P 网络;

而这些隐私保障,通常是通过密码学技术的组合来实现的,下面我们将简单地描述下这些技术:

  1. 保密交易技术(CT)隐藏了交易资金的数额,一笔保密交易的 UTXO 形式为 (Commit(amount), pk),也就是说,它们只显示交易金额的密码学承诺。交易还包括证明其总余额为 0 的一个证明。
    2.UTXO 匿名集通过隐藏交易输入的身份提供不可追踪性。具体来说,匿名交易不会显示它花费的 UTXO,而只显示一个超级 UTXO 集,以及这个集合中某些 UTXO 所有权的零知识证明。
  2. 混淆及多样化地址保证不可链接性。为了防止发送到同一地址交易的可链接性,匿名交易的 UTXO 包含一个「混淆」公钥(例如,Zcash 中对该密钥的承诺)。多样化地址(或 Monero 中的子地址)使得用户能够匿名地与多个实体进行交易,而无需管理多个密钥。通过单个密钥 sk,用户可以创建多个公钥 pk1,…… pkn。这些密钥是不可链接的:很难确定两个公钥 pk、pk0 是否来自于同一个密钥。

区块链扫描是不可链接性的技术后果。由于匿名交易的 UTXO 并不会清晰显示接收方的公钥,因此用户必须扫描每笔新交易并执行各种密码学操作,以检查交易是否和它们有关。

用户匿名性由不可追踪性和不可链接性保证。由于交易不会显示发送方或接收方的公钥,因此用户的公钥不能链接至其用于发送或接收交易的 P2P 节点。

Zcash、Monero 等隐私最强之盾真的安全吗?了解侧信道攻击图 1:匿名交易生命周期中的侧信道

(1)用户的钱包创建一笔交易,这涉及到生成一个密码学证明。此计算可以在本地执行,也可以外包给远程服务。(2) 钱包将新交易发送到 P2P 节点,P2P 节点将其广播到网络中。(3) P2P 节点与连接的钱包共享接收到的交易,连接可以是本地的或远程的。在交易创建期间,对手 1a 可以计时外包的证明生成,以泄漏某些交易秘密。在处理一笔新交易时,钱包作为交易的收款人时,其行为可能会发生变化。如果钱包连接到远程节点,这可以由观察钱包和节点之间通信模式的对手 1b,或控制该节点的对手 3 来推断。如果钱包和节点位于同一位置,则与用户的 P2P 节点交互的对手 2,就可以推断钱包行为的变化。

匿名交易的生命周期。图 1 说明了如何通过 P2P 网络创建匿名交易,并与节点和钱包进行共享:

  1. 为了发送新的交易,用户的钱包选择一些 UTXO,并产生零知识交易有效性证明;
  2. 交易被发送到连接至钱包并与网络共享的 P2P 节点。P2P 节点将这些交易存储在它们的「存储池」(Mempool)中;
    3.P2P 节点与连接的钱包共享这些交易。钱包扫描每一笔新交易,以检查它是否是交易的收款人。一旦一笔交易被纳入区块当中,就会执行步骤 2 和步骤 3。当一个区块被挖掘时,该区块及其包含的交易将被广播到所有 P2P 节点。然后区块的交易就和用户的钱包进行共享了。

攻击结果

了解完匿名支付系统的架构,我们来简单认识下研究者提出的攻击,究竟会带来什么样的后果。

据悉,这些攻击是利用了系统不同部分泄露的通信模式或时间信息,攻击者通过系统的方法,观察匿名交易在系统中的生命周期。在每一步,研究者都会寻找侧信道,并评估它们对用户隐私的影响。

在图 1 所示的匿名交易生命周期当中,攻击者可在这些步骤中的每一步观察侧信道信息,并尝试了解有关交易的信息,例如:预期收款人的身份(例如,他们的公钥或他们的 P2P 节点的 IP 地址)、交易转移的资金量或资金来源。

下面是研究结果:

1、在 Zcash 中,用户的钱包和 P2P 节点是在单个进程中运行的。钱包通过尝试使用它的密钥对其进行解密,以检查它是否是每个传入交易的收款人。而这导致了侧信道泄漏的两个来源:(1)如果解密成功并且解密的交易(称为 Note 纯文本)格式正确,则钱包将执行额外的 Pedersen 承诺校验 ; (2)如果解密成功,但是解密的交易格式不正确,则钱包会抛出一个异常,而该异常会传播到节点的 P2P 层。

在第一种情况下,执行额外 Pedersen 承诺检查所花费的时间,会导致 P2P 节点对后续网络消息的响应出现延迟。

因此,研究者提出了一种称为 PING 的攻击,攻击者可使用 ping 响应中的延迟,来推断节点是否为交易的收款人。这破坏了交易的不可链接性。

在第二种情况下,研究者提出了一种 REJECT 攻击,其中攻击者小心地处理格式错误的交易,在已知(但匿名)公钥下对其进行加密,并将其发送到目标 P2P 节点。如果解密成功,则会触发异常,并且目标节点将明确的「reject」消息发送回攻击者。

攻击者在收到此消息后,其就能知道所选的公钥属于目标 P2P 节点的所有者,而这违反了匿名性。

有关 PING 和 REJECT 攻击的详细信息,有兴趣的读者请参见原论文第四节。

2、对于 Monero 而言,其钱包和节点也在单独的进程中运行,研究证明,支付接收会更改钱包及其节点之间的通信模式。

如果钱包连接到远程节点(在移动钱包中很常见,或者在首次与网络同步时很常见),则被动网络对手可以推断该钱包是否是最近交易的收款方。(有关细节,请参见原论文第五节)

此外,即使用户的钱包和节点位于同一位置,研究者也表明,远程对手可引起和观察节点资源的锁竞争 (Lock Contention),来推断钱包到节点的通信模式。

研究者在广域网中验证了这种时间攻击,一位位于伦敦的攻击方可推断受害者(在苏黎世运行的节点和钱包)是否收到了付款。

对于 Zcash 和 Monero 而言,这类攻击使远程对手能够通过识别每个交易收款人的 P2P 节点来链接匿名交易。如下面所述,攻击可进一步被利用于:(1)根据用户的公钥识别其 P2P 节点的 IP 地址;(2)打破属于同一用户的各种地址的不可链接性。

对于 Zcash,这些攻击还能够:(3)在给定用户公钥的情况下远程导致 Zcash 节点崩溃,以及(4)在涉及用户长期秘密查看密钥的(非恒定时间) ECDH 密钥交换上创建远程时间侧信道,这可能导致查看密钥的泄漏。

这些攻击可能会使关注隐私的加密货币用户处于危险之中。例如,将用户的匿名公钥链接到其 P2P 节点的对手,可以发现用户的真实身份或位置,一个打破不可链接性的对手,可以推断哪些 P2P 节点属于正在进行交易的用户。

3、 zkSNARK 生成中的侧信道,此外,研究者还观察到,在 Zcash 中,生成 zkSNARK 的时间不是恒定的,而是取决于交易金额的汉明权重(hamming-weight)等秘密信息。研究实验表明,目前的 zkSNARK 实现在实际中并非是零知识的:从时间泄露中收集的信息会使零知识属性失效。如果对手能够测量 zkSNARK 生成过程的运行时间,则可以提取此信息。当然,正如下文所解释的,在当前的 Zcash 系统中,可能很难利用这种泄漏。

攻击方式概述

了解完了攻击带来的后果,我们重点来认识下这类通用攻击方式,以及针对 zkSNARK Prover 的时间攻击,而针对 Zcash 和 Monero 的具体攻击方式,则省略不谈。

威胁模型

本文所描述的攻击属于远程侧信道攻击。因此其并不要求受害者的软件被替换,我们可以考虑这样一个远程对手,如图 1 所示:

  1. 一个网络对手(图 1 中的对手 1a 和 1b)监视受害者钱包和远程服务(例如节点或验证程序)之间的加密通信量。
  2. 一个 P2P 对手(对手 2)参与 P2P 网络。攻击者可能会偏离 P2P 协议。
  3. 一个远程节点对手(对手 3)控制一个第三方 P2P 节点,并监视受害者的钱包与该节点之间的(明文)通信。

攻击类型一:接收方侧信道

研究发现,最实用和最普遍的侧信道攻击,会影响图 1 所示的匿名交易生命周期的最后阶段(即钱包处理新交易时)。这些攻击使远程对手能够破坏系统的不可连接性和匿名性保证。

这种攻击利用了相关匿名加密货币普遍存在的设计缺陷,即用户的钱包会定期检查它是否是任何新交易的收款人。

目标:这类攻击针对的是交易不可链接性和用户匿名性。因此,攻击者的目标是:(1)确定两笔交易是否支付相同的地址,(2)确定已知地址的用户如何连接到 P2P 网络。

这种攻击针对的是钱包与 P2P 节点的常见部署,其实际目标是识别交易收款人正在使用的 P2P 节点。在多个用户将其本地钱包连接到共享远程 P2P 节点的设置中,网络对手或远程节点对手发起的攻击,可进一步识别出交易收款人使用的实际钱包。

这里考虑两种不同的攻击场景:

  1. 对手知道一个匿名公钥,并向该密钥发送一笔交易,以确认密钥所有者用于接收交易的 P2P 节点(或钱包)。
  2. 诚实的用户发送一笔交易,对手不知道预期的收款人或其公钥。对手决定交易的收款人使用哪个 P2P 节点(或钱包)。

实际上,后一种攻击场景包含了第一种情况,因为对手可以将精心编制的交易发送到已知公钥。后一种场景会直接导致交易不可链接性的中断。

给定发送到网络中的两笔交易,对手只需要确定两笔交易的收款人是否使用了相同的 P2P 节点还是钱包。此外,这两种攻击场景都代表了用户匿名性的中断,并且可被用于其它隐私侵犯:

1.IP 地址恢复,对手可以将公钥链接到所有者 P2P 节点的 IP 地址(如果连接到远程节点,则可以链接到其钱包),除非所有者使用匿名工具(如 Tor)。而此信息可被用于识别受害者,并对其进行地理定位。
2. 链接多样化地址,给定两个公钥,攻击者可以确定它们是否属于同一用户。攻击者向每个公钥发送一笔交易,并检查是否标识了同一节点或钱包。这打破了多地址的不可链接性。
3. 恢复私钥,这些攻击背后的漏洞,也为通过时间侧信道提取受害者的「查看」密钥开辟了途径。窃取此密钥,可以让对手将发送给受害者的所有交易链接起来(但无法窃取受害者的资金)。

攻击策略

研究者的攻击利用了加密货币钱包(收款人和非收款人)处理交易的方式差异。

这种钱包行为的差异,其本身并不是问题,因为远程攻击者无法直接与用户的钱包交互。然而,研究发现,由于各种设计缺陷,钱包行为的差异影响了钱包与其 P2P 节点之间的交互。反过来,这就使得远程攻击者可通过各种侧信道推断钱包到节点交互的变化。

对此,研究者提出了两种通用攻击策略:

  1. 策略 1,钱包到节点通信的流量分析。如果钱包连接到远程节点,则网络对手或远程节点对手可观察钱包到节点交互的变化。
  2. 策略 2,从 P2P 层推断钱包行为。如果钱包和节点位于同一位置,则远程对手无法观察它们的交互。然而,如果钱包行为的变化,影响了用户的 P2P 节点和远程对等节点之间的交互,信息仍然会泄漏给对手。

这两种策略,不仅适用于在创建交易并将其发送到 P2P 网络时,而且也适用于将其包含在区块中时。在这一点上,区块及其所有交易都与每个对等方共享,钱包重新处理交易以确保它们有效(例如确保它们没有双花)。

攻击类型二 : 发送方侧信道

上面描述的攻击,打破了匿名加密货币交易的不可链接性以及用户的匿名性,这是利用了 P2P 客户端和钱包系统设计中的缺陷。因此,它们并不是直接针对协议密码学保护的攻击。为了扩大对匿名交易中侧信道漏洞的调查范围,研究者还对密码学工具展开了研究,而这些工具保证了交易创建时的机密性和不可追踪性,论文中特别提到的,便是当前加密货币行业使用最多的简洁零知识证明 zk-SNARKs。

注意,这部分描述的攻击实际上更偏向于理论性质。虽然它们不太可能影响到当前的用户,但这类攻击的存在,再次说明了无侧信道密码学实现对于匿名系统的重要性。

攻击目标:负责确保交易保密性和不可追踪性的交易发送者。

正如下面讨论的,远程攻击最可能的目标是恢复交易金额,从而破坏交易的保密性。

然而,针对交易创建的远程侧信道攻击,实际面临着很多挑战:

  1. 非交互性:用户可以在不与任何其他方交互的情况下创建交易;
  2. 短暂秘密:许多交易秘密(例如交易金额,以及与 UTXO 相关的秘密)是一次性的。因此,即使存在一个侧信道,对手也可以尝试一次提取这些秘密;
  3. 高熵秘密:用于创建交易的长期秘密(例如用户的密钥)具有高熵,并要求提取高精度的侧信道;

研究表明,对手理论上可以克服这些挑战,其目标是交易创建过程的证明阶段,并旨在(部分)揭露交易的保密金额。

我们知道,零知识证明是匿名交易的基本构建技术,在 zk-SNARK 协议中,证明者(prover)有一些秘密输入(称为 witness),并使验证者(verifier)确信该 witness 满足给定的断言,而不透露关于 witness 的任何其他信息。在 Zcash 和 Monero 中,此类 proof 证明了交易的有效性,同时保留了交易的隐私性。例如,在 Zcash 中,证明 witness 包含已用 UTXO 的列表、接收者地址、交易金额,以及保证这些 UTXO 存在并且属于支出者,且所有资金都转移至接收者的证明。

zk-SNARK 证明者中的时间侧信道。研究者的论题是,在当前的 zk-SNARK 实现中,生成证明所花费的时间,会泄露有关 prover 秘密 witness 的信息,特别是关于花费币的数量,然而,如上所述,由于交易创建的非交互性质,远程对手可能很难在证明生成过程中获得时间侧信道。而更糟糕的是,证明生成的时间可能不足以提取短暂或具有高熵的秘密。

尽管存在这些挑战,但我们在下文中指出,在某些部署方案中,对匿名加密货币的 zk-SNARK prover 进行远程时间攻击是可能的,并且演示了证明生成时间,可以泄露有关秘密交易额的重要信息。

关于非交互性,研究者提出了两个观察结论:

  1. 如果弱客户端(例如移动钱包)将证明外包给远程服务,则网络对手可以计时 prover。虽然证明外包的情况并不常见,但 Zcash 协议是支持这项功能的,远程证明服务是为早期版本的协议设计的,因而,会有一些用户可能会选择将证明委托给远程服务;
  2. 更一般地说,对手可以通过监控 P2P 网络来获取有关交易创建过程何时开始的带外信息,并观察何时结束。例如,用户可以设置定期付款,其中交易是在固定时间创建的。对手还可以触发一笔交易,以作为某些外部协议的一部分。研究者为数字签名绘制了一个时间侧通道连接。虽然签名是非交互的,但使用它的协议(例如 TLS)可以引入远程侧信道。

对于攻击者而言,攻击的目标就是交易量,这是一个非加密值,即使是粗略的近似值(通过单个时间测量泄漏)也构成了对隐私的侵犯。

攻击策略。研究者考虑了一种利用算术运算中的时间变化(取决于操作数的值)密码学时间攻击。

研究利用了这样一个事实:产生证明的时间与 prover 的 witness 值有关。由于 witness 包含交易金额,攻击的目标就是该金额与证明时间有关。例如,Zcash 的证明将交易量分解为 bit,并为每个非零 bit 计算一次椭圆曲线运算。因此,证明时间与交易金额的汉明权重是密切相关的,也就是说,证明时间与交易金额的值也是相关的。

关于 zkSNARK Prover 的时间攻击

下面,我们进入到 zkSNARK Prover 的时间攻击部分,按照上面描述的策略,我们的目标是从证明生成的单个时间度量中,恢复有关保密交易金额的信息。

在下面的部分当中,研究者演示了这种时间攻击如何揭示 Zcash 中有关交易量的信息。

而对于 Monero 中实现的特殊用途证明,类似的攻击则是无效的。

Zcash Prover 中的时间侧信道

研究者表示,对于 Zcash 的 zkSNARK 系统,证明时间在很大程度上取决于证明者 witness 的值。也就是说,对于匿名交易,证明时间与交易的秘密值是密切相关的。

为了发送一笔交易,发送方创建两个证明,其中一个证明已花费 UTXO 的所有权,另一证明新的 UTXO 是结构良好的。

Zcash 使用的是 Groth16 证明系统,对于攻击目的而言,只要知道证明者将 witness 编码为一个向量(a1,……,am)字段元素,并且证明者的主要计算是以下形式的「多重指数运算」:

Zcash、Monero 等隐私最强之盾真的安全吗?了解侧信道攻击

其中 Gi 是固定的椭圆曲线点,重要的是,Zcash 的实现优化了 aiGi,其中 ai = 0。因此,证明时间与证明者的 witness 中非零字段元素的数量相关。

由于 witness 中的交易量是二进制编码的,其汉明权重值就会影响证明时间。而且,由于二进制表示的权重,与数字的绝对值相关,因此证明持续时间泄露了有关保密交易金额的信息。

评估

为了评估时间攻击,研究者进行了一个实验。

下图显示了每个量的证明时间的平均值及标准差。结果显示,证明时间与交易金额具有很强的相关性(R=0.57)。虽然时间泄露只能得出金额的粗略近似值,但这足以让对手识别出价值巨大的罕见交易。

Zcash、Monero 等隐私最强之盾真的安全吗?了解侧信道攻击图:Zcash 中交易金额和证明者时间之间的相关性,相关系数为 R = 0.57

讨论和结论

与论文中提到的针对 Zcash 和 Monero 的攻击(已被修复)相比,上述时间攻击是不容易应用的,它要求对手可以对证明生成进行计时,这取决于用户的常用模式(例如重付款)或部署策略(例如,将证明外包给远程服务)。

如果确实存在计时机会,研究表明这种泄露会允许攻击者对私人交易金额进行粗略估算。

当然,本地侧信道攻击会是更加有效的,然而,Zcash 明确地否认了这种威胁。

最终,这种攻击的存在,对于非恒定时间加密货币实现而言,可能会带来潜在的威胁。Zcash 开发者正在开发一个更成熟版本的椭圆曲线算法,并可能在未来部署到主客户端中。

洒脱喜简评:这类攻击的提出,为匿名交易系统的设计带来了新的挑战。研究者希望这项工作能够提醒相关项目方及用户关于侧信道泄露的威胁,并推动开发诸如恒定时间的 zkSNARK prover 之类的密码学原语实现。

免责声明
世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。