区块链去匿名化技术研究
1 背景
加密货币是区块链技术的典型应用,依靠分布式共识协议和密码学技术,用户间无需信任授权即可安全地进行交易。自比特币诞生至今,十多年来加密货币生态飞速发展,迄今为止,市场上活跃的加密货币已超过 5000 种。
加密货币巨大的市场规模以及交易账户的匿名性和去中心化特性,导致该市场产生了黑客盗窃、恶意攻击、洗钱、暗网交易等诸多违法行为。由于加密数字货币难以被证明是投资品或者消费品,现有的证券法或消费者保护法对其无法适用。与其他资产相比,加密货币全球“7*24”小时交易的特点使得对其进行有效监管需要更全面和更深层次的全球监管协调。同时,传统的监管技术已经无法适用于加密货币,这些因素共同导致了加密市场在全球范围内普遍缺乏有效的监管。
因此,针对加密货币及区块链平台的数据分析、去匿名化技术在学界和业界得到了广泛关注,识别异常交易、追踪非法资金流动,为全球监管提供支持,提高整个加密市场的透明度、安全性和可审计性具有重要意义。此外,由于传统金融数据的保密性,金融数据挖掘的研究时常受限,而加密货币链上交易记录可访问、可验证、不可变,其中包含着丰富的用户行为模式,为进行金融数据分析和模式挖掘研究提供了宝贵的机会。
当前,针对加密货币流通环节的交易分析及去匿名化研究可以划分为两个主要的研究方向:身份识别和交易溯源。具体而言:
- 身份识别任务主要从区块链的应用层展开,通过对公共交易信息进行分析,挖掘属性和行为特征,进而确定账户的身份类型,如:交易所、矿池、钓鱼/欺诈等。
- 交易溯源任务主要从区块链的网络层展开,通过对P2P网络的流量进行监测和分析,获取交易在节点间的传播路径,进而推测交易始发节点,实现匿名的交易到节点IP地址的映射。
2 身份识别
早期的区块链身份识别方法主要集中在人工特征工程上,这类方法虽然有效,但仍存在一些缺点和挑战。首先,人工特征工程依赖于特征设计者的先验知识,尽管可解释性强,但难以全面捕捉大规模、高维度的区块链交易数据中的底层关系和模式,导致特征利用率低且表达不足。同时,不同区块链平台的技术差异也导致人工特征在平台间的可重用性较低。
当前,从图分析的角度进行加密货币交易数据分析是主流的研究方向。加密货币交易涉及复杂的关系网络,包括参与者间的交互和交易拓扑等。图神经网络(GNN)类方法通过深度学习和节点间的消息传递机制能够有效地捕捉这些复杂的非线性关系,从而更好地建模整个系统的行为,此类方法也在各种下游应用中展现出了比随机游走、矩阵分解和深度神经网络等方法更好的性能。
以下对主流的身份识别方法的介绍将以两个具有代表性的模型——$I^2GL$ 和 $Ethident$ 为例展开。$I^2GL$ 是一种基于图卷积网络(GCN)的身份识别方法,$Ethident$ 是结合了图注意力机制和对比学习方法的身份识别框架。用户身份的多样性和智能合约实施的复杂性,使得针对以太坊的身份识别和数据分析工作更具挑战。因此,对区块链账户身份识别方法的介绍将主要围绕以太坊平台进行。
2.1 $I^2GL$:基于GCN的身份识别方法
$I^2GL$ 是一种基于图卷积网络的区块链账户身份推断方法。其基本思想是将区块链账户及其关联交易呈现为一个图,通过图学习技术将账户表征为具有低维特征向量的节点,根据标记的训练集推断节点身份。
如图1所示,$I^2GL$ 包含三个阶段:图构建、图学习和节点分类。
2.1.1 图构建
$I^2GL$ 首先根据以太坊区块中包含的原始交易数据构造交易图。具体而言:
-
交易图构建为有向图 $G = (V, E)$,其中每个节点 $v \in V$ 表示一个合约账户或外部账户,账户的总数为 $N = \vert V\vert$。
-
集合 $E$ 包含边,每条边可以表示为一个五元组,即 $E = {(v_i, v_j, w, h, r) \mid v_i, v_j \in V; w \in \mathbb{R}^+ \cup {0}; h \in \mathbb{Z}; r \in \mathbb{R}}$。
-
$(v_i, v_j)$ 表示交易的方向从 $v_i$ 到 $ v_j$;权重 $w$ 表示转账的加密货币数量;$h$ 表示交易所在的区块高度,在图中起到时间戳的作用;参数 $r$ 是表示不同类型交易的边的类型,如转账、创建或调用智能合约。
交易图可以被表示为三类矩阵:节点表示矩阵、邻接矩阵、时间密度矩阵。
节点表示矩阵
节点表示矩阵是为了对账户的总体结构和附加信息进行编码,如图2所示,每个节点被表示为一个五维向量 \(\vec{x}_i\),其中特征包括:
-
入度:表示节点收到的交易数。
-
出度:表示节点发出的交易数。
-
加权入度:表示节点接收的加密货币总量。
-
加权出度: 表示从节点发送的加密货币总量。
-
节点类型: 节点是智能合约还是普通用户账户。
邻接矩阵
由于交易图中的边可以表示诸如转账、合约创建、合约调用等多种行为,直接在图中进行加权度量难以有效提取不同行为的所包含的特征。因此,如图3所示,$I^2GL$ 将原始交易图划分为多个子图,使用一组邻接矩阵\(\{A_1, A_2, \ldots, A_R\} \in \mathbb{R}^{N \times N}\),描述交易图中 $N$ 个节点之间的 $ R $ 种边类型。具体而言,主要考虑了四种交易类型:
- 带权CALL,如加密货币转账
- 不带权CALL,如智能合约调用
- CREATION,如智能合约部署
- REWARD,如挖矿奖励
值得注意的是,对于类型1交易,由于账户间转账金额差异巨大,直接使用转账额作为权重可能导致训练过程的下溢或上溢,因此使用启发式方法将转账额划分为三类:(1)小额转账,其交易额小于1 ETH;(2)中等额度转账,其交易额介于1 ETH和10 ETH之间;(3)大额转账,其交易额大于10 ETH。
时间密度矩阵
$I^2GL$ 还将交易的时间特征纳入了考量,相比其他将交易网络建模为静态图的分析方法,能更好地利用交易图中所包含的信息。例如,相较于普通节点,钓鱼/欺诈节点的交易时间方差明显较小,说明这些节点在短时间内活跃度更高。使用时间密度矩阵能更好地捕捉这类特征。用一组矩阵 \(\{T^1, T^2, \ldots, T^R\vert T^r\in \mathbb{R}^{N \times N}\}\) 来描述交易密度,给定序列 \(\{h^r_{ij1}, h^r_{ij2}, \ldots, h^r_{ijm}\vert h^r_{ijk}>0\}\) 作为节点 \(v_i\) 和 \(v_jv_j\) 之间类型为 \(r\) 的 $m$ 个交易的区块高度,交易密度 \(t^r_{ij} \in T^r\) 可以计算为: \(\begin{equation} t^r_{ij} = g\left(\sqrt{Var \left[\frac{1}{m}\sum_{k=1}^{m} h^r_{ijk}\right]}\right) \tag{1} \end{equation}\)
2.1.2 图学习
基于图构建中的矩阵,GCN传播规则如下:
\(\begin{equation} H^{(l+1)} = \delta\left(\sum_{r \in R} \left(T_r \odot (D_r)^{-1}A_r\right)H^{(l)}W_r^{(l)}\right), \quad \forall r \tag{2} \end{equation}\) 其中 \(H^{(l)}\) 是第 $l$ 层的激活矩阵,\(H^{(0)} = X\),\(W_r^{(l)}\) 是属于第 $l$ 层神经网络的用于处理 $r$ 类型交易的权重矩阵,\(\delta(\cdot)\) 表示激活函数,\(A_r\) 是类型 $r$ 的邻接矩阵,\(D_r\) 是类型 $r$ 的对角矩阵,\(T_r\) 是类型 $r$ 的时间密度矩阵,符号 \(\odot\) 表示哈达玛积。
从节点角度看,GCN模型的第 $l$ 层输入为 \(H^{(l)} = \{h^{(l)}_1, h^{(l)}_2, \ldots, h^{(l)}_N \vert h^{(l)}_i \in \mathbb{R}^{N \times d^{(l)}}\}\), \(h^{(l)}_i \in \mathbb{R}^{d^{(l)}}\) 是神经网络第 $l$ 层中节点 \(v_i\) 的隐藏状态,则上式可以表达为: \(\begin{equation} h^{(l+1)}_i = \delta\left(\sum_{r \in R} \sum_{j \in N_i^{r}} \frac{t^r_{ij}} {\hat{c}_{i,r}} W_r^{(l)} h^{(l)}_j\right) \label{A}\tag{3} \end{equation}\) 其中\(N_i^{r}\) 表示与节点 \(v_i\) 相关联的类型为 $r$ 的邻居节点集合,\(t^r_{ij}\) 是从节点 \(v_i\) 到 \(v_j\) 的类型 \(r\) 的交易密度,\(\hat{c}_{i,r}\) 是表示非对称相似性的系数。
这一形式可以很好地展示 $I^2GL$ 对交易图节点二阶相似性和非对称相似性的保留。
二阶相似性
从式\(\eqref{A}\)中可以看出,节点的下一层隐状态是通过聚合该节点一阶邻域(直接相连节点)的当前层隐状态计算得到的,因此从第二层开始,每个节点就整合了其二阶邻域(与其一阶邻域相连的节点)的特征信息。如图5所示,节点 \(v_a\) 与 \(v_c\) 并不相邻,但有着相似的邻域结构。直接依靠邻接矩阵 \(A_r\) 中的边权重 \(a_{ij}^{r}\) 得到的一阶相似性难以提取到这种联系。但通过一阶相邻节点 \(v_b\),节点 \(v_a\) 可以聚合到节点 \(v_c\) 的特征,反之亦然。由此即可捕捉到节点的二阶相似性,进而提高身份推断的准确性。
非对称相似性
式\(\eqref{A}\)中引入了系数 $\hat{c}_{i,r}$,定义为:
\(\begin{equation} \hat{c}_{i,r} = \frac{1}{g(d^r_i) \cdot |N^r_i|} \tag{4} \end{equation}\) 其中,$d^r_i = \sum_j a^r_{ij}$,$g$ 是一个压缩函数,\(\vert N_i^{r}\vert\)用于归一化。可以看出,$\hat{c}_{i,r}$ 与节点 $v_i$ 的出度相关,因而可以区分节点 $v_i$ 指向 \(v_j\) 和 \(v_j\) 指向 $v_i$ 之间的非对称关系。
例如图6所示,在交易图中,假设节点 \(v_a\) 是一个用户,而节点 \(v_b\) 和 \(v_c\) 是交易所账户。边 \((v_a, v_b)\) 代表存款过程,边 \((v_c, v_a)\) 是提款过程,边 \((v_b, v_c)\) 代表交易所内部账户之间的存款移动。在对称模型中,这三条边权重应该相等,即 \(w_{ab}^r = w_{bc}^r = w_{ca}^r\)。但实际场景中,边 \((v_a, v_c)\) 和 \((v_c, v_a)\) 具有不同的语义,存款和提款行为在分析时应该有所区分,不能一概而论。因此,需要引入系数$\hat{c}_{i,r}$来增大节点的入边和出边在图嵌入中的差异,以保留节点间的非对称相似性。
2.1.3节点分类
$I^2GL$ 使用交叉熵损失函数作为训练目标:
\(\begin{equation} L = -\sum_{i=1}^{T} \sum_{j=1}^{m} y_{i,j} \log p_{i,j} + \lambda\lVert \theta \rVert^2 \tag{5} \end{equation}\) 其中,\(T\) 是训练样本数量,\(y_{i,j}\) 是节点 \(v_i\) 属于类别 \(j\) 的真实概率,\(\theta\) 是所有参数的集合,\(\lambda\) 是L2正则化的系数。最后一层GCN的输出是一个概率矩阵 \(P = \{ \vec{p}_1, \vec{p}_2, \ldots, \vec{p}_N \}\),其中向量 \(\vec{p}_i\) 包含将节点 \(v_i\) 分类到 $m$ 个类别中的概率。
2.1.4 效果
论文以2018年1月1日到2018年3月31日期间的116,293,867笔交易,作为图构建的输入。通过解析交易,获得了16,599,825个活跃账户,包括14,450,993个外部账户、2,148,831个智能合约账户。
如图8所示,在身份识别任务中对比DeepWalk、PARW、rGCN等方法,$I^2GL$ 在精准率、召回率和F1值等指标方面均有明显优势。GCN技术对图全局结构的感知使得分类效果明显基于随机游走的方案,同时$I^2GL$ 还针对区块链交易图的结构和特性进行提出了优化方案,更全面地保留了图中的信息和特征,使模型的性能得到了较大提升。
$I^2GL$ 作为一种基于图卷积网络的区块链账户身份识别方法主要的创新之处可以概括为以下四个方面:
- 多类型邻接矩阵:构建了多种类型的邻接矩阵来描述区块链交易图中节点之间的各类交易活动,如转账、合约创建等。这种异构性的建模是其区别于传统单一邻接矩阵的创新点。
- 多层图卷积网络:通过构建多层的图卷积网络,递归地捕捉到节点间的高阶相似性,与单层网络方法相比能更好地捕捉交易图结构的特征。
- 非对称相似性:引入了非对称系数,保留了交易图中边的方向所包含的语义,编码了节点间的非对称关系。
- 交易密度矩阵:根据不同类型账号活跃时间分布的差异,构建了交易密度矩阵,反映了节点间联系的时间变化特征。
图9对比了$I^2GL$ 不同变体的性能,清晰地显示了每种技术所起的作用:
-
对比使用单一邻接矩阵和单一类型的 $I^2GL_{sR}$ 和使用多邻接矩阵的 $I^2GL_{mR}$。在都不使用交易密度矩阵的条件下,如图9(a)所示,通过引入多邻接矩阵,模型的分类精准率大幅提高,表明异构活动对于保留交易图特征的重要性。
-
对比单层卷积网络 $I^2GL_{1L}$ 和具有两层卷积网络的完整 $I^2GL$ 。如图9(b)所示,通过保留二阶相似性,F1值提高了13%,表明二阶相似性在交易图结构中的重要性。
-
对比无非对称系数、无交易密度矩阵的 $I^2GL_{nT;nA}$和无交易密度矩阵的 $I^2GL_{nT}$ 。如图9(c)所示, $I^2GL_{nT}$ 在召回率和F1值方面分别提高了56%和31%。
-
对比无交易密度矩阵的 $I^2GL_{nT}$ 和完整 $I^2GL$ 。如图9(d)所示, $I^2GL$ 在所有指标上均优于 $I^2GL_{nT}$ 。
总体而言,$I^2GL$ 是GCN方法应用在以太坊身份识别领域的一次较早的尝试,其采用的研究框架和总体思路有一定的代表性,该模型融合了对区块链交易图结构和属性的考量,从多个维度提出优化方法,并取得了较好的应用效果,这是其在方法学上的价值所在。但同时,$I^2GL$ 模型仍存在一些问题:
- 全图训练,计算消耗和时间成本较高
- 泛化能力不足,无法直接为新加入的节点产生嵌入
- 表达能力一般,卷积操作不可学习,直接由图结构决定
2.2 $Ethident$:行为感知型的身份识别框架
$Ethident$ 是一个针对以太坊的身份识别框架,旨在解决图分析方法在面对大规模的区块链交易图时所面临的计算成本高、可扩展性差、泛化能力不足等问题。具体而言:
- 作者使用以太坊数据构建了账户交互图及其轻量版本,并基于此设计了子图采样策略,将账户身份识别视为子图级的分类任务,从交互图中提取目标账户的邻域子图,以便进行图神经网络的小批量训练,从而消除了交易图中节点和边的频繁更新对全图学习的不利影响,实现了可扩展的身份识别。
-
文章提出了名为 HGATE 的分层图注意力编码器,能够有效地表征节点级的账户特征和子图级的行为模式。
- 设计了命名为 $Ethident$ 的行为感知型的以太坊账户识别框架,将数据增强和对比自监督机制用于账户识别,以缓解在监督学习过程中可能导致模型泛化性不佳的标签稀缺问题,并学习账户的行为模式表示。
2.2.1 账户交互图
$Ethident$ 的核心思路是使用图分析方法从图分类的角度来识别以太坊中的账户身份。
区块链的交易图通常用 $G = (V, E, X, E, Y)$ 表示,其中 $V = {v_1, v_2, \ldots, v_n}$ 是账户节点的集合, $E \subseteq {(v_i, v_j) \vert v_i, v_j \in V}$ 是交互边的集合, $X \in \mathbb{R}^{n \times F_1}$ 是节点特征矩阵, $E \in \mathbb{R}^{m \times F_2}$ 是边特征矩阵,$\vert E\vert = m$。$Y = {(v_i, y_i) \vert v_i \in V}$ 表示有标签节点集合。节点 $v$ 的子图可以表示为 $g_v \subset G$。
对于给定的交易图 $G$,子图级的账户身份识别就是学习一个函数 $f(g_v) \rightarrow y$,将账户子图 $g_v$ 的模式映射到身份标签 $y$。
原始的区块数据包含了合约调用和交易的相关信息,据此可以构建账户交互图(Account Interaction Graph, AIG):一个有向、加权和异构多重图 \(G = (V_{\text{EOA}}, V_{\text{CA}}, E_{\text{t}}, E_{\text{c}}, Y)\),其中 \(V_{\text{EOA}}\) 和 \(V_{\text{CA}}\) 分别是外部账户和合约账户的集合, \(E_{\text{t}} = \{(v_i, v_j, d, w) \vert v_i, v_j \in V_{\text{EOA}}\}\) 是从交易信息构建的有向边集, \(E_{\text{c}} = \{(v_i, v_j, d, f) \vert v_i \in V_{\text{EOA}} \cup V_{\text{CA}}, v_j \in V_{\text{CA}}\}\) 是从合约调用信息构建的有向边集。边属性 \(d, w, f\) 分别表示时间戳、转账数量和函数调用。 标记节点集 \(Y = \{(v_i, y_i) \vert v_i \in V_{\text{EOA}}\}\) 表示具有身份标签 \(y\) 的外部账户集合。
如图 10(a) 所示,原始的 AIG 是一个具有密集连接的异构多重图,节点和边附加了各类信息,显著增加了信息挖掘的复杂性。因此,需要对 AIG 进行简化,使其成为一个更为均匀和稀疏的同质图。这一过程可以从节点和边两个层面进行:
-
交互合并与边特征构建 在交互合并过程中,如图2(b)所示,节点间的多个有向交互(交易或合约调用)将被合并为一条边,用边属性 $t$ 表示合并交互的数量,边属性 $\tilde{w}$ 表示合并交互的总交易金额。同时,移除时间戳 $d$ 和函数调用 $f$ 的两个原始边属性。最终,对于任意交易边 $(v_i, v_j) \in E_t$,其边特征向量为 $e_{ij} = [t, \tilde{w}]$。
-
节点特征构建 具有不同行为模式的账户对智能合约有不同的调用偏好。因此,使用有关合约调用的信息构建账户特征,如图2(c)所示。具体而言,设 $n$ 和 $F$ 分别为AIG中的EOA和CA的数量,构建一个外部账户特征矩阵 $X \in \mathbb{R}^{n \times F}$ 来表示对合约调用的偏好,如下所示:\(X = [x_1; \ldots ; x_i ; \ldots ; x_n]\),其中 $x_i = [t_1, \ldots , t_j , \ldots , t_F]$,其中\(t_j = \begin{cases} t & \text{如果有} \, t \, \text{次对} v_{ca_j} \, \text{的调用} \\ 0 & \text{如果没有对} v_{ca_j} \, \text{的调用} \end{cases}\)
简而言之,通过特征构建过程,AIG 被转换成了轻量账户交互图(Lightweight Account Interaction Graph,lw-AIG):一个有向、加权和同质图 \(G = (V_{\text{EOA}}, \widetilde{E}_{t}, X, E, Y)\),其中 \(\widetilde{E}_{t} = \{(v_i, v_j, t, \widetilde{w}) \vert v_i, v_j \in V_{\text{EOA}}\}\), \(X\) 是从合约调用信息构建的节点特征矩阵, \(E\) 是边特征矩阵。边属性 \(t\) 表示从 \(v_i\) 到 \(v_j\) 的有向交互次数,边属性 \(\widetilde{w}\) 表示从 \(v_i\) 到 \(v_j\) 的总交易金额。也就是说,lw-AIG中的节点特征反映了合约调用信息,而边特征反映了交易信息。
$Ethident$ 框架由子图采样模块、子图增强模块、分层注意力编码器和训练模块构成。对于目标账户 $v_i$,$Ethident$ 的输入是从 lw-AIG 中采样的账户交互子图 $g_i$,输出预测的身份标签 $\hat{y}_i$。
2.2.2子图采样
AIG 是一个规模庞大的图,即使经过简化,仍保留着大量的外部账户节点,不适合进行GNN的全批量训练。
因此,$Ethident$ 中将账户身份识别视为子图级的分类任务,其核心思路在于:
- 不同类型账户的局部结构中隐含了不同的行为模式;
- 由目标账户及其邻域组成的子图包含丰富的信息,能为身份识别提供关键的行为模式;
- 子图即中心目标节点的感受野,比整个图小得多,可以进行小批量训练。
基于此思路,$Ethident$ 中采用了 TopK 子图采样方法。TopK 采样根据不同的边属性:金额 $\tilde{w}$、交互次数 $t$、交易平均金额 $\frac{\tilde{w}}{t}$ 获取 h-跳交互子图。
具体而言,对于目标账户节点$v_i$,根据边属性之一对其相邻节点进行排序并采样前 K 个,然后对采样到的每个账户再次进行 TopK 采样,随后递归执行。递归采样可以表示为: \(\begin{equation} V_k = \bigcup_{v \in V_{k-1}} \text{topK}(N_v, K, E[v, N_v, i]), \quad i \in \{0, 1, 2\} \tag{6} \end{equation}\)
其中 $V_k$ 是在第 $k$ 跳采样的节点集合,$V_0 = {v_i}$,$N_v$是节点 $v$ 的1-跳邻居集,$K$ 是每跳采样的邻居数,$E[v, N_v, i]$ 是采样依据的候选边属性,$i$ 是所使用的边属性的指示符。
经过 $h$ 次迭代,可从 lw-AIG 中采样得到节点集合 $V_i = \bigcup_{k=0}^h V_k$,由 $V_i$ 即可得出目标账户 $v_i$ 在lw-AIG中的子图 $g_i$ 。图11 展示了根据不同边信息进行子图采样的过程。
2.2.3 分层图注意力编码器
$Ethident$ 的核心是GNN编码器:HGATE。该编码器接受目标节点的子图作为输入,通过分层注意力机制学习账户及其行为模式的表达,输出子图的嵌入表示,如图5所示。该编码器通过预测头实现账户识别,如图12(a)所示。编码器 $f_{\theta}$ 的细节:
- 邻居特征对齐: 编码器以账户为中心,每个账户 $v_i$ 的邻居特征由其相邻账户特征 $x_j$ 和交互特征 $e_{ij}$组成,表示为$[x_j | e_{ij}]$。目标账户特征 $x_i \in \mathbb{R}^F$ 和其邻居特征 $[x_j | e_{ij}] \in \mathbb{R}^{F+2}$ 的维度不同,因此需要通过线性变换和非线性激活来对齐特征维度,如图12(b)所示。这一过程可以通过以下参数为 $\theta_x$ 的全连接层实现: \(\begin{equation} \tilde{x}_j = \text{LeakyRelu}(\theta_x \cdot [x_j \| e_{ij}]) \tag{7} \label{C} \end{equation}\) 用于账户嵌入的节点级注意力:这一模块是为了保留输入子图中账户的相关性,通过关注邻域中最相关的部分来学习账户表示。当在交互子图中识别目标账户时,不同的相邻账户产生的影响也不同。举例来说,如果某个账户与目标账户之间发生的交易金额高、交易次数多,或与其合约调用偏好相近,那么可以认为该账户保留了更多与目标账户身份相关的信息,因而在识别目标账户时能起到更重要的作用。节点级注意力机制就是基于这一点,通过组合目标账户的邻居特征与其重要程度(即注意力),来学习输入子图中每个账户的隐藏表示。形式化的定义:对于输入子图 $g$ 中的任意账户 $v_i$,节点级注意力机制会学习其邻居节点 $v_j$ 的注意力分数: \(\begin{equation} a^l_{ij} = \text{LeakyRelu}(\theta^l_{n} \cdot [h^l_{i} || h^l_{j}]) \tag{8} \end{equation}\) 通过由 $\theta_{ln}$ 参数化的线性变换和非线性LeakyRelu激活,计算节点 $v_j$ 的隐藏特征对节点 $v_i$ 在第 $l$ 层的重要度,计算得到的注意力分数 $a$ 用 Softmax 函数归一化。随后通过邻域上下文聚合更新目标账户的特征: \(\begin{equation} h^{l+1}_{i} = \text{Elu}\left(\alpha^l_{ii} \cdot \theta^l_{\alpha} \cdot h^l_{i} + \sum_{j \in N(i)} \alpha^l_{ij} \cdot \theta^l_{\alpha} \cdot h^l_{j}\right) \tag{9} \end{equation}\) 通过由 $\theta^l_{\alpha}$ 参数化的线性变换和非线性Elu激活,计算最终的输出特征。
节点级注意力机制是用于节点嵌入的。如图12(d)所示,HGATE 用多个注意力层来捕捉账户特征,输入是初始账户嵌入 $h_0$,由账户和交互特征(式$\ref{C}$)经全连接层生成。多个注意力层迭代地对邻居特征进行传递、变换、聚合并更新节点表示。经过 $k$ 次迭代后,最终输出的账户嵌入 $h_k$ 就包含了 $k$-跳 内的交互影响。
-
用于模式嵌入的子图级注意力池化: 该模块旨在通过提取子图级特征,表征输入子图中目标账户的行为模式。
账户的行为模式与其身份密切相关,即具有不同身份的账户通常表现不同,具有不同的子图模式。这点很好理解,举例来说:
-
对于“交易所”子图,中心节点应该具有极高的中心性,并与邻居账户互动频繁,表明存在高交易量的交易订单。
-
对于“欺诈”或“赌博”子图,存在两个明显的特征标志着用户的高投入和低回报:
-
中心节点与邻居之间的双向边(相互交易)很少,中心节点的入度很高,出度很低;
-
中心节点的入边(投资)包含与加密货币相关的较大特征值,而出边(回报)的特征值较小。
-
由此可见,不同账户对表征目标账户行为的子图模式也会产生不同的贡献。传统做法通常使用求和、均值或最大池化来捕捉图级别的特征,导致特征平滑和表达能力不足。因此文章提出了子图级的注意力池化模块,来学习账户子图的表示,如图12(a)所示。
具体而言,对于子图 $g$,首先通过对子图中所有账户嵌入进行全局最大池化,得到初始子图级别嵌入$s$,这里池化层的输入就是上一步生成的最终账户嵌入$h_k$ : \(\begin{equation} s = \text{MaxPooling}(h_k) \tag{10} \end{equation}\) 之后通过与节点级注意力层相似的方式,按重要度聚合所有账户的特征来更新$s$。也就是对于初始子图嵌入 $s$,使用注意力机制来学习账户 $v_j$ 在子图中的重要度,得到注意力分数: \(\begin{equation} a_j = \text{LeakyRelu}(\theta_s \cdot [s || h^k_{j}]) \tag{11} \end{equation}\) 通过由$\theta_s$参数化的线性变换和非线性LeakyRelu激活,计算账户 $v_j$ 的隐藏特征对初始子图嵌入$s$的重要性。随后用 Softmax 函数计算归一化的注意力分数 \(\beta_j\)。最后,注意力池化执行以下更新过程: \(\begin{equation} g = \text{Elu}(\beta_s \cdot \theta_{\beta} \cdot s + \sum_{j \in V_g} \beta_j \cdot \theta_{\beta} \cdot h^k_{j}) \tag{12} \end{equation}\) 其中,$V_g$ 是子图 $g$ 的节点集通过由 $\theta_{\beta}$ 参数化的线性变换和非线性Elu激活,计算最终子图嵌入 $g$,该嵌入表征了目标账户的行为模式。
-
2.2.4 子图对比学习
为了解决账户标签稀缺问题,学习表达能力更强的模式嵌入,$Ethident$ 引入了对比自监督学习。
-
图增强: 对比学习在很大程度上依赖于数据增强策略来生成不同视图。论文中使用三类图增强方法来生成子图的增强视图。
-
结构级增强
- 节点丢弃: 每个节点有一定概率$P$从子图中被丢弃。
- 边移除: 每条边有一定概率$P$从子图中被移除。
- 属性级增强
- 节点属性掩码: 节点特征的每个维度有一定概率$P$被设置为零。
- 边属性掩码: 边特征的每个维度有一定概率$P$被设置为零。
- 基于采样的增强 由于每个子图都是通过前述的三种子图采样策略之一从 lw-AIG 中得到的,可以使用其他两种采样方法为该子图生成基于采样的增强视图。 在图增强过程中,为每个目标账户子图 $g_i$ 生成两个增强视图 $ \hat {g}^1_i $和 $ \hat {g}^2_i$,并将目标账户的身份标签分配给它们作为伪标签: \(\begin{equation} \displaylines{D_{\text{aug}1} = \{(\hat{g}^1_{i}, y_i) | \hat{g}^1_{i} = T_1(g_i); (v_i, y_i) \in Y\} \\\ D_{\text{aug}2} = \{(\hat{g}^2_{i}, y_i) | \hat{g}^2_{i} = T_2(g_i); (v_i, y_i) \in Y\} \tag{13}} \end{equation}\)
-
-
子图对比: 增强视图 $ \hat{g}^1_{i} $ 和 $\hat{g}^2_{i}$ 被输入到编码器$ f_\theta $ 中,产生整个子图的表示$ g^1_{i}$和$g^2_{i} $,然后通过投影头 $f_{\phi}$ 映射到对比的嵌入空间,得到$z^1_{i}$和$z^2_{i}$。$\theta$ 和 $\phi$ 分别是图编码器和投影头的参数。子图级对比的最终目标是通过最小化对比损失来最大化对比空间中两个相关增强视图之间的一致性: \(\begin{equation} L\_{\text{self}} = \frac{1}{N} \sum_{i=1}^{N} L_i \tag{14} \end{equation}\) 其中,$N$ 是一个批次中子图的数量(即批次大小)。每个子图的损失可以计算为: \(\begin{equation} L_i = -\log \frac{\exp(\text{cos}(z^1\_{i}, z^2_{i})/\tau)}{\sum_{j=1, j \neq i}^{N} \exp(\text{cos}(z^1_{i}, z^2_{j})/\tau)} \tag{15} \end{equation}\) 账户子图 $g_i$ 的两个相关视图 $z^1_{i}$ 和 $z^2_{i}$ 被视为正对,而批次中的其余视图对被视为负对。 目标是最大化正对间的一致性。对比学习使得相同类型的账户具有更一致的表示,而不同类型的账户具有更明显的差异。
2.2.5 模型训练
通过一个预测头 $f_{\psi}$ 实现账户识别,将子图表示映射到反映账户身份的标签,得到一个分类损失: \(\begin{equation} L_{\text{pred}} = -\frac{1}{N} \sum_{i=1}^{N} y_i \cdot \log(f_{\psi}(g_i)) \tag{16} \end{equation}\) 其中,$L_{\text{pred}}$是交叉熵损失。
自监督的子图对比是先导任务,用作子图分类任务的正则化。编码器 HGATE 与先导任务和子图分类任务一起进行联合训练。损失函数包括自监督和分类任务的损失函数: \(\begin{equation} L = L_{\text{pred}} + \lambda \cdot L_{\text{self}} \tag{17} \end{equation}\) 其中,超参数$\lambda$控制自监督项的影响。
2.2.6 效果
$Ethident$ 从与账户的行为模式和身份相关的节点和边信息中学习,并使用分层注意力机制有效地刻画了节点级别的账户特征和子图级别的行为模式,在账户识别上表现出色。
文章以“2015-07-03”到“2020-05-04”时间段内的1000万个区块为数据集(包含309,010,831笔交易和175,351,541次合约调用,涉及90,193,755个外部账户和16,221,914个合约账户),对“ICO钱包”、“矿池”、“交易所”和“钓鱼/欺诈”四类身份进行识别,并与人工特征工程方法、图嵌入方法、基于GNN的方法进行比较。结果显示 $Ethident$ 在所有数据集上明显优于手动特征工程和图嵌入方法,在 F1 分数方面相对改进了2.09% ∼ 18.27%,表明学习到的子图特征更能捕捉账户的行为模式,相比人工或浅层拓扑特征更为有效。与基于GNN的方法相比, $Ethident$ 在最佳基线上相对改进了1.13% ∼ 4.93%。针对实验结果可以得出一些观察和分析:
交互子图中的模式
对行为模式的分辨是账户去匿名化的关键,不同类别的账户在其交互子图中体现了不同的行为模式,如图13所示。以下是对不同类型账户的子图模式的解释,可以发现,不同的账户身份适合的采样策略也有所不同:
-
ICO-wallet(ICO钱包): 初创币发行(ICO)是一种通过发行代币为区块链项目筹集资金的融资方法。ICO 项目一般通过预售代币来换取大量以太币,并在一段时间后向支持者提供一定的投资回报。关键的行为模式表现为从中心 ICO 账户到周围支持者的大量出边,带有一定数量的投资回报。由于投资行为通常涉及更高的交易金额,根据金额信息(Amount)对交互子图进行采样可以最大程度地保留ICO账户的行为模式。
-
Mining(矿池): 矿池是一个合作挖矿团队,共享算力挖掘区块。矿池将收到系统的大量挖矿奖励,并将其分配给下属矿工。关键的行为模式表现为从中心矿池节点到周围矿工节点的大量出边,带有一定数量的奖励。由于以太坊的区块奖励在一段时间内是固定的,同一矿池的矿工通常具有相对稳定的平均挖矿收入,因此使用平均金额(avgAmount)信息来引导交互子图的采样更合适。
-
Exchange(交易所): 交易所是提供资产交易撮合和清算服务的平台。交易所账户通常与其客户频繁互动,以处理大量的交易订单,并在交互图中作为具有极高中心性的中心节点(即极高的入度和出度)。因此,根据交互次数(Times)信息对交互子图进行采样更为有益。
-
Phish/Hack(钓鱼/欺诈): 钓鱼者和黑客都参与非法欺诈活动,通过传播大量包含病毒、木马等的网站、电子邮件或链接,欺骗接收者直接汇款或提供系统特权的敏感信息。中心的“钓鱼/欺诈”账户通过各种欺诈手段收到大量以太币,并将其分散给其他“钓鱼/欺诈”账户以掩盖行踪。关键的行为模式具有一个明显特征:中心节点与周围节点之间的双向边(相互交易)很少,中心节点具有较高的入度和较低的出度。由于非法欺诈活动,如虚假代币交换或勒索软件通常设定了特定的阈值金额或固定赎金,这可以在平均金额信息中反映出来,因此使用根据平均金额(avgAmount)信息采样的子图可能更利于识别“钓鱼/欺诈”账户。
子图对比学习的效果
针对 $Ethident$ 中子图对比学习的有效性,文章列举了一些观察结果以及可解释的分析。
-
图增强总体有效,结构级增强策略效果更明显: 如图14所示, $Ethident$ 相对于其无增强版本总体性能有所提升。总体而言,与其他增强对比起来,使用“NodeDrop 节点丢弃”或“EdgeRemove 边移除”作为增强视图更可能产生正增益。另外,对于频繁调用合约的交易所账户,其节点特征中将会有更多的非零值,因而属性掩码成为了有效的增强策略。
此外,注意到不同采样策略的子图数据集对各种增强视图的组合敏感,应用中需要灵活选择采样策略和增强组合。
2) 对比自监督提高了模型在账户特征学习中的泛化能力:图15中可视化了 Ethident 和 Ethident(w/o GC) 学到的子图嵌入,不同的颜色表示不同的标签。与仅使用预测损失 $L_{pred}$ 的 Ethident(w/o GC) 相比,在应用对比约束 $L_{self}$ 后,实现了更明显的跨类别可分离性和类内紧凑性,这说明了其在学习行为模式差异方面的有效性。此外,Ethident 用相对更清晰的边界分离了不同的模式,表明对比自监督可以在标签稀缺的情况下有效提高模型的泛化能力。
图15 Ethident / Ethident(w/o GC) 子图嵌入可视化
2.3 总结与思考
本部分以 $I^2GL$ 和 $Ethident$ 为例介绍了图神经网络(GNN)在区块链身份识别领域的应用。与传统方法和其他现有技术相比,GNN 模拟复杂关系的优势使其在区块链交易图分析方面表现突出。区块链上的交易和合约调用等行为构成了一个具有多重依赖关系的复杂网络。GNN 可通过在相互连接的节点之间传播信息来有效处理这种复杂结构,不仅可以捕捉直接关系,还能够捕捉高阶关系,因而能为身份识别提供更全面的视角。此外,GNN 具备学习数据非线性表示的能力,能识别隐含的微妙关系,这些关系可能会被线性模型或基于规则的系统所忽略。
-
$I^2GL$ 代表了基于图卷积网络(GCN)的方法。GCN 采用的图卷积机制是广泛应用于图神经网络中的信息聚合技术之一。总体来说,GCN 通过图卷积算子为图中的各个节点学习特征表示。图卷积算子允许网络从节点的邻居中聚合信息,以学习更复杂且信息丰富的图结构表示。在多层图卷积网络中,传播规则基于公式:
\(\begin{equation} H^{(l+1)} = \sigma \left(\tilde{D}^{-\frac{1}{2}} \tilde{A} \tilde{D}^{-\frac{1}{2}} H^{(l)}W^{(l)}\right) \tag{18} \end{equation}\) 其中,\(\tilde{A} = A + I_N\) 是带有自连接的无向图G的邻接矩阵。$I_N$ 是单位矩阵,$\tilde {D}_{ii} = \sum _j \tilde {A}_{ij}$,即$\tilde{A}$的度矩阵,$W^{(l)}$ 是特定层的可训练权重矩阵。 $\sigma(\hat{A}\cdot)$ 表示激活函数。 $H^{(l)} \in \mathbb{R}^{N \times D}$ 是第 $l$ 层的激活矩阵;$H^{(0)} = X$ 。可以看到,其中的卷积操作由给定的图结构决定,除了节点级的线性变换 $H^{(l)}W^{(l)}$ 外,卷积操作是不可学习的。对于类似 $I^2GL$ 中有向图(即非对称邻接矩阵),$\tilde{A}$ 可以通过入度对角矩阵的逆 $\tilde{D}^{-1}$ 来进行归一化,即: \(\begin{equation} H^{(l+1)} = \sigma(\tilde{D}^{-1}\tilde{A}H^{(l)}W^{(l)}) \tag{19} \end{equation}\)
-
$Ethident$ 代表了基于注意力的图神经网络(GAT)。GAT 中使用了注意力机制,该机制允许模型在消息传递过程中集中关注图中最相关的节点或边。在这类模型中,信息聚合的权重是根据节点或边之间的相似性动态学习的,与图卷积网络中的固定权重不同。这使得GAT能够更有效地建模图数据中的复杂关系和依赖。计算注意力系数(α)和每个节点的隐藏状态(h)的公式如下: \(\begin{equation} \alpha_{ij} = \frac{\exp\left(\text{LeakyReLU}\left(\mathbf{a}^\top [\mathbf{W}h_i \,||\, \mathbf{W}h_j]\right)\right)}{\sum_{k \in \mathcal{N}_i} \exp\left(\text{LeakyReLU}\left(\mathbf{a}^\top [\mathbf{W}h_i \,||\, \mathbf{W}h_k]\right)\right)}, h_i' = \sigma\left(\sum_{j \in \mathcal{N}_i} \alpha_{ij} w h_j\right) \tag{20} \end{equation}\) 其中 $W$ 是与线性变换相关联的权重矩阵,应用于每个节点。$a$ 是单层 MLP 的权重向量。这种自注意机制使得 GAT 在图数据中能够更灵活地捕捉节点之间的关系,从而提高建模效果。在此基础上,$Ethident$ 通过分层注意力机制HGATE有效地提取了节点级账户特征和子图级行为模式特征。相比GCN使用简单的图卷积和池化操作,HGATE可以通过注意力机制聚焦于与目标账户识别相关的关键行为模式信息。同时,$Ethident$ 还采用了基于子图的识别框架,通过子图采样和小批量训练避免了全图训练,大大减少了计算和内存消耗,使模型更适合在大规模区块链图数据上运行。图增强和子图对比学习机制使模型能够学习鲁棒特征,在标签稀缺的情况下提升了模型的泛化能力。
思考:
-
$I^2GL$ 相对于一般 GCN 模型的亮点之一是其将交易的时间属性纳入了考量。其根据区块链的特点,将区块高度这一区块链独有的数据作为时间戳,引入时间密度矩阵,从而更全面地捕捉和利用了账户活跃时间分布的特征,提高了账户身份识别的精度。
在 $Ethident$ 中,最初根据区块原始数据构建的账户交互图(AIG)中包含交易的时间信息:从交易信息构建的有向边集 \(E_{\text{t}} = \{(v_i, v_j, d, w) \vert v_i, v_j \in V_{\text{EOA}}\}\) 中的边属性 \(d\) 即表示时间戳。但随后,出于复杂性的原因,AIG 被简化为了 lw-AIG ,节点间的多个有向交互被合并为一条边,用边属性 $t$ 表示合并交互的数量,边属性 $\tilde{w}$ 表示合并交互的总交易金额,同时移除了时间戳 $d$ 和函数调用 $f$ 的两个原始边属性。$Ethident$ 后续的工作都是基于 lw-AIG 进行的,因此交易的时间分布特征被忽略了,这可能对部分身份类型的识别产生不利影响,如钓鱼/欺诈账户的交易频率显著高于普通账户。保留交易的时间特征是可优化的方向之一。
-
$Ethident$ 通过手动合并边、移除属性等方法将异构的原始账户交互图(AIG)转化为同构图,然后在此基础上应用分层注意力机制和子图采样分类。手动构建同构图的转换过程中难免会失去部分异构图的结构信息,针对区块链交易图这样典型的异构图,可以考虑能直接作用于异构图的 HGNN(Heterogeneous Graph Neural Network)方法。
HGNN 中的 HAN(Heterogeneous Graph Attention Network)思路总体与$Ethident$ 类似:根据预先定义的元路径(meta-path)获取异构图的子图,然后应用分层注意力机制,节点级注意力学习节点与其邻居之间的注意力值,语义级注意力学习异构图中不同元路径的注意力值。基于两个级别的学到的注意力值,使模型学到的节点嵌入能更好地捕捉图中的复杂结构和语义信息。
而 GTN(Graph Transformer Networks)方法更进一步,无需预定义元路径,而是从给定的数据和任务中自动识别有用的元路径,通过图变换层(Graph Transformer,GT)将异构图转换为由元路径定义的多个新图,元路径可具有任意的边类型和长度。这可以有效防止人工预定义元路径或采样策略造成的信息损失,同时也能更好地表达异构图的复杂语义关系,端到端学习可以使模型自动学习对给定任务最优的图结构。
目前,尚未出现将 HGNN 方法应用在区块链身份识别领域的研究,是值得关注的方向之一。
总体而言,区块链去匿名化在应用层的主要任务是账户身份识别。该领域当前主流的方法是基于图神经网络的 GCN、GAT 方法,本部分以具有代表性的$I^2GL$和$Ethident$为例,介绍了相关研究的原理及效果,并在此基础上对模型的优缺点以及可改进的方向进行了总结与思考。
3 交易溯源
相较于基于应用层的账户身份识别任务,基于网络层进行的交易溯源任务能够提供更直接和实时的身份信息:通过分析网络层传输的交易信息,发现特定交易在加密数字货币交易网络中的传播路径,进而推测交易的始发节点,实现匿名交易和交易始发节点IP地址的关联,达到溯源目的。
现有的网络层去匿名化方法通常利用区块链底层网络中的交易传播信息,以利用伪名和IP地址之间的可链接性。Koshy等人对不同的交易中继模式进行了分类,并设计了启发式方法来假设交易的所有权。Dan Kaminsky等人提出了女巫攻击,假设新交易的第一个转发节点的IP地址归原始发送者所有。Biryukov等人提出了一种基于邻居节点的交易可追踪机制,并在后续工作中,开发了一种TOR中间人攻击和基于“地址cookie”的IP地址暴露方法。
总体而言,此类攻击的思路想似:当节点执行交易时,需要将交易发送给其对等方,对等方会进一步传播交易。因此,攻击者若能监听所有交换消息,即可将每个交易映射到其创建者的IP地址,从而有效地去匿名化节点。要实现这一目的,攻击者需要使用一个看似普通的“超级节点”,连接到所有活跃的比特币节点并监听其中继的交易。但这类攻击方法需要庞大的计算资源且十分易于识别,并可能对区块链底层网络造成严重干扰,同时还可能被扩散广播机制、Dandelion机制等应用层的对策减轻其攻击效果。
$Perimeter$ 是一种更隐秘、更难以防范的网络层去匿名化方法,通过利用AS级互联网基础设施的权限监听节点的部分连接来去匿名化节点交易,成功克服了上述方法存在的问题。因此本部分将以 $Perimeter$ 为例,介绍针对加密货币网络层的交易溯源方法。
3.1 $Perimeter$:网络层的去匿名化攻击
$Perimeter$ 依赖的攻击向量是对互联网基础设施的访问。任何加密货币的连接都需要通过互联网路由,因而可被多个自治系统(AS)和互联网交换点(IXP)访问。由此,恶意的AS或IXP可以将其对互联网基础设施的访问与应用层信息相结合,执行跨层级的去匿名化攻击。这样的攻击是完全被动的,无需建立新连接,所以比一般攻击更加隐秘;同时,由于攻击者的能力依赖于互联网路由协议(BGP),而非应用层协议,所以也更难以防范。
$Perimeter$ 由两个阶段组成:
-
首先,攻击者窃听受害者的连接,以收集受害者向其对等体传播的交易信息。
-
随后,攻击者分析收集到的信息以识别出受害者的交易。
在此过程中,攻击者不需要建立连接,而是通过直接读取每个数据包的有效负载来监听受害者的连接,因此以该攻击是不可检测的,且对于NAT节点等不接受连接的节点同样有效。受害者发起的交易通常会呈现出独特的传播模式,例如在比特币中,相较于转发交易来说,受害者生成的交易会被其发送给异常多的节点。依据这一特点,敌手可以通过异常检测来识别受害者发起的交易。
3.1.1 概述
攻击目标:攻击者的目标是去匿名化特定节点,即将受害节点的IP地址映射到其创建的交易。具体而言,攻击者的目标是得出一个交易集,其中尽可能多地包含受害节点创建的交易(即最大化真正例),并尽量减少包含其他交易的数量(即最小化假正例)。该交易集称为受害者的匿名集(anonymity set)。
攻击者:攻击者控制一个自治系统(AS)或互联网交换点(IXP),具有拦截受害节点部分连接的能力,且知晓受害节点的IP地址。
攻击过程:
- 窃听连接: 攻击者利用其AS或IXP的身份,通过截取受害者节点的连接,观察受害节点的交易传播情况。这个过程被称为“包围(surrounding)”,攻击者在受害者周围创建了一个逻辑圈,据此可获取传入和传出的信息。这是一个完全被动的过程,攻击者只是观察本来就要经其转发的流量,因此是不可检测的。
- 分析数据: 攻击者收集到受害者向其对等体传播的交易信息。随后,攻击者计算关于这些交易的统计信息,例如受害者或其对等体发送或接收交易的次数。
- 交易区分: 攻击者使用异常检测技术来区分受害者的交易。通过比较受害者的交易与正常行为的统计差异,识别受害者的交易。
示例:如图16a所示,网络由七个自治系统(AS0至AS6)组成,节点A至G运行比特币客户端。每对节点之间的流量都按照BGP计算的AS路径进行转发。AS2是攻击者,其目的是去匿名化Alice的交易。AS2拦截了节点A与节点B、C、D和E之间的连接,并知晓Alice节点的IP。因此,AS2的目标是将节点A映射到其生成的交易(在本例中是TX #33)。
- AS2窃听受害者的连接,并从节点A传播的交易中创建了初始的匿名集:TX #15、TX #11、TX #35、TX #33。从应用角度来看,AS2在受害者周围创建了一个逻辑圈,如图16b所示。
- AS2排除非受害者交易来减小匿名集的大小。由于比特币节点只接收它请求的交易,并且只会请求它还不知道的交易。因此,AS2可将TX #35从匿名集中排除,因为AS2观察到节点A从节点C接收了TX #35。对于TX #15和TX #11,由于AS2没有截取节点A与节点F和G之间的连接,因此不能使用此方法排除。
- AS2使用异常检测来识别受害者的交易。例如,向节点A请求TX #33的节点数量明显高于其他交易,即TX #33传播模式异常,由此即可识别出TX #33是Alice发起的,从而达成去匿名化。
3.1.2 原理
区分比特币流量
攻击者通过比特币客户端常用的TCP端口,即8333端口识别比特币流量。此外,攻击者还可以在数据包有效负载上搜索已知的比特币消息类型,例如“inv”或“getdata”,来识别比特币流量
创建初始匿名集
比特币消息可能被分割在多个数据包中,而这些数据包在传输时可能会被重新排序、丢失和重传,因此攻击者利用 GoPacket 等工具重组消息流。随后,将三类消息(即“inv”、“getdata”和“tx”)中包含的交易哈希加入匿名集,并对每个交易哈希统计“inv”、“getdata”和“tx”的发送和接收数量。
分析数据
攻击者的目标是将初始匿名集缩小到仅包含受害者创建的交易。两个主要挑战是:受害者节点传播的交易数远超其创建的交易数量、攻击者没有用于训练的基准数据。
因此,攻击者将问题转化为一个无监督的异常检测问题,即在没有标签的数据集中识别与正常情况不同的数据点。利用受害者的交易相对于其传播的所有交易而言占比极小的特点,攻击者可以直接用其获取的流量进行训练,学习最常见的传播模式,从而将受害者的交易识别为异常。
文章选用孤立森林(Isolation Forest,IF)进行异常检测。IF的核心思路是:异常更易于分离,在一般情况下划分异常点需要的分割次数比正常数据点少。IF通过随机选择特征和随机分割值生成一组决策树来对数据点进行分区,相较于基于距离的方法,如最近邻和基于聚类的方法,IF通过直接在数据中隔离异常值来识别异常,无需先定义正常行为再计算点的距离来区分异常,通过在处理高维数据时更为高效。而相对于神经网络方法,如自编码器,IF可解释性更强,且对参数调整不太敏感。
选择特征
比特币节点间的交易传播过程可以分为三个步骤,如图17所示:
- 拥有新交易的节点 A 通过仅包含交易哈希的 inv (inventory) 消息向其通知节点B。
- 如果节点 B 尚不知晓 inv 消息中包含的交易,它将通过 getdata 消息回复以请求整个交易。
- 节点 A 通过 tx 消息响应 getdata 消息发送完整的交易。收到完整交易后,节点B以相同的方式将交易传播给其邻节点C。
$Perimeter$ 使用与时间和节点间交互相关的特征:“getdata”消息的数量、“tx”消息的数量、请求/宣传比。
-
受害者每个交易收到的“getdata”消息数量: 相当于受害者发送交易的次数。比特币客户端只会为其之前未收到过的交易发送“getdata”。因此,受害者创建的交易可能接收到更多的“getdata”,因为其对等体已从其他路径收到该交易的概率很低。
-
受害者每个交易收到的“tx”消息数量: 如果受害者从其对等体之一收到了一笔交易,则受害者不可能是其创建者。因为受害者接收了某交易,说明它已向其对等体请求了该交易,即受害者先前并不知晓该交易。受害者为一笔交易收到的“tx”消息数量等于受害者发送的“getdata”消息数量。
-
请求/宣传比:即接收到“inv”消息的客户端中返回“getdata”的比例,此特征类似于“getdata”的数量,关键的区别在于其考虑到了扩散机制可能导致受害者推迟向某些对等体宣传其交易,以至于其已从其他路径获知该交易。受害者的交易将具有较高的请求/宣传比,因为受害者比其对等体更早知晓交易。
3.1.3 效果
文章阐述了$Perimeter$攻击在现实互联网环境下的可行性分析:
分析方法:
- 收集比特币和以太坊节点的IP地址数据
- 基于BGP路由信息,建立自治系统级拓扑网络
- 模拟BGP路由计算不同的AS和IXP可以拦截的连接比例。
图20 多数比特币客户端都易受到多个潜在攻击者的PERIMETER攻击
对于35%的比特币客户端,至少有5个不同的攻击者可以拦截其30%的连接
比特币网络的主要结果:
- 有50%以上的节点都能被至少4个不同的网络攻击者拦截30%的连接。
- 只需10个网络提供商(AS或IXP)合谋就能拦截85%的节点,潜在攻击者包括亚马逊、阿里巴巴、DigitalOcean、OVHcloud等大型云服务提供商,以及一些大型IXP。如果其共谋,可以去匿名化绝大部分的比特币交易。
结论:
- 攻击模型与现实互联网条件是匹配的。
- 利用网络位置进行被动攻击是比较现实和可行的,比特币和以太坊网络面临真实的去匿名化威胁。
文章在模拟环境和实际比特币网络中进行了实验,以评估$Perimeter$攻击的有效性。主要实验和结果如下:
模拟实验:
- 使用现实世界互联网测量结果调整的参数建立了模拟的比特币网络。
- 模拟了10000个交易,其中100个是受害者节点生成的。
- 分别假定攻击者拦截受害者节点连接的25%、50%、75%和100%。
- 结果显示,即使只拦截25%的连接,攻击者也能以100%的真正例率和极低的假正例率去匿名化受害者节点。
图21 模拟实验中,攻击者在拦截25%的连接时能以100%的准确率去匿名化受害者
比特币主网实验:
- 使用受控的一个比特币节点作为受害者节点。
- 收集总共约30000个交易,其中10个是受害者节点生成。
- 同样测试拦截受害者节点连接的25%、50%、75%和100%。
- 结果显示,拦截50%连接时,即可以90%的真正例率和0.003%的假正例率成功去匿名化节点。
图22 主网实验中,当攻击者拦截50%的连接时能以90%的准确率去匿名化受害者
总的来说,实验验证了即使只能拦截部分连接,$Perimeter$攻击也能准确高效地对比特币节点进行去匿名化。证明了网络层的攻击者利用其互联网基础设施的有利位置对节点进行去匿名化是一种可行和实际的威胁。
应对方式:
几种可以应对$Perimeter$攻击的方法包括:
- 隐藏节点状态:即使已知一个交易,节点也主动向其他节点请求该交易,迷惑攻击者判断节点是否已知该交易。
- 考虑路由的交易请求:从不同路径的节点请求交易,避免攻击者关联请求。
- 考虑路由的交易广播:在Diffusion等机制中加入路由相关的额外延迟,增加攻击难度。
- 使用Tor或VPN:隐藏节点真实IP,但要考虑攻击者同时关联其他通信来识别节点用户。
需要在多个层面采取上述综合措施,才能有效保护节点的匿名性和隐私性。
总而言之,$Perimeter$ 作为一个新的攻击向量,能从网络层有效地对比特币交易进行去匿名化。相比其他网络层攻击方法,$Perimeter$更隐蔽更难以防范,因为此方法只是利用了网络基础设施的有利位置被动监听,不需要建立连接,也不依赖特定的传播机制,对Diffusion等各种防御手段仍然有效。同时$Perimeter$也能被推广到以太坊等其他加密货币中。
4 总结
本文从应用层和网络层两个维度出发,介绍了针对当前区块链平台的两大类去匿名化技术:应用层的身份识别和网络层的交易溯源。典型的应用层方法基于图神经网络,通过建模账户之间的复杂交互关系,学习账户的行为模式并由此推断其身份。网络层方法则利用网络基础设施的权限,被动监听节点连接,根据交易在节点间的传播规律推测源IP地址。
在此基础上,笔者认为网络层和应用层去匿名化方法仍有进一步结合的可能性。例如在数据层面,网络层输出每个交易所对应的一组可能的源IP地址,而这可以作为应用层模型的一个新特征,加入到账户身份识别的输入中,提供附加的语义信息。例如,针对一个潜在的欺诈账户,如果通过网络层分析确定其交易来自某IP段,而此IP段又对应一些已知的欺诈集群,那么就可以增加该账户被判定为欺诈节点的概率或置信度。通过这种数据和语义上的补充,应用层识别的不确定性可以利用网络层的判定进行一定程度的修正,从而提高最终去匿名化的精确度和可靠性。
当前,区块链去匿名化技术仍存在一定的争议。去匿名化在合法合规、防范非法活动等场景下有着积极意义,且有助于揭示区块链网络存在的潜在风险、提升系统的安全性。但同时,此类技术也可能涉及对用户隐私的侵犯,并一定程度上引入了中心化风险。因此,去匿名化技术的使用需要根据具体情况进行审慎的权衡和考虑。