그라인딩 공격(Grinding Attack)에 대응하는 코인 토싱(Coin Tossing)은 어떤 기술인가요?
안녕하세요. 아하의 블록체인 전문가님들의 지식 나눔에 감사드립니다.
그라인딩 공격(Grinding Attack)에 대응하기 위한 기술은 코인 토싱(Coin Tossing)은 어떤 기술인지 궁금합니다.
우로보로스 합의 알고리즘을 다른 말로 OPOS(Ouroboros Proof of Stake)라고도 부릅니다. 이것은 POS 합의 알고리즘인데 카르다노 블록체인만의 특별한 무엇인가가 있다는 것을 의미합니다.
기존의 POS 합의 알고리즘의 경우는 새로운 블록 생성자를 추첨할 때 무작위 변수를 조작할 가능성이 있어 보안상 취약점(그라인딩 공격 가능성)이 있었습니다. 그런데 이러한 문제점을 카르다노 블록체인은 ‘코인 토싱(Coin Tossing/동전 던지기)’의 방법으로 해결하고 있습니다.
구체적으로 살펴 보면, 우선 유의미한 +스테이킹을 하고 있는 노드를 스테이크 홀더라고 하며 이 중에서 다음 블록을 생성하는 노드를 슬롯 리더라고 부릅니다.
우로보로스 프로토콜은 물리적 시간을 ‘에포크(Epoch)’라는 단위로 나누고 이 각각의 에포크는 다시 슬롯(Slot)으로 나뉘며 각 슬롯에는 앞서 말씀드린 단 하나의 블록을 생성할 수 있는 슬롯 리더가 존재합니다. 따라서 슬롯의 수와 슬롯 리더의 수는 일치하게 됩니다.
슬롯 리더가 블록을 생성한다고 할 때 앞서 살펴 본 일반적인 POS 체인에서는 그라인딩 공격 가능성이 있었습니다. 그런데 OPOS에서는 이러한 공격이 가능하지 않도록 한다고 할 때 슬롯 리더가 무작위로 선출될 필요가 있게 됩니다.
계속해서 슬롯 리더는 모든 스테이크 홀더 중에서 하나의 노드만 선출되며 카르다노 블록체인 상에서 많은 지분을 가진 선거인(electors)들에 의해 선출된다고 할 수 있습니다.
앞서 말씀드렸듯이 어떤 일정한 시간 단위인 에포크 안에 여러 슬롯이 존재하고 슬롯 하나당 슬롯 리더가 한 노드만 선출된다고 할 때 선거인들은 현재 에포크에서 다음 에포크로 넘어가기 전에 슬롯 리더를 선출해야만 합니다. 그리고 이때 스테이크 홀더는 한 에포크 안에서 복수의 슬롯의 리더가 되는 것도 가능합니다.
그리고 이러한 선출 과정에서 무작위성과 공정성이 담보될 필요가 있습니다. 이를 위해 슬롯 리더를 선출하는 선거인들은 다자간 계산(Multiparty Computation) 과정에서 ‘코인 토싱(Coin Tossing)’이라는 방법을 이용하게 됩니다. 그리고 코인 토싱은 정직한 다수(51%)의 노드를 전제로 합니다.
계속해서 코인 토싱의 과정에 대해 알아보자면, 우선 선거인은 무작위 값을 생성한 후 그것을 부분으로 나누어 각각 다른 선거인들에게 보냅니다. (부분을 합치면 전체가 되므로 조작 방지)
다른 선거인의 무작위 값의 부분을 전달 받은 선거인은 자신이 생성한 무작위 값을 암호화하여 다른 선거인에게 전달하게 됩니다.
그 후 다른 선거인에게 암호화된 무작위 값을 전달받은 선거인은 자신이 생성한 암호화되지 않은 무작위 값을 보냅니다.
다음으로 암호화된 무작위 값을 확인할 수 있는 오프닝을 다른 선거인에게 전달하여 암호화된 값을 복호화함으로써 다른 선거인들의 무작위 값을 확인할 수 있게 됩니다. 여기까지 누구도 다른 사람보다 무작위 값을 먼저 계산하는 것이 불가능하므로 그라인딩 공격이 발생할 수 없게 됩니다.
이렇게 각 선거인이 다른 선거인의 변수를 확인하게 되면 다시 각자 무작위 값을 계산하게 되고 이러한 무작위 값들에서 Seed 값(무작위로 생성된 문자열)을 생성하게 됩니다. 그리고 모든 선거인은 같은 Seed 값을 얻게 됩니다.
다음으로 Seed 값을 통해 선거인들은 카르다노 블록체인에 있는 많은 동전들 중에 하나를 무작위로 선택하게 되고 해당 코인을 스테이킹하고 있는 스테이크 홀더가 블록을 생성할 슬롯의 리더로 선택되게 됩니다.
결론적으로 OPOS는 무작위성, 공정성을 보장할 수 있는 코인 토싱의 과정을 거쳐 슬롯 리더를 선출함으로써 그라인딩 공격을 방지하고 합의에 도달하여 블록을 생성한다고 할 수 있습니다.
답변이 도움이 되길 바랍니다.