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

マスタリング・ライトニングネットワークの歩き方

 マスタリング・ライトニングネットワークの歩き方

ビットコインとか勉強会#73のスライドです。

https://www.youtube.com/watch?v=eVM-wSv6ZcI

shigeyuki azuchi

February 06, 2023
Tweet

More Decks by shigeyuki azuchi

Other Decks in Technology

Transcript

  1. マスタリング・ライトニングネットワークの歩き方

    2023.01.31 ビットコインとか勉強会 #73

    View full-size slide

  2. 自己紹介
    ● 安土 茂亨(Shigeyuki Azuchi)

    ● chaintope, Inc

    ○ エンタープライズ向けブロックチェーンの開発

    ● Twitter: @techmedia_think

    ● Blog: https://techmedia-think.hatenablog.com/

    ● OSS:

    ○ bitcoinrb

    ○ bech32rb

    ○ kzg

    ○ etc..

    ● GBEC: https://goblockchain.network/ 

    ● 共著/監修


    View full-size slide

  3. Lightning Networkの概要を理解する
    ● 1章:ざっくりとLightning Networkの概要を説明

    ● 2章:Lightning Networkが想定するユースケース

    ● 3章:ペイメントチャネルを開いて閉じるまで

    ● 7章:Lightning Networkではどうやって、

    トラストレスにオフチェーン決済を実現しているのか?仕組みを解説


    View full-size slide

  4. 4章 Lightning Networkのノード実装
    ● 主要なノード実装

    ○ Core Lightning(旧c-lightning)

    https://github.com/ElementsProject/lightning

    ○ LND

    https://github.com/lightningnetwork/lnd

    ○ Eclair

    https://github.com/ACINQ/eclair


    各ノード実装について、

    ● ビルド方法の解説

    ● docker-composeを利用したテスト環境での動作確認

    付録Bにて、簡単なDockerのセットアップと使用方法を提供

    View full-size slide

  5. 5章 ノードの運用
    ● ノード運用のハードルを下げる便利なツール






    ● ノードの管理

    ○ セキュリティ

    ○ バックアップ

    ○ 可用性

    ○ チャネル管理

    1〜5章で、Lightning Networkの概要と 

    実際に使ってみるために必要なことを解説 


    View full-size slide

  6. 8章 ルーティング
    複数のペイメントチャネルを使って、支払いをルーティングする

    Secret C
    SHA-256( C)
    ● 3日後までに、 

    Cが分かれば、5,200 sat支払い 

    ● 2日後までに、 

    Cが分かれば、5,100 sat支払い 

    ● 1日後までに、 

    Cが分かれば、5,000 sat支払い 

    Fee

    Fee

    ① インボイスをリクエスト

    ② シークレットを生成

    ③ インボイス

    ④ パスに沿ってチャネルを更新

    Alice

    Bob
 Mike

    Carol


    View full-size slide

  7. 8章 ルーティング
    複数のペイメントチャネルを使って、支払いをルーティングする

    Secret C
    ● Cを開示して 

    5,200 satを受け取り 

    ● Cを開示して 

    5,100 satを受け取り 

    ● Cを開示して、 

    5,000 satを受け取る 

    Fee

    Fee

    支払いの証明として

    シークレットを受け取る

    逆順にパスに沿って支払いを受け取り
    チャネルを更新

    Secret C
    Secret C
    Alice

    Bob
 Mike

    Carol


    View full-size slide

  8. 8章 ルーティング
    # 旧状態への対応
    OP_DUP OP_HASH160 OP_EQUAL
    OP_IF
     OP_CHECKSIG
    OP_ELSE
      OP_SWAP OP_SIZE 32 OP_EQUAL
     OP_IF
      # HTLCによる送金成功
      OP_HASH160 OP_EQUALVERIFY
      2 OP_SWAP 2 OP_CHECKMULTISIG
     OP_ELSE
      # 有効期限切れによるタイムアウト
      OP_DROP OP_CHECKLOCKTIMEVERIFY OP_DROP
      OP_CHECKSIG
     OP_ENDIF
    OP_ENDIF
    適切な受取人が、シークレットを 

    提供した場合に使用可能 

    有効期限が切れた場合に使用可
    能

    資金提供者のが資金を回収 

    チートしようした相手の資金を没収 

    Lightning Networkで使用されるコントラクト

    各ノードは、協力してオフチェーンで

    チャネルの状態を更新するが、

    このコントラクトをブロードキャストして

    オンチェーンで決済することも可能。

    View full-size slide

  9. 付録A Bitcoinの基本的概念
    Lightning Networkの詳細な仕組みを見ていく前に抑えておきたいポイント


    ● 公開鍵暗号とデジタル署名

    ● Bitcoinのトランザクション

    ● Bitcoin Script

    ○ 公開鍵を使った資金のロック

    ○ シークレットを利用した資金のロック

    ○ マルチシグ

    ○ タイムロック

    ■ 相対的

    ■ 絶対的

    ○ 条件分岐やフロー制御


    View full-size slide

  10. 9章 チャネル操作
    支払いに伴うチャネルの状態を更新するための、チャネル参加者のフローを解説

    update_add_htlc

    HTLCによる支払いをオファー 

    commitment_signed

    支払いに伴う新しい状態 

    =新しいコミットメントTxの 

    署名を作成/送付 

    revoke_and_ack

    commitment_signed

    revoke_and_ack

    古い状態を失効させ、 

    新しいTxへの署名を作成/送付 

    update_fulfill_htlc

    ︙
 受信者側から送られてきた 

    シークレットを送信し、 

    支払いのHTLCを受け取り 

    Secret
    OR

    update_fail_htlc / update_fail_malformed_htlc

    エラー/有効期限切れにより、 

    HTLCを削除 

    チャネルからHTLCを削除するため、削除後の状態を新しい状態として commitment_signed / revoke_and_ack をトリガー

    Alice
 Bob


    View full-size slide

  11. …

    10章 オニオンルーティング
    update_add_htlc

    update_add_htlc

    update_add_htlc

    Onion Payload 


    ● ショートチャネルID: 

    Bob <-> Mike 

    ● 転送金額: 5,200 sat 

    ● タイムアウト値: 700,038 
 Onion Payload 


    ● ショートチャネルID:
    Mike<->Carol 

    ● 転送金額: 5,100 sat 

    ● タイムアウト値: 700,018 

    Onion Payload 


    ● 転送金額: 5,000 sat 

    ● タイムアウト値: 700,018 

    ● 合計金額: 5,000 sat 

    ● Payment Secret 

    Alice

    Bob
 Mike

    Carol

    Bobのペイロード 

    Bobの鍵
 Mikeの鍵

    Carolの鍵

    Mikeのペイロード 
 Carolのペイロード 

    Version
 セッション鍵 
 HMAC

    Onion Packet

    送信者は、セッション鍵で、

    各ノードの鍵とECDHを行い、

    共有シークレットを導出し、

    各ノードのOnion Payloadを難読化

    中継ノードが知るのは自分の前後のノードのみで、 

    誰から誰への支払いなのかは分からない。 


    View full-size slide

  12. 11章 チャネルグラフ
    Lightning Node

    Lightning Node

    Lightning Node

    Lightning Node

    channel

    Node

    Channel

    Node

    初めて起動したノードは、ネットワークに参加するため、

    DNSサーバーに、Lightning Networkのノード情報を照会する

    https://github.com/cdecker/lseed


    Lightning Node
 DNS Server

    返ってきたノード情報を元に、

    ネットワーク内のノードに接続

    ネットワークに参加すると、リモートピアから、

    チャネルとノードに関する通知を受け取ることができる。


    ● node_announcement

    ノードに関する情報を公表

    公開鍵、接続情報(IPアドレス、ポート)

    サポートする機能など

    ● channel_annoucement

    新しいチャネルの情報を公表

    ● chanel_update

    各方向毎のチャネルの情報を公表

    ○ 手数料

    ○ タイムロックの差分

    ○ HTLCの最低金額

    Lightning Node

    Channel Graph

    LNノードはこのチャネルグラフを

    最新に保ちながら、支払いを

    ルーティング可能な経路を探索する

    View full-size slide

  13. 成長するLightning Network
    2018年1月
 2019年1月

    2022年11月

    ● 約 17,000 ノード

    ● 約 81,000 チャネル

    ● 約 5,300 BTC(約155億円)


    View full-size slide

  14. 12章 経路探索
    ネットワークにゴシップされるのはチャネルのキャパシティ(総量)のみ

    チャネルの参加者のどちらにどれだけの残高があるかは不明


    ノードは、支払い額以上のキャパシティを持つ経路をピックアックし、


    ● 手数料(固定、比例)

    ● タイムロック時間

    ● これまでの支払いの試行の成功確率


    の重みを持つ有向グラフ(フローネットワーク)から、最適な経路を選択する。


    ダイクストラ(Dijkstra)法など、最短経路問題のアルゴリズムを適用。


    ※ MPP(Multi-Path Payment)など支払いの細分化アプローチも

    View full-size slide

  15. 13章 ワイヤープロトコル
    ネットワーク上でプロトコルメッセージを送信する際のエンコード方法を解説


    ● メッセージフォーマット


    メッセージタイプの付録Cにリストアップ

    ● TLV(Type Length Value)

    ○ レコードのタイプを表す整数(BigSize)

    ○ レコードの長さ(BigSize)

    ○ レコード値

    ● 機能ビット

    サポートする機能を示す値(ビット番号奇数はオプション、偶数は必須)

    node_announcement / channel_announcement / init メッセージに含まれる

    メッセージタイプ(2バイト) 
 可変長メッセージペイロード(最大65KB) 
 extension(TLV Stram) 


    View full-size slide

  16. 14章 暗号化トランスポート層
    Lightning Node
 Lightning Node

    E2Eの暗号化通信

    ● 1st Layerと異なり、すべての通信は暗号化される 

    (Onion Payloadの難読化とはまた別) 

    ● Noise_XK_secp256k1_ChaChaPoly_SHA256 を使用した暗号化

    ● 各内容について仕組みとフローを解説 

    ○ 3段階のハンドシェイク 

    ○ 暗号化メッセージの作成と送信 

    ○ 受信した暗号化メッセージに復号 

    ○ 鍵のローテーション


    View full-size slide

  17. 15章 ペイメントリクエスト
    インボイスをリクエスト

    Alice
 Carol

    インボイスを送信

    lnbc2500u1pvjluezpp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwz
    qfqqqsyqcyq5rqwzqfqypqdq5xysx

    xatsyp3k7enxv4jsxqzpuaztrnwngzn3kdzw5hydlzf03qdgm2
    hdq27cqv3agm2awhz5se903vruatf

    hq77w3ls4evs3ch9zw97j25emudupq63nyw24cg27h2rspfj9
    srp

    bech32エンコードされたインボイス

    1st Layerと違って、支払いの度にインボイスを作成する必要があり、

    受信者はオンラインである必要がある。

    View full-size slide

  18. 16章 セキュリティとプライバシー
    ● 1st Layerと比較したプライバシー

    ○ 送金の秘匿性は向上(オフチェーン支払い、通信層の暗号化)

    ○ ノードIDとIPアドレスの公開に伴うプライバシーのリーク

    ● 攻撃手法

    ○ プロービングを利用したチャネル残高の調査

    ○ プロービング結果のスナップショットから支払人、受取人の探索

    ○ ルーティングした金額とタイムロックの値から匿名セットを限定、

    タイミング分析

    ○ 失敗する支払いによるDoS攻撃、

    ○ HTLCスロット/金額のロックアップ

    ● クロスレイヤーの非匿名化

    ● スケールフリーなネットワーク・トポロジーに対する攻撃

    View full-size slide