つい最近、ライトニングネットワーク実装の1つであるLndのバージョン0.12.0がリリースされました。メジャーバージョンアップらしく、機能追加や性能向上が盛りだくさんです。中でも目玉なのはAnchor Outputsを利用したチャネルが既定で作成されるようになったことです。これは去年話題になったLNに対する攻撃の1つを軽減する効果のある変更で、まだ正式にBOLT (ライトニングネットワークの標準プロトコル)に採用されてはいませんが今後標準化される可能性があります。今日はAnchor Outputsがどのように安全性を向上するのか見ていきます。
問題:LNノードに対する攻撃
去年、こちらのコラムでも何回かLNに対する攻撃方法として発表されているものを紹介しました。ほとんどが資金を一定期間ロックしてしまうDoS攻撃に分類されますが、中でも"Flood and Loot"と呼ばれるものはDoS攻撃の結果として資金の盗難につながってしまう可能性のある攻撃でした。Flood and Lootの概要を要約すると、攻撃者が大量のチャネルを開設し、様々な経路を通り別の自分のノードに対して支払う大量のトランザクションを生成します。HTLCの解決の最後の段階で、1ホップ目のノードがプリイメージを返してきてもオフラインのフリをします。この段階で攻撃者は手数料を引いた金額をすでに受け取っているが、最初の支払いを拒否している形になります。これに対して1ホップ目のノードは払い損を防ぐため、チャネルを強制決済することになります。しかし、同じ状況のチャネルが多数、同時に期限を迎えてオンチェーンで決済されることとなると、ブロックに取り込まれずタイムアウトしてしまうものも出てきます。すると、今度は攻撃者がHTLCタイムアウトトランザクションを発行して支払いを取り消すことができてしまいます。攻撃者はかなり有利な立場で、事前に非協力的クローズ時の手数料を一方的に(安く、ブロックに取り込まれにくい水準に)提案することができるほか、HTLCタイムアウトトランザクションは攻撃者が単独で手数料を追加することができる一方で非協力的クローズの手数料を被害者が単独で追加することはできません。さて、Lnd v0.12.0から既定となったAnchor Outputsによるチャネルはこの攻撃をどのように軽減するのでしょうか。