An Empirical Analysis of Privacy in the Lightning Network (闪电网络隐私的实证分析)的阅读笔记
一、 预备知识点
- Payment channel networks: 支付通道网络
- Lightning Network: 闪电网络
- HTLC(Hashed Time Lock Contract)哈希时间锁定合约: HTLC是区块链应用程序中使用的一种智能合同,可通过启用限时交易来消除交易风险。实际上,这意味着交易的接收者必须通过在特定时间范围内生成加密证明来确认付款。否则,交易将不会发生。
- onion routing(洋葱路由): 是一种在电脑网络上匿名沟通的技术。在洋葱路由的网络中,消息一层一层的加密包装成像洋葱一样的数据包,并经由一系列被称作洋葱路由器的网络节点发送,每经过一个洋葱路由器会将数据包的最外层解密,直至目的地时将最后一层解密,目的地因而能获得原始消息。而因为透过这一系列的加密包装,每一个网络节点(包含目的地)都只能知道上一个节点的位置,但无法知道整个发送路径以及原发送者的地址。
- Sphinx
- Multisig: 多重签名,在一个 m-of-n multisig 的 P2SH 中。我们首先从n个公钥生成一个multisig的address作为交易output里的地址, 用于接受转账。如果想要花费该地址的比特币,那么至少需要m个签名才可以成功。
- 区块链的特点: 一是数据在上链前需通过共识机制获得(所有)节点的认可, 二是数据上链后通过密码学技术和数据全网全备份达到不可篡改
- 区块链存在的问题: 区块链具有低交易吞吐量、高交易延迟、高数据存储等扩展性问题(每秒仅支持7笔交易)
- 微支付通道、支付通道、支付通道网络: 支付通道网络的基础是支付通道,而支付通道技术来源于微支付通道技术
- 支付通道网络所要解决的问题: 用于解决比特币对微小支付不友好的问题
- 支付通道网络存在的问题: 隐私泄露
- 支付通道分类:
- 账本通道: 需要与区块链交互才能建立
- 虚拟通道: 不需要与区块链交互也能建立,虚拟通道建立在账本通道之上
- 现有的具有隐私保护的支付路径解决方案: 括星型网络和对等网络
- https://github.com/lightningnetwork/lightning-rfc
二、Abstract
- 支付通道网络+闪电网络 有助于解决区块链上的扩展性和隐私性问题,但是并不完善。
- 本文的攻击:通过网络上的已知信息来获取本应保密的隐私信息。比如交易金额,交易双方信息。
三、Introduction
- 作者首先简单介绍了区块链,提出了区块链存在的两大问题:1.可扩展性限制 2.隐私安全
- 闪电网络一定程度上解决了区块链的不可扩展性和隐私安全性的问题,但是也有缺陷。
- 闪电网络的四个隐私属性:
- Private channels: 两个节点共享一个通道,保留通道的存在,以及它的所有信息(容量、参与者等),对其余网络隐藏。
- Third-party balance secrecy: 通道的容量是公开的,但参与者各自的余额应该是保密的。
- On-path relationship anonymity: 路由支付的中间节点不应该知道除了它们的直接前任或继任者之外,哪些其他节点是支付路由的一部分
- Off-path payment privacy: 任何不参与路由支付的节点都应该不能推断任何关于路由节点或支付值的信息。
作者对于这些本应该成立的闪电网络安全属性都进行了攻击,以此来说明闪电网络的隐私安全缺陷
四、Background
- 闪电网络的组成部分:
- 节点:公钥
- 边:通道
- cid:通道标识符
- C:通道容量
- 闪电网络使用HTLCs协议进行交易的五个步骤:
- invoicing: Bob生成一个秘文 x x x,并计算它的散列 h h h。然后开了一张包含 h h h和一些付款金额的invoice,并发送给Alice。
- Onion routing: Alice选择支付路径,然后爱丽丝形成一个以鲍勃为目的地的Sphinx数据包,并通过 U i U_i Ui节点进行路由,爱丽丝然后把最外面的洋葱包 o n i o n 1 onion_{1} onion1送到 U 1 U_1 U1
- Channel preparation: 首先 U i U_i Ui接收到 U i − 1 U_{i-1} Ui−1的 o n i o n i onion_{i} onioni包, U i U_i Ui会将其解码获得 c i d cid cid, c i d cid cid会标识下一个节点 U i + 1 U_{i+1} Ui+1,然后向 U i + 1 U_{i+1} Ui+1发送 a m t i amt_{i} amti、 t i t_{i} ti(超时时间)和 o n i o n i + 1 onion_{i+1} onioni+1。但是在向 U i + 1 U_{i+1} Ui+1发送 o n i o n i + 1 onion_{i+1} onioni+1之前, U i U_i Ui和 U i − 1 U_{i-1} Ui−1需要通过使用HTLC来更新他们通道的状态,以确保交易没有超时,超时的话 U i U_i Ui可以要求退款。完成这一系列操作之后 U i U_i Ui可以向 U i + 1 U_{i+1} Ui+1发送 o n i o n i + 1 onion_{i+1} onioni+1
- Invoice settlement(发票结算): 最后 Bob从 U n U_{n} Un处收到 o n i o n n + 1 onion_{n+1} onionn+1,Bob对其进行解码,如果其中的 a m t amt amt和 h h h与他之前发的Invoice上的相同,他就会发送invoice pre-image x x x 给 U n − 1 U_{n-1} Un−1,以此来得到他的钱,然后信息又会沿着路径反向传输给Alice。
- Channel settlement(通道结算): 路径上的每一步, U i U_{i} Ui和 U i + 1 U_{i+1} Ui+1都利用密文 x x x来结算他们的通道。
五、Blockchain Analysis
5.1、Data and measurements
- 闪电网络可以通过公共网络图的定期快照来捕获,这些快照提供了关于节点的真实数据(标识符、网络地址、状态等)。)及其通道(标识符、容量、端点等。)
- 作者的LN数据集包含用于打开每个通道的hash,通过将这些与区块链数据相结合,作者能够确定通道何时关闭以及资金如何分配。
- 作者总共确定了174,378个通道,其中135,850个已经关闭,总容量为3315.18 BTC。在关闭的信道中,69.22%是由单个输出地址声明的。
5.2、Private channels
- Private channels是两个LN节点私有交易通道,不会向网络上其他节点广播。
- Property Heuristic(启发式属性)
- Tracing heuristic(追踪启发式)
六、Balance Discovery(余额探索)
1、The attack
- 以往的攻击往往只控制一个节点,而本文提出的方法需要控制两个节点。
- 获取
B
→
C
B \rightarrow C
B→C 通道上的余额的方法: 本文提出的方法是增加
A
D
A D
AD两个节点在
B
→
C
B \rightarrow C
B→C 的两边,形成
A
→
B
→
C
→
D
A \rightarrow B \rightarrow C \rightarrow D
A→B→C→D 的通道。(
A
→
B
A \rightarrow B
A→B的通道好建立让A向B付款即可,而
C
→
D
C \rightarrow D
C→D的通道不易建立)
- 形成 C → D C \rightarrow D C→D通道的两种方法:
- funding the “remote balance”: 攻击者给 C C C出资用于打开 C → D C \rightarrow D C→D的通道(有被 C C C釜底抽薪的风险)
- assisted channel opening: 使用 liquidity provider( Bitrefill 或者 LNBIG)) 辅助打开 C → D C \rightarrow D C→D的通道
- 得到 A → B → C → D A \rightarrow B \rightarrow C \rightarrow D A→B→C→D通道后的攻击: A A A不断通过 B → C B \rightarrow C B→C通道向D发送random payment hash H,金额小于通道余额即可正常交易,金额大于通道余额则交易失败,攻击者以此原理来获取最大支付金额,即 B → C B \rightarrow C B→C通道余额。
- 扩展:当 A D A D AD两个节点之间不止一个通道时,可以用此方法探究整个通道里余额最小的通道位置(文中称为瓶颈通道),在支付失败的情况下,当前的C-lightning和LND客户返回一个错误指数,该指数是支付失败的节点的位置,这意味着攻击者可以准确地知道支付失败的地方。
2、Attack results
- 总而言之攻击成功
3、Attacker cost
- 作者实验时使用的是testnet coins,几乎无成本。
- mainnet上的最小攻击成本:攻击者需要花费1.097 BTC,并搁置109.53 BTC
七、Path Discovery(路径探索)
- P r S Pr_{S} PrS: 攻击者成功发现支付路径中的发送者的概率
- P r R Pr_{R} PrR:攻击者成功发现支付路径中的接收者的概率
- P r S s u c c Pr_{S}^{succ} PrSsucc:支付成功情况下发现支付路径中的发送者的概率
- H H H:节点位置
- L L L:路径长度
- P r [ L = l ] Pr[L = l] Pr[L=l]:路径长度为 l l l 的概率
- P r [ H = h ∣ L = l ] Pr[H =h | L = l] Pr[H=h∣L=l]:对手节点位置在 h h h 且路径长度为 l l l 的概率
- 根据闪电网络的规范要求,最大路径长度应为20。
-
P
r
S
s
u
c
c
Pr_{S}^{succ}
PrSsucc(支付成功情况下发现支付路径中的发送者的概率)的公式如下:
- P r [ H = 1 ∣ L = 3 , s u c c ] = 1 Pr[H =1 | L = 3,succ]=1 Pr[H=1∣L=3,succ]=1表示:如果支付路径长度为3,且攻击者是唯一的中间节点,那么支付成功的概率应该为1。
- P r [ L = 3 ∣ s u c c ] Pr[L=3|succ] Pr[L=3∣succ] 是 P r S Pr_{S} PrS的下界,(我分析这是因为只有交易的节点大于等于三个时,攻击者才能通过中间节点寻找办法获知交易的双方)
- 假设攻击节点的位置在中间任何位置上的概率相等,在支付成功的前提下: H = 1 H=1 H=1 的概率为 1 / ( l − 2 ) 1/(l − 2) 1/(l−2)。(因为路径长度为 l l l, l l l 减去首尾节点,剩下的就是中间节点的数量。)
-
P
r
S
f
a
i
l
Pr_{S}^{fail}
PrSfail (支付失败情况下发现支付路径中的发送者的概率)的公式如下:
- P r [ L = 3 , f a i l ] = 0 Pr[L = 3,fail]=0 Pr[L=3,fail]=0 表示: 因为如果攻击者是唯一的中间节点,支付就不会失败
-
P
r
[
L
=
l
∣
f
a
i
l
]
=
P
r
[
L
=
l
∣
f
a
i
l
,
l
≥
4
]
Pr[L = l | fail]=Pr[L = l | fail, l ≥ 4]
Pr[L=l∣fail]=Pr[L=l∣fail,l≥4] : 在支付失败情况下路径上的节点数一定是要大于三的,等于情况下支付不会失败。在攻击节点成功把支付转发给下一个节点后最后支付失败,则说明接收方一定不是攻击节点的额下一个节点,即攻击节点的位置一定不是
l
−
1
l-1
l−1。由此可得:
- 假设攻击节点的位置在中间任何位置上的概率相等,在支付失败的前提下:
H
=
1
H=1
H=1 的概率为
1
/
(
l
−
3
)
1/(l − 3)
1/(l−3)(因为在支付失败的情况下,攻击者的位置除了不可能是首尾位置,也不可能是倒数第二个位置,所以要要减去3)。由此可得下面公式:
7.1、Lightning Network simulator(闪电网络模拟器)
- 作者研究团队进行了闪电网络的模拟。
- lnd, c-lightning,eclair: 是三个闪电网络软件客户端?
- 在路径选择方面: 研究者选择使用了Yen’s k-shortest path 算法和networkx Dijkstra’s SPF 算法。
- 支付参数:
- t p a y t_{pay} tpay:表示每日发生在LN中的付款总数。
- e n d p o i n t s endpoints endpoints:表示付款发送方和接收方的参数
- v a l u e s values values:表示交易的金额,如果设置 v a l u e s values values较大则可能高于通道余额导致支付失败, v a l u e s values values较小时则交易成功率高。
7.2、Simulation results(模拟结果)
- 图片一中蓝线表示让交易的路径尽可能长的条件下所有的交易中各种路径长度所占的比例,红线表示让交易路径尽可能短的情况下所有的交易中各种路径长度所占的比例。
- l e n g t h s l o n g lengths_{long} lengthslong:代表最坏的情况。(endpoints = uniform, values = cheap)
- l e n g t h s s h o r t lengths_{short} lengthsshort:代表最好的情况。( endpoints = weighted 确保更频繁地挑选高度连接的节点,从而缩短路径, values = expensive)
- 结论: 网络拓扑和客户端路径查找算法对路径长度的影响比端点(endpoints)或值(values)大得多。
- Lower Bound: 节点低联系不成团
- Clique: 节点成团的
- 图二解释: 在交易成功或不成功的条件下,在节点不成团和成团的两种情况里,攻击者可以找出支付方的概率范围统计( l e n g t h s l o n g lengths_{long} lengthslong是最低情况, l e n g t h s s h o r t lengths_{short} lengthsshort是最高情况)。
- 结论: 攻击者很容易可以获知支付发起者,支付失败情况下的获知率要高于支付成功的情况。(成功:L>=3 失败:L>=4)
八、Payment Discovery
- 攻击方法: t 时刻进行网络快照,再在 t + T 时刻进行网络快照,并使用两个快照之间的差异,通过查看任何更改的路径信息来推断发生的付款信息。
8.1、Payment discovery algorithm
- S t S_{t} St、 S t + τ S_{t+τ} St+τ :表示在τ时间间隔内的两个网络快照
- G d i f f = S t + τ − S t G_{diff}= S_{t+τ}− S_{t} Gdiff=St+τ−St:表示两个通道内的余额差异
8.2、Attack simulation
- P(precision): 正确检测到的付款数 / 检测到的付款总数
- R(recall): 正确检测到的付款数 / 实际付款数
8.3、Simulated attack results
- 图3显示了τ和推断的付款数量之间的关系,并证实了攻击者在快照之间等待的时间越长,攻击就越无效的直觉,因为这会导致多次付款之间的重叠。
- 在某一点上,越来越快的采样带来的回报越来越少。例如,对于τ = 32秒,攻击者的召回率为66%,对于τ = 1秒,召回率缓慢增加到74.1%。
九、Conclusions
- 在本文中,作者系统地探索了闪电网络的主要隐私属性,并表明,至少在其现有状态下,每个属性都容易受到攻击
十、
- Alice 和 Bob 首先形成了两个承诺交易,他们每个人一个,这代表了他们对渠道当前状态的一致意见。每个承诺事务都有2对2的multisig作为输入,并有两个输出:本地和远程。
- t x A , i tx_{A,i} txA,i:代表Alice对 i i i 状态的看法,表示将Alice的当前余额发送到本地,并将Bob的当前余额发送到远程
- t x B , i tx_{B,i} txB,i:表示将Bob的当前余额发送到本地,并将Alice的当前余额发送到远程
- 远程输出(remote output)包括: a d d r B addr_{B} addrB in t x A , i tx_{A,i} txA,i and a d d r A addr_{A} addrA in t x B , i tx_{B,i} txB,i
- 本地输出( local output )包括: 限制时间 t 和潜在输入 σ
关键点总结:
- 网络快照获取办法:
- 作者他们自己的 lnd 客户
- one of the main c-lightning developers
- 网站:https://1ml.com/ 和 https://ln.bigsun.xyz/上的数据
最后运用BlockSci工具去分析处理数据。
- 为什么探索通道余额本文设计要用两个节点去攻击,相较于之前一个节点的攻击有何好处?
- If error messages are removed or made generic in the future,, however, our attack would continue to work whereas previous attacks would not.
- 交易发起方和交易接收方的探索是怎么进行的?
答:文中确实是以概率统计的形式去计算能获知发送方和接收方的概率的