코인토싱
코인토싱(coin tossing)이란 카르다노(Cardano)의 우로보로스 프로토콜이 채택한 방식으로 조작 불가능하고 믿을 수 있는 랜덤 변수의 생성을 위한 프로토콜이다.
개요
코인토싱(Coin Tossing)은 불특정 다수의 참여자가 서로의 정보를 공평하고, 배신의 위험 없이 안전하게 교환할 수 있게 하는 프로토콜이다. 이를 랜덤 변수 생성에 적용하면 네트워크 참여자 각자가 만든 랜덤 변수를 안전하게 교환할 수 있게 된다. 랜덤 변수가 무결하고, 조작이 불가능하며 지분증명(POW)코인은 그라인딩 어택(Grinding Attack)으로 부터 자유롭다.[1]
특징
코인토싱 프로토콜
카르다노는 코인토싱 프로토콜(coin tossing protocol)을 인용하여 이를 알고리즘에 적용한다. 코인토싱 프로토콜의 목적은 간단하다. 추첨을 위한 랜덤 변수의 조작을 불가능하게 만드는 것이다. 간단히 말해, 네트워크 구성원 모두가 랜덤 변수 생성에 참여하게 만들면 된다. 랜덤 변수 생성에 모든 구성원이 참여한다면, 개인이 조작할 수 있는 여지는 줄어들게 된다. 조작된 변수에 랜덤을 더하면 랜덤이 나오기 때문이다.
코인토싱의 목적은 추첨을 위한 랜덤변수를 조작하는 것을 불가능하게 만들자는 것이다. 코인토싱 프로토콜은 네트워크 구성원 모두가 랜덤변수 생성에 참여하게 만들어 개인이 조작할 수 있는 여지를 줄이는 프로토콜이다. 코인토싱 프로토콜이 적용되려면 랜덤변수 생성 참여자 중 51% 이상은 선의를 가지고 있다는 가정이 필요하다. 억지스러워 보일 수 있지만 어차피 51%이상이 악의를 가지면, 변수가 랜덤이든 조작이든 전체 합의 프로토콜이 무너지므로 참여자 51% 이상이 선의를 가지고 있다는 가정은 억지는 아니다. 다음은 코인토싱 프로토콜이 이루어지는 순서이다.
- 코인 토싱 프로토콜(Coin Tossing Protocol)
- 코인 토싱 프로토콜은 공정한 랜덤 변수 생성이다. 기존 지분증명(POS)에서 문제되는 것은 랜덤 변수 생성의 조작으로, 카르다노는 코인 토싱 프로토콜이라고 불리는 것을 인용하여, 이를 합의 프로토콜에 적용했다. 복잡한 프로토콜이고, 이해도 어려운 부분이 많지만 목적은 간단하다. 추첨을 위한 랜덤 변수를 조작하는 것이 불가능하게 만들자는 것으로 조작이 불가능하게 만들 수 있는 방법은 단순하게 생각하면 네트워크 구성원 모두가 랜덤 변수 생성에 참여하게 만드는 것이다. 랜덤 변수 생성에 모두가 참여한다면, 개인이 조작할 수 있는 여지는 줄어들게 되고, 조작된 변수에 랜덤을 더하면 랜덤이 나오게 된다.
- 가정. 51%는 선의의 참여자 : 일단 가정이 한가지 필요하다. 랜덤 변수 생성 참여자 51% 이상은 선의를 가지고 있다고 가정해보면, 합리적이기도한 51% 이상이 악의를 가지고 있어, 변수가 랜덤이든 조작이든 전체 합의 프로토콜은 무너지게 된다. 랜덤 변수 생성 참여자 51%를 믿겠다는 것이 무리가 아니므로, 랜덤 변수 생성 참여자의 51% 이상이 선의를 가지고 있다.
- 1단계. 랜덤변수 생성, 조각을 네트워크에 전달 : 참여자는 각각 나름의 방법으로 랜덤 변수를 생성한다. 그리고 이를 나머지 네트워크 구성자의 수에 맞게 조각낸다. 그리고 랜덤 변수의 조각(Share)들을 각각의 구성자에게 전달한다. 특정 참여자의 조각 중 과반수를 모으면, 그 참여자가 생성한 랜덤 변수를 항상 복원할 수 있어, 이 복원 가능성은 조작이 불가능하다. 예를 들어 참여자 A, B, C가 있다고 생각하고 A는 악의적인 랜덤변수 생성 참여자라고 생각해보자. A, B, C는 모두 생성한 랜덤변수의 조각을 생성하여 서로 교환한다. 여기서 A는 본인의 조각을 조작할 수 없다. 조작할 경우 A는 1단계를 넘어가지 못한다.
- 2단계. 랜덤 변수를 암호화 시켜 전달 : 랜덤변수 생성 참여자 모두가 조각을 전달 받으면, 코인 토싱이 시작된다. 시작은 랜덤변수를 암호화시켜 전달하는 것이고, 아직은 아무 정보 교환도 일어나지 않으며, 쉽게말해 정보 교환을 위해 전화를 걸었다.
- 3단계. 본인의 랜덤변수를 전달 : 암호화 시킨 랜덤변수를 전달 받은 참여자는 그에 대한 답신으로 본인의 랜덤변수를 보낸다. 이번에는 암호화 되지 않은 랜덤변수이다. 즉 실질적인 정보교환이 한 방향으로 일어난다.
- 4단계. 암호화된 변수를 해독하는 키 전달 : 답신을 받은 참여자는 암호화 된 변수를 해독하는 키를 전달한다. 키를 받은 참여자는 미리 받은 암호화 된 변수를 해독함으로서 상대방의 변수를 얻게 된다. 이 단계에서 서로간의 정보교환이 마무리된다. 예를 들어 A, B, C 참여자중 A가 4단계에서 해독 키를 B와 C에게 보내주지않고 통신을 끊어버린다면 A만 최종 랜덤 변수를 계산할 수 있게된다. 하지만 코인토싱 프로토콜을 사용했기 때문에 B와 C가 1단계에서 받았던 A의 조각을 합치면 A의 변수를 복원할 수 있다. 즉 A가 4단계에서 배신한다 하더라도 B와 C는 A의 변수를 얻을 수 있다.
- 5단계. 모두의 랜덤변수를 바탕으로 최종 변수 계산 : 정보교환이 마무리 되면, 네트워크 구성원들은 각자 최종 변수를 계산할 수 있게된다. 누구도 최종 변수를 마음대로 조작할 수 없고, 남들보다 빠르게 최종 변수값을 얻을 수 없다. 즉 완전무결한 랜덤변수가 공정하게 생성된 것이다.
- 예를들어, 네트워크 참여자는 앨리스, 밥, 찰리가 있고, 그 중 앨리스가 악의를 가진다.
- 랜덤 변수(R) 생성 프로토콜(코인 토싱)이다. 스텝 1: Phase 1, 스텝 2&3: Phase 2, 스텝 4&5(앨리스의 배신): Phase 3이다. 앨리스, 밥, 찰리는 모두 생성한 랜덤 변수의 조각을 생성해 서로 교환하고, 앨리스는 본인의 조각을 조작할 수 없으며, 조작할 경우 앨리스는 스텝 1을 넘어가지 못한다. 앨리스는 밥과 찰리에게 암호화 시킨 랜덤 변수를 전달하여, 찰리는 밥에게 암호화 시킨 랜덤 변수를 전달할 것이다. 밥과 찰리는 앨리스에게 본인의 랜덤 변수를 보내어, 밥은 찰리에게 본인의 랜덤 변수를 보낸다. 앨리스는 본인의 해독 키를 밥과 찰리에게 보내고, 찰리는 본인의 해독 키를 밥에게 보낸다. 밥과 찰리도 앨리스의 랜덤 변수를 얻을 것이고, 밥도 찰리의 랜덤 변수를 얻을 것이다. 결과적으로 모두가 상대방의 랜덤 변수를 알게된다. 만약 앨리스가 스텝 4에서 배신했다고 가정해 보면, 해독 키를 밥과 찰리에게 보내주지 않고 통신을 끊어버리고, 앨리스만 모든 랜덤 변수를 얻게 되어, 본인만 최종 랜덤 변수를 계산할 수 있게 된다. 그렇더라도 코인 토싱 프로토콜을 사용한 것이다. 위의 경우 밥과 찰리는 스텝 1에서 받았던 앨리스의 조각을 서로 교환하여, 조각을 합치면 앨리스의 변수를 복원할 수 있게된다. 따라서 앨리스가 스텝 4에서 배신하더라도, 밥과 찰리는 앨리스의 변수를 얻을 수 있고, 이 복원 가능성은 51%의 참여자는 선의를 갖는다는 가정에 의해 증명된다.[2]
각주
- ↑ keepit, 〈KEEP!T 블록체인 상식사전〉, 《스팀잇》, 2019-08-14
- ↑ seungjae1012, 〈카르다노(Cardano, ADA) 탐구: 지분 증명(POS)의 한계와 우로보로스(Ouroboros)〉, 《스팀잇》, 2018-06-14
참고자료
- 〈카르다노 백서〉
- keepit, 〈KEEP!T 블록체인 상식사전〉, 《스팀잇》, 2018-08-14
- seungjae1012, 〈카르다노(Cardano, ADA) 탐구: 지분 증명(POS)의 한계와 우로보로스(Ouroboros)〉, 《스팀잇》, 2018-06-14
- 소소대담, 〈에이다(카르다노), 우로보로스, 이오스, 넴, 멀티시그〉, 《네이버 블로그》, 2018-07-18