$30 off During Our Annual Pro Sale. View Details »

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で受信者の匿名性を提供する

    Route Blinding


    View Slide

  2. 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を構築

    View Slide

  3. 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以降の経路を知らない。 


    View Slide

  4. 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は共有シークレットから導出した鍵で暗号化される 


    View Slide

  5. 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

    View Slide

  6. 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

    View Slide