지분 증명(PoS) 이더리움에서의 재구성 게임
카스파르 슈바르츠-실링(Caspar Schwarz-Schilling)이 지분 증명(PoS) 이더리움의 블록 재구성 공격에 대한 연구를 발표하며, 공격 벡터, 방어 메커니즘 및 프로토콜 수준의 완화 방법을 다룹니다.
Date published: 2022년 11월 29일
이 발표는 지분 증명(PoS) 이더리움에서 가능한 블록 재구성 유형과 이를 방지하기 위해 설계된 완화 방법을 탐구합니다. 이더리움 재단의 강력한 인센티브 그룹(Robust Incentives Group) 연구원인 카스파르 슈바르츠-실링은 사후(ex-post) 및 사전(ex-ante) 재구성의 메커니즘을 살펴보고, 작업증명(PoW)과 지분 증명(PoS) 간의 보안 환경을 비교합니다.
이 대본은 리스콘이 게시한 원본 비디오 대본 (opens in a new tab)의 접근성 향상 버전입니다. 가독성을 위해 약간 편집되었습니다.
소개 및 배경 (0:03)
환영합니다. 오늘 저는 지분 증명(PoS) 이더리움에서 가능한 재구성에 대해 이야기하려고 합니다.
저는 최근 이더리움 재단, 특히 강력한 인센티브 그룹에 합류했습니다. 기본적으로 저희는 인센티브와 관련된 모든 것에 초점을 맞춘 연구 팀입니다. 발표 내용이 많으므로 짧게 줄이겠습니다. 저희 작업의 대부분은 GitHub에서 찾을 수 있습니다.
두 가지 유형의 재구성 (0:44)
오늘 저는 재구성에 대해 이야기하고 싶으며, 특히 지분 증명(PoS) 이더리움 영역에서 가능한 두 가지 다른 유형의 재구성을 간략히 설명하고자 합니다.
한편으로는 사후(ex-post) 재구성이 있고, 다른 한편으로는 사전(ex-ante) 재구성이 있습니다. 약간 허세 부리는 듯한 라틴어 명칭을 용서해 주시기 바랍니다. 하지만 의미를 전달하는 데는 효과적입니다.
사후 재구성은 우리가 재구성에 대해 이야기할 때 보통 생각하는 것입니다. 공격자는 블록을 보고, 그것이 가치 있다면 재구성을 시도하고 싶어 할 수 있습니다. 여기 다이어그램을 보면 블록 N+1이 공격자가 재구성하여 밀어내고자 하는 블록입니다. 동일한 부모 블록 N을 기반으로 구축하여 성공한다면, 블록 N+3은 블록 N+2 위에 구축됩니다. 이는 평소와 다름없는 방식입니다.
반면 사전 재구성은 약간 다릅니다. 핵심은 공격자가 어떤 블록을 재구성하여 밀어낼지 알기도 전에 공격을 시작해야 한다는 것입니다. 대략적으로 어떻게 작동할까요? 아주 큰 틀에서 보면, 블록 N+1은 N 위에 구축되지만 즉시 공개되지 않습니다. 정직한 노드들은 N+1이 존재하는지조차 모르기 때문에 계속해서 N 위에 구축할 것입니다. 그런 다음 어떤 메커니즘을 통해 N+1이 공개되고, N+3은 N+1이 앞서고 있다고 판단하여 그 위에 구축될 수 있으며, 결과적으로 N+2가 실제로 재구성되어 밀려나게 됩니다.
왜 이런 종류의 재구성을 하려는지 궁금할 수 있습니다. 글쎄요, 여전히 확보할 수 있는 MEV가 있습니다. 운이 좋다면 블록 N+2에 많은 MEV가 있을 수 있으며, 그 블록이 무엇이든 복사해서 붙여넣기만 하면 이를 확보할 수 있습니다. 최악의 경우라도 기본적으로 두 슬롯 분량의 트랜잭션을 수신할 수 있습니다.
작업증명(PoW)에서의 사후 재구성 (2:49)
이 발표의 주요 주제인 사전 재구성에 대해 깊이 알아보기 전에, 사후 재구성을 간단히 요약하고 특히 작업증명(PoW) 컨텍스트부터 시작하겠습니다.
기본적으로 이는 익숙한 인물들인 게오르기오스(Georgios)와 비탈릭(Vitalik)의 블로그 게시물을 요약한 것입니다. 꼭 한번 읽어보시길 바랍니다. 아주 훌륭합니다.
간단히 말해, 작업증명(PoW) 이더리움에서 사후 재구성은 어렵지만 불가능한 것은 아닙니다. 10%의 해시레이트를 가진 채굴자는 연속으로 몇 개의 블록을 채굴할 가능성이 비교적 높으며, 인센티브가 충분히 높다면(예를 들어 확보할 수 있는 100 ETH 가치의 MEV가 있는 블록이 하나 있다고 가정해 보십시오), 1%의 성공률만으로도 재구성을 시도할 가치가 충분할 수 있습니다.
지분 증명(PoS)에서의 사후 재구성 (3:39)
지분 증명(PoS)에서는 상황이 완전히 다릅니다. 터무니없이 많은 양의 스테이크가 필요합니다. 이것이 얼마나 말도 안 되게 어려운 일인지 강조하기 위해, 누군가 이를 어떻게 시도할 수 있는지 설명해 드리겠습니다.
먼저 몇 가지 기본 사항을 말씀드리겠습니다. 지분 증명(PoS) 이더리움에서 시간은 슬롯 단위로 진행됩니다. 각 슬롯은 12초입니다. 각 슬롯에는 두 가지 역할이 있습니다. 정확히 한 명의 제안자가 있고, P2P 계층에서 수신한 블록을 증명해야 하는 수천 명의 증명자로 구성된 위원회가 있습니다. 이들은 포크 선택을 실행하여 체인의 헤드를 결정하는데, 이는 기본적으로 블록 트리를 입력으로 받아 체인의 헤드를 반환하는 함수입니다.
유효한 블록을 수신하거나 슬롯이 시작된 지 4초가 지났을 때 중 먼저 도래하는 시점에 블록을 증명해야 합니다. 따라서 어떤 이유로 블록 N+1의 제안자가 오프라인 상태이고 슬롯 시작 후 4초가 지나도 블록이 없다면, 블록 N을 증명합니다. 제때 수신한다면 블록 N+1을 증명합니다. 간단합니다.
이 모든 증명은 블록에 가중치를 부여하며, 이 가중치는 포크 선택에서 최신 헤드가 무엇인지 결정하는 데 사용됩니다.
이제 1-블록 재구성을 살펴보겠습니다. 처음에는 모든 것이 평소와 같습니다. 공격자를 포함한 모든 사람이 블록 N을 증명합니다. 그런 다음 N+1이 N 위에 구축되고, 공격자는 자신이 재구성하여 밀어내려는 블록에 가중치를 주고 싶지 않기 때문에 대신 블록 N을 증명합니다. 공격자가 위원회의 3분의 2를 차지하고 있기 때문에 블록 N은 많은 가중치를 얻게 됩니다. 이는 대략적으로 전체 스테이크의 3분의 2를 통제해야 함을 의미합니다.
정직한 사람들의 3분의 1은 N+1을 증명했고, 3분의 2는 N을 증명했습니다. 이제 블록 N+2가 나옵니다. 당연히 공격자는 이를 N 위에 구축하고 자신의 블록을 증명합니다. 정직한 검증자의 관점에서 볼 때, N+1과 N+2 모두 블록 N의 전체 가중치를 상속받지만 N+1에는 N+2에 없는 3분의 1의 증명이 추가로 있기 때문에 가중치 측면에서 N+1이 여전히 앞서고 있습니다.
이를 합산해 보면, 블록 N+1은 3분의 1 더하기 3분의 1, 즉 3분의 2에 해당하는 증명을 가지고 있으며, 블록 N+2 역시 3분의 2를 가지고 있습니다. 단순화를 위해 동점 상황에서 공격자에게 유리하게 판정된다고 가정해 보겠습니다. 그러면 N+3은 N+2가 앞서고 있다고 보고 그 위에 구축될 것입니다.
이러한 가정이 얼마나 터무니없는지 감을 잡으실 수 있도록 말씀드리자면, 65%의 지분을 가진 스테이커라 하더라도 특정 슬롯에서 위원회의 3분의 2를 통제할 확률은 0.05%에 불과합니다. 이는 병렬 증명의 힘이 실재함을 보여줍니다. 지분 증명(PoS) 이더리움에서 사후 재구성은 사실상 불가능하지는 않더라도 믿을 수 없을 정도로 어렵습니다.
사전 재구성 공격 메커니즘 (7:34)
이제 사전 재구성에 대해 이야기하겠습니다. 이 공격은 노이더(Neuder) 등의 논문을 기반으로 합니다. 저희는 최근 이 공격을 크게 개선했습니다. 또한 이에 대한 논문을 작성하여 제때 arXiv에 업로드할 수 있었습니다.
미리 말씀드리지만, 걱정하지 마십시오. 완화 방법이 있습니다. 머지(The Merge) 전에 병합될 것입니다.
사전 재구성 공격은 어떻게 작동할까요? 처음에는 블록 N이 평소와 같이 진행되며 모든 사람이 이를 증명합니다. 이제 여러분이 N+1의 제안자라고 가정해 보겠습니다. 여러분은 이를 제안하고 단일 검증자를 통해 비공개로 증명합니다. 중요한 점은 이를 비공개로 유지한다는 것입니다. 즉, 공개하지 않고 P2P 계층에 전파하지도 않습니다.
그러면 정직한 사람들은 블록 N+1을 보지 못하므로 블록 N을 증명하게 됩니다. 이것이 바로 속임수입니다. 여러분은 그 가중치를 상속받으며 실제로 그들과 싸울 필요가 없습니다.
잠시 지연 시간이 없다고 가정해 보겠습니다. 슬롯 N+2에서 공격자인 우리가 하는 일은 블록 N+1과 비공개 증명을 동시에 공개하는 것입니다. 슬롯 N+2의 정직한 검증자들은 블록을 증명해야 합니다. 그들의 관점에서는 블록 N+2와 하나의 비공개 증명이 포함된 블록 N+1을 보게 됩니다. 포크 선택을 실행하면 N+1에는 N+2에 없는 비공개 증명이 있기 때문에 블록 N+1이 블록 N+2보다 더 많은 가중치를 가진다는 것을 알게 될 것입니다. 심지어 모든 정직한 검증자들도 실제로 블록 N+1을 증명하게 됩니다. 슬롯 N+3에서는 당연히 N+1이 체인의 헤드로 간주될 것입니다.
네트워크 지연 시간과 공격 (10:25)
저는 지연 시간이 없다고 가정했지만, 실제로는 그렇지 않습니다. 지연 시간이 존재하며, P2P 계층에서 블록과 메시지를 전파하는 데는 시간이 걸립니다.
공격자가 여전히 이러한 종류의 공격을 성공시킬 수 있는 방법은 P2P 토폴로지의 다양한 위치에 많은 노드를 배치하는 것입니다. 슬롯 N+2의 정직한 제안자가 해당 블록을 제안할 때, 여러분은 전파 과정의 아주 초기 단계에서 이를 수신합니다. 결과적으로, 대다수가 블록 N+2에 대해 듣기 전에 블록 N+1에 대해 들을 수 있도록 이 모든 다양한 위치에서 비공개 블록을 공개할 수 있습니다. 즉, 그들은 블록 N+1이 가중치에서 앞서고 있다고 보고 실제로 이를 증명하게 됩니다.
여기서 일어나는 일을 다시 강조하자면, 단일 증명자를 가진 제안자가 1-블록 재구성을 성공시키는 것입니다. 최소한으로 말해도 이상적인 상황은 아닙니다.
더 긴 재구성을 위한 균형 전략 (11:42)
더 정교하게 하고 싶다면, 균형 전략을 사용하여 더 긴 재구성을 성공시킬 수 있습니다. 핵심은 정직한 위원회를 체인에 대한 서로 다른 관점으로 분할하는 것입니다.
정직한 노드의 대략 절반이 블록 N+2에 대해 듣기 전에 여러분의 비공개 블록과 증명에 대해 듣도록 비공개 블록을 공개합니다. 그러면 그들은 여러분의 블록을 증명하게 됩니다. 나머지 절반은 그들이 N+2를 증명하기 전에 여러분의 블록을 듣지 못하게 해야 합니다.
이제 정직한 위원회의 절반은 N+1을 증명하고 나머지 절반은 N+2를 증명하게 됩니다. 이것이 어떻게 도움이 될까요? 정직한 위원회는 이제 서로 상쇄되며, 공격자인 여러분은 그들과 싸울 필요조차 없습니다. 이는 기본적으로 공격자의 꿈이 실현되는 것입니다.
다이어그램을 살펴보겠습니다. 블록 N은 평소와 같고, 블록 N+1도 마찬가지로 공개하지 않습니다. 정직한 검증자들은 블록 N을 증명합니다. 블록 N+2가 나타나면 여러분은 이를 일찍 수신하고, 정직한 위원회의 절반은 그 전에, 나머지 절반은 그 후에 보도록 하나의 증명(캐스팅 보트 역할)과 함께 블록 N+1을 공개합니다. 절반은 N+1에 투표하고 나머지 절반은 N+2에 투표합니다. 실제로는 N+2가 하나의 증명을 더 가지도록 1표 차이로 분할되기를 원할 것입니다. 그래야 N+3이 N+2 위에 구축되고 재구성이 계속 진행되기 때문입니다.
2-블록 재구성을 마무리하려면 다음과 같이 합니다. 블록 N+3이 제안되면 이를 일찍 수신하고, 블록 N+1과 남은 두 개의 증명을 공개하여 P2P 계층에 플러딩(flooding)합니다. 그러면 대다수의 정직한 사람들이 블록 N+1에 투표하게 되어, N+1이 블록 N+3보다 더 많은 가중치를 가지게 되고 N+4는 N+1 위에 구축됩니다.
생각해 보면, 이러한 가정 하에서 이러한 재구성을 수행하는 것은 비교적 비용이 적게 듭니다. 완벽하게 분할하지 못하더라도 P2P 계층이 매우 크기 때문에, 공격 비용이 위원회 크기의 제곱근에 비례하여 증가하도록 목표로 삼을 수 있는 확률 분포를 가지게 됩니다.
제안자 부스트 완화 방법 (15:17)
완화 방법에 대해 이야기해 보겠습니다. 기본 아이디어는 무엇일까요? 제안자에게 조금 더 많은 권한을 부여하는 것입니다. 유효한 블록이 제때 도착하면, 해당 슬롯이 지속되는 동안 이 블록의 가중치를 높여줍니다(부스트). 해당 슬롯이 끝나면 일반적인 엘엠디 고스트(LMD GHOST) 점수를 재개하여 평소와 같이 진행합니다.
따라서 블록 N+2가 제때 제안되고 유효하다면, 이 블록은 부스트를 받게 됩니다. 예를 들어 위원회 크기의 80%라고 가정해 보겠습니다. 이제 공격자의 이 작고 귀여운 N+1 증명은 효과가 없을 것입니다. 절대 불가능합니다.
균형을 맞추는 작업도 더 이상 작동하지 않습니다. 50대 50으로 분할하더라도 부스트가 항상 한쪽으로 기울게 만들기 때문입니다. 50대 50 분할을 유지할 방법이 없습니다.
핵심은 이 완화 방법이 적용되면, 공격자의 증명이 정직한 검증자들이 자신의 입맛에 맞게 투표하도록 설득하기 위해 부스트와 경쟁해야 한다는 것입니다. 이는 균형 전략을 무력화하고 기본적으로 모든 재구성을 완전히 금지합니다. 좋은 소식은 열려 있는 PR이 있다는 것이며, 기본적으로 머지(The Merge) 전에 병합될 것입니다.
주요 시사점 (16:48)
몇 가지 주요 시사점입니다. 저는 사후 재구성과 사전 재구성의 차이점에 대해 이야기했습니다. 작업증명(PoW)과 지분 증명(PoS)에서의 재구성에 대한 서로 다른 환경을 간략하게 설명했습니다. 사전 재구성을 성공시키는 방법을 보여드렸지만, 더 중요한 것은 이를 해결하는 방법도 보여드렸다는 것입니다.
이에 관심이 있으시다면, 훨씬 더 상세하고 미묘한 차이를 다루는 논문이 있습니다. 슬라이드도 업로드될 예정입니다. 관심이 있으시면 저에게 와서 이야기해 주시고, 트위터에서도 저를 찾으실 수 있습니다.
흥미로운 시간이 되셨기를 바랍니다. 대단히 감사합니다.