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

"우로보로스 지분증명"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
잔글 (같이 보기)
 
(사용자 2명의 중간 판 4개는 보이지 않습니다)
1번째 줄: 1번째 줄:
 
[[파일:Ouroboros.png|오른쪽|썸네일|250픽셀|'''우로보로스'''(Ouroboros) 그림 (1478년)]]
 
[[파일:Ouroboros.png|오른쪽|썸네일|250픽셀|'''우로보로스'''(Ouroboros) 그림 (1478년)]]
 +
 
'''우로보로스 지분증명'''('''OPoS''', Ouroboros PoS, Ouroboros Proof of Stake)은 기존 [[지분증명]](PoS) 방식의 문제점인 [[그라인딩 공격]](Grinding Attack)을 방어하기 위해 [[코인토싱]]<!--코인 토싱-->(coin tossing) 프로토콜을 사용하여 만든 [[합의 알고리즘]]이다.<ref name="승재">seungjae1012, 〈[https://steemit.com/coinkorea/@seungjae1012/cardano-ada-pos-ouroboros 카르다노(Cardano, ADA) 탐구: 지분 증명(POS)의 한계와 우로보로스(Ouroboros)]〉, 《스팀잇》, 2018년 2월</ref> '''오포스'''라고도 읽는다. [[찰스 호스킨슨]]이 만든 [[카르다노]] 플랫폼 위에서 작동하는 암호화폐인 [[에이다]]가 이 방식을 사용하고 있다.
 
'''우로보로스 지분증명'''('''OPoS''', Ouroboros PoS, Ouroboros Proof of Stake)은 기존 [[지분증명]](PoS) 방식의 문제점인 [[그라인딩 공격]](Grinding Attack)을 방어하기 위해 [[코인토싱]]<!--코인 토싱-->(coin tossing) 프로토콜을 사용하여 만든 [[합의 알고리즘]]이다.<ref name="승재">seungjae1012, 〈[https://steemit.com/coinkorea/@seungjae1012/cardano-ada-pos-ouroboros 카르다노(Cardano, ADA) 탐구: 지분 증명(POS)의 한계와 우로보로스(Ouroboros)]〉, 《스팀잇》, 2018년 2월</ref> '''오포스'''라고도 읽는다. [[찰스 호스킨슨]]이 만든 [[카르다노]] 플랫폼 위에서 작동하는 암호화폐인 [[에이다]]가 이 방식을 사용하고 있다.
  
21번째 줄: 22번째 줄:
  
 
==특징==
 
==특징==
===코인토싱 프로토콜===
+
* '''코인토싱 프로토콜'''
기존 지분증명 방식의 한계점은 랜덤 변수 생성의 조작이다. 카르다노는 [[코인토싱 프로토콜]](Coin Tossing Protocol)을 인용하여 이를 합의 알고리즘에 적용한다.<ref>강철의기술사, 〈[https://needjarvis.tistory.com/332 카르다노 플랫폼과 에이다(ADA) 코인]〉, 《티스토리》, 2019-01-18</ref> 코인토싱 프로토콜의 목적은 간단하다. 추첨을 위한 랜덤 변수를 조작하는 것을 불가능하게 하는 것이다. 간단히 말해, [[네트워크]] 구성원 모두가 랜덤 변수 생성에 참여하게 만드는 것이다. 랜덤 변수 생성에 모두가 참여한다면 개인이 조작할 수 있는 여지는 줄어들게 된다. 조작된 변수에 랜덤을 더하면 랜덤이 나오기 때문이다.<ref name="소담">소소대담, 〈[https://blog.naver.com/cristinasoyu/221321670652 에이다(카르다노), 우로보로스, 이오스, 넴, 멀티시그]〉, 《네이버 블로그》, 2018-07-18</ref>
+
: 기존 지분증명 방식의 한계점은 랜덤 변수 생성의 조작이다. 카르다노는 [[코인토싱 프로토콜]](Coin Tossing Protocol)을 인용하여 이를 합의 알고리즘에 적용한다.<ref>강철의기술사, 〈[https://needjarvis.tistory.com/332 카르다노 플랫폼과 에이다(ADA) 코인]〉, 《티스토리》, 2019-01-18</ref> 코인토싱 프로토콜의 목적은 간단하다. 추첨을 위한 랜덤 변수를 조작하는 것을 불가능하게 하는 것이다. 간단히 말해, [[네트워크]] 구성원 모두가 랜덤 변수 생성에 참여하게 만드는 것이다. 랜덤 변수 생성에 모두가 참여한다면 개인이 조작할 수 있는 여지는 줄어들게 된다. 조작된 변수에 랜덤을 더하면 랜덤이 나오기 때문이다.<ref name="소담">소소대담, 〈[https://blog.naver.com/cristinasoyu/221321670652 에이다(카르다노), 우로보로스, 이오스, 넴, 멀티시그]〉, 《네이버 블로그》, 2018-07-18</ref>
  
* '''가정''' : 추첨을 위한 랜덤 변수를 조작하는 것을 불가능하게 만들기 위해서는 가정이 필요하다. 랜덤 변수 생성 참여자 51% 이상이 선의를 가지고 있다는 것이다. 이는 억지스러워 보이지만 사실 합리적인면도 없지 않아 있다. 어차피 51% 이상이 악의를 가진다면 변수가 랜덤이든 조작이든 전체 합의 알고리즘은 무너지기 때문이다.  
+
# '''가정''' : 추첨을 위한 랜덤 변수를 조작하는 것을 불가능하게 만들기 위해서는 가정이 필요하다. 랜덤 변수 생성 참여자 51% 이상이 선의를 가지고 있다는 것이다. 이는 억지스러워 보이지만 사실 합리적인면도 없지 않아 있다. 어차피 51% 이상이 악의를 가진다면 변수가 랜덤이든 조작이든 전체 합의 알고리즘은 무너지기 때문이다.  
* '''랜덤변수 생성, 조각을 네트워크에 전달''' : 참여자는 각각 나름의 방법으로 랜덤 변수를 생성하고 이를 나머지 네트워크 구성자의 수에 맞게 조각낸다.<ref name="야메"></ref> 이후 랜덤 변수의 조각을 각각의 구성원에게 전달한다. 특정 참여자의 조각 중 과반수를 모으면 그 참여자가 생성한 랜덤 변수를 항상 복원할 수 있다. 이 복원 가능성은 조작이 불가능하다.<ref name="소담"></ref>
+
# '''랜덤변수 생성, 조각을 네트워크에 전달''' : 참여자는 각각 나름의 방법으로 랜덤 변수를 생성하고 이를 나머지 네트워크 구성자의 수에 맞게 조각낸다.<ref name="야메"></ref> 이후 랜덤 변수의 조각을 각각의 구성원에게 전달한다. 특정 참여자의 조각 중 과반수를 모으면 그 참여자가 생성한 랜덤 변수를 항상 복원할 수 있다. 이 복원 가능성은 조작이 불가능하다.<ref name="소담"></ref>
* '''랜덤 변수를 암호화시켜 전달''' : 모두가 조각을 전달받으면 코인 토싱이 시작된다. 시작은 랜덤 변수를 암호화시켜 전달하는 것이다. 이때는 아무 정보의 교환도 일어나지 않는다. 정보 교환을 위해 전화를 걸었다고 생각하면 이해가 쉽다.
+
# '''랜덤 변수를 암호화시켜 전달''' : 모두가 조각을 전달받으면 코인 토싱이 시작된다. 시작은 랜덤 변수를 암호화시켜 전달하는 것이다. 이때는 아무 정보의 교환도 일어나지 않는다. 정보 교환을 위해 전화를 걸었다고 생각하면 이해가 쉽다.
* '''본인의 랜덤 변수를 전달''' : 암호화 시킨 랜덤 변수를 전달 받은 사람은 그에 대한 답으로 본인의 랜덤 변수를 보낸다. 이때는 암호화 되지 않은 진짜 랜덤 변수를 보내야 한다. 실질적인 정보 교환이 한 방향으로 일어난다.
+
# '''본인의 랜덤 변수를 전달''' : 암호화 시킨 랜덤 변수를 전달 받은 사람은 그에 대한 답으로 본인의 랜덤 변수를 보낸다. 이때는 암호화 되지 않은 진짜 랜덤 변수를 보내야 한다. 실질적인 정보 교환이 한 방향으로 일어난다.
* '''암호화 된 변수를 해독하는 키 전달''' : 답을 받은 사람은 암호화 된 변수를 해독하는 키를 전달한다. 키를 받은 사람은 미리 받은 암호화 된 변수를 해독함으로써 상대방의 변수를 얻게 되고 정보 교환이 마무리된다.<ref name="승재"></ref>
+
# '''암호화 된 변수를 해독하는 키 전달''' : 답을 받은 사람은 암호화 된 변수를 해독하는 키를 전달한다. 키를 받은 사람은 미리 받은 암호화 된 변수를 해독함으로써 상대방의 변수를 얻게 되고 정보 교환이 마무리된다.<ref name="승재"></ref>
* '''모두의 랜덤변수를 바탕으로 최종 변수 계산''' : 정보 교환이 마무리되면, 네트워크 구성원들은 각자 최종 변수를 계산할 수 있게 된다.<ref name="소담"></ref> 누구도 최종 변수를 마음대로 조작할 수 없으며 남들보다 빠르게 그 값을 얻을 수 없다.<ref name="야메"></ref> 완전무결한 랜덤 변수가 공정하게 생성된 것이다.
+
# '''모두의 랜덤변수를 바탕으로 최종 변수 계산''' : 정보 교환이 마무리되면, 네트워크 구성원들은 각자 최종 변수를 계산할 수 있게 된다.<ref name="소담"></ref> 누구도 최종 변수를 마음대로 조작할 수 없으며 남들보다 빠르게 그 값을 얻을 수 없다.<ref name="야메"></ref> 완전무결한 랜덤 변수가 공정하게 생성된 것이다.
  
 
{{각주}}
 
{{각주}}
44번째 줄: 45번째 줄:
 
* [[합의 알고리즘]]
 
* [[합의 알고리즘]]
 
* [[지분증명]]
 
* [[지분증명]]
* [[에이다]]
+
* [[카르다노]]
 
* [[코인토싱]]
 
* [[코인토싱]]
 
* [[아겔로스 키아이아스]]
 
* [[아겔로스 키아이아스]]
 
* [[찰스 호스킨슨]]
 
* [[찰스 호스킨슨]]
 +
* [[우로보로스]]
  
{{알고리즘|토막글}}
+
{{합의 알고리즘|검토 필요}}
 
 
[[분류:합의 알고리즘]]
 

2020년 6월 15일 (월) 16:37 기준 최신판

우로보로스(Ouroboros) 그림 (1478년)

우로보로스 지분증명(OPoS, Ouroboros PoS, Ouroboros Proof of Stake)은 기존 지분증명(PoS) 방식의 문제점인 그라인딩 공격(Grinding Attack)을 방어하기 위해 코인토싱(coin tossing) 프로토콜을 사용하여 만든 합의 알고리즘이다.[1] 오포스라고도 읽는다. 찰스 호스킨슨이 만든 카르다노 플랫폼 위에서 작동하는 암호화폐인 에이다가 이 방식을 사용하고 있다.

개요[편집]

우로보로스(ουροβóρος)는 고대 그리스 신화에서 자기 꼬리를 입에 물고 있는 큰 뱀으로서, 무한(∞) 또는 영원을 나타내는 상징적 동물이다. 우로보로스는 기존 지분증명(PoS) 방식의 문제점인 한 사람이 다수의 코인을 보유함으로써 발생할 수 있는 문제점을 극복하고자 한다. 우로보로스는 소수에 의한 지분 독점을 막기 위해 지분증명 방식에 랜덤성(randomness)을 추가하여 자격요건을 충족한 대표가 임의로 선정되어 블록을 검증·생성하는 방식이다.

우로보로스에는 에픽(Epochs)과 슬롯(Slot)이 있다. 에픽은 다수의 슬롯으로 구성되어 있으며, 각 슬롯별로 대표가 선정되는데, 각 슬롯마다 선정된 대표는 슬롯 내 최대 1개의 블록을 생성할 수 있다. 슬롯 대표의 자격을 얻으려면 에이다를 정해진 기준 수량 이상으로 보유해야 한다. 지분 독점을 막기 위해 일정한 자격요건을 충족한 후보자들 가운데 임의로 대표자가 선정된다. 임의의 숫자 하나를 지정해 그 숫자에 지정된 후보가 대표자가 되는 것이다.[2] 즉, 우로보로스는 지분증명 방식의 장점을 유지하면서, 소수에 의한 지분 독점을 막기 위해 임의로 대표를 선출하는 방식을 사용하고 있다.

우로보로스는 해시 코드를 사용할 필요가 없기 때문에 채굴 기능을 제거했다. 블록체인 확장성에 장애물이 되고 에너지 소비가 많은 작업증명 방식의 채굴 기능을 제거함으로써 더 많은 사용자들을 끌어들일 수 있다. IOHK 팀의 수석과학자이자 에딘버러 대학교 교수인 아겔로스 키아이아스(Aggelos Kiayias)가 설계한 우로보로스는 수학적으로 안전성이 입증된 최초의 지분증명 프로토콜이다. 우로보로스는 세계적인 암호학 컨퍼런스인 크립토 2017(Crypto 2017)에서도 채택되어 학술적으로 그 안전성을 입증받은 블록체인 플랫폼이다.

우로보로스는 많은 프로토콜이 조합될 수 있도록 모듈화되고 유연하게 설계되어 있다. 우로보로스가 보여주는 보안 수준은 비트코인 블록체인의 보안 수준과도 견줄 만하다. 이러한 모듈 방식은 위임, 사이드체인, 구독 가능한 체크포인트, 경량 클라이언트를 위한 더 나은 구조, 다른 형태의 난수 생성, 심지어 다른 동기화에 대한 가정과 같은 것들을 가능하게 했다.[3] 수천수백 만 그리고 수십억 명의 사용자가 참여하는 거대한 네트워크로 확장되면, 프로토콜의 합의 알고리즘 역시 변화할 것이다. 그렇기 때문에 이러한 변화를 수용하고 암호화폐의 미래에 대비할 수 있는 충분한 유연성을 확보하는 것이 중요하다.[3]

역사[편집]

지분증명은 작업증명의 대부분을 성공적으로 대응시켰지만, 가장 중요한 해시문제의 공정함을 만족시키지 못했다. 작업증명 방식에서 해시문제는 특정한 인물이 출제하는 것이 아니다. 새로운 블록이 생성되고, 새로운 트랜잭션이 발생하면 그 두 정보를 가지고 모두가 자유롭게 해시문제를 출제한다. 이러한 방식으로 스스로 출제한 문제를 풀어 답을 내면 그 뒤에 블록을 이어붙이는 것이다. 즉 모든 채굴자가 출제자이자 수험생이기 때문에 공정한 경쟁 구조를 갖는다.

이와 반대로 지분증명 방식에서는 확률에 따라 다음 블록의 생성자를 추첨한다. 이때 누가 다음 블록 생성자를 추첨할지에 대한 문제가 발생한다. 비트코인처럼 새로운 블록 정보와 트랜잭션을 가지고 랜덤 변수를 계산할 수도 없다. 마지막 블록 생성자에 의해 조작될 가능성이 있기 때문이다. 마지막 블록 생성자는 블록을 이어붙이기 전에 랜덤 변수를 미리 계산해볼 수 있다.[4] 따라서 본인의 기호에 따라 랜덤 변수를 조작할 수 있게 되는 문제점이 발생한다.

이러한 조작을 스테이크 그라인드 공격(Stake-Grind Attack)이라 한다. 현재 지분증명 기반의 코인들은 블록의 정보를 바탕으로 랜덤변수를 계산한다. 따라서 마지막 블록 생성자가 미리 이 랜덤변수를 계산하고, 포함할 트랜잭션을 임의로 뺐다 끼우면서 변수를 조작할 수 있다.[1] 주어진 블록 생성시간동안 랜덤 변수를 조작하여 본인의 파이를 키우는 것이다.

사실 현재 운영되고 있는 지분증명 방식의 코인들은 대부분 이 문제를 안고 있다. 단편적인 시각에서 엄청난 결함은 아니지만 결국 큰 수의 법칙으로 수렴하기 때문에 이 시스템이 공정성을 가지고 있다고 하기 어렵다. 게다가 그라인딩 공격이 악용될 경우 이중지불 공격까지 이어질 수 있기 때문에 꼭 보완되어야 하는 문제이다.

특징[편집]

  • 코인토싱 프로토콜
기존 지분증명 방식의 한계점은 랜덤 변수 생성의 조작이다. 카르다노는 코인토싱 프로토콜(Coin Tossing Protocol)을 인용하여 이를 합의 알고리즘에 적용한다.[5] 코인토싱 프로토콜의 목적은 간단하다. 추첨을 위한 랜덤 변수를 조작하는 것을 불가능하게 하는 것이다. 간단히 말해, 네트워크 구성원 모두가 랜덤 변수 생성에 참여하게 만드는 것이다. 랜덤 변수 생성에 모두가 참여한다면 개인이 조작할 수 있는 여지는 줄어들게 된다. 조작된 변수에 랜덤을 더하면 랜덤이 나오기 때문이다.[6]
  1. 가정 : 추첨을 위한 랜덤 변수를 조작하는 것을 불가능하게 만들기 위해서는 가정이 필요하다. 랜덤 변수 생성 참여자 51% 이상이 선의를 가지고 있다는 것이다. 이는 억지스러워 보이지만 사실 합리적인면도 없지 않아 있다. 어차피 51% 이상이 악의를 가진다면 변수가 랜덤이든 조작이든 전체 합의 알고리즘은 무너지기 때문이다.
  2. 랜덤변수 생성, 조각을 네트워크에 전달 : 참여자는 각각 나름의 방법으로 랜덤 변수를 생성하고 이를 나머지 네트워크 구성자의 수에 맞게 조각낸다.[4] 이후 랜덤 변수의 조각을 각각의 구성원에게 전달한다. 특정 참여자의 조각 중 과반수를 모으면 그 참여자가 생성한 랜덤 변수를 항상 복원할 수 있다. 이 복원 가능성은 조작이 불가능하다.[6]
  3. 랜덤 변수를 암호화시켜 전달 : 모두가 조각을 전달받으면 코인 토싱이 시작된다. 시작은 랜덤 변수를 암호화시켜 전달하는 것이다. 이때는 아무 정보의 교환도 일어나지 않는다. 정보 교환을 위해 전화를 걸었다고 생각하면 이해가 쉽다.
  4. 본인의 랜덤 변수를 전달 : 암호화 시킨 랜덤 변수를 전달 받은 사람은 그에 대한 답으로 본인의 랜덤 변수를 보낸다. 이때는 암호화 되지 않은 진짜 랜덤 변수를 보내야 한다. 실질적인 정보 교환이 한 방향으로 일어난다.
  5. 암호화 된 변수를 해독하는 키 전달 : 답을 받은 사람은 암호화 된 변수를 해독하는 키를 전달한다. 키를 받은 사람은 미리 받은 암호화 된 변수를 해독함으로써 상대방의 변수를 얻게 되고 정보 교환이 마무리된다.[1]
  6. 모두의 랜덤변수를 바탕으로 최종 변수 계산 : 정보 교환이 마무리되면, 네트워크 구성원들은 각자 최종 변수를 계산할 수 있게 된다.[6] 누구도 최종 변수를 마음대로 조작할 수 없으며 남들보다 빠르게 그 값을 얻을 수 없다.[4] 완전무결한 랜덤 변수가 공정하게 생성된 것이다.

각주[편집]

  1. 1.0 1.1 1.2 seungjae1012, 〈카르다노(Cardano, ADA) 탐구: 지분 증명(POS)의 한계와 우로보로스(Ouroboros)〉, 《스팀잇》, 2018년 2월
  2. ICO of KOREA, 〈Cardano, 카르다노(ADA) / 블록체인 천재의 작품〉, 《ICO of Korea - 암호화폐 & ICO 전문 블로그》, 2018-06-21
  3. 3.0 3.1 코인대마왕, 〈에이다 백서〉, 《네이버 블로그》, 2018-06-22
  4. 4.0 4.1 4.2 야옹메롱, 〈(카르다노) 합의 프로토콜-작업증명, 지분증명, 그리고 우로보로스(Ouroboros)〉, 《네이버 블로그》, 2018-02-13
  5. 강철의기술사, 〈카르다노 플랫폼과 에이다(ADA) 코인〉, 《티스토리》, 2019-01-18
  6. 6.0 6.1 6.2 소소대담, 〈에이다(카르다노), 우로보로스, 이오스, 넴, 멀티시그〉, 《네이버 블로그》, 2018-07-18

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 우로보로스 지분증명 문서는 합의 알고리즘에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.