LNをDoS攻撃から守るCircuit Breaker
Lightning Labsを退職した技術者のJoost Jagerがつぶやいたライトニングネットワークの脆弱性と、彼が作っているCircuit Breakerという対策案が話題になっています。その脆弱性自体は2月にこちらで解説させていただいたDoS攻撃であり、いまさらLNをdisる口実にしている人たちも滑稽なのですが、2月の時点では「構想」でしかなかった対策案の原始的な実装が出てきている点が特筆すべきです。
今日はJoost Jagerの対策案で「ライトニングネットワークのファイアウォール」とも言えるCircuit Breakerについて解説します。
2月に解説したDoS攻撃
まずは、今回問題となっている理論上の攻撃について簡潔におさらいしましょう。詳しく知りたい方は2月のこの記事をご覧ください。
簡単に言うと、ライトニングノードはHTLCという仕組みを使って支払いのバケツリレーを行うのですが、支払いの受け取り手は一定期間「未決済」の状態を保つことができます。支払いが未決済の間は、途中のライトニングノードは全て未決済のHTLCを保持しているのですが、チャネルごとに同時に最大483件しか未決済のHTLCを保持できません。
大量の未決済の取引を中継してしまってこの数字がいっぱいになると、そのチャネルはどれだけ残高があってもHTLCの期限が切れるか決済されるまで新しい送金を中継することができなくなる…それが今回問題にされている攻撃です。
期限切れ直前に決済されて、代わりにまた新しい未決済の取引を中継させられてしまうと、わずかな手数料は入りますが無期限にチャネルを無力化されてしまいます。
攻撃者は低コストで特定のチャネルの資金をロックでき、特定のノードに対するDoS攻撃が可能です。また、この攻撃の規模を拡大すればネットワーク全体に対するDoS攻撃も行うことができ、週に0.25BTC程度の手数料で多くのLN送金を失敗させることができるだろう、というのが2月の論文の趣旨でした。
DoS攻撃とはDenial of Service攻撃の略称で、主に大量のリクエストを送ることでサービスの提供を妨害する攻撃です。LNにおいては、大量のリクエストを送りつけるlocal攻撃、確実に失敗する多数の送金を行うfast攻撃、そして解決に時間がかかる多数の送金を行う今回のようなslow攻撃に分類できると主張している人がいました。
現時点でLNや特定のライトニングノードにDoS攻撃を仕掛けるメリットが少ないからか、半年以上前から言われている脆弱性ですが実際に攻撃されたという報告は聞いていません。しかし、Lappsの市場が大きくなれば、Lappsの運営者や一部のRouting Nodeが競合他社のノードにこの方法を使ってDoS攻撃を仕掛ける可能性があります。したがって、対策は喫緊の問題ではないですが、将来的にとても重要になるでしょう。
Circuit Breaker
Circuit BreakerはリポジトリのREADMEファイルにおいて「インターネットでいうファイアウォール」と形容されています。チャネルの相手のノードによって同時に未解決のまま保持するHTLC数に異なる上限を定めることができるからです。ホワイトリストやブラックリストに似ています。
ファイアウォールとはネットワークセキュリティ用語で、信用できるネットワーク(PCやLAN)と外部のネットワーク(インターネット)の間を行き来する通信を制限する機能です。IPアドレスやアプリケーションごとに通信を許可する条件を定めることができます。
では、Lnd向けのCircuit Breakerの詳細を見ていきましょう。
仕組みはとてもシンプルで、設定ファイルに公開鍵で指定した接続先ノードによって、未解決のHTLCの数の上限を定めることができます。READMEの例では、特に指定がなければ上限が5つ、信頼できない2つのノードに関しては上限が2つ、そして信頼できるノードに関しては上限が100という設定になっています。
現時点では設定ファイルの通りに制限することができますが、将来的には上限到達後は手動の承認のようなものを必要にしたり、未解決のHTLCが急増した場合に、金額や期間の条件付きで新しいHTLCを受け入れる機能などが増えるかもしれません。(私の勝手な想像ですが、攻撃コストの上昇にどれも一定の効果がありそうです)
これによって、未解決HTLC数の上限に達することを防ぎやすくなる、という1つのシンプルな解決策です。一方で、ネットワークに上限に達しているチャネルがあったりすると、ルーティングが少し複雑になるデメリットもあるかもしれません。
HTLCが期限切れになるとチャネルをオンチェーンで決済する羽目になるので、未決済HTLCの上限数を低く設定することはその際のトランザクションサイズの削減によって手数料節約にもつながり、Flood and Lootのような攻撃を難しくするのにも多少の効果があるかもしれません。
まとめ
これまでにいくつかLNに対する理論上の攻撃を紹介していますが、つまるところ「中継する送金や、チャネルを開く相手」に対してリスクを取っているのがライトニングノードなので、信頼できるノードやリスクの低い送金を優先し、それ以外のノードや送金に対してはリスク管理を行うというのは自然な流れだと思います。今回紹介したCircuit Breakerも、そのような視点からの提案でした。
最近はライトニングに期待しすぎていた人たちの一部が幻滅期に入ってきていますが、5年後10年後にどういう形で使われているのか、まだはっきりと見えていない感覚は否めません。個人がノードを気軽に持てるのか、それともノードは大半が事業者になるのか。よく言われる手数料の安さも、オンチェーンの手数料が上昇すれば永遠には続かないかもしれません。
個人的にはオンチェーンでできないことが何かできるのであれば、どのようなトレードオフがあっても利用はされると思います。トラストが多少求められる仕組みであったとしても、ユーザーが独自に監査できたり、事業者と対等の関係に少しでも近づくことができれば、それは現在主流の仕組みよりはトラストミニマルであり、大いに歓迎されることなのではないでしょうか。
次の記事
読者になる
一緒に新しい世界を探求していきましょう。
ディスカッション