카르다노(Cardano, ADA) 탐구: 지분 증명(POS)의 한계와 우로보로스(Ouroboros)
머리말
카르다노(Cardano, ADA)는 단숨에 시총 5위까지 치고 올라온 거물급 유망주 코인입니다. 너무 덩치가 커져버려서 유망주라고 부르기도 민망한 구석이 있지만, 이오스(EOS)와 함께 3세대 코인이 될 것이라 많은 기대를 받고 있습니다. 카르다노는 지분증명(POS)기반 합의 프로토콜으로 "우로보로스(Ouroboros)"를 새롭게 제안하는데요. 본 글에서는 "우로보로스"가 정확히 무엇인지, 또 왜 필요한지 알아보도록 하겠습니다.
안녕하세요 에스리입니다. 오랜만에 코인 글로 인사뵙는군요. 원래 주말에 다루어보려고 아껴두었던 주제인데, 갑자기 다른 것에 홀려서 조금 미루게 됐습니다. 늦은감이 있지만 귀엽게 봐주시고 이번 글도 재밌게 읽어주셨으면 좋겠습니다. 이번 편 마무리 짓는대로 그 코인 시리즈 스터디 글도 올리도록 하겠습니다.
카르다노 시리즈 1편: 카르다노(Cardano, ADA) 탐구: 댄 라리머 VS 찰스 호스킨스 논쟁
카르다노(Cardano, ADA) 탐구: 지분 증명(POS)의 한계와 우로보로스(Ouroboros)
우로보로스가 뭔지 궁금하셨나요? 그러면 이 57분짜리 동영상을 보세요! 는 농담이고, 제가 이미 다 봤습니다. 제가 설명드릴게요. 차근차근 긴 호흡을 가지고 읽어보세요. 쉽게 쓰려고 정말 노력했습니다..만 실패한 것 같네요 ㅠㅠ
기존의 지분 증명 (Proof Of Stake, POS)
카르다노 합의 프로토콜인 우로보로스를 이해하기 위해서는 먼저 기존 지분 증명이 가지고 있는 한계에 대해 알아야합니다. 지분 증명에는 어떤 문제가 있었고, 그 문제를 카르다노가 어떻게 해결했는지 살펴보는 방향으로 글을 풀어나가 보겠습니다.
- 본 글은 채굴에 대해 어느정도 이해가 있는 독자를 대상으로 기획되었습니다. 채굴 방식 중 대표적인 2가지, 작업 증명(Proof Of Work)과 지분증명(Proof Of Stake)에 대한 기초 지식이 부족하신 분들은 먼저 다른 글을 참조해주시기 바랍니다.
가상화폐 채굴 바로알기 시리즈 5편
지분 증명이란?
지분 증명은 작업 증명(Proof Of Work, POW)이 가진 에너지 낭비 문제를 해결하기 위해 등장한 합의 프로토콜입니다. 지분 증명에서는 지분 보유량에 따라 "확률적"으로 채굴자에게 블록 생성권한을 줍니다. 작업 증명처럼 해시 문제를 가장 먼저 푼 채굴자에게 블록 생성권한을 주는 것이 아니라요. 지분 증명에서는 지분 보유량이 많은 채굴자일 수록, 블록 생성 권한이 주어질 확률이 커집니다.
흥미로운 것은 작업 증명과 지분 증명은 상당 부분이 절묘하게 대응된다는 것입니다.
- 작업 증명을 위한 채굴기 개수(총 해시파워) = 지분 증명을 위한 코인 개수 (총 지분)
- 작업 증명 채굴기 가격 = 지분 증명 코인 가격
- 두 경우 모두 51% 어택을 위해서는 채굴자 총 투자금의 51% 이상 필요
그런데 이렇게 지분 증명이 작업 증명에 대응되는 것은 우연이 아닙니다.
작업 증명: 비트코인이 증명한 합의 프로토콜 레시피
비트코인 합의 프로토콜인 작업 증명은 한번도 무너진 적이 없습니다. 무너진다는 것은 해킹을 의미합니다. 앞으로도 해킹당하지 않을 가능성이 높습니다. 그럼에도 불구하고 언제든지 비트코인은 "간단히" 해킹당할 수 있습니다. "이론적"으로는요.
커뮤니티 구성원 중 51% 이상이 배신할 경우, 비트코인 합의 프로토콜은 무너진다.
51%의 배신은 쉬운 듯 어려워 보입니다. 어찌보면 위태로워보입니다. 그러나 그런 일은 일어난적이 없었지요. 일어나지 않게 설계하였으니까요. 작업 증명은 51% 이상의 구성원이 배신하거나 나태해지지 않도록 선의의 참여자에게는 "보상"이라는 당근을 줬고, "경쟁"이라는 채찍을 넣었습니다.
비트코인의 작업 증명이 수년간 보여준 것은 간단합니다. 잘 굴러가는 합의 프로토콜 레시피입니다. 어떤 당근을 주어야하고, 어떻게 채찍을 쳐야하는지 보여준 것입니다. 압도적인 시가 총액 1위의 자리에서 그가 증명한 것은 다름이 아니라 "이 레시피대로면 51%의 배신 가능성은 없다"입니다.
때문에 지분 증명은 작업 증명의 모든 부분을 대응시키고 싶었던 것입니다. 레시피대로만 요리하면, 믿을 수 있는 프로토콜이 되니까요. 지분 증명은 "막대한 에너지소모"라는 기름기만 뺀, 담백한 버전의 작업 증명을 꿈꾸며 등장한 합의 프로토콜입니다.
해시 문제의 공정함은 흉내내지 못해
앞서 말했듯이 지분 증명은 작업 증명의 대부분을 성공적으로 대응시켰습니다. 그러나 가장 중요한 작업 증명 해시 문제의 공정함을 흉내내지 못했습니다. 무슨 말인지 조금 더 깊게 들어가 보도록 하겠습니다. 먼저 작업 증명 해시 문제에 대해 이야기 해보겠습니다.
작업 증명 해시 문제는 특정인물이 출제하는 것이 아닙니다. 새로운 블록이 생성되고, 새로운 트랜잭션이 생기면 그 두 정보만 가지고 "모두가" 자유롭게 해시 문제를 출제할 수 있습니다. 스스로 출제한 문제를 풀어서 답을 냈다면, 그 뒤에 블록을 이어붙이는 것입니다. 모든 채굴자가 출제자이자 수험생이므로, 공정한 경쟁 구조를 갖습니다.
반면에 지분 증명은 확률에 따라 다음 블록 생성자를 추첨 해야합니다. 누가 다음 블록 생성자를 추첨해야할까요? 시스템 자체에 추첨 복권 로터리를 넣으면 될까요? 불행하게도 그것은 불가능합니다. 블록체인은 탈중앙화 된 시스템이지, 중앙 컴퓨터가 부름에 적절히 응답해주는 곳이 아닙니다.
비트코인처럼 새로운 블록 정보와 새로운 트랜잭션을 가지고 랜덤 변수를 계산하면 될까요? 불행하게도 그것도 마지막 블록생성자에 의해 조작될 가능성이 있습니다. 마지막 블록생성자는 블록을 이어붙이기 전에 랜덤 변수를 "미리" 계산해 볼 수 있습니다. 따라서 본인의 기호에 따라 유리한 방향으로 랜덤 변수를 조작할 수 있게 됩니다.
Stake-Grinding Attack
앞서 말한 조작을 Stake-Grinding Attack이라 부릅니다. 현재 POS 코인들은 마지막 블록의 정보를 바탕으로 랜덤 변수를 계산합니다. 따라서 마지막 블록 생성자가 미리 이 랜덤 변수를 계산하고, 포함할 트랜잭션을 임의로 뺐다 끼우면서 변수를 바꿀 수 있습니다. 주어진 블록 생성시간동안 랜덤 변수를 조작해 본인의 파이를 키우는 것이 가능합니다. 예를 들어 보죠.
마지막 블록 생성자는 추첨을 위해 1부터 100까지 적힌 주사위 100개를 동시에 던집니다. 그 중 본인의 추첨 번호는 77번입니다. 원래 주사위는 1번만 던져야 하지만, 남들 몰래 최대 10번까지 던질 수 있습니다. 10번의 시도 중에 77번이 최대한 많이 나온 결과를 사용합니다.
사실 현재 운영되고 있는 POS 코인들은 대부분 이 문제를 안고 있다고 보시면 됩니다. 단편적인 시각에서는 엄청난 결함은 아닙니다. 결국 큰 수의 법칙으로 수렴하기 때문에 이 시스템의 공정성도 호락호락하지 않습니다. 그러나 꼭 보완되어야 합니다. 악용될 경우 이중 지불(double spending)까지 이어질 수 있습니다.
- 사실 이것 외에 Nothing at Stake 문제도 있습니다. 그러나 이 문제는 모든 POS 기반 프로토콜(DPOS 포함)에서 명쾌히 해결되지 않은 것 같아 언급하지 않았습니다. 물론 제가 이해력이 부족한 것일 수도 있습니다 (...)
우로보로스(Ouroboros)
기존 지분 증명 프로토콜이 가지고 있는 한계, 그 중에서도 특히 Grinding Attack을 막기 위해 설계된 것이 우로보로스입니다. 사실 이 한계점은 댄 라리머의 DPOS로도 극복 가능합니다. 그러나 DPOS는 굉장히 진취적이고 과감한 실험이라고 수차례 말씀드린 바 있습니다.
카르다노는 비트코인 작업 증명이 보여준 철학에 기반합니다. 과감한 실험 대신, 검증된 길을 걷겠다는 의도로 읽힙니다. 비트코인 작업 증명 레시피를 그대로 복사하는 것이 카르다노 팀의 목표입니다. 이는 에너지 소모라는 기름기만 뺀, 담백한 프로토콜을 만드는 것을 의미합니다.
공정한 랜덤 변수 생성: 코인 토싱 프로토콜 (Coin Tossing Protocol)
기존 POS에서 문제되는 것은 랜덤 변수 생성의 조작이라고 했습니다. 카르다노는 코인 토싱 프로토콜이라고 불리는 것을 인용하여, 이를 합의 프로토콜에 적용합니다. 사실 이게 꽤나 복잡한 프로토콜이고, 이해도 어려운 부분이 많습니다만 목적은 간단합니다. 추첨을 위한 "랜덤" 변수를 조작하는 것이 불가능하게 만들자는 것입니다.
어떻게 조작이 불가능하게 만들 수 있을까요? 단순하게 생각하면 네트워크 구성원 모두가 랜덤 변수 생성에 참여하게 만드는 것입니다. 랜덤 변수 생성에 모두가 참여한다면, 개인이 조작할 수 있는 여지는 줄어들게 됩니다. 조작된 변수에 랜덤을 더하면 랜덤이 나오니까요. 정답입니다만, 이것도 그리 간단하지는 않습니다.
가정: 51%는 선의의 참여자
일단 가정이 한가지 필요합니다. 랜덤 변수 생성 참여자 51% 이상은 선의를 가지고 있다고 가정합니다. 억지스러운 가정은 아닙니다. 사실 합리적이기도 해보입니다. 어차피 51% 이상이 악의를 가지면, 변수가 랜덤이든 조작이든 전체 합의 프로토콜은 무너집니다. 그러니 랜덤 변수 생성 참여자 51%를 믿겠다는 것이 무리는 아니지요.
네트워크 참여자는 앨리스, 밥, 찰리가 있다고 해보겠습니다. 그 중 앨리스가 악의를 가집니다.
랜덤 변수(R) 생성 프로토콜(코인 토싱)입니다. 아래 나오는 스텝 1: Phase 1, 스텝 2&3: Phase 2, 스텝 4&5(앨리스의 배신): Phase 3입니다. 글의 이해를 돕기 위해 그렸으며, 글과 함께 보셔야 이해가 수월하실 것입니다.
스텝 1: 랜덤변수 생성, 조각(Share)을 네트워크에 전달
참여자는 각각 나름의 방법으로 랜덤 변수를 생성합니다. 그리고 이를 나머지 네트워크 구성자의 수에 맞게 조각냅니다. 그리고 랜덤 변수의 조각(Share)들을 각각의 구성자에게 전달합니다. 특정 참여자의 조각 중 "과반수"를 모으면, 그 참여자가 생성한 랜덤 변수를 "항상" 복원할 수 있습니다. 이 복원 가능성은 조작이 불가능합니다.
앨리스, 밥, 찰리는 모두 생성한 랜덤 변수의 조각을 생성해 서로 교환합니다. 앨리스는 본인의 조각을 조작할 수 없습니다. 조작할 경우 앨리스는 스텝 1을 넘어가지 못합니다.
스텝 2: 랜덤 변수를 암호화 시켜 전달
모두가 조각을 전달 받으면, 코인 토싱이 시작됩니다. 시작은 랜덤 변수를 암호화 시켜 전달하는 것입니다. 아직은 아무 정보 교환도 일어나지 않습니다. 정보 교환을 위해 전화를 걸었다고 보시면 이해가 쉬우실 것 같습니다.
앨리스는 밥과 찰리에게 암호화 시킨 랜덤 변수를 전달합니다. 찰리는 밥에게 암호화 시킨 랜덤 변수를 전달합니다.
스텝 3: 본인의 랜덤 변수를 전달
암호화 시킨 랜덤 변수를 전달 받은 사람은 그에 대한 답신으로 본인의 랜덤 변수를 보냅니다. 이번에는 암호화 되지 않은 "진짜" 랜덤 변수입니다. 실질적인 정보 교환이 한 방향으로 일어납니다.
밥과 찰리는 앨리스에게 본인의 랜덤 변수를 보냅니다.밥은 찰리에게 본인의 랜덤 변수를 보냅니다.
스텝 4: 암호화 된 변수를 해독하는 키 전달
답신을 받은 사람은 암호화 된 변수를 해독하는 키를 전달합니다. 키를 받은 사람은 미리 받은 암호화 된 변수를 해독함으로서 상대방의 변수를 얻게 됩니다. 정보 교환이 마무리되게 됩니다.
앨리스는 본인의 해독 키를 밥과 찰리에게 보냅니다. 찰리는 본인의 해독 키를 밥에게 보냅니다. 밥과 찰리도 앨리스의 랜덤 변수를 얻습니다. 밥도 찰리의 랜덤 변수를 얻습니다. 결과적으로 모두가 상대방의 랜덤 변수를 알게됩니다.
스텝 5: 모두의 랜덤변수를 바탕으로 최종 변수 계산
정보 교환이 마무리 되면, 네트워크 구성원들은 각자 최종 변수를 계산할 수 있게 됩니다. 누구도 최종 변수를 마음대로 조작할 수 없으며, 남들보다 빠르게 그 값을 얻을 수 없습니다. 완전무결한 랜덤 변수(R)가 공정하게 생성된 것입니다.
앨리스가 스텝 4에서 배신한다면?
앨리스가 스텝 4에서 배신했다고 해보겠습니다. 해독 키를 밥과 찰리에게 보내주지 않고 통신을 끊어버립니다. 그러면 앨리스만 모든 랜덤 변수를 얻게 되고, 본인만 최종 랜덤 변수를 계산할 수 있게 됩니다. 그렇더라도 걱정하지 마세요. 우리는 코인 토싱 프로토콜을 사용했습니다.
위의 경우 밥과 찰리는 스텝 1에서 받았던 앨리스의 조각을 서로 교환합니다. 조각을 합치면 앨리스의 변수를 복원할 수 있습니다. 따라서 앨리스가 스텝 4에서 배신하더라도, 밥과 찰리는 앨리스의 변수를 얻을 수 있습니다. 이 복원 가능성은 51%의 참여자는 선의를 갖는다는 가정에 의해 증명됩니다.
마치며
카르다노 합의 프로토콜 우로보로스의 "기본 원리"에 대해 알아봤습니다. 사실 우로보로스에 대한 스터디는 저번주에 이미 끝냈었습니다. 당시에 정말 골머리 썩었던 기억이 나네요. POS의 문제가 무엇인지도 제대로 모르고 공부하려니까 코인토싱이 뭔지 왜 필요한지 온갖 개념이 뒤죽박죽이었더랬죠. 다시 봐도 어렵긴 마찬가지네요.
지금까지 설명을 잘 따라오셨다면 아시겠지만, 우로보로스는 랜덤 변수의 공정한 생성에 심혈을 기울인 프로토콜입니다. 별 것 아닌 것처럼 보일 수도 있습니다. 사실 저도 처음에는 저게 저렇게까지 해야하는 것인가? 라는 의문은 조금 들었었네요. 지금은 "현재 POS가 잘 굴러가고 있는 것은 기적이구나" 라는 생각이 듭니다.
카르다노도 언급하고 있습니다. 현재 실험적으로 운영하는 POS의 안정성도 무시하진 못한다고요. 그러나 보수적인 관점에서 살펴보면, 현재 시총 10위권 이내 POS 기반 코인은 NEO 하나입니다. 그마저도 비트코인/이더리움의 규모에 비하면 10분의 1도 안됩니다.
안정성의 검증과 시총 규모의 상관관계는 분리하기 어렵습니다. 시총이 거대해질 수록 악의적 공격은 거세질 것이고, 그것을 견뎌낼 수 있는지가 그들이 치루어야할 시험이 되겠지요. 네오 기준, POS는 현재 비트코인 80만원 수준의 검증을 마친 상태입니다. 아직 더 시간을 두고 지켜볼 필요가 있습니다.
여기까지 읽어주셔서 감사드립니다. 이번 글은 뭔가 애착이 가네요. 고생을 해서 그런지, 많은 분들이 좋은 반응으로 응원해주셨으면 하는 마음이 듭니다. 다음 편에는 구체적으로 카르다노의 합의 프로토콜이 어떻게 구성되는지 알아보겠습니다. 항상 기대에 보답하는 글 올리도록 힘쓰겠습니다. 감사합니다!
맺음말
저는 한국의 암호화폐 투기 열풍이 가라앉고, 좀 더 성숙하고 건전한 시장 참여가 이루어지길 기대합니다. 그러기 위해서는 블록체인에 대한 이해가 필요합니다. 더 깊은 이해를 바탕으로 모두 건강한 투자 하셨으면 좋겠습니다. 리스팀/팔로우/댓글/보팅 감사드립니다. 더 알차고 신나는! 포스팅에 많은 힘이 됩니다.
저도 최근에 PoS에 대해 공부했는데, Nothing-at-stake 문제는 메인 체인이 아닌 체인의 블록을 검증한 검증인들을 처벌하는 방식으로 해결했다고 합니다. 카르다노의 블록타임이 길다는 얘길 본 적이 있는데 이런 방법이라면 길 수 밖에 없겠네요. 보안을 위해 확장성을 포기하는 느낌입니다. 좋은 정리 글 감사합니다.
안녕하세요. 말씀하시는 것처럼 처벌하는 프로토콜은 이더리움 캐스퍼로 대충 스터디한 적이 있기는 합니다. 또, DPOS에서도 증인끼리 이중 채굴을 하는 행위를 서로 견제할 수 있으니 해결 가능하다고 언급하더군요.
근데 저는 그래도 잘 이해가 안되더라고요. 제 관점에서 작은 규모(?)의 이중채굴(그러니까 채굴단계에서 얼마든지 생길 수 있는 포크에 대한 이중 채굴)은 Nothing at stake 문제로 보지 않습니다. 저는 비트코인 캐시, 골드, 다이아 등과 같은 메이저 하드포크에서 발생하는 이중채굴을 POS가 효과적으로 견제할 수 있는지를 문제로 보고 있습니다.
두번째로 블록타임에 대해서는 말씀하신 부분이 맞습니다. 사실 블록타임이 긴 주된 이유가 코인토싱인 것은 아니긴 합니다. 이것은 다음편에서 자세히 다루어볼 예정입니다. 간략히는 제 글 초입에 언급한 이전 포스팅에서 다루어본 적 있습니다 :)
읽어주시고 좋은 의견 남겨주셔서 감사합니다 ^^
메이저 하드포크를 막느냐 안막느냐는 프로토콜 설계자의 철학의 문제인 것 같습니다. 사실 저도 캐스퍼 자료로만 PoS를 얕게 공부했는데요, 캐스퍼의 처벌 프로토콜대로라면 포크를 하는 사람들이 원래의 이더리움 체인에서 가지고 있는 지분에는 많은 손실이 생길 것입니다. 그런 피해를 감수하고도 포크를 하겠다면 포크를 하라는게 이더리움 팀의 철학이지 않나 싶습니다. 비탈릭도 이런 트윗을 남겼었습니다. 하드포크가 불가능한(불가능하다고 주장하는) 코인들도 본 적이 있는 것 같은데, 그건 그 팀의 철학인 것 같구요. 사실 저도 잘 모르는 부분이라 확신은 없지만요..
알려주신 트윗은 잘보았습니다. 흥미롭네요. 비탈릭은 댄 라리머와 많은 부분에서 비슷한 철학을 가지고 있군요.
그런데 알려주신 글이 2017년 3월이면 사실 조금 된 글이라, 비탈릭이 어떤 의도로 글을 올린 것인지 명확하지가 않네요. POW에 한해 하드포크는 자유경쟁인데 왜 무서워하는지에 대한 질문인지, POS도 아우르는 질문인지 모호해보입니다.
일례로 댓글을 살펴보면, ETC 하드포크는 비탈릭도 문제라고 보고 있습니다. 세그윗에서 하드포크가 일어나는 것은 자유경쟁이니 두려워할 것이 없다고 보고 있지만, ETC에 대한 관점은 부정적이어 보입니다.
또한 하드포크 코인 앞에서 이중 채굴의 기준은 굉장히 모호해집니다. 누군가 ETH의 단점을 개선하고자 포크를 해 ECH를 발행합니다. 모든 잔고 내역은 그대로 두고요. 명백히 다른 목표를 가지고, 새로운 방향으로 나아가겠다는 코인입니다.
ETH 채굴 커뮤니티는 ECH도 채굴하는 사람의 스테이크를 차감하겠다는 명분이 있을까요? 캐스퍼 처벌 프로토콜은 악의적 하드포크(해킹)를 막기 위해 존재하는 것입니다. 하드포크 코인을 금지할 명분까지 있는지는 잘 모르겠네요.
사실 저는 위 질문에 대한 답을 아직 얻지 못했습니다. 제재하자니, 발전 가능성을 저해하는 보수적 마인드 인 것 같습니다. 그렇다고 인정하자니, 구색만 갖춰서 포크를 하겠다고 나타날 코인들이 넘쳐날 것이 눈에 보입니다.
필요 없는 정크들은 커뮤니티에게 외면받아 알아서 사라져주면 좋겠지만, 그럴리도 없습니다. POW 포크 코인과는 달리, POS 포크 코인은 이중 채굴이 되니까요..
제 의견을 풀어쓰자면 위와 같습니다. 어떻게 생각하실런지 모르겠네요. 재밌는 논의를 할 수 있어서 좋았습니다. 감사합니다 ^^
좋은 글 감사합니다 :) 많은 공부가 되었습니다.
tip!
감사합니다 시너님. 여행기를 쓰시는군요. 료칸은 저도 꼭 가보고 싶습니다 ㅎㅎ
팁은 처음 받아봅니다. 감사히 잘 받도록 하겠습니다 :)
오미 팁을 쏘면 이제 포스팅 홍보도 해주는군요 몰랐네요 -0-ㅎ 에이다 장기 홀더로써 몰랐던 점 잘 배웠습니다
Hi @seungjae1012! You have received 0.1 SBD tip + 0.01 SBD @tipU from @sinner264 :)
@sinner264 wrote lately about: 일본 료칸 탐방 - 유후인 야스하. Feel free to follow @sinner264 if you like it :)
좋은 정보 제공해 주셔서 감사합니다. 앞으로 잘 부탁 드립니다. 수고 많으셨습니다.
좋은 글 감사합니다
저도 공부 많이 해야겠네요. 감사합니다. ^^
공부 많이 도와드릴 수 있도록 힘써보겠습니다 감사합니다!
이런 좋은 글 덕에 조금씩 조금씩 블록체인에 대해 알아 가고 있네요
감사합니다.
많은 분들이 알게 될 수 있으면 좋겠습니다. 감사합니다 :)
좋은글 항상 감사합니다
댓글 매번 남겨주셔서 감사합니다 코스코스님~
에스리님 지난번 사피엔 분석을 비롯한 코인분석 글 항상 잘 읽고 있습니다! 다름이 아니라 긴히 여쭈어 볼 것이 있는데 에스리님 메일주소 좀 부탁드려도 될까요?
안녕하세요~ 이런 요청은 처음 받아봐서 어떻게 알려드려야할지 잘 모르겠네요. 혹시 steemit.chat 이용하시나요? 혹시 이용하시면 slee_infochain 으로 연락주셔도 될 것 같습니다 :)