라이트닝 네트워크 시리즈 (1)

Direct Payment via Lightning Channel

Joon-Woo Choi
Decipher Media |디사이퍼 미디어
16 min readApr 14, 2020

--

Writer: 최준우(Joon-Woo Choi), 정희원(Heewon Chung)
Seoul Nat’l Univ. Blockchain Academy Decipher(@decipher-media)
Reviewed by 최지혁(Jihyeok Choy)

연재를 시작하며

블록체인이 근본적으로 가지고 있는 여러 가지 문제 중 하나가 확장성 문제이다. 블록체인의 확장성 문제는 많은 컴퓨터 자원을 투입하더라도 블록체인에서 처리할 수 있는 트랜잭션 양이 늘어나지 않는 문제를 뜻한다. 본 글을 읽고 계신 독자이시라면 이런 블록체인 확장성 문제를 해결하기 위하여 소위 ‘Layer-2 Solution’들에 대해 들어본 적이 있을 테다. 최근 라이트닝 네트워크(Lightning Network), 플라즈마(Plasma), 샤딩(Sharding) 등 확장성 문제를 해결하기 위해 다양한 기법들이 제시되어 연구되고 있는데, 그 중 우리는 라이트닝 네트워크에 대해 다루고자 한다.(다른 Layer-2 Solution에 대해서는 다음 링크 참조.) 라이트닝 네트워크는 최근 업계뿐만 아니라 학계에서도 많은 관심을 받고 있다. 세계적인 암호학/보안 분야의 학회 중 하나인 Financial Cryptography and Data Security 2020은 올해 2월 10일부터 14일까지 5일 동안 개최되었는데, 5일 중 하루(11일)를 온전히 라이트닝 네트워크 및 페이먼트 채널 네트워크(Payment Channel Network)에 대해서만 다루었다. 또한 최근 2, 3년 간 NDSS(The Network and Distributed System Security Symposium)을 비롯한 여러 탑-티어 컨퍼런스들에서도 라이트닝 네트워크의 다양한 부분에 대해 다룬 논문들이 발표되는 등 Layer-2 Solution 중 가장 많은 관심을 받고 있다. 이는 그만큼 라이트닝 네트워크가 블록체인의 문제 중 하나를 해결할 수 있을 것이라고 기대되기 때문에 학계에서도 주목을 하고 있다는 반증일 것이다.

그러나 이러한 기대와 달리 라이트닝 네트워크는 그 자체 메커니즘에 의해 발생되는 고질적인 문제점을 가지고 있고, 최근에는 문제점을 활용하여 라이트닝 네트워크를 공격 및 분석하는 논문들이 발표되고 있다. 이러한 공격들은 실제로 충분히 가능하며 이는 라이트닝 네트워크의 존속 자체를 위협할 만하다.

본 연재는 아래와 같이 네 편에 나누어 라이트닝 네트워크에 대해서 알아보고, 라이트닝 네트워크를 분석 및 공격하는 논문의 결과에 대해서 살펴볼 것이다.

[라이트닝 네트워크 시리즈]

1. Direct Payment via Lightning Channel

2. Indirect Payment via Multi-Hop HTLC

3. Topology of Lightning Network

4. Attacks on Lightning Network

본 1편에서는 두 당사자가 어떻게 라이트닝 채널(Lightning Channel)을 통해 직접적으로 거래를 주고받는지 알아볼 것이다.

1. Introduction

라이트닝 채널 및 라이트닝 네트워크는 비트코인의 확장성 문제를 해결하기 위하여 2015년 2월 Joseph PoonThaddeus Dryja‘ The Bitcoin Lightning Network’을 통해 처음 제안되었고, 세부적인 메커니즘이 수정된 Duplex Micro-Payment Channel, Eltoo 등이 제시되었다. 한편, 이더리움을 플랫폼으로 하는 라이덴 네트워크(Raiden Network)가 제시되기도 하였는데, 이더리움과 같은 튜링 완전한 블록체인을 플랫폼으로 삼는 경우 단순히 자산의 이동만이 아니라 스마트 컨트랙트를 활용하여 더 확장된 기능을 제공할 수도 있게 되었다. 이러한 경우 페이먼트 채널(Payment Channel)과의 구별을 위해 스테이트 채널(State Channel)로 부르기도 하는데, 본 글에서는 스테이트 채널에 대해서는 다루지 않는다.

들어가기에 앞서 용어를 정확히 짚고 넘어갈 필요가 있다. 라이트닝 채널 및 라이트닝 네트워크는 기술의 부류가 아니라 하나의 인스턴스이다. 즉 라이트닝 네트워크와 페이먼트 채널 네트워크의 관계는 비트코인과 블록체인의 관계와 같다는 것이다. 그러므로 앞으로 기술 그 자체로서 다뤄질 때에는 ‘페이먼트 채널’ 및 ‘페이먼트 채널’로 부를 것이며, 라이트닝 네트워크에만 귀속되는 이야기라면 ‘라이트닝 채널’ 및 ‘라이트닝 네트워크’라는 용어를 사용하겠다.

2. Life Cycle of a Lightning Channel

페이먼트 채널 네트워크에서 채널이란 두 party 간의 거래가 이루어지는 가상의 통로이다. 채널이 생성되고 채널을 통해 어떻게 거래가 이루어지며, 닫힐 때까지의 cycle을 Alice와 Bob간의 간단한 예시를 통해 알아볼 것이다. 실제 페이먼트 채널 네트워크에서는 mili-satoshi(1 사토시의 1/1000) 단위로 거래가 이루어지지만 표현의 편의와 독자의 이해를 돕기 위해 BTC 단위를 사용하였다.

1) Phase 1: Creating a Channel

Alice와 Bob이 채널을 생성하기 위해서는 비트코인 네트워크에 funding transaction (이하, funding tx)를 전송해야 한다. funding tx는 일반적인 비트코인 트랜잭션과 같은 형태이며, 단지 수신자가 Alice와 Bob의 multisig contract인 output 한 개로 구성되어 있다. multisig contract란 연결된 사람들 모두 (예제에서는 Alice와 Bob)의 private key가 제시되어야 unlock 할 수 있도록 작성된 locking script이다. 즉 funding tx는 당사자의 자금을 하나의 output으로 모아 담보로 묶어주는 역할을 한다. 이 output에 담보로 묶인 자금은 당사자 모두의 private key가 있어야 가져갈 수 있으며, 이는 Alice와 Bob 모두의 동의가 있어야 담보 자금을 사용할 수 있다는 의미이다.

Alice가 5 BTC를 담보로 묶은 funding tx의 모습은 다음과 같다.

Alice가 5 BTC를 담보로 묶은 funding tx. 아직 비트코인 네트워크에 전파되지 않았다.

이렇게 만들어진 funding tx에 비트코인 네트워크에 올려지고 블록체인에 포함되는 것을 채널 생성이 완료되었다고 부른다. 그런데 여기서 문제가 있다.

만약 Bob이 private key를 영원히 제시해 주지 않는다면 어떻게 될까?

funding tx의 output은 Alice와 Bob 둘 모두의 동의가 있어야 unlock할 수 있는 UTXO이다. 따라서 Bob이 그의 private key를 알려주지 않는다면 Alice의 5 BTC는 영원히 사용할 수 없다. 따라서 Alice가 유사시 자신의 자금을 온전히 회수할 수 있다는 보장이 없다면 funding tx를 올리면 안 된다.

이러한 이유로 Alice가 funding tx를 안전하게 회수할 수 있도록 도입된 개념이 commitment transaction (이하, commitment tx)이다. commitment tx도 funding tx와 마찬가지로 일반적이 비트코인 트랜잭션과 같은 형태이며, funding tx와 같이 라이트닝 네트워크에서 어떤 특수한 목적을 가진 트랜잭션일 뿐이다. funding tx이 채널을 생성하는 역할을 한다면, commitment tx은 채널의 당사자들의 잔액 상태를 기록하고 잔액 회수가 가능하도록 한다. commitment tx의 구조는 funding tx의 output(Alice와 Bob의 multisig contract)을 input으로 받고, Alice와 Bob 각각의 public key로 잠근 output 두 개로 구성된다. 이를 위하여 funding tx의 output을 spent할 수 있도록 Alice는 commitment tx에 대해서 본인의 서명과 Bob의 서명을 받아놓는다. 이렇게 만들어진 funding tx와 commitment tx의 모습은 다음과 같으며, Alice 또는 Bob은 각자의 public key로 잠겨진 commitment tx의 output을 본인의 private key를 제시하여 가져갈 수 있게 된다.

Alice와 Bob은 첫 번째 commitment tx를 생성하였다. funding tx는 비트코인 네트워크에 전파되지 않은 상태이다.

commitment tx이 비트코인 네트워크에 올라가게 되면 Alice가 바로 담보로 묶어둔 자금을 회수할 수 있다. 그렇기 때문에 commitment tx를 가지고 있는 Alice는 마음놓고 funding tx를 비트코인 네트워크에 브로드캐스팅하게 되고, 이 과정을 흔히 채널을 생성한다라고 부른다. funding tx가 비트코인 네트워크에 브로드캐스팅되어 블록체인에 포함된 모습은 다음과 같다.

Alice에 의해 funding tx는 비트코인 네트워크에 전파되어 블록체인에 포함되었다.

2) Phase 2: Transacting through the Lightning Channel

다음은 Alice와 Bob이 생성된 채널을 통해 거래를 주고받는 과정이다. 앞서 채널 생성 단계에서 생성된 commitment tx는 채널의 당사자들의 잔액 상태를 기록하는 역할을 한다. 그렇기 때문에 채널의 당사자들은 거래가 발생할 때마다 업데이트되는 잔액에 대해 새로운 commitment tx를 만들어낸다. 예를 들어, 기존 commitment tx에서 당사자들의 잔액 상태가 (Alice, Bob) = (5 BTC, 0 BTC)인 경우에 Alice가 Bob에게 1 BTC를 전송한다면 Alice와 Bob의 잔액은 (Alice, Bob) = (4 BTC, 1 BTC)이 될 것이고, 이에 해당하는 새로운 commitment tx를 (Alice와 Bob의 서명을 이용하여) 서로 합의하에 만들어 낸다. 새로운 commitment tx의 output 역시 두 개이다. 하나는 4 BTC 짜리 output으로 Alice의 public key로 잠겨있으며, 다른 하나는 1 BTC 짜리 output으로 Bob의 public key로 잠겨있다. 따라서 Alice는 4 BTC 짜리 output을 본인의 private key로 가져갈 수 있고, Bob도 본인의 private key로 1 BTC 짜리 output을 가져갈 수 있는 상태이다.

Alice에게서 Bob으로 1 BTC가 전송되었음을 반영한 두 번째 commitment tx를 생성하였다.

그리고 이렇게 당사자들의 잔액 상태를 업데이트한 commitment tx 2도 마찬가지로 비트코인 네트워크에 전파하지 않는다.

Alice가 Bob에게 1 BTC를 한 번 더 전송하면 새로운 commitment tx 3은 다음과 같이 만들어질 것이다.

한 번 더 Alice에게서 Bob으로 1 BTC가 전송되었음을 반영한 세 번째 commitment tx를 생성하였다.

마찬가지로 commitment tx 3도 비트코인 네트워크에 전파하지 않는다. 거래가 이루어질 때마다 그 결과를 반영하여 새로운 commitment tx을 만들어내고 서로의 서명을 주고받을 뿐이다.

3) Phase 3: Closing the Channel

채널이 종료되는 시나리오는 3가지가 있다.

(1) 당사자 간 합의에 따른 종료

두 당사자가 상호 합의하에 채널을 닫는 경우이다. 이 경우 closing transaction (이하, closing tx)라는 새로운 형태의 transaction을 만들어 비트코인 네트워크에 전파한다. Closing tx이라는 것은 현재 잔액 상태를 표현한 transaction으로 closing TX의 output을 spent하기 위해서는 각자의 private key만 제시하면 된다. 그러나 commitment tx의 output을 spent하기 위해서는 각자의 private key뿐 아니라 추가로 자신에게 할당되어 있는 output에 timelock이라는 조건을 추가하고, 이 조건을 만족시켜야만 한다. 예를 들어 Alice가 만들어낸 commitment tx라면, Alice 잔액에 해당하는 output에는 특정 시간의 timelock이 걸려있고, Bob 잔액에 해당하는 output은 (Alice가 생성한 commitment tx이기 때문에) timelock이 없다. 반대로 Bob이 만들어낸 commitment tx도 마찬가지로 Bob 본인의 잔액에 해당하는 output에만 특정 시간의 timelock이 걸려있다. Commitment tx를 spent하기 위해서는 timelock으로 걸린 시간이 지나야만 private key를 제시하여 잔액을 가져갈 수 있다. 이렇게 timelock이 왜 필요한 지는 바로 아래의 ‘(3) 당사자 중 누군가가 악의적으로 행동하는 경우’에서 설명하겠다. 어찌 됐든 이 경우에는 당사자 간 채널 종료를 위한 상호 합의가 완료되었으므로 각자에게 할당된 output을 아무런 제한 없이 가져갈 수 있는 closing tx를 함께 만든 후 비트코인 네트워크에 올려 채널을 종료한다.

(2) 당사자 중 누군가에게 의도치 않은 문제가 발생하는 경우

채널의 당사자들이 거래를 주고받다가 어느 한 쪽의 네트워크 연결이 끊어져 응답을 할 수 없는 등 부득이하게 더 이상 채널을 통한 거래가 어렵다고 판단되는 경우이다. 즉 만약 일정 시간 동안 Bob의 응답이 없는 경우 Alice는 가장 최신의 commitment tx를 비트코인 네트워크에 전파하여 일정 시간(timelock)이 지난 후, 본인의 잔액을 가져갈 수 있다.

(3) 당사자 중 누군가가 악의적으로 행동하는 경우

당사자 중 누군가가 최신 commitment tx를 전파하지 않고 과거의 commitment tx를 올린 경우이다. 비트코인 네트워크를 구성하는 노드들이 어떤 것이 최신의 commitment tx인지 알 수 있다면 좋겠지만, 채널의 당사자 간에만 발생했던 일이기 때문에 어떤 것이 최신인지 알 방법이 없다. 위 예제에서 가장 최근의 commitment tx (commitment tx 3)의 잔액 상태는 (Alice, Bob) = (3 BTC, 2 BTC) 이고, commitment tx 2의 잔액 상태가 (Alice, Bob) = (4 BTC, 1 BTC) 이었다. 하지만 commitment tx 2의 경우 최신의 commitment tx 3이 만들어졌음에도 별다른 revoke 처리가 되지 않았다. (commitment tx 1의 경우도 마찬가지였다.) 즉 여전히 유효한 TX으로서 기능할 수 있다. Alice는 악의적으로 자신의 잔액을 더 늘리기 위해서 commitment tx 3 대신 commitment tx 2를 비트코인 네트워크에 전파하더라도 비트코인 노드들은 commitment tx 2가 최신 트랜잭션인지 확인할 수 없기 때문에 서명만 제대로 담겨있는 트랜잭션이라면 승인해줄 수밖에 없다. 라이트닝 네트워크에서는 이 문제의 해결을 당사자들 간 (예제에서는 Alice와 Bob) 문제로 넘겨버린다. 따라서 상대가 과거의 commitment tx를 전파하지는 않았는지 꾸준히 확인하여야 한다. 만약 Bob이 Alice의 악의적인 행동 (commitment tx 3 대신 commitment tx 2를 비트코인 네트워크에 전파)을 발견하였다면, Bob은 commitment tx 3가 최신이라는 증명을 노드들에게 하고, Alice의 몫마저 Bob이 가져가도록 해야 한다.
그런데 timelock이 없다면 Alice가 commitment tx 2를 전파하고 바로 자신의 몫을 가져갈 수 있어 Alice를 처벌할 방법이 없다. 이러한 문제를 방지하기 위하여 라이트닝 네트워크에서는 당사자들은 commitment tx의 output 중 본인의 몫에는 timelock을 걸도록 규정되어 있다. 또한, timelock이 지나기 전에는 본인이 아닌 상대방이 본인 몫을 가져갈 수 있도록 스크립트를 구성해야 한다.
따라서 만약 Alice가 만든 commitment tx 2를 전파하더라도 본인의 몫을 가져가려면 timelock이 지난 뒤에만 가져갈 수 있다. 그렇기 때문에 Bob이 정해진 시간 안에 Alice의 악의적인 행동을 알아차린다면, 노드들에게 Alice의 악의적인 행동에 대한 증거를 제시하고 인정을 받으면 Alice의 몫을 가져갈 수 있다. 물론 정해진 시간 내에 Bob이 Alice의 악의적인 행동을 알아차리지 못했다면 Alice를 처벌할 수 없다.

참고로, 세 번째 시나리오인 누군가가 악의적으로 행동하는 경우 대응하는 메커니즘은 라이트닝 채널에만 해당이 되는 이야기이다. Eltoo, Duplex Micro-Payment 등 비트코인 상의 다른 페이먼트 채널에서는 과거의 commitment tx가 비트코인 네트워크에 전파되지 않도록 하거나, 상대방에게 페널티를 부여하는 메커니즘이 다르다.

[Note]
본 글에서는 단순히 ‘악의적 행동에 대한 증거’라고 매우 간단하게 서술하였다. 실제로는 commitment tx를 갱신할 때마다 HD wallet을 통해 공개키/개인키 쌍 또한 갱신하는데, 새로 갱신한 공개키/개인키 쌍은 새로 생성하는 commitment tx의 output의 locking 스크립트와 서명에 사용된 그리고 지난 commitment tx에 해당하는 개인키를 서로 주고받는다. 따라서 Alice가 지난 commitment tx 2를 전파할 시 Bob은 미리 받아놓은 Alice의 commitment tx 2에서의 개인키를 제시하여 그녀에게 할당된 output을 가져갈 수 있다.

3. Outro

본 1편을 통해 두 당사자가 라이트닝 채널을 생성하고, 생성한 채널을 통해 거래를 주고받은 후 채널 종료를 통해 잔액을 정산하는 과정을 살펴보았다. 또한 라이트닝 채널이 제3자가 개입하지 않는 메커니즘이기 때문에 발생할 수 있는 위협, 즉 당사자 중 하나가 악의적으로 최신이 아닌 commitment tx를 전파하여 현재 잔액보다 더 큰 금액을 가져갈 수 있는 문제를 어떻게 완화하였는지 알아보았다. 이번 편에서는 당사자 둘이 채널을 통해 직접 거래를 하는 과정을 다루었지만, 다음 2편에서는 직접적 거래를 위한 채널을 별도로 생성할 필요 없이 Multi-Hop Hashed-TimeLock Contract(HTLC)를 통해 거래를 주고받는 과정을 다루겠다.

--

--