
オリジナル - 毎日
著者 - 南志
導入
10月20日、Bitcoin Coreコア開発者/dev/fd0はXプラットフォーム上で次のように発表しました。プロトコルレベルのセキュリティ問題の処理の調整を含め、ライトニングネットワークの開発とその実装への関与を中止します。。
/dev/fd0 は、各ビットコイン ノードに独自のメモリ プールがあることを意味します。トランザクションはピアノードによって転送されます。 Lightning Network ノードを使用してチャネルを開いて HTLC 転送を受け入れる場合、次のような脆弱性があります。交代サイクル攻撃(Replacement Cycling Attacks)。
開発者が言及する「置換ループ攻撃」とは何なのか、そしてそれがどのように実装されるのか、Odaily はこの記事で明らかにします。
ライトニングネットワーク
ビットコインネットワークのTPSは7程度しかなく、手数料が高いため、少額決済のニーズを解決するためにライトニングネットワークが登場しました。
ライトニング ネットワークは、暗号通貨ネットワークのスケーラビリティとトランザクション速度の問題を解決するために設計された、ビットコインおよびその他の暗号通貨の第 2 層スケーリング ソリューションです。
その実装原理は次のように単純化できます。
取引当事者AとBは「取引チャネル」(実際にはマルチシグネチャウォレット)を確立しました
A と B はそれぞれお金 A1 と B1 をリチャージします (このステップは連鎖しています)
A と B の間のトランザクションはすべてオフチェーンで発生し、A の純転送額は
チェーン上の A1-X および B1+X のトランザクションを更新します
上記のプロセスにより、A と B がオフチェーンでどれだけ多くのトランザクションを実行しても、オンチェーン手数料は 2 回支払うだけで済み、時間を大幅に節約できます。
ハッシュ タイム ロック コントラクト (HTLC)
上記で紹介した形式は A と B 間の直接取引チャネルに限定されており、クロスチャネル支払いには中継ノードが表示されます。中継ノードは 2 つの間のトランザクションを中継して、クロスチャネル支払いを容易にします。、リレーノードはチップを充電できます。
しかし、これには問題があります。各チャネルの参加者全員が誠実で信頼できる人であることを確認する必要があります。、マルチチャネル リンク上で安全です。
そこで、HTLC (Hash Time-Lock Contract、ハッシュ タイム ロック コントラクト) が登場しました。HTLC による支払いトランザクションは次のように簡素化できます。
Aは秘密コードRを用意し、そのハッシュ値Hを計算する
A は時間制限 T を設定します
A は B に対して HTLC による支払いトランザクションを送信します。トランザクションは、次の 2 つの条件が満たされた場合にのみ最終的に成立します。
B は秘密コード R を答えます (H が検証)
B の解答時間は T 以内です(たとえば、10 ブロック以内に解答する)
B がパスワードを知らない場合、または回答がタイムアウトした場合、資金は A に返還されます。
通常の取引プロセス
上記の HTLC を介した、中継ノードを含む支払いプロセスは次のとおりです。
最終受信者 C は秘密コードを送信者 A に提供します。
A はハッシュ値 H を使用して HTLC 支払いを開始します (注意してください)現時点では資金はBさんの手に届いていない)
B は支払い情報を受け取り、ハッシュ値 H を使用して C への HTLC 支払いを開始します。
資金を受け取るために、C はコードに応答して資金を受け取ります。この時Bさんもパスワードを知っていた
B は秘密コードを使用して A が開始した支払いを取得し、資金を受け取り、取引が完了します。
3 つのプロセスは上記のとおりです. 支払いモードは変更されずに、さらにいくつかの中継ノードを中間に追加することもできます. 支払いはチェーンを通じて最終受信者に送信され、その後秘密コードが伝播されます最初の中継ノード 最後に、取引を締結します。
中継ノードが秘密信号Rを長時間受信しなかった場合、(回答はしません、制限時間は中継ノード自身が決めます)、その後、中継ノードはチャネルを閉じることを選択できます。アップロードに成功すると、その場合、B が開始した支払いは「無効」となり、資金の損失は発生しません。
サイクル置換攻撃
HTLC の基本原理に戻ると、中継ノードは秘密コードに応答することに加えて、「中継ノードが応答する時間が T 以内である」という別の条件も満たす必要があり、悪意のある攻撃者はこの点を攻撃の対象としています。
A と C は悪意を持って共謀しており、被害者は中継ノード B です (B は次のノードが 3 ブロック以内に応答することを要求します)
A は B への支払いを開始し (この時点のブロックの高さは 1000 であると仮定)、ブロック 1020 の前に応答を必要とします。
B が C への支払いを開始します (ブロック高さ 1005)
ブロックの高さが 1008 の場合、B は C がまだ応答していないことを確認し、チャネルを閉じることを決定します。これはブロック 1009 で有効になります。
Cは高ガストランザクション①を開始し(ブロック1008)、Bによって開始されたトランザクションがメモリプールに入るのを防ぐ。
Cは高ガストランザクション②(ブロック1009)を開始するが、Bは依然としてメモリプールに入ることができない。
Cはブロック1020まで無限ループで動作し、パスワードRを与え、資金を引き出します。
B はパスワードを入手しましたが、A が開始した支払いに応答する時間がなくなり、資金は A に返還され、C への支払いが成立し、最終的に「循環置換攻撃」が実現しました。。さらに、A と C は共謀し、B の終了した取引を周期的に攻撃することで二重支出を達成することもできます。
結論
上記のような攻撃経路は存在しますが、ライトニングネットワーク内で攻撃者がやりたい放題で資金を盗むことができるというわけではなく、著者は元の記事でローカルメモリプールやトランザクションリレートラフィック監視、マイナーメモリなど5つの解決策も提案していますプール監視など
「未来は明るいですが、道は曲がりくねっています。今年、ビットコインネットワークでは、オーディナルズ、BRC-20、タップルートアセットなどの新しいものが次々に生まれています。問題は存在しますが、開発を続けることで最終的には解決されます。」
参考文献
https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2023-October/022032.html
https://github.com/ariard/mempool-research/blob/2023-10-replacement-paper/replacement-cycling.pdf