상세 컨텐츠

본문 제목

[Mastering the Lightning Network] 3 - 라이트닝 네트워크는 어떻게 동작하나

IT.About/라이트닝 네트워크

by zNine 2021. 12. 17. 16:40

본문

728x90
반응형

세 번째 장에서는 라이트닝 네트워크가 어떻게 동작하는지 간단하게 살펴본다.

  1. 결제 채널(Payment Channel) 이란?
    1. 채널 파트너라고 부르는 라이트닝 노드간의 재정적 관계(financial relationship).
    2. 실제 비트코인을 할당(funding)해서 사용한다.
  2. 결제 채널의 기본 사항
    1. 비트코인 블록체인의 2-of-2 다중서명 주소를 기반으로,
    2. 채널 파트너는 이 다중서명 주소를 통해 거래(트랜젝션 생성)를 하고,
    3. 거래 트랜젝션을 블록체인에 보내지 않고 보유한다. (Off-chain)
    4. 새로운 거래(트랜젝션) 발생하면 이전 거래가 취소되며 이전 거래로 돌아갈수 없다.
  3. 결제 라우팅
    1. 결제 할 노드와의 직접적인 채널 연결 없이 연결된 채널의 확장을 통해 결제하는 방법.
    2. A와 B가 연결되어 있고, B와 C가 연결되어 있을때 라우팅을 통해 A에서 C 결제가 가능하다.
    3. 비트코인 Smart contract 확장으로 채널 파트너를 보호하고, 서로에 대한 신뢰가 필요없는(trustless) 방식으로 결제를 전달한다고 되어 있다.
    4. 채널 구성 2-of-2 다중서명 주소로 미리 서명된 비트코인 트랜젝션을 사용하기 때문에 라이트닝 네트워크상의 신뢰는 비트코인 네트워크의 신뢰성을 가져간다.
    5. Gossip 프로토콜을 사용해 모든 참가자에게 채널(Network topolgy) 정보를 배포하고, 결제 노드는 이 정보를 바탕으로 결제 경로를 찾는다.(pathfinding)
  4. 결제 채널 제한 사항
    1. 시간: Peer 간의 트랜젝션(수백바이트) 전송하는데 걸리는 시간
    2. Capacity: 채널이 열릴 채널에 펀딩되는 비트코인의 (사토시)
    3. 비트코인 트랜젝션의 최대 크기: 채널을 통해 동시에 전달되는 트랜젝션(라우팅되는 것도포함)의 수       포함
  5. 결제 채널특징
    1. 즉시성
      1. 채널 내에서의 결제는 즉각적으로 확인 가능(인터넷 통신 속도에 의존)
    2. 결제 비트코인 블록 검증이 필요 없음
      1. 비트코인 블록이 약 10분 마다 채굴되므로 이 시간을 기다릴 필요가 없다.
    3. 채널 파트너간의 신뢰가 필요없도로 암호화 프로토콜이 구성된다.
    4. 채널의 응답이 없거나 사기에 대해서는 비트코인 시스템이 "법원" 역할을 하도록 요청가능.
    5. 채널이 종료되기전 이루어진 거래에 대해서는 해당 채널만 알수 있음.
      1. 채널 open/close 트랜젝션만 비트코인 블록체인에 저장되므로.
  6. 자금 거래 (Funding Transaction, 이하 FT)
    1. 채널 Open 시 사용되는 트랜젝션.
    2. 2-of-2 다중서명 주소를 기본 빌딩 블록으로 사용,
    3. 다중서명 주소로 비트코인을 채널에 전달해 자금을 제공.
    4. 거래는 블록체인에 저장됨(온체인 수수료 발생).
  7. 약정 거래 (Commitment Transaction, 이하 CT)
    1. 채널내에서 파트너에게 자신의 채널 잔액(balance)인 사토시 지불하는 트랜젝션.
    2. 작동 방식
      1. (A B 100,000 사토시 용량의 채널을 개설하는 예를 들어본다)
      2. A: 새로운 개인/공개키 쌍을 생성하고, B에게 open_channel 메시지 전달.
      3. B: 개인/공개키 쌍을 생성하고, A에게 accept_channel 전달함으로써 채널 open을 수락.
      4. A: 잠금 스크립트(Lock script)를 사용해 다중서명 주소로 100k 사토시를 보내는 FT 생성
        1. (SC: 2 <Pubkey_A> <Pubkey_B> 2 CHECKMULTISIG)
      5. A: FT 대한 서명과 트랜젝션ID를 함께 funding_created 메시지로 전달.
      6. A/B: CT 버전을 생성. 트랜젝션은 FT output을 사용하고, A의 주소로 모든 비트코인을 전달하는 내용이 포함된다.
      7. A B CT 교환 필요가 없고, 그들의 서명만 교환 (모든 구성을 알고있고, 독립적 구축이 가능하기 때문)
      8. B A CT 대한 서명을, funding_signed 메시지 통해 A에게 보냄.
      9. A FT 비트코인 네트워크에 브로드캐스트.
      10. 이후 채널 잔액(balance) 바뀔때마다 CT(A B 사이의 최신 잔액이 인코딩된)이 생성되며 서명이 교환됨.
  8. 이전 상태를 이용한 부정행위 (Cheating with Prior State)
    1. 모든 CT은 블록체인에 브로드캐스트 할 수 있고, 검증에도 문제가 없다.
    2. 예에서 A B에게 물건을 구매하고, 라이트닝을 통해 잔액을 보낸 후, 최초의 CT(A 100k 사토시를 가지는) 게시 수도 있다. CT에는 B 서명이 있으므로 이 행위 자체를 막을 수 없다.
    3. 이런 행위를 막기위해 패널키 매커니즘이 있으며,
      1. 패널티에 의해 부정 행위를 대상의 상대방이 모든 잔액을 가져가고,
      2. 잔액을 완전히 소모한 상태에서의 부정행위 방지를 위해 라이트닝 프로토콜은 채널 파트너가 최소 잔액 유지하도록 요구한다.
  9. 패널티 매커니즘의 작동 방법
    1. CT의 output을 쓰기 위한 아래의 두 가지 안정 장치를 사용한다.
    2. 시간 지연 (Timelock delay)
      1. CT내에서 자신에게 보내는 잔액은 지정된 시간 이후에 사용 할 수 있도록 한다.
      2. 최대 2,016 ( 2) 블록 수로 설정. (부정한 방법으로 CT 게시하는 경우 2주를 기다려야 ).
      3. 지역 값을 파트너간 협상으로 조정 가능. (일반적으로 잔액이 채널일 수록 크게 설정)
    3. 취소 비밀 (Revocation secret, 이하 RS)
      1. 부정행위에 대한 패널티를 위해, 자신에게 보내는 잔액에 대해 Timelock 우회하여 상대방이 해당 금액 즉시 사용 있게 한다.
      2. 채널의 파트너 각각은 마지막 CT에 대한 RS 절반만 보유하고 있다가,  CT 서명할 상대방에게 이전 CT에 대한 RS를 제공함으로써 채널 파트너 모두가 이전 CT가 취소된 거래라는 것을 증명 할 수 있도록 한다.
      3. A B가 이전 CT 대한 RS를 제공하는 경우에만 B CT 서명을 제공한다. (B 동일)
      4. 각각의 CT 전송과 함께 이전 거래를 무효화하게 되고, 이전 거래를 효과적으로 취소할 있도록하는 "처벌" 비밀을 공유하는 거다.
      5. 이전 CT 블록체인에 사용 있지만, 페널티 메커니즘으로 사기치는게 불리하도록하는 매커니즘인 셈이다.
    4. 사기꾼의 상대 파트너는 언제든 자신의 잔액을 요청가능하며, (타임락이 걸려 있지 않음)
    5. 사기꾼이 이전 CT 게시한 경우 RS 이용 Timelock 우회하여 사기꾼을 처벌 가능. (사기꾼 잔액 청구)
    6. 채널내 잔액이 업데이트될 때마다 CT 이전 RS 생성되고 저장되어야 하며, 채널이 열려있는 동안 나중을 위해 보관해야 한다.
    7. RS 도출하는데 사용되는 smart derivation 매커니즘으로 가장 최근의 RS 저장하면 된다고 한다.
  10. 채널 발표 (Announcing the Channel)
    1. Public 채널
      1. LN gossip 프로토콜을 사용해 채널 존재, capacity, fee 대해 다른 노드들에 알림.
      2. 노드가 LN 합류하면 Peer 부터 gossip 프로토콜로 전파된 채널들을 수집, LN 내부 맵을 구축하며,
      3. 맵을 사용해 지불 경로를 찾고 채널간 연결을 수행.
    2. Unannounced channel (미고지 채널)
      1. 채널이 사용되는 동안에는 채널의 정보가 공유되지 않지만, close 정보가 드러남. (비공개가 아닌셈)
  11. 채널 닫기 (Closing the Channel)
    1. 채널을 열고 닫을때 마다 비트코인 온체인 수수료가 발생하니, 닫지 않는데 가장 좋은 방법이라고 한다.
    2. Rebalancing
      1. 채널을 오래 유지하기 위해, 한 방향으로 채널을 용량을 사용하고, 다시 반대 방향으로 사용하는 개념.
    3. Channel closing 필요 ,
      1. 보안상, 잔액을 cold storage 보내야
      2. 파트너의 응답이 없을
      3. 파트너의 연결이 원할하지 않아 다른 채널로 연결이 필요
      4. 파트너의 SW버그 또는 프로토콜 위반으로 자금을 보호하기 위해
    4. 3 ways to closing channel
      1. 상호 협의
        1. 파트너가 동의
        2. CT 유사한 closing transaction 준비, 마지막 잔액을 인코딩, timelock 설정하지 않음.
        3. On-chanin 거래 수수료는 채널 open 요청한 파트너가 지불.
        4. 수수료에대해 동의 , closing transation 서명.
        5. closing transation 비트코인 네트워크에 브로드캐스트되고, 검증되면 채널이 닫히고, 채널 파트너는 자신의 몫을 받음.
      2. 강제 종료 (Force close)
        1. 마지막 CT 게시하면 .
        2. Timelock으로 output 제한되나 상대 파트너의 output 즉시 사용 가능.
        3. 이전 CT 게시한 경우(부정행위) 상대 파트너가 RS 사용하여 이의제기하고, 처벌할 있는 기회가 제공됨.
        4. 수수료가 높음
      3. 프로토콜 위반 (Protocol breach)
        1. 이전 CT 게시하는 경우
        2. 프로토콜 위반 행위의 감지를 위해 노드는 online 상태여야하며, 새로운 블록과 트랜젝션의 관찰해야 .
        3. 위반을 감지하고, 처벌을 시행하면 채널의 모든 자금을 받게 .
        4. channel closing 보다 다소 빠르게 진행됨.
        5. 위반을 감지 못한채 Timelock 만료되면 게시된 CT output 해당하는 자금을 받게 .
        6. 3자에 의해 탐지 될수 있으며, 아래 SW로 탐지 가능.
          1. 24시간 동작하는 라이트닝 노드
          2. 채널 감시를 위해 직접 실행하는 watchtower 노드
          3. 돈을 지불하고 실행하는 3rd-party watchtower 노드
    5. LN 소프트웨어는 상황에 따라 사용할 있는 최상의 closing 매커니즘을 자동으로 선택한다고 한다.
  12. 인보이스 (Invoices)
      1. LN에서 대부분의 지불은 수신자가 생성한 인보이스로 시작.
      2. payment hash, 수신자, 금액 옵션 텍스트 description 정보가 포함된다.
      3. Payment Hash (PH)
        1. invoice 가장 중요한 부분.
        2. B PH 생성 과정
          1. 랜덤 숫자 R 선택. (preimage or payment secret 이라 부름)
          2. SHA256 사용해 H 생성. (H = SHA256(R))
  13. 결제 하기 (Delivering the Payment)
    1. P2P Gossip Protocol
      1. 채널을 LN 알리고, LN 토폴로지 정보를 공유하는데 사용.
      2. channel_announcement
        1. 채널 open 노드는 channel_announcement 메시지를 통해 피어에게 보낼수 있음.
        2. 수신한 피어는 메시지의 정보를 확인하고 비트코인 블록체인에서 funding transation 검증되었는지 확인.
        3. 검증 연결된 다른 피어 노드에게 gossip 메시지를 전달, 전달하는 식으로 전체 네트워트에 알려짐.
        4. 이전에 전달하지 않은 노드에만 전달.
      3. node_announcement
        1. 노드에 대한 정보를 알리는데 사용. (노드가 적어도 하나의 공개 채널을 가져야 사용 가능)
      4. channel_update
        1. payment channel에는 네트워크의 다른 참가자들에 대한 다양한 메타데이터가 있고, 라우팅 결정에 사용됨.
        2. 메타데이터 변경 channel_update 메시지를 통해 공유되며, 하루에약 4(채널당) 전달 .
    2. 경로 찾기 (Pathfinding)
      1. Source 부터 Destination 까지 경로를 찾는 과정.
      2. source-based pathfinding 프로토콜 사용. (보내는 사람이 경로를 찾아야함)
      3. 지불을 전달할 있는 충분한 유동성있는 경로를 찾을때까지 경로를 반복적으로 시도.
      4. "probing(탐색)" 노드나 지갑에서 수행.
    3. 라우팅 (Routing)
      1. 경로를 통해 지불하는 프로세스.
      2. onion-routed 프로토콜 사용. (경로가 계층화되어 있고, 계층이 암호화되어 있어 한번에 하나의 노드에서만 정보를 있음)
      3. 라우팅에 사용되는 payment 패키지를 "onion"이라 부름.
      4. 최종 수신자에 대한 지불 정보를 생성, 수신자만 해독할 있는 암호화 계층으로 암호화.
      5. 다음, 경로상 최종 수신자 바로 앞에 있는 노드에 대한 정보를 생성하고 암호화하는 작업을 발신자 바로 앞의 것까지 반복하여 양파를만듬.
      6. 양파를 받은 수신자는 제일 바깥쪽의 껍질을 까듯, 자신의 암호화키로 복호화하고 정보를 읽은 다은 경로의 노드로 양파를 전달함.
      7. LN에서 사용하는 onion routing 프로토콜의 속성
        1. 프라이버시: 중개 노드는 양파를 전달하고/전달 채널만 볼수 있음. (누가 라우팅을 시작했고, 대상이 누구인지 알수 없음)
        2. 단일 TCP/IP 패킷과 Link 계정층(이더넷) 프레임에 들어갈 만큼 사이즈가 작음.
        3. 양파의 사이즈가 경로 어디에 있던 동일하므로 노드 자신이 몇번째 인지 알수 없음.(벗겨진 레이어에는 암호화된 junk 데이터로 채움)
        4. 계층에 HMAC(해시 기반 메시지 인증코드) 가지고 있어 조작이 불가능.
        5. 최대 26개의 , 또는 원하는 층으로 생성 가능.
        6. 모든 홉에 대한 다른 암호화키를 사용. 키를 재사용하지 않기 때문에 특정 시점에 노출된 키로 해독이 불가능.
        7. 동일한 프로토콜을 사용해 발신자에게 에러를 전달할 있음.
      8. 결제 전달 알고리즘 (Payment Forwarding Algorithm)
        1. 중개 노드는 update_add_htlc 라고하는 라이트닝 메시지를 payment hash onion 함께 수신하고, 아래 단계를 실행한다.
        2. onion 외부 레이어를 해독하고 무결성을 확인.
        3. 채널 fee 나가는 채널의 capacity 통해 라우팅 가능함을 확인.
        4. 수신 채널에서 파트너와 같이 채널의 상태를 업데이트.
        5. onion 길이를 유지하기 위해 패딩을 추가.
        6. 라우팅 힌트에 따라 수정된 onion update_add_htlc 메시지를 outgoing payment 채널에 전달.
        7. 발신 채널에서 파트너와 협의하여 채널 상태를 업데이트.
  14. P2P 통신 암호화
    1. LN 프로토콜은 참가자간의 P2P 프로토콜이며, 피어간의 모든 통신은 Lightning Message 통해 전송된다.
    2. 메시지는 Noise Protocol Framwork 암호화 통신 프레임워크를 사용해 암호화 된다.
      1. 인증, 암호환, 순방향 비밀성 ID 프라이버시를 제공하는 암호화 프로토콜을 구성 가능.
      2. WhatsApp, WireGuard 같은 P2P 암호화 통신 시스템에서 사용.
      3. 개발측면에서 패킷 캡쳐나 Wireshark 분석이 어렵고,
      4. Lightning dissector 같은 특정 노드 관점에서 프로토콜을 해독할 있는 플그인을 사용해야함.
  15. 비트코인 거래와의 차이점
    1. Address vs Invoces, Trancsations vs Payments
    2. Selecting Outputs vs Finding a Path
    3. Change Outputs on Bitcoin vs No Change on Lightning
    4. 채굴 수수료 vs 라우팅 수수료
    5. Varying Fees Depending on Traffic vs Announced Fees
    6. Publick Bitcoin Transaction vs Private Lightning Payments
    7. 대기 vs 즉시 정산
    8. Capacity 제한
    9. 지불 금액에 대한 인센티브
    10. Using the Blockchain as Ledger(원장) vs as a Court System
    11. Offline vs Online, Async. vs Sync.
    12. Satoshis vs Millisatoshis
  16. 비트코인 거래와의 공통점
    1. 비트코인을 사용
    2. 검증된 지불의 불가역성과 최종성
    3. 신뢰 Counterparty 리스크
    4. 무허가 오퍼레이션
    5. Opensource and Open System
728x90
반응형

관련글 더보기