2021年7月8日 4 min read

LN上の支払いをHTLCよりスムーズに捌くBlitzプロトコル

LN上の支払いをHTLCよりスムーズに捌くBlitzプロトコル
Photo by Amy Burk / Unsplash

皆様こんばんは。私は最近はLNのペイメントの仕組みや信用を利用した効率化などに興味があり、関連する研究などを読み進めています。その中で、Pedro Moreno-Sanchez氏という研究者が面白い内容のものを多数出しているため、しばらくは彼の論文から特に興味のある内容を紹介することになるかもしれません。

本日はライトニングネットワークに利用されているHTLCやこれから導入されるPTLCとはまた異なる、1ラウンドの通信で支払いが完了するプロトコルBlitzについて解説しようと思います。

”Blitz: Secure Multi-Hop Payments Without Two-Phase Commits" Lukas Aumayr, Pedro Moreno-Sanchez, Aniket Kate, Matteo Maffei, 2021.

https://eprint.iacr.org/2021/176.pdf

スマートフォンから書いているので、見出し等のフォーマットが設定できていなかったり、文章にまとまりがなかったらごめんなさい。

〜HTLCは支払い完了に2ラウンド必要〜

本コラムの読者はすでにHTLCについて耳が痛いほど聞いているかと存じます。わからない方のためにまとめると、ライトニングチャネルを通しての支払いは「プリイメージというデータと引き換えでの支払いを約束するラウンド」(宛先側のチャネル更新) と「相手から送られてくるプリイメージによって自身に送られてきた資金を受け取る」(送金者側のチャネル更新) という2つのラウンドからなります。これがHTLCでチャネルを更新する段取りです。

さて、今まとめたように、HTLCを使った支払いには「資金をコミットするラウンド」「コミットされた資金を受け取るラウンド」の2ラウンドがあります。そして実はこの仕組みがいくつかの攻撃方法や問題に繋がっています。

代表的なものを挙げると、1ラウンド目のあと、2ラウンド目で相手がわざと音信不通になってしまうグリーフィング攻撃 (イタズラ攻撃・DoS攻撃)があります。これは攻撃対象の資金を長期間拘束できてしまう上に、比較的簡単に実行することができ、予防が難しいという問題があります。HTLCを用いたペイメントチャネルネットワークでは、各ステップにおいて安全のために相手が1日程度音信不通でも待つようになっていますが、この方針もあって資金の凍結状態が長期化してしまいます。

ほかにも、ワームホール攻撃というものがあります。ユーザー視点では影響はありませんが、これは2ステップ目のプリイメージの伝送において中継経路を短絡させることで、排除されたノードが受け取る予定だった手数料を攻撃者が奪うという攻撃です。

※ただし、ワームホール攻撃に関しては、近い将来にHTLCを少し改善した仕組みであるPTLCの導入で対策される予定があります。

これらの問題への根本的な解決方法として、HTLCのような2ラウンドの通信を必要とするペイメントチャネルネットワークに代わる、1ラウンドで完了するプロトコルとしてBlitzが考案されました。

〜Blitzで支払いが1ラウンドで完了する仕組み〜

さて、Blitzはどのようにして支払いを1ラウンドで完了させるのでしょうか。HTLCとは仕組みが根本的に異なるので、白紙ベースで考えてみましょう。

これには論文の著者たちが"Pay-or-Revoke"と呼ぶ、HTLCに代わるコントラクトを考える必要があります。これは送金側のノードから宛先側のノードへと資金が移るか、送金が失敗して送金側のノードに返金されるかの2つの結末がある仕組みを1ラウンドで実現するということです。(もっと厳密に言えば、経路上の全てのチャネルにおいて同時にどちらかの結末になる必要があります。)

Blitzにおいて、これは送金者が返金トランザクションをあらかじめ用意しておくことで実現しています。詳しく見ていきましょう。

Great! You’ve successfully signed up.
Welcome back! You've successfully signed in.
You've successfully subscribed to ビットコイン研究所.
Your link has expired.
Success! Check your email for magic link to sign-in.
Success! Your billing info has been updated.
Your billing was not updated.