저자: 비탈릭 부테린, ethresear, 컴파일러: 송슈에, 골든 파이낸스
이더와 대부분의 다른 (궁극적으로 결정론적인) 지분 증명 시스템의 주요 차이점은 이더가 매우 많은 수의 검증자 객체를 지원하려 한다는 점입니다: 현재 895,000개의 검증자 객체가 있으며, 집프의 법칙을 간단히 분석해 보면 이는 다음과 같습니다. 이는 고유한 개인/실체인 수만 개의 검증자 객체에 해당합니다. 이는 탈중앙화를 지원하고, 각 개인이 자신의 권한을 포기하고 소수의 서약자 풀 중 하나에 통제권을 넘기지 않고도 일반 개인도 서약에 참여할 수 있도록 하는 데 목적이 있습니다.
그러나 이러한 접근 방식은 이더 체인이 타임슬롯당 많은 수의 서명(현재 약 28,000개, SSF 이후 1,790,000개)을 처리해야 하므로 부하가 매우 높습니다. 이러한 부하를 지원하려면 여러 가지 기술적 희생이 필요합니다.
이를 위해서는 여러 서브넷에 걸쳐 증명을 분할하는 복잡한 증명 전파 메커니즘이 필요하고, 이러한 서명을 검증하기 위해 BLS 서명 작업의 초최적화가 필요한 등 여러 가지가 필요합니다. 이러한 서명을 검증하기 위한 최적화 등이 필요합니다.
양자 내성을 가질 만큼 충분히 효율적인 명확한 대안이 없습니다.
뷰 병합과 유사한 포크 선택 복구는 개별 시그니처를 추출할 수 없기 때문에 더 복잡해집니다.
서명 수가 많기 때문에 서명 스내킹이 어렵습니다. 헬리오스는 동기화 위원회 서명이라는 전용 추가 서명에서 작동해야 합니다.
타임 슬롯에 두 개가 아닌 세 개의 하위 타임 슬롯을 요구하여 최소 보안 타임 슬롯을 늘립니다.
서명 집계 시스템은 언뜻 합리적으로 보이지만, 실제로는 모든 측면에 스며들어 있는 시스템적 복잡성을 야기합니다.
더군다나 이 제도는 본연의 목적에도 부합하지 않습니다. 서약을 위한 최소 요건은 여전히 32 이더리움으로, 많은 사람들이 감당할 수 없는 금액입니다. 논리적으로 분석해보면, 이더리움 사용자가 5억 명이고 그 중 10%가 서약을 한다고 가정하면 슬롯당 1억 명의 서명이 필요하다는 뜻입니다. 정보 이론적으로 이 설계에서 처리량을 줄이려면 슬롯당 최소 12.5MB의 데이터 가용 공간이 필요한데, 이는 전체 닥샤딩(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)의 목표와 거의 비슷한 수준입니다. . 실현 가능할 수도 있지만, 서약이 본질적으로 데이터 가용성 샘플링에 의존하도록 요구하면 전 세계 서약의 약 0.6%에 불과하더라도 복잡성이 크게 증가하며, 그 많은 서명을 검증하는 데 수반되는 계산 문제를 해결하지도 못합니다.
따라서 저는 암호학자들이 매번 증가하는 서명을 시간대별로 처리할 수 있는 마법의 총알(또는 마법의 방탄조끼)을 만드는 데 의존하는 대신, 처음부터 그런 기대를 버리는 철학적 전환을 제안합니다. 이렇게 하면 지분 증명 설계 공간이 크게 확장되고 기술적 간소화가 가능해져 헬리오스가 이더 합의에서 직접 SNARK 처리를 할 수 있게 되어 보안이 강화되고, 윈터니츠와 같은 지루하고 오래된 서명 체계도 실행 가능해져 양자 저항 문제가 해결될 수 있습니다. 왜 "그냥 위원회를 이용하지 않나요?"인가요?
이러한 문제에 직면한 많은 비이더리움 블록체인은 위원회 기반 보안 방식을 사용합니다. 각 시간 슬롯에서 해당 시간 슬롯을 완료할 책임이 있는 N명의 검증자(예: N은 약 1000명)를 무작위로 선택합니다. 이 접근 방식이 부적절한 이유는 책임감이 부족하기 때문입니다.
이유를 이해하기 위해 51% 공격이 발생한다고 가정해 보겠습니다. 이는 최종성 반전 공격 또는 검열 공격일 수 있습니다. 공격을 시작하려면 서약의 과반수를 통제하는 경제 참여자들이 공격에 관련된 소프트웨어를 실행하는 데 동의해야 하고, 위원회에서 최종적으로 선정된 모든 검증인이 공격에 참여해야 합니다. 무작위 샘플링의 수학은 이를 보장합니다. 그러나 공격에 동의한 검증인 대부분은 위원회에 선정되지 않아 결국 보이지 않기 때문에 이러한 공격에 대한 불이익은 적습니다.
현재 이더리움은 그 반대의 경우를 취하고 있습니다. 51% 공격이 발생하면 공격하는 검증인 전체 세트의 대다수가 서약에서 제외됩니다. 현재 공격에 드는 비용은 약 900만 이더(약 200억 원)이며, 이는 공격자의 이익을 극대화하는 방식으로 네트워크 동기화가 중단된다고 가정합니다.
이 정도면 엄청난 비용이라고 생각하며, 이를 위해 약간의 희생을 감수할 수 있습니다. 1~2백만 이더리움의 공격 비용도 충분히 감당할 수 있습니다. 또한, 현재 이더리움에 존재하는 주요 중앙화 위험은 완전히 다른 곳에 있습니다. 최소 담보 금액을 거의 0에 가깝게 낮추면 대규모 담보 풀의 강도 차이가 그렇게 크지 않을 것입니다.
이것이 제가 온건한 해결책을 주장하는 이유입니다: 검증인의 책임성 측면에서 약간의 희생을 감수하되, 삭감 가능한 이더의 총량을 상당히 높게 유지하면서 그 대신에 다음과 같은 이점을 얻을 수 있습니다. 검증자 수가 적을 때 얻을 수 있는 대부분의 이점을 누릴 수 있습니다.
SSF에서 시간 슬롯당 8192개의 서명은 어떤 모습일까요?
기존의 2라운드 합의 프로토콜(텐더민트에서 사용하는 프로토콜과 SSF가 필연적으로 사용할 프로토콜과 유사)을 가정하면, 각 참여 검증인은 타임 슬롯당 2개의 서명이 필요합니다. 우리는 이 현실을 극복해야 합니다. 이를 해결할 수 있는 방법은 크게 세 가지가 있습니다.
방법 #1: 탈중앙화된 서약 풀에 올인하기
파이썬에 매우 중요한 문구가 있습니다.
이 작업을 수행하는 분명한 방법이 하나(가급적이면 하나만)가 있어야 합니다.
서약 평준화의 경우, 이더는 현재 이 목표를 달성하기 위해 두 가지 다른 전략을 동시에 실행하고 있기 때문에 이 규칙을 위반하고 있습니다: (i) 소규모 개별 서약, 그리고. (ii) 분산 검증자 기술(DVT)을 사용하는 탈중앙화된 서약 풀. 이러한 이유 때문에 (i) 일부 개별 담보 제공자만 지원할 수 있으며, 최소 예치금이 너무 많은 사람들이 항상 존재할 것입니다. 그러나 이더리움은 (i)를 지원하기 위해 매우 높은 기술 부담 비용을 지불하고 있습니다.
한 가지 가능한 해결책은 (i)을 포기하고 (ii)에 올인하는 것입니다. 최소 서약 금액을 4096 이더로 늘리고 검증인 총 한도를 4096명(약 1,670만 이더)으로 설정할 수 있습니다. 자금을 제공하거나 노드 운영자가 되는 방식으로 소규모 서약자들이 DVT 풀에 참여할 것으로 예상됩니다. 공격자의 남용을 방지하기 위해 노드 운영자 역할은 평판에 따라 어떤 식으로든 제한되어야 하며, 풀은 이와 관련하여 다양한 옵션을 제공함으로써 서로 경쟁하게 될 것입니다. 자금 제공은 라이선스 없이 이루어질 수 있습니다.
예를 들어 페널티를 제한함으로써 이 모델에서 풀링된 서약을 더 "관대하게" 만들 수 있습니다. 이는 노드 운영자에 대한 신뢰를 떨어뜨릴 수 있지만, 여기에 설명된 문제들로 인해 신중하게 다룰 필요가 있습니다.
접근법 2: 두 계층의 서약
두 계층의 서약자를 생성합니다: 4096개의 서약을 요청하는 "무거운" 계층입니다. 확정에 참여하려면 4096개의 이더리움이 필요한 "무거운" 계층과, 최소 약정 요건이 없고 입출금 지연과 삭감 위험이 없는 "가벼운" 계층으로 보안을 한 층 더 강화할 수 있습니다. 블록을 확정하려면 헤비 레이어가 블록을 확정하고 라이트 레이어는 온라인 라이트 검증자의 50%가 이를 증명해야 합니다.
이러한 이질성은 공격이 성공하려면 헤비 레이어와 라이트 레이어가 모두 손상되어야 하기 때문에 검열 저항성과 공격에 대한 저항성 측면에서 유리합니다. 한 계층이 손상되고 다른 계층이 손상되지 않으면 체인이 중단되고, 손상된 계층이 무거운 계층이면 처벌을 받을 수 있습니다.
이 접근 방식의 또 다른 장점은 라이트 레이어에 앱 내 담보로 사용되는 이더리움을 포함할 수 있다는 점입니다. 주요 단점은 소규모와 대규모 담보 제공자 간의 차이를 설정하여 담보가 덜 평화로워진다는 것입니다.
접근법 3: 순환 참여(즉, 위원회이지만 책임자)
우리는 여기서 제안한 슈퍼위원회와 유사한 접근법을 취했습니다. 설계: 각 시간대별로 현재 활동 중인 4096명의 검증인을 선정하고, 각 시간대마다 해당 검증인 수를 신중하게 조정하여 안전성을 확보합니다.
그러나 이 프레임워크 내에서 "비용 대비 최대 효과"를 얻기 위해 몇 가지 다른 매개변수를 선택했습니다. 특히, 저희는 검증인이 임의로 높은 잔액으로 참여할 수 있도록 허용하고 있으며, 검증인이 일정 금액 이상의 이더리움(반드시 유동적이어야 함)을 보유하고 있는 경우 매 세션마다 위원회에 참여하도록 하고 있습니다. 검증자가 보유한 이더리움의 양이 N과 M이라면, 해당 검증자는 특정 시간대에 위원회에 참여할 확률이 N/M입니다.
인센티브 목적의 "가중치"와 합의 목적의 "가중치"를 분리하는 흥미로운 지렛대가 있습니다: 보상은 위원회의 각 검증인(적어도 ≤M ETH를 가진 검증인의 경우)에게 동일해야 합니다. 평균 보상이 비례하도록 유지합니다. 이더리움을 가중치로 사용하여 위원회 내 검증인의 합의 수를 계산할 수도 있습니다. 이렇게 하면 완결성을 깨기 위해서는 위원회 내 총 이더리움의 1/3 이상에 해당하는 양의 이더리움이 필요합니다.
지프의 법칙 분석에 따르면 이더리움의 양은 다음과 같이 계산됩니다.
총 잔액의 각 이차 레벨에서 검증자의 수는 해당 레벨에 반비례하며, 다음과 같이 계산됩니다. 총 잔액은 해당 유효성 검사기에 대해 동일합니다.
따라서 위원회는 각 잔액 수준에서 동일한 양의 이더리움 참여자를 가지게 되지만, (검증인이 항상 위원회에 있는) 배리어 M 이상의 수준은 예외입니다.
따라서 위 레벨의 각 K 검증자에는 Log2(M) 레벨이 있고, 그 위에는 K+K/2+......=2K 레벨이 있습니다. 따라서 K = 4096/Log2 (M) + 2.
가장 큰 검증자는 M*k 이더를 보유하게 됩니다. 역으로 계산하면, 가장 큰 검증자가 2^18=262,144 이더를 보유하고 있다면, 이는 (대략적으로) M = 1024, k = 256을 의미합니다.
약정된 이더는 다음과 같습니다. 총 금액은 다음과 같습니다.
처음 512명의 검증인의 전체 지분(2^18*1+2^17*2+......+2^10*2^8=2359296)
더 작은 베팅의 무작위 샘플에 추가(2^8*(2^9+2^8+2^7 ......)는 약 2^8*2^10=2^18)
총 2621,440 ETH, 즉 약 90만 ETH의 공격 비용을 얻었습니다.
이 접근법의 가장 큰 단점은 프로토콜 내에 약간의 복잡성을 도입한다는 것입니다. 위원회가 바뀌어도 합의 보안을 유지할 수 있는 방식으로 검증자를 무작위로 선택해야 한다는 것입니다.
주요 장점은 인식 가능한 형태의 독립적인 서약을 유지하고, 단일 시스템을 유지하며, 최소 서약 금액도 매우 낮은 수준(예: 1 이더리움)으로 낮출 수 있다는 것입니다.
요약
SSF 프로토콜 이후 8192 서명을 고수하기로 결정한다면, 기술 구현자는 물론 라이트 클라이언트와 같은 보조 인프라 구축자의 작업이 훨씬 쉬워질 것입니다. 누구나 합의 클라이언트를 실행하는 것이 더 쉬워지고, 사용자, 서약자 및 다른 사람들은 즉시 그 가정에 따라 작업할 수 있습니다. 이더리움 프로토콜의 향후 부하량은 더 이상 알 수 없습니다. 향후 하드포크를 통해 개선될 수 있지만, 개발자가 동일한 수준의 용이성으로 시간 슬롯당 더 많은 서명을 처리할 수 있을 만큼 기술이 개선되었다는 확신이 있을 때에만 가능합니다.
남은 작업은 세 가지 접근 방식 중 어떤 방식을 택할지, 아니면 완전히 다른 방식을 택할지 결정하는 것입니다. 어떤 절충안을 택할 것인지, 특히 모바일 서약과 같이 현재 쉽게 해결되고 있는 기술적 문제와는 별개로 해결할 수 있는 문제를 어떻게 해결할 것인지가 관건이 될 것입니다.