On the Difficulty of Hiding the Balance of Lightning Network Channels阅读笔记

On the Difficulty of Hiding the Balance of Lightning Network Channels(论隐藏雷电网络通道余额的难度)

一、Key words

  • satoshis: 比特币中的最小金额,即一亿分之一BTC

二、论文重要知识点归纳

  • 本文的攻击点: 揭露本不该被其他节点所知道的通道balance
  • 用不成功的交易去获知通道balance,尽量降低攻击成本
  • B a l a n c e A B Balance_{AB} BalanceAB:表示 A A A在通道中的 b a l a n c e balance balance B a l a n c e B A Balance_{BA} BalanceBA:表示 B B B在通道中的 B a l a n c e Balance Balance
  • C A B = C B A = ( b a l a n c e A B + b a l a n c e B A ) C_{AB} = C_{BA} = (balance_{AB}+ balance_{BA}) CAB=CBA=(balanceAB+balanceBA) (通道容量等于通道余额相加)
  • 通道余额变化举例: A向通道放入0.1比特币,此时 B a l a n c e A B = 0.1 Balance_{AB} = 0.1 BalanceAB=0.1 B a l a n c e B A = 0 Balance_{BA} = 0 BalanceBA=0,当A向B支付0.02比特币后: B a l a n c e A B = 0.08 Balance_{AB} = 0.08 BalanceAB=0.08 B a l a n c e B A = 0.02 Balance_{BA} = 0.02 BalanceBA=0.02 C A B = C B A = 0.1 C_{AB} = C_{BA} = 0.1 CAB=CBA=0.1
    在这里插入图片描述
  • 闪电网络上的通道容量应该是放在区块链上的所以是可知的,但是每个用户的余额应该是不可知的。
  • 由于 C A B = C B A = b a l a n c e A B + b a l a n c e B A C_{AB} = C_{BA} = balance_{AB}+ balance_{BA} CAB=CBA=balanceAB+balanceBA,所以只需要探知AB中其中一个balance就可以计算出另一方的balance。
    在这里插入图片描述
  • 闪电网络交易过程:
    在这里插入图片描述
  • 为了降低攻击成本,A可以创建虚假发票(本该是C创建的),并随机产生 h ( x ) h(x) h(x),此时B会误以为A发出的是C产生的发票,他就会帮助A进行交易,交易到达BC之间时C会发现错误,即会使得A探测到B的balance但是交易并没有成功。
    在这里插入图片描述
  • 攻击前提: b a l a n c e M A ≥ b a l a n c e A B i balance_{MA}≥ balance_{AB_{i}} balanceMAbalanceABi
  • 为了达到最大的准确性,攻击者需要打开一个最大容量的通道,目前该通道的容量限制在0.16777215BTC。
  • MAX_PAYMENT_ALLOWED: the maximum amount to pay in one single payment (单次交易最大金额)(4,294,967 satoshis)
  • MAX_FUNDING_ALLOWED: the maximum amount with which to create a channel(通道创建时的最大金额)(16,777,215 satoshis)
    在这里插入图片描述
  • 上图横坐标表示通道余额,纵坐标表示该类型通道数量占总数的百分比 ,蓝色的线表示单次最大交易金额的位置。
  • we can perform the attack to a channel with capacity C A B C_{AB} CAB and obtain its exact balance only if C A B C_{AB} CAB ≤ MAX_PAYMENT_ALLOWED.
    因为MAX_PAYMENT_ALLOWED是单次交易的最大金额,如果通道余额大于这个单次交易的最大金额,那么就无法通过作者的方法去探究通道的余额。
  • 由上图可知Mainnet中有89.10%的渠道容量低于MAX _ PAYMENT _ ALLOWED,这意味着它们的余额可以被准确探知。
  • lower bound for that balance(通道余额下限):当通道两端的余额大于单次最大交易数的时候,那么该通道的下限就是MAX_PAYMENT_ALLOWED。
    在这里插入图片描述
  • 上图横坐标表示攻击节点的数量,纵坐标代表可探究到余额的通道的百分比。
  • 由上图可知,可以通过攻击18个节点来获知50%的通道余额,通过攻击78个节点可以获知80%的信道余额,通过攻击141个节点可以获知90%的信道余额。
  • which yields a set of 624 nodes.In other words, with less than 624 attacks to specific nodes,one could cover all the channels in the network. Note that,by the local-ratio algorithm, the vertex cover is guaranteed to be at most twice the minimum vertex cover. The actual size of the minimum cover set will range between 312 and 624 nodes. (理解: 作者通过local-ratio(局部比率)算法算出闪电网络中的所有通道与624个节点相联系,但是由于该算法算出的结果与实际值的误差应该说是两倍以内,所以实际最小的覆盖整个网络的节点数应该是312-624个)
  • maxFlow = min{channel_capacity,MAX_PAY MENT_ALLOWED}
  • 闪电测试网络: https://github.com/lightningnetwork/lnd
  • 进行余额探测攻击时没必要攻击每个节点,文中说测试网络里有十一个节点连接了网络里百分之八十的通道,所以只要跟这十一个节点建立通道连接即可攻击大部分网络节点。
  • level percentage:
    在这里插入图片描述
    在这里插入图片描述
  • l p A B lp_{AB} lpAB l p B A lp_{BA} lpBA:level percentage
  • C A B C_{AB} CAB:通道AB的容量
  • b a l a n c e A B balance_{AB} balanceAB:A的余额
  • b a l a n c e B A balance_{BA} balanceBA:B的余额
  • l p A B lp_{AB} lpAB越接近零说明A的余额越多,能更多的从A向B付款,相反 l p A B lp_{AB} lpAB越接近100则说明B的余额相较A来说更多,因此可以更多的从B向A付款。( l p B A lp_{B A} lpBA可同理分析)
    在这里插入图片描述
  • 上图横坐标表示通道序号(第0个到第272个通道),纵坐标表示level percentage。
  • 图8显示了272个通道的level percentage,从图可以看出大部分通道level percentage被破坏了,很多通道只能付款或只能收款。

三、防御办法

  • Payment Requests Denial(拒绝付款请求): 节点控制者可以设置拒绝交易率,例如如果节点A从节点B收到大量支付请求,而节点B无其他通道,只有AB通道。节点A可以认为这是一种异常情况,此时就可以增加拒绝交易的比例,同时也不告诉攻击者交易失败的原因,以此让攻击者攻击失败。(疑问: A如何知道B的通道数量?)
  • Dynamic Absorption of Negative Balances(负余额的动态吸收): 允许负余额得存在。只要付款方有钱付那通道路径总能成功转移交易。

四、自我总结

  1. 首先这篇论文讲的攻击是对闪电网络中通道节点余额的探索,闪电网络上的通道容量应该是在创建通道时需要在区块链上广播的,所以应该是公开的,而节点的余额则是需要隐藏的。
  2. 通道容量与节点余额(balance)是不同的,通道容量 = 节点A的余额+节点B的余额,又因为通道容量是已知的,只要获知A的余额即可计算B的余额。
  3. 攻击办法:通过不成功的交易去探知节点余额。
  4. 通道建立时其通道容量是是有上限的,单次交易额也是有上限的,通道最大容量大概是单次最大交易额的四倍(具体金额分别是:0.16777215BTC 和 0.04294967BTC )。
  5. 如果节点余额大于单次最大交易金额的话,攻击者就没办法探知该节点的余额,但是作者实验发现Mainnet中有89.10%的渠道容量低于MAX _ PAYMENT _ ALLOWED,这意味着闪电网络中大部分节点的余额可以被准确探知。(猜想: 如果某一节点A的余额大于单次交易最大金额,是否可以去攻击通道另一端节点B的余额,再反向计算A的余额。由于最大通道容量是单次最大交易金额的四倍,所以B端的余额可能也大于单次交易金额,所以也可能攻击失败,但是应该可以一定程度上增加成功率)
  6. 作者实验验证得出闪电测试网络中与312-624个节点连接的通道即可覆盖整个网路,因此给我们的启发是,在以后的实验里可以先找出网路中连接度高的那些节点,然后通过攻击这些节点来提高实验效率。
  7. 作者给出了一个计算公式来衡量闪电网络中节点的余额状态,作者称其为level percentage。实验后给出的结论是图可以看出大部分通道level percentage被破坏了,很多通道只能付款或只能收款。(思考: 如果一个节点之能收款不能付款,那是不是只能被动的等待别人给自己付款,是不是就废了,如何解决这一问题)
  8. 作者提出的防御办法:第二个防御办法好像可以解决上面提到的某些余额为0的节点不能不能进行支付交易的问题。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值