Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LNで受信者の匿名性を提供するRoute Blinding

LNで受信者の匿名性を提供するRoute Blinding

GBECの解説動画の資料です。
https://goblockchain.network/2022/03/route-blinding/

shigeyuki azuchi

March 29, 2022
Tweet

More Decks by shigeyuki azuchi

Other Decks in Technology

Transcript

  1. LNの支払いでは、受信者から Invoiceを受け取った送信者が、受信者までの支払いの経路を決定する 
 ソース・ルーティング という仕組みを採用している。 
 1 LNのルーティング
 送信者
 受信者


    ホップ1
 ホップ2
 ホップ3
 Invoice
 Onion Payload 1 • short_channel_id • amt_to_forward • ctlv_value Onion Payload 2 • short_channel_id • amt_to_forward • ctlv_value Onion Payload 3 • short_channel_id • amt_to_forward • ctlv_value Onion Payload 4 • amt_to_forward • ctlv_value • payment_secret • total_msat 経路上の各ノードの 
 Onion Payloadを作成 
 • ランダムなセッション鍵を生成 
 • 各ホップのノード公開鍵とのECDHで共有シークレット/セッション鍵を導出 
 • 各ホップの共有シークレットを使ってOnion Payloadを暗号化 
 • 各Onionをレイヤー化しOnionPacketを構築 

  2. 2 Route Blinding
 ソース・ルーティング では、最終的に支払いを受ける受信者のノード情報が送信者に分かってしまう。 
 
 
 送信者
 受信者


    ホップ1
 ホップ2
 Introduction Point
 Invoice
 ・・・
 Blinded node A • Blind node id • ecnrypted_blob Blinded node B • Blind node id • ecnrypted_blob Blinded node C • Blind node id • ecnrypted_blob Blinded node D • Blind node id • ecnrypted_dadta Route Blinding
 受信者は特定のIntroduction Pointから自身のノードまでの経路を選択し、 
 それらの経路の各ノードに対して、ECDHを利用して Blind node idとencrypted_dataを作成。
 ブラインドルートとこれらのデータを送信者へ送信。 
 送信者は、Introduction Pointまでの経路を選択し、 
 受信者のブラインドノードと結合して経路を拡張。 
 ※ 送信者はIntroduction Point以降の経路を知らない。 

  3. 3 受信者がやること
 受信者
 Introduction Point
 ・・・
 Blinded node A •

    Blind node id • ecnrypted_blob Blinded node B • Blind node id • ecnrypted_blob Blinded node C • Blind node id • ecnrypted_blob Blinded node D • Blind node id • ecnrypted_data 1. Introduction Pointから自分までの経路を選択 
 2. ブラインドに使用する一次鍵を生成 
 3. ブラインドルートの各ノードに対し、 
 Blind node idとencrypted_dataを作成
 Blind node idは、受信者とノードの共有シークレットと 
 ノードの公開鍵から計算される 
 B(i) = HMAC256(“blind_node_id”, ss(i)) * Pi 
 (共有シークレットは一次鍵と node idから導出)
 encrypted_dataには
 a. 支払いを転送するノードの short channel id
 b. 支払いのコンテキストを表すデータ 
 などが含まれる。
 4. ブラインドデータと、最初の一次鍵、 Introduction Pointを
 送信者に送信する。 
 
 
 E0 = e0 * G
 Blind Route E0 = e0 * G
 Blind Route ※ Blind node idの秘密鍵を知るのはブラインドノードのみ 
 ※ encrypted_blobは共有シークレットから導出した鍵で暗号化される 

  4. 4 送信者がやること
 Introduction Point
 Blinded node A • Blind node

    id • ecnrypted_blob Blinded node B • Blind node id • ecnrypted_blob Blinded node C • Blind node id • ecnrypted_blob Blinded node D • Blind node id • ecnrypted_data 1. 自身からIntroduction Pointまでの経路を選択する。 
 2. Introduction Point以降の経路を、受信者から送られたブラインド情報を使って拡張する。 
 a. 送信先のノードIDにBlind node idをセット
 b. ブラインドノードのOnionペイロードにencrypted_dataをセット
 c. 初期一次鍵E0をIntroduction PointのTLVフィールドに追加 
 Blind Route
  5. 5 中間ノードがやること
 1. メッセージのTLVフィールドから一次鍵を抽出し、共有シークレットを計算 
 2. 共有シークレットから Blind node idの秘密鍵を導出し、Onionを復号


    3. 共有シークレットから encrypted_dataの復号鍵を算出
 4. encrypted_dataを復号し、次に転送するノードの実際のノードIDを抽出 
 5. 次のノードに必要な次の一次鍵を導出しTLVフィールドにセット 
 6. 次のノードに支払いを転送 
 Introduction Point
 Blinded node A • Blind node id • ecnrypted_data Blinded node B • Blind node id • ecnrypted_dadta E0
 共有シークレット
 short node id
 E1=SHA256(E0 || ss) + E0 
 ※ Onionデータの復号は送信者との鍵共有(Blind node idの秘密鍵) 
 ※ ブラインドされた転送情報のアンブラインドは受信者との鍵共有 
 Blinded node C • Blind node id • ecnrypted_dadta Blinded node D • Blind node id • ecnrypted_dadta