2020年7月16日 4 min read

LNの送金先と送金元を割り出すタイミング攻撃

LNの送金先と送金元を割り出すタイミング攻撃
Photo by Mikki Seifu / Unsplash

LNは発展が進むとともに、欠点の発覚と改善も活発に行われています。研究所でもこれまでに数回、既に発表された攻撃方法について触れていますが、今回は6月に論文が発表された、LNを利用する際の送金のプライバシーに関わる一種のタイミング攻撃について解説させていただきます。

LNの脆弱性に関する過去の記事は「LNの脆弱性”Flood & Loot"の解説」と「LNの大部分を数日間ロックさせる攻撃について」です。近いうちにあと1つか2つ扱う予定です。
ライトニングのプライバシー

オンチェーンだと全世界に公開されていたトランザクションが、LNでは当事者同士のみにしか全貌がわからなくなるので、ブロックチェーン解析のように第三者がUTXO間の関係を推定するようなことはできません。

一方で、特定の第三者には、ネットワーク層を利用したLNトランザクションの分析は可能です。今回のタイミング攻撃も、ネットワーク層から得られる情報を元に、特定のトランザクションが経由するノードが、(本来はわからない)そのトランザクションの送信元と宛先のノードを推定するものです。

ちなみにオンチェーンでも、ノード間の通信からトランザクションの発信源を割り出すという攻撃があります。Chainalysisなどブロックチェーン解析の企業が多くのノードを立てて情報を集めることでトランザクションの発信源のIPアドレスを探ったりするのにこの手法を使っているとされます。

前提知識として、チャネルグラフ(LNのノードとチャネルの地図のようなもの)はルートの計算に使用するため、全てのノードに既知です。
今回紹介するタイミング攻撃とは別に、自分のノードの位置によっては、この知識と実際の送金額を使って自分を経由するトランザクションを発信したノードや宛先のノードがかなり絞り込めてしまう場合もあります。

ノードが増えて大変見にくいですが、LNDExplorerというサイトで確認することができます。
タイミング攻撃の概要

ライトニングのトランザクションは、送信元のノードから宛先のノードまで、複数のノードを経由して送られていきます。(それぞれの間のチャネルの残高をバケツリレーしていくイメージで、中間のノードは最終的な送信元・宛先を知りません。)

今回の攻撃者であるノードは、多くのノードとチャネルを結んでいて、多くのトランザクションが経由するノードです。また、この攻撃を行うには、下準備が必要です。

まず攻撃者のノードは、いろんなノード相手にわざと失敗する送金を送り、失敗したというメッセージが返ってくるまでの時間を測ることで、ネットワークのどの位置までどれくらい伝達に時間がかかるかを記録します。すると、チャネルグラフ上の位置と比較してちょっとした足し算引き算をすることで、それぞれのノードに関してトランザクションのやりとりにかかる時間を推計できます。

この「伝達速度マップ」とでも言うべきデータを作成した後、攻撃者のノードを経由するトランザクションが発生するたびに、まずは「失敗」というメッセージを送金元の方へ返すことで再送を促し、その所要時間から発信元のノードの位置を推定します。
次に、再送されてきたときは通常どおりに処理し、宛先のノードとの送金データのやりとりの所要時間から宛先のノードの位置を推定します。

他にも、金額が多い場合には経路となりうるチャネルの容量と比較するなどしてより細かく発信元や宛先のノードを絞り込むことができる、というのがタイミング攻撃の概要です。

悪意のあるノードの位置による捕捉率と攻撃精度

研究者たちは、悪意のあるノードの集団をmcentral (betweennessによる中心性の最も高いm個のノード)、mrandom (m個のランダムに選ばれたノード)、lnbig (LNBIGが運営する26個のキャパシティの大きなノード)という3つのケースに分けてタイミング攻撃のシミュレーションを行いました。

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.