블록체인

[블록체인] 라이트닝 네트워크-pathfinding과 onion routing

윤밥밥 2023. 12. 17. 15:47

pathfinding and routing

source에서 destination으로 가는 경로를 찾는 것을 pathfinding이라 하며,
이렇게 찾은 경로를 통해 payment를 지불하는 과정을 routing이라고 한다.

라이트닝 네트워크는 pathfinding을 위하여 source-based protocol을 사용하며, routing을 위하여 onion-routed protocol을 사용한다.

* source-based protocol이란?
source-based란 sender가 의도되는 목적지까지 경로를 찾아야 함을 의미하며
source-based protocol은 sender가 경로를 찾는 데 사용되는 protocol을 의미한다.

* onion-routed란 경로의 각 원소가 layered화 되어 있으면서, 각 노드는 자신에게 해당되는 층만 볼 수 있게 encrypted 되어있음을 의미한다.

source-based pathfinding

각 채널들의 balance정보는 알 수 없다.
pathfinding 알고리즘은 Lightning Network 상에서 여러 방법이 존재한다.
여기서 source-base pathfinding은 pathfinding 알고리즘 중에 좋은 방법이다.

source-base pathfinding은 목적지까지의 경로를 찾을 때까지 반복적으로 하나하나 노드로 가면서 길을 찾아내는 방법이다.
다만 source-base pathfinding은 최적의 경로, 최소 비용의 경로를 알려주는 것이 아니다. 그럼에도 불구하고 잘 동작하므로 사용하고 있다.

onion routing

라이트닝 네트워크는 tor네트워크와 유사한 onion routing protocol을 사용한다.
라우팅을 위해 사용되는 지불 패키지를 onion이라고 한다.
길을 따라 onon이 전송된다.

  1. sender는 중심부터 바깥까지 전체 onion을 구성한다.
  2. sender는 받는 사람을 위한 payment information을 작성하고, 각 층별로 오직 해당하는 노드만 읽을 수 있게 encrypt한다.(레이어는 recipient부터 역순으로 전체 경로까지 layer화 된다. )
  3. 이렇게 완성된 onion을 경로의 첫번째 노드에게 건낸다(첫 번째 노드는 자신에게 해당하는 layer만 읽을 수 있다.)
  4. 각 노드는 자신의 layer를 벗기고, 그 안의 명령에서 다음 노드에 대한 정보를 찾는다. 각 노드가 알 게 되는 것은 어디서 왔으며 어디로 가야하는 지이다.(이 때 중간 노드들은 누가 보낸사람이고 어디가 목적지인지 알 수 없다.)
  5. 이는 목적지에 도달할 때까지 계속된다.
  6. 목적지 노드는 onion을 열고 더 이상 layer가 없다는 것을 알면, 내부 정보를 읽을 수 있다.onion routing의 특징* 라우팅 노드는 이 payment를 누가 시작했고 어디가 목적지인지 모른다.
    * onion은 단일 TCP/IP 패킷에 들어갈 만큼 작고, link layer frame에도 들어갈 수있다. 즉 쪼갤 필요가 없다.
    * onion은 지나는 경로의 길이와 무관하게 항상 같은 길이를 갖는다.
    * 각 레이어가 벗겨졌을 때는 이 부분을 암호화된 junk 데이터를 넣음으로써 같은 크기를 유지하며, 즉 간접적으로 노드가 경로에서 대략적인 위치를 알 수 없게 한다
    * onion은 HMAC(hash-based message authentication)을 각 층에서 가지고 있으므로 각 어니언 조각들은 차단되어 있다. 즉 조작을 가하면 들통 난다.
    * 어니언은 최대 26개의 경로를 허용한다. 이는 충분히 길다.
    * onion 암호화의 모든 hop은 서로 다른 임시적인 암호화 키를 사용한다.
    * 에러가 나면 에러가 난 노드에서 송신자 노드로 다시 error가 onion-routed protocol을 통해 보내질 수 있으며, 이는 일반적인 onion routing하고 구분되지 않는다. 라우팅을 성공할 수 있는 충분한 수용력을 가진 경로를 찾기 위해 사용되는 probing 방법을 에러 라우팅에 사용할 수 있다.
    * 즉 오류가 나면 probing 방법을 통해 다시 경로를 찾는다.

Payment Forwarding Algorithm

sender가 가능한 경로를 찾았고, onion을 구성하였다면, 경로로 onion을 보낸다.
각각의 중간 노드는 Lightning message( update_add_htlc라고 불린다.)라는 메세지를 payment hash와 onion과 함께 받는다.
중간 노드는 다음과 같은 알고리즘을 실행한다.

  1. 각 노드는 outer layer의 onion을 해석하고, 메세지의 타당성을 확인한다.
  2. 노드는 channel fees와 출발 노드의 capacity를 기반으로 하여 라우팅을 완료할 수 있는 지 확인한다.
  3. 노드는 그의 채널 파트너와 협력하여 채널 상태를 업데이트 한다.
  4. onion의 끝에 padding을 추가하여 onion의 길이를 일정하게 유지하도록 한다.
  5. 노드는 routing hits를 따라 수정된 onion 패키지를 보낸다. 또한 update_add_htlc 메세지를 payment hash와 onion과 함께 보낸다.

만약 error가 발생하여 되돌려진다면, 각 채널 파트너는 pending payment를 지우고, payement를 반대 방향으로 되돌려준다.

Peer-To-Peer Communcation Encryption

LN 프로토콜은 주로 p2p로 작동한다.
peer간의 모든 소통은 Lighting messages라고 불리는 cryptographic communications framework를 통해 암호화된 메세지를 통해 전달된다.
따라서 라이트닝 네트워크는 공격으로부터 안전하다.

 

 


엘리스가 Dina에게 돈을 지불 하기 위해 Dina에게 견적서(invoice)를 요청하면, Dina는 r값을 해쉬한 payment hash를 Alice에게 주어, 추후 자신한테 Alice가 돈을 보냈는 지 확인하는 용도로 쓴다.


이게 스마트 컨트랙트
Alice는 Bob에게 너가 배달 증명을 하면 50200을 줄께
Bob은 Chan에게 너가 배달 증명을 하면 50100을 줄께
Chan은 Dina에게 너가 배달 증명을 하면 50000을 줄께

이렇게 전달되면 Dina는 Chan에게 r을 제공한다.(영수증) 그럼 chan은 dina에게 50000을 지불
Chan은 Bob에게 r을 제공한다. 그럼 bob은 chan에게 50100을 지불
Bob은 Alice에게 r을 제공한다. 그럼 Alice는 Bob에게 50200을 지불
Alice는 payment hash와 r을 이용해 배송 중 사고가 있었는 지 체크한다.

이로써 모두가, 상대가 배달 증명을 하였음을 알았고 그만큼 갖게 된다.

이로써 Bob과 Chan은 100씩 얻게 된다.