Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Replacement Cycling Attack
Search
shigeyuki azuchi
March 21, 2024
Technology
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Replacement Cycling Attack
GBECの解説動画のスライドです。
https://goblockchain.network/2024/03/replacement-cycling-attack/
shigeyuki azuchi
March 21, 2024
More Decks by shigeyuki azuchi
See All by shigeyuki azuchi
FORS
azuchi
0
7
クラスターmempool
azuchi
0
31
W-OTS+
azuchi
0
34
Shorのアルゴリズム
azuchi
0
56
DahLIAS: Discrete Logarithm-Based Interactive Aggregate Signatures
azuchi
0
42
Fiat-Shamir変換と注意点
azuchi
0
220
AssumeUTXOを利用したブロックチェーンの同期
azuchi
0
55
BIP-374 離散対数の等価性証明
azuchi
0
71
BIP-353 DNS Payment Instructions
azuchi
0
88
Other Decks in Technology
See All in Technology
サイバーエージェントにおけるAI推進戦略と変革への取り組み
shotatsuge
0
590
從觀望到全公司落地:AI Agentic Coding 導入實戰 — 流程整合與安全治理
appleboy
0
110
いまさら聞けない「仕様駆動開発入門」 〜AI活用時代の開発プロセスを考える〜
findy_eventslides
2
230
ぼっちではじめた登壇が「51名」「241件」の発信に化けた
subroh0508
1
330
MUSUBI 田中裕一『AIと共に行う「しごとのリデザイン」- スモールバックオフィス編』AI Ops Lab #4
musubi
0
320
起点・思考・出力で分解する 〜PM業務の自動化設計〜
kazu_kichi_67
2
1.1k
Deep Data Security 機能解説
oracle4engineer
PRO
2
220
飲食店もAIで。レジ締めやハンディシステムをつくってる話 / Using AI for restaurant management
vtryo
0
200
AIペネトレーションテスト・ セキュリティ検証「AgenticSec」紹介資料
laysakura
2
7.7k
WebGIS AI Agentの紹介
_shimizu
0
580
元・セキュリティ学習経験0大学生による業務紹介 / An Introduction to the Job by a Former College Student with Zero Security Training Experience
nttcom
0
590
「勝手に広まる」人気 AI エージェントを爆速で作ろう!(AWS Summit Japan 2026講演資料)
minorun365
PRO
10
2.6k
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
950
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
A better future with KSS
kneath
240
18k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Designing Powerful Visuals for Engaging Learning
tmiket
1
430
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
The Language of Interfaces
destraynor
162
27k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
450
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Designing Experiences People Love
moore
143
24k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
300
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Transcript
Replacement Cycling Attack
1 Replacement Cycling Attack 2023年10月に開示されたLNプロトコルの脆弱性 https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2023-October/021999.html
ルーティングノードに対する転送額(HTLC)を盗む攻撃の ※ M1とは直接チャネルがつながっていなくてもOK ※転送ノードでなければ影響はなし 攻撃者M2 攻撃者M1 被害者 A Channel M1 ⇔ A • Balance for M1 • Balance for A • Forward Payment(HTLC) Channel A ⇔ M2 • Balance for A • Balance for M2 • Forward Payment(HTLC)
2 RBF(Replace by Fee) 未承認のトランザクションを置換するための仕組み 参考:RBFを使ったトランザクションの置換 https://goblockchain.network/2021/07/rbf/
置換する際のルール: • 置換可能性のシグナルがある(Opt-in RBFの場合は) • 新しいトランザクションは元のトランザクションより手数料が高いこと ◦ ノードの最小リレー手数料率が加味されていること デフォルト:1 sat/byte • 置換されるトランザクションとその子孫の個数の合計が100未満であること (大規模な置換が発生しないように)
3 支払い転送時の動作 攻撃者M2 攻撃者M1 被害者 A Channel M1 ⇔ A
• Balance for M1 • Balance for A • Forward Payment(HTLC 1) Timelock(T + Δ) Channel A ⇔ M2 • Balance for A • Balance for M2 • Forward Payment(HTLC 2) Timelock(T) HTLC 1とHTLC 2はプリイメージが同じハッシュ値Hを使用しており、 1. M2がプリイメージをAに開示することで、HTLC 2を決済(A→M2に支払い) 2. Aは開示されたプリイメージを使って、HTLC 1を決済(M1→Aに支払い) →下流で決済された情報を使って上流の転送が決済される もしくは、あるブロック高Tにおいてタイムアウト 1. ブロック高Tになったら、HTLC 2を払い戻す(HTLC 2の金額はAの残高に戻る) 2. ブロック高T+Δになったら、HTLC1を払い戻す(HTLC 1の金額はM1の残高に戻る) →下流がタイムアウト後、Δブロック後に上流もタイムアウトする
4 攻撃方法 攻撃者M2 被害者 A Channel A ⇔ M2
• Balance for A • Balance for M2 • HTLC 2(Timelock T) ① ブロック高がTになってもM2がプリイメージを公開しない、 かつ応答もない場合、AはチャネルのコミットメントTxを ブロードキャストし、チャネルを閉じる。 ②コミットメントTxが承認されたら、Timeout Txを ブロードキャストして資金を取り戻す。 HTLC 2 Timeout Tx • HTLC 2の金額をAへ払い戻し Cycle Parent Tx • M2の任意のUTXO Cycle Child Tx • M2への送金 ②攻撃者M2は、その間2つの低手数料の親子Txを作成し ブロードキャスト(チャネルとは無関係なTx) HTLC2 Preimage Tx • M2への送金 ③ 攻撃者M2は、 HTLC2 Timeout Txがブロードキャストされた後 元々のHTLCのプリイメージを使用して、 コミットメントTxとCycle Parent TxのUTXOを回収する 高手数料率のHTLC2 Preimage Txをブロードキャストする
5 攻撃方法 mempoolの動作 Channel A ⇔ M2 •
Balance for A • Balance for M2 • HTLC 2(Timelock T) HTLC 2 Timeout Tx • HTLC 2の金額をAへ払い戻し Cycle Parent Tx • M2の任意のUTXO Cycle Child Tx • M2への送金 HTLC2 Preimage Tx • M2への送金 競合 競合 High Fee Low Fee RBFにより、Cycle Child TxとHTLC 2 Timeout Txは HTLC2 Preimage Txに置き換わる Aの払い戻しTxはネットワーク上から無くなる。 一方で、AはHTLC Preimage Txを確認すれば、 プリイメージが分かるので上流のHTLC 1を決済できる?
6 攻撃方法 mempoolの動作 Channel A ⇔ M2 •
Balance for A • Balance for M2 • HTLC 2(Timelock T) Cycle Parent Tx • M2の任意のUTXO HTLC2 Preimage Tx • M2への送金 競合 High Fee RBFにより、Cycle Parent TxとHTLC 2 Preimage Txは、 Replace Parent Txに置き換わる。 結果、Aの払い戻しもプリイメージを使った回収もキャンセルされる。 Replace Parent Tx • M2への送金 High Fee 攻撃者は、AのHTLC2 Timeout Txをmempoolから排除した後、 高手数料のCycle Parent Txの競合Txを作成し、ブロードキャストする Aの払い戻しTxはネットワーク上から無くなる。 一方で、AはHTLC Preimage Txを確認すれば、 プリイメージが分かるので上流のHTLC 1を決済できる? ただ、AのノードにHTLC2 Preimage Txが届かなければ、 プリイメージの確認はできない。
7 攻撃方法 一通りの攻撃が終わると、mempool内には、HTLC2を使用するTxはなくなる。 攻撃者M1 被害者 A Channel M1 ⇔
A • Balance for M1 • Balance for A • Forward Payment(HTLC 1) Timelock(T + Δ) T + Δになると、上流のAへの転送(HTLC 1)の払い戻しが発生する。 下流の請求に失敗し、上流がタイムアウトするとAはHTLCの金額を失う。 攻撃者は、この攻撃を繰り返す。。 Channel A ⇔ M2 • Balance for A • Balance for M2 • HTLC 2(Timelock T) 被害者 A mempoolから消えたことで、Aは再度HTLC 2 Timeout Txを ブロードキャストするが、 HTLC 2 Timeout Tx • HTLC 2の金額をAへ払い戻し ・・・
8 攻撃を成立させるための条件 • 攻撃者は被害者との間に2つのチャネルを開く • そのチャネルを介して支払いを転送する • 被害者が攻撃者のプリイメージを確認できない
◦ 被害者はローカルmempoolを積極的に監視できる ◦ 攻撃者は被害者のノードにプリイメージが渡らないようTxをブロードキャストし、 被害者が気付かない内に置換を終わらせる
9 LNノードに導入された緩和策 • 再ブロードキャストの頻度を上げる 1ブロック(約10分)毎に再ブロードキャストしてたのを、高頻度に ◦ 被害者は同じTimeout Txをブロードキャストするだけ
手数料を増やして攻撃者の手数料負担を促進するということも考えられる ◦ 攻撃者は置換の度に少なくとも最小中継手数料分の手数料負担が発生し、 ブロードキャスト回数が増えるほどコスト負担に繋がる • CLTV Expire Delta(Δ)の値を増やす Δが大きいほど被害者はTxを再ブロードキャストする機会が増える • mempoolのスキャン mempoolを積極的に監視することで、攻撃者のプリイメージを確認する 再ブロードキャスト回数が多いほど、その機会は増加する ※ 緩和策であって根本的な対応索ではない。 ※ 実際にこのような攻撃は観測されていない。