数日前に、ライトニングネットワークに対する2つの攻撃方法を記した論文が公開されました。ところが、イーサリアム上のbZxというレンディングコントラクトが立て続けに2回も悪用されたという騒ぎの影に隠れてしまった気がするので、今日は論文に記載されている攻撃について解説したいと思います。
攻撃① 大半のチャネルの容量をロックする
1つ目の攻撃方法は、攻撃者が「自身のノードから自身のノードへ、たくさんのノードを経由する長い経路」をたくさん用意し、それぞれをたどる大量のペイメントを実行し、正常な受け取りの証であるプレイメージを返さないことで実現します。つまり、取引にコミット済みだが未決済の状態(時間が経てば支払い失敗になる)をネットワーク全体という規模で長引かせる攻撃です。
ライトニングネットワークの支払いはHTLCという時間条件つきのマルチシグトランザクションを交換することで成り立っています。このとき、未決済のLN取引が多いとHTLCのデータが大きくなりすぎてオンチェーンで決済できなくしまうため、それぞれのライトニングノードについて同時に未決済状態で存在しうるLN取引の数には上限があります。(LNDは483、c-lightningは30)
攻撃者は、各経路においてこの上限数の支払いを実行し、かつプレイメージを返さないことによって、HTLCの時間切れに達するまで経路上のLNノードが新しい取引を処理できなくすることができます。
また、この攻撃の場合、送金元も攻撃者なので、攻撃者が負担するのはチャネルの開閉に使用した手数料のみで、LN上での支払いに使用した金額は支払い失敗によって攻撃者に返金されます。したがって攻撃コストは低く、理論上は手数料を総額で0.25BTC程度支払うだけで650BTCものライトニングネットワークの容量を3日間ロックすることができるようです。
現在のライトニングネットワーク容量が900BTC程度なので、かなり大規模な攻撃だとわかります。
(※ただし、LN上にロックされているビットコインに対して実際の3日間の使用量は現状では非常に小さいと思われます)