안녕하세요 스크립토 4기 이정민입니다. 6월 시험기간이 끝나고 스크립토 활동도 어느덧 막바지에 들어섰네요.. 학회를 하면서 정말 블록체인에 대해서 많이 배우고 좋은 사람들 덕분에 재밌고 즐겁게 활동과 공부를 했던 것 같습니다. 많이 아쉽지만 능력있는 5기분들이 잘 이끌어 나가리라 생각하고, 떠나는 사람들은 각자 새로운 길에 올라 열심히 그 자리를 빛내리라 믿습니다.
이번에 알아볼 백서는 리플입니다. 리플을 제가 처음 접한 계기는 약 2017년도경 빗썸이라는 암호화폐 거래소에서 보았습니다. 그 당시에 비트코인이나 이더리움 같은 경우는 많이 들어보기도 하고 누가 만든건지, 어떠한 이유로 만들어졌는 지 대강 알고있었지만 리플은 무엇때문에, 왜 만들어졌는지 잘 몰랐습니다. 이번에 리플백서를 보면서 어떠한 목적때문에 만들어지고 그로인한 리플의 특징들을 알게되면서 많이 흥미로웠던 것 같습니다.
리플은 다른 암호화폐와 달리 국제송금용으로 탈중앙성 보다는 속도에 초점을 맞추어 기존 국제송금망인 swift망을 해결하기 위한 블록체인 기술을 활용한 새로운 솔루션입니다. 백서의 초록을 보시면 다음과 같이 나와있습니다.
기존의 비트코인이나 이더리움의 경우 퍼블릭 네트워크에서 모든 노드들이 동기적으로 연결되고 합의가 이루어져 블록이 생성되는 긴 지연시간이 있지만 리플의 경우 네트워크 내에서 집단적으로 신뢰받는 서브 네트워크들을 이용하여 최소의 연결성을 통해 짧은 지연시간을 갖는 합의 알고리즘을 소개한다고 합니다.
우선 서론을 보면 분산화된 지불 시스템이 마주하는 기술적인 문제로 3가지를 꼽고 있습니다 이를 3개의 메인 카테고리로 분류를 하였는데 정확성, 동의, 활용성입니다.
정확성의 경우 이 분산화된 시스템이 거래시 올바른 거래인지 위조된 거래인지 차이를 식별할 수 있어야 한다는 의미입니다.
동의의 경우 분산된 시스템에 대해 하나의 신뢰를 유지하는 지에 관련한 문제이고 이는 이중지불문제와 관련됩니다.
활용성의 경우 분산 시스템의 속도와 관련한 문제입니다.
따라서 리플 백서에서는 이 3가지의 목표가 충족된 리플 프로토콜을 소개하고 입증할 것을 이 백서에 보인다고 합니다.
서론 이후에는 정의, 규격화, 사전 연구에 대한 이야기가 나옵니다.
리플 프로토콜에 대한 요소로 다음과 같이 용어들을 정의해 네트워크의 설명을 시작합니다.
1) 리플 프로토콜 요소
서버 : 합의 프로세스에 참여하는 리플 서버 소프트웨어 운영 독립체(서버는 여러개 존재)
장부 : 각 유저의 계좌에 있는 화폐 액수 기록이며 기본적인 신뢰를 나타내며 통과한 트랜잭션이 계속 업데이트됨
최종장부 : 네트워크의 현재 상태
열린장부 : 현재 운영되고 있는 노드의 상태
고유 노드 리스트(UNL) : 서버는 고유 노드 리스트를 운영하는데 이것이 합의를 판단할 때 조회하는 다른 서버들의 집합
제안자 : 트랜잭션을 포함하려고 시도하는 주체이며 UNL에 속한 서버의 제안자만이 s(서버)에 의해 인정됨.
2.2) 공식화(규격화)
리플에서는 네트워크 내의 정직한 노드를 무결점 노드라고 하며 에러를 경험하거나 악의를 갖고 있는 노드를 장애 노드라고합니다. 그리고 트랜잭션을 검증하는 것을 단순히 이중선택의 문제로 좁혀서 0과 1선택으로 만들어 다음과 같이 세가지 공리에 의한 프로세스를 구성합니다.
C1: 모든 무결점 노드는 각각 한정된 시간 내에 결정
C2: 모든 무결점 노드들은 같은 결과 값에 도달
C3: 0과 1 모두 무결점 노드가 선택 가능한 값.
2.3) 현존하는 합의 알고리즘
이 부분에서는 합의 알고리즘에 대한 설명을 기록하고 있는데요, 그 중 네트워크의 모든 참여자들이 메시지가 비동기적으로 전송되는 시간 전까지 알려지지 않는 케이스, 합의의 강약에 대한 견해 사이의 서술이 있는 케이스 이 두가지에 대해서 말하고 있습니다.
우선 전자의 경우 Impossibility of distributed consensus withonefaultyprocess 라는 논문에서 시간 기반의 휴리스틱이 필요하다는 것을 얻어냈다고 합니다. 그 이유로 단 하나의 장애 프로세스만 있어도 합의 알고리즘이 종결되지 않는 결과가 일어날 수 있다는 가능성이 항상 존재하기 때문입니다.
후자 케이스의 경우 합의 알고리즘의 견고함이 얼마나 많은 장애 프로세스를 허용할 수 있는 지로 측정되는데 현재까지 악의적으로 행동하는 네트워크의 33% 이상(BFT-CUP라는 알고리즘)을 허용할 수 없습니다. 하지만 이것에는 기반 네트워크 연결성에 대한 추가적인 제약이 존재한다고 합니다.
2.4) 공식적인 합의 목표
이 백서에서 리플의 목표는 리플 프로토콜에 의해 합의 알고리즘이 각 장부 종료 시점에서 합의를 이루는 것이라고 말하며, 비잔틴 장애에 직면한 상황에서도 알려진 확률로만 이루어 지는 것이라고 합니다.
각기 다른 UNL(고유 노드 리스트)일원으로 부터 한가지 합의 만이 도출될 수 있다는 것을 보일 것이며 이 목표는 두개의 다른 최종 장부가 인정되는 것을 막는 것이라고 합니다.
마지막으로 20% 비잔틴 장애를 허용하면서 목표를 이루고 이에 따라 활용성을 증가시킬 수 있다는 것을 보인다고 하네요.
3) 리플 합의 알고리즘(RPCA)
리플 합의 알고리즘은 모든 노드에 적용되고, 합의가 이루어지면 닫힌장부 됩니다. 따라서 이는 최종장부로 간주되고 합의 알고리즘이 성공적일 때 어떠한 포크가 일어나지 않는다고 합니다.
3.1) 정의
RPCA는 라운드 제로 진행되고 다음과 같은 과정으로 이루어집니다.
합의 라운드의 시작에 앞서 모든 유효한 트랜잭션을 취함
각 서버는 전체 서버의 UNL로부터 제출된 후보 세트 통합 후 Tx(트랜잭션) 진실성에 대해 투표
최소 기준 이상 찬성 투표 Tx는 다음 라운드, 그렇지 못한 것들은 버려지거나 다음 합의 때 포함
마지막 라운드는 UNL의 80% 이상 동의 필요. 이 요구 모두 만족하면 모든 Tx는 장부에 올려지고 새로운 최종장부가 됨
3.2) 정확성
이 부분에서는 UNL의 80%가 정직한 한 그 어떠한 거짓된 트랜잭션도 승인되지않는다는 것을 수학적으로 증명하는 부분입니다.
f <= (n-1)/5 이 식에서 f는 비잔틴 장애의 개수이며 합의 프로세서가 실패해도 거짓 트랜잭션을 컨펌하는 것은 불가능하니까 악의적인 트랜잭션이 컨펌되기 위해서는 (4n+1)/5 개의 비잔틴 장애를 허용해야 한다고 합니다. 여기서 처음 식을 강한 정확성을 위한 경계라고 하며 두 번째 식을 약한 정확성을 위한 경계라고 합니다.
한편 "사기" 트랜잭션이 컨펌 되더라도 한 유저의 이중 지불 사례를 예로 들면서 두 번째 트랜잭션의 이용가능한 금액이 없으므로 장부에 올라가지 않게 되어 모든 사기 트랜잭션들이 위협이 되지 않음을 보입니다.
또한 정확성의 확률 p*의 확률을 이항분포로 나타내며 실제로 UNL이 상대적으로 큰 pc(악의적인 무리에 참여할 확률)를 갖고 있다고 하더라도, 200개의 노드만으로 97.8% 라는 높은 정확성의 확률을 유지할 수 있다고합니다.
3.3) 동의
동의 요건을 충족시키기 위해 모든 정상 노드가 UNL에 상관없이 동일한 트랜잭션 집합에 대해 합의를 이룬다는 것을 증명해야 한다고 합니다. 위의 그리을 보시면 A라는 서버와 B라는 서버의 교집합이 20% 미만일 경우, 각 서버에서 다른 합의가 가능해집니다. 쉽게 말해서 A서버의 UNL에서 80%가 찬성을 한다는 것은 나머지 20%는 반대를 말한다는 것과 같으므로 B서버도 마찬가지이며 서버의 교집합이 20%가 되지 않는다면 각각의 서버에서 다른 결정 즉 '포크'를 할 수 있게 됩니다.
한편 합의 알고리즘의 실현 형태에서 각 서버들의 UNL은 거미줄처럼 엉키게 되어 포크는 달성하기 엄청 어려워집니다. 이는 노드의 본질보다 교차의 사이즈가 합의를 보장하는데 중요하다는 것을 시사합니다.
3.4) 활용성
이 부분은 주관적이지만 한 가지 수렴은 증명가능하다는 것을 말하며, 수렴이란 합의 프로세스가 제한된 시간 내에 끝날 것이라는 것을 의미한다고 합니다.
3.4.1) 수렴
수렴은 리플 합의 알고리즘이 장부에서 강한 정확성과 함께 합의에 도달하고, 장부가 최종 장부가 되는 시점을 말합니다. 강한 정확성이 항상 (N-1)/5 비잔틴 장애에 대해서 합의를 이룰 수 있다는 것과 UNL 연결성 조건이 충족하는 한, 전체 네트워크에서 오직 한가지 합의만이 이뤄지며 남은 것은 이러한 조건들이 모두 충족되었을 때, 합의가 제한된 시간내에 이루어지느냐를 보여주는 것입니다. 합의가 이루어지는 데에 방해요소는 노드 사이의 통신 지연시간이며 이것을 제한하기 위해 노드의 응답시간은 모니터링되고 정해진 기준을 초과하는 노드는 전체 UNL에서 삭제됩니다.
3.4.2) 휴리스틱과 절차
여기서 휴리스틱은 어림짐작임을 뜻하고 리플은 모든 Tx에 대해 반대 투표를 하는 노드나 합의 라운드에서 탈락한 Tx를 계속 제안하는 노드를 악의적인 노드라 판단하여 네트워크에서 제거합니다. 이 같은 휴리스틱 외에 선별된 UNL을 기본 세트로 제공하거나 모든 노드가 합의 라운드 시작 적엔 2초간 창을 띄워 후보 Tx를 제안할 수 있게 하는 등의 정해진 절차가 있다고 합니다.
시뮬레이션 코드의 주소는 다음과 같습니다.
깃허브 주소: https://github.com/ripple/simulator
5) 토론
RPCA에 대해 지금까지 설명하였고, 이 프로토콜을 증명했다는 것을 말하고 있습니다. 또한 비잔틴 장애 20%까지 안전하다는 것, 신속한 수렴을 가능하게 하여 리플 네트워크가 빠르고 비용이 적게 든다는 것을 보여줍니다.
이렇게 해서 리플 백서에 대해서 알아보았습니다. 리플은 비트코인이나 이더리움과 달리 독자적인 합의 알고리즘을 사용하여 합의를 좀더 빠르게 해서 원하는 목적에 쓰일 수 있도록 그 특성을 암호화폐에 반영하였습니다. 이렇게 암호화폐 마다 각기 다른 목적을 위해 합의 알고리즘을 조정하는 등의 형태로 이루어진다는 것을 볼 수 있었습니다. 지금까지 3가지 백서에 대해서 소개해 드렸는데요, 대표적인 암호화폐 비트코인, 이더리움, 리플 외에도 이오스, 대시, 모네로 등등 다양한 암호화폐들이 많으니 한번 백서를 보고 어떠한 특징들이 있는 지 한번 확인해보시는 것도 추천드립니다. 감사합니다.
작성자: 이정민(dlwoabsdk@naver.com)