見出し画像

Lightning Networkのメトリクスと攻撃手法

この記事では、CoinDesk のリサーチチームが2021年9月に出している Lightning Network の調査結果を紹介します。

https://downloads.coindesk.com/research/Lightning+Network+-+CoinDesk+Research+-+2021.09.pdf

はじめに

Lightning Network は Bitcoin のスマートコントラクトによるオーバーレイネットワークであり、ブロックチェーンではありません。

Bitcoin が誕生してから 12 年後、1 億人のユーザーがいるが、Bitcoin はカジュアルなトランザクションには法外に高価であり、1 秒間におよそ 7 件のトランザクションしか確認できません。

そのため、Bitcoin の物語は近年、「電子キャッシュ」のユースケースを捨て、「価値の保存」や「デジタル貯蓄技術」のユースケースに置き換え、一種のデジタルゴールドになぞらえました。しかし、だからといって、P2P 版の電子マネーとしての Bitcoin の夢が絶たれたわけではありません。

エルサルバドルが 2021 年 6 月に Bitcoin を法定通貨にした後、よくある批判は、Bitcoin のブロックチェーン全体が、世界中の誰も全く使っていないと仮定すると、すべてのエルサルバドル人が 20 日に 1 回 Bitcoin のトランザクションをできる程度のトランザクション・スループットしか持っていないので、これは悪い考えだ、というものでした。もちろん、解決策はあります。エルサルバドルは Lightning Network を導入し、Bitcoin の決済を経済圏で行えるようにしました。

Lightning Network は、Bitcoin のブロックチェーンの上に構築されたオーバーレイネットワーク、つまり「第二の層」で、ユーザが生成したマイクロペイメントチャンネルを使って瞬時にトランザクションを行うものです。2016 年にThaddeus Dryja と Joseph Poon によるアイデアとして発表され、最終的に 2018 年にオープンソースソフトウェアソリューションとして実装されました。

つまり、Lightning Network はブロックチェーン(またはオフチェーン)から離れた場所で複数のトランザクションを発生させ、そのチャンネルの状態を記録しておき、それを Bitcoin のブロックチェーン上で 1 回のトランザクションで確認します。実際には、Lightning Network の料金体系が Bitcoin と異なるため、ブロックチェーン上の混雑が緩和され、1 回あたりの利用料金が安くなります。

本レポートでは、Lightning Network とは何か、Lightning Network の現状を特徴づける指標、開発者が軽減に取り組んでいる潜在的な攻撃ベクトル、Lightning Network の将来について紹介されています。

入門編

Lightning Network は、Bitcoin と一緒に運用されるオーバーレイ型の P2P ネットワークで、Bitcoin のブロックチェーンを使用してトランザクションを保護します。また、Lightning Network は独自のコインやトークンは持っていません。

Lightning Network は、ネットワークを構築するために、Bitcoin のスマートコントラクトを使用しています。そのために、トランザクションを検証しネットワークを維持するコンピュータである Bitcoin ノードは、Lightning Network のノードとしても機能するように追加のソフトウェアを組み込みます。そこから Lightning Network ノードは、2of2、バイラテラルな Bitcoin のスマートコントラクトを実行し、Bitcoin を支払いチャネルにコミットすることで、他のノードとのチャネルをオープンします。このチャンネル設定により、コミットされた Bitcoin は Bitcoin ブロックチェーンの「オフチェーン」、つまり上のレイヤーに移動し、Bitcoin ブロックチェーンはレイヤー 1、Lightning Network はレイヤー 2 になります。

そこから、Lightning Network のルールがその決済チャネルに適用されます。支払いチャネルの各側は、レイヤー 1 のトランザクションで行う必要がある、Bitcoin のブロックチェーン上での確認を待つことなく、Bitcoin を送り返すことができるようになりました。その代わり、チャネルはスライディングスケールのように機能し、ノード間のチャネルで Bitcoin が送信されると、それぞれの残高が変化します。両者がチャネルを閉じることを選択すると、スマートコントラクトのルールが各ノードへの最終的な残高を決定し、その最終状態を Bitcoin ブロックチェーン上に決済します。つまり、Bitcoin のブロックチェーンには、最初のコミットメント・トランザクションとチャネルクローズ・トランザクションの 2 つのトランザクションしか表示されませんが、その間に起こったトランザクションはいくつでもあり得るのです。

このような、2 ノード 1 チャネルの世界では、ほとんどエキサイティングなことではありません。しかし、Lightning Network の技術仕様では、チャネルを介して複数のノードを経由して支払いを行うことも可能です。以下の場合、ノード A はノード C とチャネルを直接開いていなくても、Lightning Network による支払いを送ることができます。

ノード A がノード B とチャネルを開いており、ノード B がノード C とチャネルを開いている場合、ノード A はノード B を経由してノード C に支払いを送信することができます。

そのトラブルに対して、ノードBはわずかな "ルーティング手数料 "を補償されます。また、ノード B はノード C に直接接続されている必要はありません(他のチャネルを通じて間接的に接続していれば OK)。

このセクションのまとめとして、Lightning Network の 2 つの重要な特徴を指摘しておきます。まず、Lightning Network でトランザクションを送信するのは安価です。1 BTCの 1 億分の 1、約 0.0005 ドルである 1 satoshi で取引を行うことも可能です。2つ目は、Lightning Network の単一の支払いは、トランザクションの最終性に関して Bitcoin のブロックチェーンに依存しないため、支払いは事実上瞬時に行われます。安価で瞬時の決済が可能なため、多くの支持者が Lightning Network に期待を寄せています。

Bitcoin の取引手数料は比較的安価(1 取引あたり0.05ドル以下)ですが、Bitcoin のメモリプールが混雑すると取引手数料が大幅に上昇し、ベースレイヤーでのカジュアルな取引は成り立たなくなる場合があります。

メトリクス

以下では、Lightning Network が投資や注目に値する技術として、全体的な成長、健全性、実行可能性を判断するためのいくつかの指標を概説しています。

ここで注意すべき重要な制約があります。すべての Lightning Network ノードがネットワーク全体に発表される必要があるわけではありません。ノードを開始するときやチャンネルを開くときに、ネットワーク全体に自分を発表するか、プライベートなまま、接続している人だけに知られるようにするか、選択できるオプションがあります。したがって、以下の指標は、最悪の場合、実際の下限値を示すことになります。参考までに、2020 年の BitMEX では、ライトニングチャネルの 28% がプライベートであると推定されています。

ノードとチャネル

チャネルを設定する最初のステップは、ノードを設定することです。ノードの数が少ないネットワークは、ノードの数が多いネットワークよりもつながりが弱くなります。2021年8月31日時点では、チャンネルを持つパブリックライトニングのノードは 15,203 個で、直近の 3 カ月、6 カ月、12 カ月でそれぞれ 30.3%、63.8%、99.5% 増加しました。

キャパシティ

ライトニングチャンネルを開設するためには、ノードオペレータはチャンネルに流動性を提供するために Bitcoin をコミットする必要があります。すべてのチャンネルを合わせたコミットされたビットコインの総量は、ライトニングネットワークの容量として知られています。

これは重要な指標ですが、コミットされた Bitcoin の総額は、単位時間内に Lightning Network 上で転送できる価値の最大値と見なすべきではありません。どちらかというと、一度に一方向に送れる金額の理論的な最大値です。

ライトニング・チャネルを、担保プール付きの双方向クレジットラインのようなものと考えてみてください。二人が 50 ドルを頭金としてチャネルを開設した場合、チャネルの容量は 100 ドル(50ドル+50ドル)となり、それぞれ 50 ドルの債権を持っています。その後、私があなたから $25 で何かを購入したいとします。このとき、チャネルの残高は、私が $25 ($50 - $25) 、あなたが $75 ($50 + $25) になります。次に、あなたが私から 10 ドルで何かを購入したいとします。チャンネルの残高は、私が 35ドル(25ドル+10ドル)、あなたが 65ドル(75ドル-10ドル)に移動します。これは、私たちがチャンネルを閉じて清算する準備ができたと判断するまで、無限に続くことができます。

チャネルごと、ノードごのキャパシティ

これらのチャンネルごと、またはノードごとのメトリックを見ることで、Lightning Network の状態について知ることができます。1 チャネルあたりの平均キャパシティが 1,000ドル(約 2,500,000 satoshi または約 0.025 BTC)を超えていれば、Lightning Network を利用する平均的なユーザは、毎日ほとんどの買い物をリーズナブルにできる可能性が高いことを意味します。平均的な容量が 100 ドルまたは 10 ドルであれば、おそらくほとんどのチャンネルが日常的な取引には適さなくなるでしょう。

ノードあたりの容量とチャネルあたりの容量を比較することで、ノードオペレータがどの程度潜在的にアクティブであるかを判断することができます。ノードあたりの容量がチャネルあたりの容量に近い場合、ほとんどのノードが少数のチャネルを操作していることを意味します。ギャップが広がると、ノードが複数のチャネルを操作していることを意味します。ノードあたりのチャネル数が多いということは、ノードがチャネルを開設して「ゼロから脱出」したときに、チャネル容量に対する需要が高くなることを意味します。ほとんどのノードが 1 つのチャネルしか持っていない場合、チャネルの開設は、少数の顧客のみが使用するほとんど目新しいものであることを意味する可能性があります。

Lightning Network カットチャネル

カットチャネルは、ネットワークの全体的な接続性を測定するための手段です。カットチャネルとは、2 つのノードの間にある、ネットワークの異なるコンポーネントを接続するチャネルのことです。このチャネルが除去されると、他のノードがパスを持つことができなくなります。そのため、カットチャネルは橋とも呼ばれます。

他の指標と同様に、ネットワーク内のカットチャネルの最適な割合はありません。カットチャネルの割合が低ければ、理論的には、割合が高い場合よりもネットワークがよりよく接続されていることになります。

脆弱性

このセクションでは、Lightning Network の攻撃ベクトルと、Lightning Network の将来についてまとめています。

Lightning Network は、ハッシュロックとタイムロックという 2 つの基本的な要素を含む Hash Time Locked Contracts (HTLC) を使って支払いをルーティングしています。ハッシュロックとは、一般的に「プリイメージ」と呼ばれるパスコードのようなもので、決済を成功させるために明らかにしなければならない秘密(ハッシュ)が存在することを意味します。また、タイムアウトという概念があり、一定時間が経過すると、どちらかが支払いを請求できるようになります。このタイムアウトは、チャネル運営者の過失による問題を回避するために使用されますが、Bitcoin と Lightning Network を高度に理解する悪質な行為者に利用される可能性があります。ノードが支払いを送信するときは、HTLC を送信することによって行います。以下のサブセクションで、ライトニングペイメントと HTLC を互換的に使用します。

Griefing

グリーフィング攻撃は、少額決済のスパムを行うことで、Lightning チャンネルにコミットされた Bitcoin を凍結させるものです。Lightning チャンネルは、一度に 483 のインフライトまたは保留中の HTLC を収容することができます。したがって、攻撃者は、他のノードによって維持されているチャネルを介して、彼らがコントロールする別のノードに 483 のマイクロペイメントを送信し、その後、それらのチャネルを無力化するのに十分な時間 HTLC を保持することができます。これにより、資金は最大 2 週間まで保留され、その時点でタイムアウトによりコントラクトがキャンセルされる可能性があります。

この攻撃は、資金を盗むことはできませんが、妨害行為やチャンネル運営者に身代金を要求するために使用することは可能です。悪意のある行為者は、わずかな資本とスクリプトの知識、そして少しの運で、意味のある大規模なチャンネルを閉鎖することも可能です。

また、グリーフィング攻撃によって、チャネルが強制的に閉鎖され、不注意に資金が失われることもあります。強制終了は、あるチャネル・パートナーが、他のチャネル・パートナーの同意なしにチャネルを閉じようとしたときに起こります。通常、強制終了は、資金が合意によるチャネル閉鎖よりも長くロックされ、チャネルを開いたパートナーは、任意の理由によるチャネル閉鎖を阻止するために料金構造を実装した Lightning Network の設計上、通常よりも高いオンチェーン料金を支払わなければならないので、理想的ではありません。

Lightning Network のメンテナンスからは、これまでグリーフィングの修正について大きな働きかけはありませんでした。しかし、Joost Jager は、Circuit Breaker と呼ばれる概念に取り組んでいます。

Circuit Breaker は、ノードオペレータがインフライトの HTLC の最大数をピアごとに割り当てることを可能にし、悪意ある者が最大数の HTLC をノードに殺到させることを不可能にするものです。この変更を有効にするには、ネットワーク全体に Circuit Breaker を実装する必要があり、この変更にはより広いコミュニティからの賛同が必要です。

Eclipse Attack

エクリプス攻撃は、別名時間拡張攻撃と呼ばれ、Lightning Network のノードに対するシビル攻撃を伴います。この攻撃を行うには、攻撃者は数百のノードを起動し、被害者のノードに群がり、被害者が誠実なノードに接続されないようにします。これにより、被害者は実際の P2P ネットワークから遮断され、攻撃者は被害者が何を見るかを決定することができます。そこから、攻撃者は Lightning チャンネルを閉じることができ、被害者はネットワークが実際に何を行っているかを知ることができないため、攻撃者は資金を盗むことができるのです。

一見すると、これは大きな問題ではないように見えます。フルノードを運用しているのであれば、誠実なノードとの接続が広すぎて、十分な攻撃を受けられない可能性が高いからです。しかし、一部のウォレットプロバイダーが使用している Lightning Network の実装には、「軽量」なものが多く存在します。これらの軽量クライアントは、ブロックチェーン処理のバックエンドを使用して、リソースに制約のあるデバイス(主にモバイルデバイス)のスペースを節約しています。

ここに真の問題があります。エクリプス攻撃は、Lightning Network や Bitcoin の軽量な実装を使用している人たちを利用することになります。つまり、これらの人たちは、洗練されておらず、資本力のあるユーザーである可能性が高いのです。

Pinning

ピンニングは異種のトランザクションメモリプールを利用し、親トランザクションの手数料率が低すぎる場合やトランザクションが RBF(Replace-By-Fee)を許さない場合、Child Pays For Parent(CPFP)トランザクションがぶつけられないようにします。

Bitcoin のトランザクションが開始されると、それらは「メモリプール」と呼ばれるコレクションに集約され、マイナーはブロックに含めるトランザクションを探します。CPFP とは、元の取引の手数料が低すぎて思うように実行できない状況において、ブロックチェーンへの追加を早めるために、実効手数料率を上げるために前のトランザクションを参照するトランザクションのことを指します。RBF は、メモリプール内の未確定トランザクションを、同じトランザクションでより高い手数料のものに置き換えることができる取引方針を指します。CPFP と RBF の違いは、CPFP トランザクションは常に試行できるのに対し、RBF トランザクションは元のトランザクションが RBF を選択した場合にのみ発生する点です。

これらの概念を念頭に置くと、高度な攻撃者は Bitcoin とライトニングプロトコルをうまく利用して、保留中のライトニングトランザクションに対してピンニング攻撃を行うことができます。ピン留めにはさまざまな形態がありますが、最も単純な例を以下の図にまとめました。この図では、タイムロックとハッシュロックが、ノード間の保留中のトランザクションを、準備が整うまで効果的に「ウォールイン」する様子も示されています。

  • 攻撃者は目標となる被害者と 2 つのチャネルを準備します

  • 攻撃者 A から攻撃者 B に向けてこのチャネルを通じてトランザクションを送ります

  • 攻撃者 B は HTLC を受信しても応答せず、タイムアウトが経過するのを待ちます。これにより被害者は、被害者と攻撃者 B の間で HTLC B に含まれる資金を請求するために、「HTLC タイムアウト・トランザクション」を含むコミットメント・トランザクションを発行する必要があります。

  • 次に攻撃者は、被害者と攻撃者 B の間で HTLC B を要求するトランザクションをブロードキャストし、ハッシュロックの秘密を明らかにし、RBF を無効にして意図的に低い手数料を設定します。攻撃者 A が HTLC A を引き抜く前にトランザクションが確定してはならないので、手数料は意図的に低く設定されます。さもなければ攻撃者の HTLC B のマイニングが成功し、被害者がそのトランザクションと必要なプリイメージを見ることができ、HTLC A から資金を引き出すことができるようになり、攻撃を止めることができます。もし攻撃者のトランザクションが被害者の HTLC タイムアウト・トランザクションより先にマイナーのメモリプールに入った場合、被害者は資金を取り戻すことができず、HTLC B の値は被害者から攻撃者 B に流れることになります。被害者はその場に「固定(ピン)」され、自分のメモリプールにある HTLC タイムアウト・トランザクションを見るがマイニングされないので何もできません。

  • 一方、攻撃者 A から被害者への HTLC A のタイムロックは失効し、攻撃者 A は自分たちのために HTLC A を請求することができます。攻撃者のトランザクションがマイニングされると、被害者は下流で HTLC を支払ったことになるが、上流では対応する金額を受け取れない。

HTLCの場合、すべてのマイナーはメモリプールで「成功」トランザクションを持っています。これにより、HTLC を要求するためのプリイメージが明らかになり、ネットワークの残りの部分でタイムアウト・トランザクションが発生します。攻撃者は、上流チャネルがタイムアウトした HTLC を要求できるように、プリイメージ・トランザクション手数料を十分低くしメモリプールに保持されるようにします。(通常、マイナーはより高い手数料レートのトランザクションをブロックに含めます)

Flood & Loot

Flood&Loot 攻撃は、Lightning Network がタイムロックを使用して支払いをルーティングするという事実を利用しています。

Flood&Loot 攻撃を実行するには、攻撃者はソースノードとターゲットノードの 2 つのノードを必要とします。攻撃者は、ソースノードを使用して被害者とチャネルを開き、ターゲットノードを使用して他のチャネルを開きます。次に、攻撃者は被害者を介してターゲットノードにできるだけ多くの支払いまたは HTLC を送信します。攻撃者は、ターゲットノードに到達したときに支払いを受け取り、検証のためにプレイメージをソースノードに送り返します。

その時点で、攻撃者の送信元ノードは応答を停止します。 これは、被害者がBitcoin ブロックチェーンのチャネルを閉じるために HTLC がタイムアウトするまで待たなければならないことを意味します。ただし、攻撃者がチャネルをすべて同時に閉じるようにタイミングを合わせると、Bitcoin ブロックチェーンは、チャネルを同時に閉じようとしているノードで混雑します。タイムアウト後、攻撃者は RBF を使用して過去に期限切れになった HTLC を要求できます。資金の損失につながるため、これは有害な攻撃です。

まとめ

今回は、CoinDesk が出している Lightning Network についてのレポートを紹介しました。個人的には、HTLC などの Lightning Network の知識がないと読み進めるのが難しいと感じました。様々な攻撃手法も載っていますが、これも HTLC の仕組みを事前に把握しておく必要がありました。

HTLC については別の記事でまとめたいと思います。Lightning Network については、まだ全然研究や運用も十分に進んでいる領域ではないので、研究ネタを見つけるためにも色々と漁っていこうと思います。

この記事が気に入ったらサポートをしてみませんか?