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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
13
クラスターmempool
azuchi
0
32
W-OTS+
azuchi
0
36
Shorのアルゴリズム
azuchi
0
59
DahLIAS: Discrete Logarithm-Based Interactive Aggregate Signatures
azuchi
0
43
Fiat-Shamir変換と注意点
azuchi
0
230
AssumeUTXOを利用したブロックチェーンの同期
azuchi
0
55
BIP-374 離散対数の等価性証明
azuchi
0
74
BIP-353 DNS Payment Instructions
azuchi
0
91
Other Decks in Technology
See All in Technology
OpenTelemetryにおけるGoのゼロコード・コンパイル時計装について #fukuokago
quiver
0
200
OPENLOGI Company Profile for engineer
hr01
1
74k
壊して学ぶAWS CDK: そのcdk deployで消えるもの、残るもの
k_adachi_01
1
470
【公開用】AI_Dev_Ex2026_AI_登壇資料
matsuritechnologies
PRO
1
460
Playwright × AI Agent でE2Eテストはどう変わるか AI駆動テストの可能性と実用検証の結果
taiga7543
2
780
41歳でAWSが好きすぎてITエンジニアになったおっさんの話
yama3133
1
730
SoccerMaster: A Vision Foundation Model for Soccer Understanding
kzykmyzw
0
160
ここは地獄!つらい朝会を体験することで、チームとしてのより良い振る舞いに気づくワークショップ / The stand-up meeting from hell in the game industry
scrummasudar
0
210
AIとハーネスで育てるトランスコンパイラ / 20260722 Yasushi Katayama
shift_evolve
PRO
3
770
ダッシュボード"開発"について 〜使われるダッシュボードのつくりかた〜
kimichan
0
190
プロダクト開発組織の現在地(Ver.2026/07) / product-organization
kaonavi
0
380
複数プロダクト組織のAIネイティブ化における戦略 / AICon2026_kude
rakus_dev
0
300
Featured
See All Featured
A designer walks into a library…
pauljervisheath
211
24k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.6k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.7k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
190
Building AI with AI
inesmontani
PRO
1
1.1k
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.3k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
470
It's Worth the Effort
3n
188
29k
Designing for Performance
lara
611
70k
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を積極的に監視することで、攻撃者のプリイメージを確認する 再ブロードキャスト回数が多いほど、その機会は増加する ※ 緩和策であって根本的な対応索ではない。 ※ 実際にこのような攻撃は観測されていない。