이더리움 지분 증명(PoS) 공격과 방어
도둑과 파괴 공작원들은 끊임없이 이더리움의 클라이언트 소프트웨어를 공격할 기회를 찾고 있습니다. 이 페이지는 이더리움의 합의 레이어에 알려진 공격 벡터를 개괄하고 이러한 공격을 방어하는 방법을 설명합니다. 이 페이지의 정보는 더 긴 버전의 글 (opens in a new tab)을 바탕으로 작성되었습니다.
전제 조건
지분 증명 (PoS)에 대한 기본적인 지식이 필요합니다. 또한 이더리움의 인센티브 레이어와 포크 선택 알고리즘인 엘엠디 고스트에 대한 기본적인 이해가 있으면 도움이 됩니다.
공격자가 원하는 것은 무엇인가요?
흔한 오해 중 하나는 성공적인 공격자가 새로운 이더를 생성하거나 임의의 계정에서 이더를 빼낼 수 있다는 것입니다. 네트워크의 모든 실행 클라이언트가 모든 트랜잭션을 실행하기 때문에 이 두 가지 모두 불가능합니다. 트랜잭션은 유효성의 기본 조건(예: 발신자의 개인 키로 서명됨, 발신자의 잔액이 충분함 등)을 충족해야 하며, 그렇지 않으면 단순히 되돌리기 처리됩니다. 공격자가 현실적으로 목표로 삼을 수 있는 결과에는 재구성, 이중 완결성, 완결성 지연이라는 세 가지 유형이 있습니다.
"재구성"은 블록을 새로운 순서로 재배열하는 것으로, 정규 체인(canonical chain)에서 블록이 추가되거나 삭제될 수 있습니다. 악의적인 재구성은 특정 블록을 포함하거나 제외시켜 이중 지불을 허용하거나 프론트러닝 및 백러닝 트랜잭션(MEV)을 통한 가치 추출을 가능하게 할 수 있습니다. 재구성은 특정 트랜잭션이 정규 체인에 포함되는 것을 막는 검열의 한 형태로도 사용될 수 있습니다. 재구성의 가장 극단적인 형태는 이전에 완결된 블록을 제거하거나 교체하는 "완결성 되돌리기(finality reversion)"입니다. 이는 공격자에 의해 전체 스테이킹된 이더의 ⅓ 이상이 파괴될 때만 가능합니다. 이러한 보장을 "경제적 완결성"이라고 하며, 이에 대해서는 나중에 자세히 설명합니다.
이중 완결성은 가능성은 낮지만 두 개의 포크가 동시에 완결되어 체인에 영구적인 분열을 일으키는 심각한 상황입니다. 이는 전체 스테이킹된 이더의 34%를 위험에 빠뜨릴 의향이 있는 공격자에게 이론적으로 가능합니다. 커뮤니티는 오프체인에서 조정하여 어느 체인을 따를지 합의해야 하며, 이를 위해서는 소셜 레이어의 강력한 결속력이 필요합니다.
완결성 지연 공격은 네트워크가 체인의 특정 구간을 완결하는 데 필요한 조건에 도달하지 못하게 합니다. 완결성이 없으면 이더리움 위에 구축된 금융 애플리케이션을 신뢰하기 어렵습니다. 완결성 지연 공격의 목적은 공격자가 전략적인 숏 포지션을 가지고 있지 않는 한, 직접적인 이익을 얻기보다는 단순히 이더리움을 방해하는 것일 가능성이 높습니다.
소셜 레이어에 대한 공격은 이더리움에 대한 대중의 신뢰를 훼손하고, 이더의 가치를 떨어뜨리며, 채택을 줄이거나 이더리움 커뮤니티를 약화시켜 대역 외(out-of-band) 조정을 더 어렵게 만드는 것을 목표로 할 수 있습니다.
적대자가 이더리움을 공격하는 이유를 확인했으므로, 다음 섹션에서는 그들이 어떻게 공격을 진행할 수 있는지 살펴봅니다.
공격 방법
레이어 0 공격
우선, (클라이언트 소프트웨어를 실행하여) 이더리움에 적극적으로 참여하지 않는 개인도 소셜 레이어(레이어 0)를 표적으로 삼아 공격할 수 있습니다. 레이어 0은 이더리움이 구축된 기반이며, 따라서 스택의 나머지 부분에 파급 효과를 미치는 공격의 잠재적 표면을 나타냅니다. 몇 가지 예는 다음과 같습니다.
-
잘못된 정보 캠페인은 이더리움의 로드맵, 개발자 팀, 앱 등에 대한 커뮤니티의 신뢰를 약화시킬 수 있습니다. 이는 네트워크 보안에 참여하려는 개인의 수를 감소시켜 탈중앙화와 암호경제적 보안을 모두 저하시킬 수 있습니다.
-
개발자 커뮤니티를 겨냥한 표적 공격 및/또는 위협. 이는 개발자의 자발적인 이탈로 이어져 이더리움의 발전을 늦출 수 있습니다.
-
지나치게 열성적인 규제 또한 참여와 채택의 동기를 급격히 떨어뜨릴 수 있으므로 레이어 0에 대한 공격으로 간주될 수 있습니다.
-
지식은 있지만 악의적인 행위자가 개발자 커뮤니티에 침투하여 사소한 논쟁(bike-shedding) 유발, 주요 결정 지연, 스팸 생성 등을 통해 진행을 늦추는 것을 목표로 하는 경우.
-
의사 결정에 영향을 미치기 위해 이더리움 생태계의 주요 인물에게 뇌물을 제공하는 행위.
이러한 공격이 특히 위험한 이유는 많은 경우 자본이나 기술적 노하우가 거의 필요하지 않기 때문입니다. 레이어 0 공격은 암호경제적 공격의 승수 역할을 할 수 있습니다. 예를 들어, 악의적인 다수 지분 보유자가 검열이나 완결성 되돌리기를 달성한 경우, 소셜 레이어를 약화시키면 대역 외에서 커뮤니티의 대응을 조정하기가 더 어려워질 수 있습니다.
레이어 0 공격을 방어하는 것은 쉽지 않겠지만, 몇 가지 기본 원칙을 세울 수 있습니다. 하나는 블로그, 디스코드 서버, 주석이 달린 사양서, 책, 팟캐스트 및 유튜브를 통해 커뮤니티의 정직한 구성원이 생성하고 전파하는 이더리움에 대한 공개 정보의 전반적인 신호 대 잡음비를 높게 유지하는 것입니다. 여기 ethereum.org에서는 정확한 정보를 유지하고 가능한 한 많은 언어로 번역하기 위해 열심히 노력하고 있습니다. 고품질 정보와 밈으로 공간을 채우는 것은 잘못된 정보에 대한 효과적인 방어책입니다.
소셜 레이어 공격에 대한 또 다른 중요한 방어책은 명확한 사명 선언문과 거버넌스 프로토콜입니다. 이더리움은 스마트 컨트랙트 레이어 1 (l1) 중에서 탈중앙화와 보안의 챔피언으로 자리매김하는 동시에 확장성과 지속 가능성을 높이 평가합니다. 이더리움 커뮤니티에서 어떤 의견 불일치가 발생하더라도 이러한 핵심 원칙은 최소한으로만 타협됩니다. 이러한 핵심 원칙에 비추어 내러티브를 평가하고, EIP(이더리움 개선 제안) 프로세스의 연속적인 검토 과정을 통해 이를 조사하는 것은 커뮤니티가 선의의 행위자와 악의적인 행위자를 구별하는 데 도움이 되며, 악의적인 행위자가 이더리움의 미래 방향에 영향을 미칠 수 있는 범위를 제한합니다.
마지막으로, 이더리움 커뮤니티가 모든 참여자에게 개방적이고 환영하는 태도를 유지하는 것이 중요합니다. 문지기(gatekeeper)와 배타성이 있는 커뮤니티는 "우리와 그들"이라는 내러티브를 구축하기 쉽기 때문에 소셜 공격에 특히 취약합니다. 부족주의와 유해한 맥시멀리즘은 커뮤니티에 상처를 주고 레이어 0 보안을 약화시킵니다. 네트워크 보안에 기득권을 가진 이더리움 지지자들은 온라인과 현실 세계(meatspace)에서의 자신의 행동이 이더리움 레이어 0의 보안에 직접적으로 기여한다고 생각해야 합니다.
프로토콜 공격
누구나 이더리움의 클라이언트 소프트웨어를 실행할 수 있습니다. 클라이언트에 검증자를 추가하려면 사용자는 예치 컨트랙트에 32 이더를 스테이킹해야 합니다. 검증자는 사용자가 새로운 블록을 제안하고 증명함으로써 이더리움의 네트워크 보안에 적극적으로 참여할 수 있게 해줍니다. 이제 검증자는 블록체인의 미래 콘텐츠에 영향을 미칠 수 있는 목소리를 갖게 됩니다. 정직하게 행동하여 보상을 통해 이더 보유량을 늘릴 수도 있고, 스테이크를 걸고 자신에게 유리하게 프로세스를 조작하려고 시도할 수도 있습니다. 공격을 시작하는 한 가지 방법은 전체 스테이크의 더 큰 비율을 축적한 다음 이를 사용하여 정직한 검증자보다 더 많은 투표를 하는 것입니다. 공격자가 통제하는 스테이크 비율이 클수록 투표권이 커지며, 특히 나중에 살펴볼 특정 경제적 이정표에서 더욱 그렇습니다. 그러나 대부분의 공격자는 이런 방식으로 공격할 만큼 충분한 이더를 축적할 수 없으므로, 대신 정직한 다수가 특정 방식으로 행동하도록 조작하는 교묘한 기술을 사용해야 합니다.
근본적으로 모든 소규모 스테이크 공격은 검증자의 두 가지 잘못된 행동, 즉 활동 부족(증명/제안을 하지 않거나 늦게 하는 것) 또는 과잉 활동(한 슬롯에서 너무 많이 제안/증명하는 것)의 미묘한 변형입니다. 가장 기본적인 형태의 이러한 행동은 포크 선택 알고리즘과 인센티브 레이어에 의해 쉽게 처리되지만, 공격자에게 유리하게 시스템을 악용하는 교묘한 방법들이 있습니다.
소량의 ETH를 사용한 공격
재구성
여러 논문에서 전체 스테이킹된 이더의 적은 비율만으로 재구성이나 완결성 지연을 달성하는 이더리움 공격에 대해 설명했습니다. 이러한 공격은 일반적으로 공격자가 다른 검증자로부터 일부 정보를 숨겼다가 미묘한 방식이나 적절한 순간에 공개하는 것에 의존합니다. 이들은 대개 정규 체인에서 정직한 블록을 밀어내는 것을 목표로 합니다. Neuder et al 2020 (opens in a new tab)은 공격하는 검증자가 특정 슬롯 n+1에 대한 블록(B)을 생성하고 증명하지만 네트워크의 다른 노드에 전파하는 것을 자제하는 방법을 보여주었습니다. 대신, 그들은 다음 슬롯 n+2까지 그 증명된 블록을 보관합니다. 정직한 검증자가 슬롯 n+2에 대한 블록(C)을 제안합니다. 거의 동시에 공격자는 보류했던 블록(B)과 그에 대한 보류된 증명을 공개하고, 슬롯 n+2에 대한 투표로 B가 체인의 헤드임을 증명하여 정직한 블록 C의 존재를 효과적으로 부정할 수 있습니다. 정직한 블록 D가 공개될 때, 포크 선택 알고리즘은 B 위에 구축된 D가 C 위에 구축된 D보다 더 무겁다고 판단합니다. 따라서 공격자는 1블록 사전(ex ante) 재구성을 사용하여 슬롯 n+2의 정직한 블록 C를 정규 체인에서 제거하는 데 성공한 것입니다. 이 노트 (opens in a new tab)에 설명된 대로, 스테이크의 34%를 가진 공격자 (opens in a new tab)는 이 공격에 성공할 가능성이 매우 높습니다. 하지만 이론적으로 이 공격은 더 적은 스테이크로도 시도될 수 있습니다. Neuder et al 2020 (opens in a new tab)은 이 공격이 30%의 스테이크로 작동한다고 설명했지만, 나중에 전체 스테이크의 2% (opens in a new tab)로도 실행 가능함이 밝혀졌고, 다음 섹션에서 살펴볼 밸런싱 기술을 사용하여 단일 검증자 (opens in a new tab)로도 가능함이 다시 입증되었습니다.
위에서 설명한 1블록 재구성 공격의 개념도 (출처: https://notes.ethereum.org/plgVdz-ORe-fGjK06BZ_3A#Fork-choice-by-block-slot-pair (opens in a new tab))
더 정교한 공격은 정직한 검증자 세트를 체인의 헤드에 대해 서로 다른 뷰를 가진 개별 그룹으로 분할할 수 있습니다. 이를 밸런싱 공격(balancing attack)이라고 합니다. 공격자는 블록을 제안할 기회를 기다렸다가 기회가 오면 이중 서명을 통해 두 개의 블록을 제안합니다. 그들은 한 블록을 정직한 검증자 세트의 절반에게 보내고 다른 블록을 나머지 절반에게 보냅니다. 이중 서명은 포크 선택 알고리즘에 의해 감지되고 블록 제안자는 슬래싱되어 네트워크에서 퇴출되지만, 두 블록은 여전히 존재하며 검증자 세트의 약 절반이 각 포크를 증명하게 됩니다. 그동안 나머지 악의적인 검증자들은 증명을 보류합니다. 그런 다음 포크 선택 알고리즘이 실행될 때 한 포크 또는 다른 포크를 선호하는 증명을 충분한 수의 검증자에게만 선택적으로 공개함으로써, 누적된 증명 가중치를 한 포크 또는 다른 포크에 유리하게 기울입니다. 공격하는 검증자들이 두 포크에 걸쳐 검증자들을 균등하게 분할하여 유지하면서 이는 무기한 계속될 수 있습니다. 어느 포크도 2/3 절대다수를 끌어들일 수 없으므로 네트워크는 완결되지 않습니다.
바운싱 공격(Bouncing attacks)도 비슷합니다. 공격하는 검증자들에 의해 투표가 다시 보류됩니다. 두 포크 사이의 균등한 분할을 유지하기 위해 투표를 공개하는 대신, 그들은 적절한 순간에 투표를 사용하여 포크 A와 포크 B 사이를 번갈아 가며 체크포인트를 정당화합니다. 두 포크 사이에서 정당화가 엎치락뒤치락하는 것은 어느 체인에서도 완결될 수 있는 정당화된 소스 및 타겟 체크포인트 쌍이 존재하는 것을 막아 완결성을 중단시킵니다.
바운싱 공격과 밸런싱 공격 모두 공격자가 네트워크 전반의 메시지 타이밍을 매우 세밀하게 제어할 수 있어야 하는데, 이는 가능성이 낮습니다. 그럼에도 불구하고, 느린 메시지에 비해 빠른 메시지에 추가 가중치를 부여하는 형태로 프로토콜에 방어책이 내장되어 있습니다. 이를 제안자 가중치 부스팅(proposer-weight boosting) (opens in a new tab)이라고 합니다. 바운싱 공격을 방어하기 위해 포크 선택 알고리즘이 업데이트되어, 가장 최근에 정당화된 체크포인트는 각 에포크의 처음 1/3 슬롯 (opens in a new tab) 동안에만 대체 체인의 체크포인트로 전환될 수 있습니다. 이 조건은 공격자가 나중에 사용하기 위해 투표를 모아두는 것을 방지합니다. 포크 선택 알고리즘은 대부분의 정직한 검증자가 투표했을 에포크의 처음 1/3 동안 선택한 체크포인트에 단순히 충실하게 유지됩니다.
이러한 조치들이 결합되어, 정직한 블록 제안자가 슬롯 시작 후 매우 빠르게 블록을 전송하고, 그 후 약 1/3 슬롯(4초) 동안 해당 새 블록이 포크 선택 알고리즘을 다른 체인으로 전환하게 만들 수 있는 시나리오가 만들어집니다. 동일한 기한이 지나면 느린 검증자로부터 도착한 증명은 일찍 도착한 증명에 비해 가중치가 낮아집니다. 이는 체인의 헤드를 결정할 때 신속한 제안자와 검증자에게 강력하게 유리하게 작용하며, 밸런싱 또는 바운싱 공격이 성공할 가능성을 크게 줄입니다.
제안자 부스팅만으로는 적은 스테이크를 가진 공격자가 시도하는 "저비용 재구성"만 방어할 수 있다는 점에 유의해야 합니다. 사실, 제안자 부스팅 자체도 더 큰 지분을 가진 이해관계자에 의해 악용될 수 있습니다. 이 게시물 (opens in a new tab)의 저자들은 7%의 스테이크를 가진 공격자가 투표를 전략적으로 배치하여 정직한 검증자들이 자신의 포크 위에 구축하도록 속여 정직한 블록을 재구성해 내는 방법을 설명합니다. 이 공격은 발생 가능성이 매우 낮은 이상적인 지연 시간 조건을 가정하여 고안되었습니다. 공격자의 성공 확률은 여전히 매우 낮으며, 스테이크가 클수록 위험에 처한 자본이 더 많아지고 경제적 억지력도 더 강해집니다.
제안자 부스팅에도 불구하고 실행 가능하다고 제안된 LMD 규칙을 특별히 표적으로 삼는 밸런싱 공격 (opens in a new tab)도 제안되었습니다. 공격자는 블록 제안을 이중 서명하고 각 블록을 네트워크의 약 절반에 전파하여 두 개의 경쟁 체인을 설정함으로써 포크 간의 대략적인 균형을 맞춥니다. 그런 다음 공모하는 검증자들은 투표를 이중 서명하여 네트워크의 절반이 포크 A에 대한 투표를 먼저 받고 나머지 절반이 포크 B에 대한 투표를 먼저 받도록 타이밍을 맞춥니다. LMD 규칙은 각 검증자에 대해 두 번째 증명을 버리고 첫 번째 증명만 유지하므로, 네트워크의 절반은 A에 대한 투표만 보고 B에 대한 투표는 보지 못하며, 나머지 절반은 B에 대한 투표만 보고 A에 대한 투표는 보지 못합니다. 저자들은 LMD 규칙이 적대자에게 밸런싱 공격을 가할 수 있는 "놀라운 힘"을 부여한다고 설명합니다.
이 LMD 공격 벡터는 이중 서명하는 검증자를 포크 선택 고려 대상에서 완전히 제외하도록 포크 선택 알고리즘을 업데이트 (opens in a new tab)함으로써 차단되었습니다. 이중 서명하는 검증자는 포크 선택 알고리즘에 의해 미래의 영향력도 할인됩니다. 이는 위에서 설명한 밸런싱 공격을 방지하는 동시에 아발란체 공격(avalanche attacks)에 대한 복원력을 유지합니다.
아발란체 공격 (opens in a new tab)이라고 불리는 또 다른 종류의 공격이 2022년 3월 논문 (opens in a new tab)에 설명되었습니다. 아발란체 공격을 가하려면 공격자가 연속된 여러 블록 제안자를 통제해야 합니다. 각 블록 제안 슬롯에서 공격자는 정직한 체인이 보류된 블록과 동일한 하위 트리 가중치에 도달할 때까지 블록을 보류하고 수집합니다. 그런 다음 보류된 블록을 공개하여 최대한 이중 서명하게 만듭니다. 저자들은 밸런싱 및 바운싱 공격에 대한 주요 방어책인 제안자 부스팅이 아발란체 공격의 일부 변형을 방어하지 못한다고 제안합니다. 그러나 저자들은 고도로 이상화된 버전의 이더리움 포크 선택 알고리즘(LMD가 없는 GHOST 사용)에서만 공격을 시연했습니다.
아발란체 공격은 엘엠디 고스트 포크 선택 알고리즘의 LMD 부분에 의해 완화됩니다. LMD는 "최신 메시지 기반(latest-message-driven)"을 의미하며, 각 검증자가 다른 검증자로부터 받은 최신 메시지를 포함하여 보관하는 테이블을 나타냅니다. 해당 필드는 새 메시지가 특정 검증자에 대해 이미 테이블에 있는 슬롯보다 더 늦은 슬롯에서 온 경우에만 업데이트됩니다. 실제로 이는 각 슬롯에서 처음 수신된 메시지가 수락된 메시지이며 추가 메시지는 무시해야 할 이중 서명임을 의미합니다. 다시 말해, 합의 클라이언트는 이중 서명을 계산하지 않습니다. 각 검증자로부터 처음 도착한 메시지를 사용하고 이중 서명은 단순히 폐기되므로 아발란체 공격을 방지합니다.
제안자 부스트가 제공하는 보안을 강화할 수 있는 포크 선택 규칙에 대한 몇 가지 잠재적인 미래 업그레이드가 있습니다. 하나는 뷰 병합(view-merge) (opens in a new tab)으로, 증명자가 슬롯 시작 n초 전에 포크 선택에 대한 뷰를 고정하고 제안자가 네트워크 전체에서 체인의 뷰를 동기화하는 데 도움을 줍니다. 또 다른 잠재적 업그레이드는 단일 슬롯 완결성(single-slot finality) (opens in a new tab)으로, 단 하나의 슬롯 후에 체인을 완결함으로써 메시지 타이밍에 기반한 공격을 방어합니다.
완결성 지연
저비용 단일 블록 재구성 공격을 처음 설명한 동일한 논문 (opens in a new tab)에서는 공격자가 에포크 경계 블록의 블록 제안자가 되는 것에 의존하는 완결성 지연(일명 "활성도 실패(liveness failure)") 공격도 설명했습니다. 이러한 에포크 경계 블록은 캐스퍼 FFG가 체인의 일부를 완결하는 데 사용하는 체크포인트가 되기 때문에 이는 매우 중요합니다. 공격자는 충분한 수의 정직한 검증자가 이전 에포크 경계 블록을 현재 완결 타겟으로 지지하는 FFG 투표를 사용할 때까지 단순히 블록을 보류합니다. 그런 다음 보류했던 블록을 공개합니다. 그들은 자신의 블록을 증명하고 나머지 정직한 검증자들도 그렇게 하여 서로 다른 타겟 체크포인트를 가진 포크를 만듭니다. 타이밍을 정확히 맞추면 어느 포크에도 2/3 절대다수가 증명하지 않게 되므로 완결성을 막을 수 있습니다. 스테이크가 작을수록 공격자가 직접 제어하는 증명이 적고 공격자가 특정 에포크 경계 블록을 제안하는 검증자를 제어할 확률이 낮아지기 때문에 타이밍이 더 정확해야 합니다.
장거리 공격
제네시스 블록에 참여한 검증자가 정직한 블록체인과 함께 별도의 블록체인 포크를 유지하다가, 결국 훨씬 나중에 적절한 시기에 정직한 검증자 세트가 해당 포크로 전환하도록 설득하는 지분 증명(PoS) 블록체인 특유의 공격 유형도 있습니다. 이더리움에서는 모든 검증자가 일정한 간격("체크포인트")으로 정직한 체인의 상태에 동의하도록 보장하는 완결성 가젯(finality gadget) 때문에 이러한 유형의 공격이 불가능합니다. 이더리움 클라이언트는 완결된 블록을 단순히 재구성하지 않기 때문에 이 간단한 메커니즘은 장거리 공격자를 무력화시킵니다. 네트워크에 참여하는 새로운 노드는 신뢰할 수 있는 최근 상태 해시("약한 주관성 (opens in a new tab) 체크포인트")를 찾고 이를 의사 제네시스 블록(pseudo-genesis block)으로 사용하여 그 위에 구축함으로써 참여합니다. 이는 네트워크에 진입하는 새 노드가 스스로 정보를 검증하기 시작하기 전에 '신뢰 게이트웨이'를 만듭니다.
서비스 거부 (DoS)
이더리움의 지분 증명(PoS) 메커니즘은 각 슬롯에서 블록 제안자가 될 단일 검증자를 전체 검증자 세트에서 선택합니다. 이는 공개적으로 알려진 함수를 사용하여 계산할 수 있으며, 적대자가 블록 제안 직전에 다음 블록 제안자를 식별하는 것이 가능합니다. 그런 다음 공격자는 블록 제안자에게 스팸을 보내 피어와 정보를 교환하지 못하게 할 수 있습니다. 네트워크의 나머지 부분에는 블록 제안자가 오프라인 상태인 것처럼 보이고 슬롯은 단순히 비어 있게 됩니다. 이는 특정 검증자가 블록체인에 정보를 추가하는 것을 막는 검열의 한 형태일 수 있습니다. 단일 비밀 리더 선출(SSLE) 또는 비단일 비밀 리더 선출을 구현하면 블록 제안자만이 자신이 선택되었음을 알 수 있고 선택을 미리 알 수 없기 때문에 DoS 위험을 완화할 수 있습니다. 이는 아직 구현되지 않았지만 활발한 연구 및 개발 (opens in a new tab) 분야입니다.
이 모든 것은 적은 스테이크로 이더리움을 성공적으로 공격하는 것이 매우 어렵다는 사실을 시사합니다. 여기에 설명된 실행 가능한 공격은 이상화된 포크 선택 알고리즘이나 일어날 법하지 않은 네트워크 조건을 요구하거나, 클라이언트 소프트웨어에 대한 비교적 사소한 패치로 공격 벡터가 이미 차단되었습니다. 물론 이것이 실제 환경(in the wild)에 제로데이 취약점이 존재할 가능성을 배제하는 것은 아니지만, 소수 지분 공격자가 효과를 거두기 위해 필요한 기술적 적성, 합의 레이어 지식 및 운의 기준이 극도로 높다는 것을 보여줍니다. 공격자의 관점에서 볼 때 최선의 방법은 가능한 한 많은 이더를 축적하고 전체 스테이크의 더 큰 비율로 무장하여 돌아오는 것일 수 있습니다.
전체 스테이크의 33% 이상을 사용하는 공격자
이 문서에서 앞서 언급한 모든 공격은 공격자가 투표할 수 있는 스테이킹된 이더가 더 많고 각 슬롯에서 블록을 제안하도록 선택될 수 있는 검증자가 더 많을 때 성공할 가능성이 높아집니다. 따라서 악의적인 검증자는 가능한 한 많은 스테이킹된 이더를 통제하는 것을 목표로 할 수 있습니다.
스테이킹된 이더의 33%는 공격자에게 기준점이 됩니다. 이 금액 이상을 보유하면 다른 검증자의 행동을 세밀하게 통제하지 않고도 체인이 완결되는 것을 막을 수 있는 능력이 생기기 때문입니다. 그들은 단순히 모두 함께 사라질 수 있습니다. 스테이킹된 이더의 1/3 이상이 악의적으로 증명하거나 증명에 실패하면 2/3 절대다수가 존재할 수 없으며 체인이 완결될 수 없습니다. 이에 대한 방어책은 비활동 누수입니다. 비활동 누수는 증명에 실패하거나 다수와 반대로 증명하는 검증자를 식별합니다. 증명하지 않는 검증자가 소유한 스테이킹된 이더는 점진적으로 줄어들어 결국 이들이 전체의 1/3 미만을 차지하게 되어 체인이 다시 완결될 수 있게 됩니다.
비활동 누수의 목적은 체인이 다시 완결되도록 하는 것입니다. 그러나 공격자 또한 스테이킹된 이더의 일부를 잃게 됩니다. 전체 스테이킹된 이더의 33%를 차지하는 검증자들의 지속적인 비활동은 검증자들이 슬래싱되지 않더라도 매우 큰 비용이 듭니다.
이더리움 네트워크가 비동기적이라고 가정하면(즉, 메시지 송수신 사이에 지연이 있음), 전체 스테이크의 34%를 통제하는 공격자는 이중 완결성을 유발할 수 있습니다. 공격자가 블록 생성자로 선택되었을 때 이중 서명한 다음 모든 검증자와 함께 이중 투표를 할 수 있기 때문입니다. 이는 블록체인의 포크가 존재하고 각각에 대해 스테이킹된 이더의 34%가 투표하는 상황을 만듭니다. 각 포크는 나머지 검증자의 50%만 자신에게 유리하게 투표하면 두 포크 모두 절대다수의 지지를 받게 되며, 이 경우 두 체인 모두 완결될 수 있습니다(공격자 검증자의 34% + 나머지 66%의 절반 = 각 포크에서 67%이기 때문). 경쟁하는 블록은 각각 정직한 검증자의 약 50%가 수신해야 하므로, 이 공격은 공격자가 네트워크를 통해 전파되는 메시지의 타이밍을 어느 정도 제어하여 정직한 검증자의 절반을 각 체인으로 유도할 수 있을 때만 실행 가능합니다. 공격자는 이 이중 완결성을 달성하기 위해 필연적으로 전체 스테이크(오늘날의 검증자 세트 기준 약 1,000만 이더의 34%)를 파괴하게 됩니다. 검증자의 34%가 동시에 이중 투표를 하게 되며, 이는 최대 상관관계 페널티가 부과되는 슬래싱 대상 위반이기 때문입니다. 이 공격에 대한 방어책은 전체 스테이킹된 이더의 34%를 파괴하는 데 드는 매우 큰 비용입니다. 이 공격에서 복구하려면 이더리움 커뮤니티가 "대역 외"에서 조정하여 포크 중 하나를 따르고 다른 하나는 무시하기로 합의해야 합니다.
전체 스테이크의 약 50%를 사용하는 공격자
스테이킹된 이더의 50%에서 악의적인 검증자 그룹은 이론적으로 체인을 동일한 크기의 두 포크로 분할한 다음 전체 50% 스테이크를 사용하여 정직한 검증자 세트와 반대로 투표함으로써 두 포크를 유지하고 완결성을 막을 수 있습니다. 두 포크의 비활동 누수는 결국 두 체인 모두 완결되도록 이끌 것입니다. 이 시점에서 유일한 옵션은 소셜 복구에 의존하는 것입니다.
정직한 검증자 수의 변동성, 네트워크 지연 시간 등을 고려할 때 적대적인 검증자 그룹이 전체 스테이크의 정확히 50%를 일관되게 통제할 수 있을 가능성은 매우 낮습니다. 이러한 공격을 가하는 데 드는 막대한 비용과 낮은 성공 가능성은 합리적인 공격자에게 강력한 억지력으로 작용하며, 특히 50% 이상을 확보하기 위한 약간의 추가 투자로 훨씬 더 많은 권한을 얻을 수 있다는 점을 고려하면 더욱 그렇습니다.
전체 스테이크의 50%를 초과하면 공격자는 포크 선택 알고리즘을 지배할 수 있습니다. 이 경우 공격자는 다수결로 증명할 수 있으므로 정직한 클라이언트를 속일 필요 없이 짧은 재구성을 수행할 수 있는 충분한 통제력을 갖게 됩니다. 정직한 검증자들의 포크 선택 알고리즘 또한 공격자가 선호하는 체인을 가장 무거운 것으로 간주하므로 이를 따르게 되고, 체인은 완결될 수 있습니다. 이를 통해 공격자는 특정 트랜잭션을 검열하고, 단거리 재구성을 수행하며, 자신에게 유리하게 블록을 재정렬하여 최대 MEV를 추출할 수 있습니다. 이에 대한 방어책은 다수 지분(현재 190억 달러에 조금 못 미침)의 막대한 비용입니다. 소셜 레이어가 개입하여 정직한 소수 포크를 채택함으로써 공격자의 스테이크 가치를 극적으로 떨어뜨릴 가능성이 높기 때문에 공격자는 이 비용을 위험에 빠뜨리게 됩니다.
전체 스테이크의 66% 이상을 사용하는 공격자
전체 스테이킹된 이더의 66% 이상을 가진 공격자는 정직한 검증자를 강압할 필요 없이 자신이 선호하는 체인을 완결할 수 있습니다. 공격자는 단순히 자신이 선호하는 포크에 투표한 다음 완결할 수 있는데, 이는 부정직한 절대다수로 투표할 수 있기 때문입니다. 절대다수 지분 보유자로서 공격자는 항상 완결된 블록의 내용을 통제하며, 지불하고 되감고 다시 지불하며, 특정 트랜잭션을 검열하고 마음대로 체인을 재구성할 수 있는 권한을 갖습니다. 51%가 아닌 66%를 통제하기 위해 추가 이더를 구매함으로써 공격자는 사실상 사후(ex post) 재구성과 완결성 되돌리기(즉, 미래를 통제할 뿐만 아니라 과거를 바꾸는 것)를 수행할 수 있는 능력을 구매하는 것입니다. 여기서 유일한 실질적인 방어책은 전체 스테이킹된 이더의 66%에 달하는 막대한 비용과, 대안 포크 채택을 조정하기 위해 소셜 레이어에 의존하는 옵션뿐입니다. 다음 섹션에서 이에 대해 더 자세히 살펴볼 수 있습니다.
사람: 최후의 방어선
부정직한 검증자들이 자신이 선호하는 버전의 체인을 완결하는 데 성공한다면 이더리움 커뮤니티는 어려운 상황에 처하게 됩니다. 정규 체인의 역사에는 부정직한 구간이 포함되는 반면, 정직한 검증자들은 대안적인(정직한) 체인을 증명했다는 이유로 처벌을 받을 수 있습니다. 완결되었지만 올바르지 않은 체인은 다수 클라이언트의 버그로 인해 발생할 수도 있다는 점에 유의하세요. 결국 궁극적인 대비책은 상황을 해결하기 위해 소셜 레이어(레이어 0)에 의존하는 것입니다.
이더리움 지분 증명(PoS) 합의의 강점 중 하나는 공격에 직면했을 때 커뮤니티가 사용할 수 있는 다양한 방어 전략 (opens in a new tab)이 있다는 것입니다. 최소한의 대응은 추가 페널티 없이 공격자의 검증자를 네트워크에서 강제로 종료시키는 것일 수 있습니다. 네트워크에 다시 진입하려면 공격자는 검증자 세트가 점진적으로 증가하도록 보장하는 활성화 대기열에 참여해야 합니다. 예를 들어, 스테이킹된 이더의 양을 두 배로 늘릴 만큼 충분한 검증자를 추가하는 데는 약 200일이 걸리며, 이는 공격자가 또 다른 51% 공격을 시도하기 전에 정직한 검증자들에게 사실상 200일의 시간을 벌어줍니다. 그러나 커뮤니티는 과거 보상을 취소하거나 스테이킹된 자본의 일부(최대 100%)를 소각하는 방식으로 공격자에게 더 가혹한 페널티를 주기로 결정할 수도 있습니다.
공격자에게 어떤 페널티가 부과되든, 커뮤니티는 이더리움 클라이언트에 코딩된 포크 선택 알고리즘이 선호하는 체인임에도 불구하고 부정직한 체인이 사실상 유효하지 않으며 커뮤니티가 대신 정직한 체인 위에 구축해야 하는지 여부도 함께 결정해야 합니다. 정직한 검증자들은 예를 들어 공격이 시작되기 전에 정규 체인에서 포크되었거나 공격자의 검증자가 강제로 제거된, 커뮤니티가 수용하는 이더리움 블록체인 포크 위에 구축하기로 집단적으로 동의할 수 있습니다. 정직한 검증자들은 공격자의 체인을 증명하지 않은(정당한) 이유로 적용되는 페널티를 피할 수 있기 때문에 이 체인 위에 구축할 인센티브를 갖게 됩니다. 거래소, 온램프(on-ramp) 및 이더리움 위에 구축된 애플리케이션은 아마도 정직한 체인에 있는 것을 선호할 것이며 정직한 검증자들을 따라 정직한 블록체인으로 이동할 것입니다.
그러나 이는 상당한 거버넌스 과제가 될 것입니다. 정직한 체인으로 다시 전환한 결과 일부 사용자와 검증자는 의심할 여지 없이 손해를 볼 것이고, 공격 이후 검증된 블록의 트랜잭션이 롤백되어 애플리케이션 레이어를 혼란에 빠뜨릴 수 있으며, 이는 "코드가 법이다(code is law)"라고 믿는 경향이 있는 일부 사용자의 윤리를 단순히 훼손하는 것입니다. 거래소와 애플리케이션은 오프체인 작업을 이제 롤백될 수 있는 온체인 트랜잭션에 연결했을 가능성이 높으며, 특히 부당한 이득이 혼합되거나 탈중앙화 금융 (DeFi) 또는 기타 파생 상품에 예치되어 정직한 사용자에게 2차적인 영향을 미치는 경우 공정하게 풀기 어려운 철회 및 수정의 연쇄 반응을 시작할 것입니다. 의심할 여지 없이 일부 사용자, 아마도 기관 사용자조차도 기민하게 행동했거나 우연에 의해 부정직한 체인으로부터 이미 이익을 얻었을 것이며, 자신의 이익을 보호하기 위해 포크에 반대할 수 있습니다. 합리적으로 조정된 완화 조치를 신속하게 실행할 수 있도록 51% 초과 공격에 대한 커뮤니티 대응을 예행연습해야 한다는 요구가 있었습니다. ethresear.ch의 여기 (opens in a new tab)와 여기 (opens in a new tab), 그리고 트위터의 여기 (opens in a new tab)에서 비탈릭(Vitalik)의 유용한 토론을 확인할 수 있습니다. 조정된 소셜 대응의 목표는 공격자를 처벌하고 다른 사용자에게 미치는 영향을 최소화하는 데 매우 표적화되고 구체적이어야 합니다.
거버넌스는 이미 복잡한 주제입니다. 부정직하게 완결되는 체인에 대한 레이어 0 비상 대응을 관리하는 것은 이더리움 커뮤니티에게 의심할 여지 없이 어려운 일이겠지만, 이더리움 역사상 이미 두 번이나 일어난 일입니다).
그럼에도 불구하고, 최종 대비책이 현실 세계(meatspace)에 있다는 사실은 꽤 만족스러운 점이 있습니다. 궁극적으로 우리 위에 이 경이로운 기술 스택이 있더라도, 최악의 상황이 발생한다면 실제 사람들이 조정하여 그 상황을 벗어나야 할 것입니다.
요약
이 페이지에서는 공격자가 이더리움의 지분 증명 (PoS) 합의 프로토콜을 악용하려고 시도할 수 있는 몇 가지 방법을 살펴보았습니다. 전체 스테이킹된 이더의 비율이 증가하는 공격자에 대해 재구성과 완결성 지연을 살펴보았습니다. 전반적으로 더 부유한 공격자가 성공할 확률이 더 높습니다. 그들의 스테이크가 미래 블록의 내용에 영향을 미치는 데 사용할 수 있는 투표권으로 변환되기 때문입니다. 스테이킹된 이더의 특정 임계값에서 공격자의 권한은 다음과 같이 레벨업됩니다.
33%: 완결성 지연
34%: 완결성 지연, 이중 완결성
51%: 완결성 지연, 이중 완결성, 검열, 블록체인 미래에 대한 통제
66%: 완결성 지연, 이중 완결성, 검열, 블록체인 미래 및 과거에 대한 통제
적은 양의 스테이킹된 이더를 필요로 하지만, 정직한 검증자 세트를 자신에게 유리하게 흔들기 위해 메시지 타이밍을 세밀하게 제어하는 매우 정교한 공격자에 의존하는 다양한 더 정교한 공격도 있습니다.
전반적으로 이러한 잠재적인 공격 벡터에도 불구하고 성공적인 공격의 위험은 낮으며, 확실히 작업증명 (PoW) 방식보다 낮습니다. 이는 투표권으로 정직한 검증자를 압도하려는 공격자가 위험에 빠뜨리는 스테이킹된 이더의 막대한 비용 때문입니다. 내장된 "당근과 채찍" 인센티브 레이어는 특히 스테이크가 낮은 공격자의 대부분의 불법 행위를 방어합니다. 더 미묘한 바운싱 및 밸런싱 공격 또한 성공할 가능성이 낮습니다. 실제 네트워크 조건에서는 특정 검증자 하위 집합에 대한 메시지 전달을 세밀하게 제어하기가 매우 어렵고, 클라이언트 팀이 간단한 패치로 알려진 바운싱, 밸런싱 및 아발란체 공격 벡터를 신속하게 차단했기 때문입니다.
34%, 51% 또는 66% 공격을 해결하려면 대역 외 소셜 조정이 필요할 가능성이 높습니다. 이는 커뮤니티에 고통스러울 수 있지만, 커뮤니티가 대역 외에서 대응할 수 있는 능력은 공격자에게 강력한 억지력이 됩니다. 이더리움 소셜 레이어는 궁극적인 안전장치입니다. 기술적으로 성공한 공격이라도 커뮤니티가 정직한 포크를 채택하기로 합의하면 무력화될 수 있습니다. 공격자와 이더리움 커뮤니티 사이에 경쟁이 벌어질 것입니다. 66% 공격에 사용된 수십억 달러는 성공적인 소셜 조정 공격이 충분히 빠르게 전달된다면 아마도 소멸될 것이며, 공격자는 이더리움 커뮤니티가 무시하는 알려진 부정직한 체인에 비유동적인 스테이킹된 이더를 대량으로 떠안게 될 것입니다. 이것이 결국 공격자에게 수익성이 있을 가능성은 효과적인 억지력이 될 만큼 충분히 낮습니다. 이것이 긴밀하게 일치된 가치를 지닌 응집력 있는 소셜 레이어를 유지하는 데 투자하는 것이 매우 중요한 이유입니다.
더 읽어보기
- 이 페이지의 더 자세한 버전 (opens in a new tab)
- 정산 완결성에 대한 비탈릭의 글 (opens in a new tab)
- 엘엠디 고스트 논문 (opens in a new tab)
- 캐스퍼 FFG 논문 (opens in a new tab)
- Gasper 논문 (opens in a new tab)
- 제안자 가중치 부스팅 합의 사양 (opens in a new tab)
- ethresear.ch의 바운싱 공격 (opens in a new tab)
- SSLE 연구 (opens in a new tab)
페이지 최근 업데이트: 2026년 4월 13일
