검수요청.png검수요청.png

코인토싱

해시넷
이동: 둘러보기, 검색
카르다노(Cardano)

코인토싱(coin tossing)이란 카르다노(Cardano)의 우로보로스 프로토콜이 채택한 방식으로 조작 불가능하고 믿을 수 있는 랜덤 변수의 생성을 위한 프로토콜이다.

개요

코인토싱(Coin Tossing) 프로토콜은 불특정 다수의 참여자가 서로의 정보를 공평하고, 배신의 위험 없이 안전하게 교환할 수 있게 하여 그라인딩 어택(Grinding Attack)을 방어하기 위한 방법으로 지분증명(PoS) 검증방식에서 변수를 미리 계산하여 블록생성 확률을 높이기 위해 고안된 기술이며, 지분증명 블록생성을 위해 참여하는 노드랜덤변수를 이용하여 해당 블록의 정보를 노드 참여 수 만큼 조각낸 후 암호화하여 나누어 같게 하여, 이때 상호 블록 조각을 나누어 같은 과정에서 해독할 수 있는 키와 함께 공유하게 되는데, 만약 공유되는 과정에서 특정 구성원이 배신을 한다 해도 다른 노드를 통해 조각에 대한 정보를 얻을 수 있다. 그러나 이는 구성원의 가 선한 노드라 가정했을 경우에만 가능하기 때문에 모든 조건에서 100% 배신자 노드의 참여를 해결할 수 있는 수단은 되지 못한다. 즉, 블록 정보를 모두 모으기 위해서는 주변 노드의 도움이 필요하기 때문이다.[1]

코인토싱은 불특정 다수의 참여자가 서로의 정보를 공평하고, 조작 불가능하고 믿을 수 있는 랜덤 변수의 생성을 위한 프로토콜이며, 배신의 위험 없이 안전하게 교환할 수 있게 하는 프로토콜이다. 이를 랜덤 변수 생성에 적용하면 네트워크 참여자 각자가 만든 랜덤 변수를 안전하게 교환할 수 있게 된다. 랜덤 변수가 무결하고, 조작이 불가능하며 작업증명(POW) 코인은 그라인딩 어택(Grinding Attack)으로 부터 자유롭다.[2]

활용

카르다노

기존 지분증명(PoS)은 랜덤 변수 생성의 조작이 문제 될 수 있다. 마지막 블록의 정보를 바탕으로 랜덤 변수를 계산하여, 블록 생성자가 미리 이 랜덤 변수를 계산하고, 포함할 트랜잭션을 임의로 뺐다 끼우면서 변수를 바꿀 수 있다. 이런 조작을 스테이크 그라인딩 어택이라 하며, 주어진 블록 생성 시간 동안 랜덤 변수를 조작해 본인이 파이를 키우는 것이 가능하다. 카르다노(Cardano)는 코인토싱 프로토콜을 인용하여 이를 합의 프로토콜에 적용하는데, 조작 불가 추첨을 위한 랜덤 변수를 조작하는 것이 불가능하게 만드는 것으로, 우선 과반수 이상의 선의의 참여자가 있다는 가정하에 악의를 가진 이를 포함한 참여자들에게 각자 자신의 랜덤변수를 참여자 수에 맞게 조각내고, 암호화해서 보내면, 그다음 진짜 랜덤변수를 서로 보내고 그다음 암호화된 랜덤변수 해독키를 보낸다. 모두 가장의 랜덤변수와 암호키를 갖게 되어 최종변수를 조작할 수 없게 되는데 이때 악의를 가진 참여자가 중간에 해독키를 보내지 않고 수신을 끊게 되더라도 과반의 선의의 참여자가 서로의 조각들을 맞춰보면 악의 참여자의 랜덤변수를 찾을 수 있게 된다. 단순하게 생각하면 네트워크 구성원 모두가 랜덤 변수 생성에 참여하게 만드는 것으로 랜덤 변수 생성에 모두가 참여한다면, 개인이 조작할 수 있는 여지는 줄어들게 되고, 조작된 변수에 랜덤을 더하면 랜덤이 나오기 때문이다.[3]

  • 우로보로스 지분증명
우로보로스(Ouroboros)
카르다노 플랫폼은 우로보로스(Ouroboros)라는 지분증명 계열의 방식을 만들어 냈다. 우로보로스 지분증명은 OPoS 라고도 말하는데 우로보로스는 그리스 신화에서 자기 꼬리를 물고 있는 큰 뱀으로 무한을 나타낸다. 우로보로스 지분증명은 지분 독점을 막기 위해서 랜덤을 가미한 기법으로, 쉽게 말해 자격요건을 충족하는 대표들 중 임의로 선정되어 블록을 검증 생성하는 방식이다. 우로보로스 지분증명에는 에폭(Epochs)과 슬롯이라는 개념이 있는 데에 폭은 다수의 슬롯으로 되어 있고, 슬롯별로 대표가 선정되며 대표는 최대 1개의 블록을 생성할 수 있다. 우선 기존의 지분증명(PoS)의 문제가 무엇인지 적어보자면, 스테이크 그라인딩 어택 이라는 것이 있는데, 현재 대부분의 지분증명 프로토콜은 마지막 블록의 정보를 기반으로 무작위 변수를 계산하여, 마지막 블록 작성자는 사용자에게 유리한 랜덤 변수를 얻을 때까지 의도적으로 전송 세부 정보를 삭제하거나 포함할 수 있다. 슬롯 대표를 위해서는에이다를 기준 수량 이상 보유해야 하는 것으로 일단 보유량에 기반한 확률을 제거하며, 코인 토싱 프로토콜로 참여자를 모두 변수로 가정하여 지분증명의 단점인 그라인딩 공격을 완전 무마 시켜 버린다. 우로보로스의 철학은 비트코인의 작업증명(PoW)의 철학과 유사하지만, 작업증명은 컴퓨팅 파워를 모두가 함께 참여하는 개념이지만 카르다노는 변수 생성에 관련되어서 모두가 함께 참여하는 개념의 차이점이 있다.[4]
우로보로스 지분증명은 기존 지분증명(PoS) 방식에 소수에 의한 지분 독점을 막기 위해 임의성을 추가한 합의 방식으로, 찰스 호스킨슨이라는 개발자가 우로보로스 지분증명 방식을 처음으로 제시했다. 호스킨슨은 에이다 공동 개발자이자 IOHK 재단 대표를 맡고 있는 수학자로 알려져 있으며, 랜덤 변수 생성 프로토콜인 코인토싱을 블록체인 노드들의 합의 알고리즘에 도입했다. 이는 블록 생성을 담당할 대표 노드들을 임의로 선정하는 시스템으로, 미리 설정된 변수를 통해 각 노드들이 번갈아 가면서 균일하게 블록 생성에 참여할 수 있는 기회를 가질 수 있도록 했고, 이로 인해 우로보로스 지분증명 방식은 임의성이라는 독창적인 방법으로 특정 노드들의 지분 독식을 막았다는 평가를 받고 있다. 하지만 아직 안정성을 증명하는 테스트 단계에 머물러 있어 현실화하기까지는 시간이 걸릴 것으로 보인다.[5] 가기.png 우로보로스 지분증명에 대해 자세히 보기
  • 코인 토싱 프로토콜(Coin Tossing Protocol)
코인 토싱 프로토콜 단계
코인 토싱 프로토콜은 공정한 랜덤 변수 생성이다. 기존 지분증명(POS)에서 문제 되는 것은 랜덤 변수 생성의 조작으로, 카르다노는 코인 토싱 프로토콜이라고 불리는 것을 인용하여, 이를 합의 프로토콜에 적용했다. 복잡한 프로토콜이고, 이해도 어려운 부분이 많지만, 목적은 간단하다. 추첨을 위한 랜덤 변수를 조작하는 것이 불가능하게 만들자는 것으로 조작이 불가능하게 만들 수 있는 방법은 단순하게 생각하면 네트워크 구성원 모두가 랜덤 변수 생성에 참여하게 만드는 것이다. 랜덤 변수 생성에 모두가 참여한다면, 개인이 조작할 수 있는 여지는 줄어들게 되고, 조작된 변수에 랜덤을 더하면 랜덤이 나오게 된다. 코인토싱의 목적은 추첨을 위한 랜덤변수를 조작하는 것을 불가능하게 만들자는 것이다. 코인토싱 프로토콜은 네트워크 구성원 모두가 랜덤변수 생성에 참여하게 만들어 개인이 조작할 수 있는 여지를 줄이는 프로토콜이다. 코인토싱 프로토콜이 적용되려면 랜덤변수 생성 참여자 중 이상은 선의를 가지고 있다는 가정이 필요하다. 억지스러워 보일 수 있지만, 어차피 이상이 악의를 가지면, 변수가 랜덤이든 조작이든 전체 합의 프로토콜 이 무너지므로 참여자 이상이 선의를 가지고 있다는 가정은 억지는 아니다. 다음은 코인토싱 프로토콜이 이루어지는 순서이다.
  1. 가정. 는 선의의 참여자 : 일단 가정이 한가지 필요하다. 랜덤 변수 생성 참여자 이상은 선의를 가지고 있다고 가정해보면, 합리적이기도 한 이상이 악의를 가지고 있어, 변수가 랜덤이든 조작이든 전체 합의 프로토콜은 무너지게 된다. 랜덤 변수 생성 참여자 를 믿겠다는 것이 무리가 아니므로, 랜덤 변수 생성 참여자의 이상이 선의를 가지고 있다.
  2. 1단계. 랜덤변수 생성, 조각을 네트워크에 전달 : 참여자는 각각 나름의 방법으로 랜덤 변수를 생성한다. 그리고 이를 나머지 네트워크 구성자의 수에 맞게 조각낸다. 그리고 랜덤 변수의 조각(Share)들을 각각의 구성자에게 전달한다. 특정 참여자의 조각 중 과반수를 모으면, 그 참여자가 생성한 랜덤 변수를 항상 복원할 수 있어, 이 복원 가능성은 조작이 불가능하다. 예를 들어 참여자 가 있다고 생각하고 A는 악의적인 랜덤변수 생성 참여자라고 생각해보자. 는 모두 생성한 랜덤변수의 조각을 생성하여 서로 교환한다. 여기서 는 본인의 조각을 조작할 수 없다. 조작할 경우 는 1단계를 넘어가지 못한다.
  3. 2단계. 랜덤 변수를 암호화시켜 전달 : 랜덤변수 생성 참여자 모두가 조각을 전달받으면, 코인토싱이 시작된다. 시작은 랜덤변수를 암호화시켜 전달하는 것이고, 아직은 아무 정보 교환도 일어나지 않으며, 쉽게 말해 정보 교환을 위해 전화를 걸었다.
  4. 3단계. 본인의 랜덤변수를 전달 : 암호화시킨 랜덤변수를 전달받은 참여자는 그에 대한 답신으로 본인의 랜덤변수를 보낸다. 이번에는 암호화되지 않은 랜덤변수이다. 즉 실질적인 정보교환이 한 방향으로 일어난다.
  5. 4단계. 암호화된 변수를 해독하는 키 전달 : 답신을 받은 참여자는 암호화된 변수를 해독하는 키를 전달한다. 키를 받은 참여자는 미리 받은 암호화 된 변수를 해독함으로써 상대방의 변수를 얻게 된다. 이 단계에서 서로 간의 정보교환이 마무리된다. 예를 들어 참여 자중 가 4단계에서 해독 키를 에게 보내주지 않고 통신을 끊어버린다면 A만 최종 랜덤 변수를 계산할 수 있게 된다. 하지만 코인토싱 프로토콜을 사용했기 때문에 B와 C가 1단계에서 받았던 A의 조각을 합치면 A의 변수를 복원할 수 있다. 즉 가 4단계에서 배신한다고 하더라도 의 변수를 얻을 수 있다.
  6. 5단계. 모두의 랜덤변수를 바탕으로 최종 변수 계산 : 정보교환이 마무리되면, 네트워크 구성원들은 각자 최종 변수를 계산할 수 있게 된다. 누구도 최종 변수를 마음대로 조작할 수 없고, 남들보다 빠르게 최종 변수값을 얻을 수 없다. 즉 완전무결한 랜덤변수가 공정하게 생성된 것이다. 예를 들어, 네트워크 참여자는 앨리스, 밥, 찰리가 있고, 그중 앨리스가 악의를 가진다.
엘스.PNG
랜덤 변수(R) 생성 프로토콜(코인 토싱)이다. 스텝 1: Phase 1, 스텝 2&3: Phase 2, 스텝 4&5(앨리스의 배신): Phase 3이다. 앨리스, 밥, 찰리는 모두 생성한 랜덤 변수의 조각을 생성해 서로 교환하고, 앨리스는 본인의 조각을 조작할 수 없으며, 조작할 경우 앨리스는 스텝 1을 넘어가지 못한다. 앨리스는 밥과 찰리에게 암호화시킨 랜덤 변수를 전달하여, 찰리는 밥에게 암호화시킨 랜덤 변수를 전달할 것이다. 밥과 찰리는 앨리스에게 본인의 랜덤 변수를 보내어, 밥은 찰리에게 본인의 랜덤 변수를 보낸다. 앨리스는 본인의 해독 키를 밥과 찰리에게 보내고, 찰리는 본인의 해독 키를 밥에게 보낸다. 밥과 찰리도 앨리스의 랜덤 변수를 얻을 것이고, 밥도 찰리의 랜덤 변수를 얻을 것이다. 결과적으로 모두가 상대방의 랜덤 변수를 알게 된다. 만약 앨리스가 스텝 4에서 배신했다고 가정해 보면, 해독 키를 밥과 찰리에게 보내주지 않고 통신을 끊어버리고, 앨리스만 모든 랜덤 변수를 얻게 되어, 본인만 최종 랜덤 변수를 계산할 수 있게 된다. 그렇더라도 코인 토싱 프로토콜을 사용한 것이다. 위의 경우 밥과 찰리는 스텝 1에서 받았던 앨리스의 조각을 서로 교환하여, 조각을 합치면 앨리스의 변수를 복원할 수 있게 된다. 따라서 앨리스가 스텝 4에서 배신하더라도, 밥과 찰리는 앨리스의 변수를 얻을 수 있고, 이 복원 가능성은 의 참여자는 선의를 갖는다는 가정에 의해 증명된다.[6] 가기.png 카르다노에 대해 자세히 보기

각주

  1. 장석만, 〈코인토싱(Coin Tossing)은 어떤 프로토콜인가요?〉, 《아하》, 2019-09-14
  2. keepit, 〈KEEP!T 블록체인 상식사전〉, 《스팀잇》, 2019-08-14
  3. 소소대담, 〈에이다(카르다노), 우로보로스, 이오스, 넴, 멀티시그〉, 《네이버블로그》, 2018-07-18
  4. 자비스가 필요해, 〈카르다노 플랫폼과 에이다(ADA) 코인〉, 《티스토리》, 2019-01-18
  5. 김승현 기자, 〈(코린이 상식백과) 블록체인 합의 알고리즘 A to Z 2편〉, 《데일리토큰》, 2019-05-18
  6. seungjae1012, 〈카르다노(Cardano, ADA) 탐구: 지분 증명(POS)의 한계와 우로보로스(Ouroboros)〉, 《스팀잇》, 2018-06-14

참고자료

같이보기


  검수요청.png검수요청.png 이 코인토싱 문서는 블록체인 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.