Arbitrum 공동 창립자: Rollup 지연 공격을 위한 세 가지 해결책
저자: Ed Felten, Offchain Labs 공동 창립자
편집: DeFi의 길
Rollup 프로토콜 설계자가 직면하는 미묘한 문제 중 하나는 지연 공격(delay attacks)에 어떻게 대응할 것인가입니다. 이 글에서는 지연 공격이 무엇인지, 그리고 Arbitrum이 이를 어떻게 방어하는지에 대해 논의하며, 흥미로운 새로운 발전을 소개하겠습니다.
지연 공격은 Rollup 프로토콜의 진행을 방해하려는 악의적인 행동으로, 프로토콜의 보안을 공격하지는 않습니다. 즉, 잘못된 결과를 강제로 확인하려고 하지 않습니다. 반대로, 지연 공격은 결과의 확인을 방해하거나 지연시키려는 방식으로 프로토콜의 생명력(liveness)을 공격합니다.
이 문제는 미묘할 수 있으며, 솔직히 말해 프로토콜 설계자들은 지연 공격에 대해 이야기하는 것을 좋아하지 않지만, 모든 Layer 2 시스템, Optimistic Rollup, ZK Rollup 또는 기타를 포함하여, 지연 및 프로토콜 진행과 관련된 문제에 대응해야 합니다.
이 글에서는 지연 공격 문제를 깊이 탐구하고, Arbitrum rollup 프로토콜의 다양한 버전이 이 문제를 어떻게 처리하는지 논의합니다.
지연 공격이란 무엇인가?
지연 공격에서는 악의적인 주체(또는 악의적인 주체 그룹)가 Rollup 프로토콜 내에서 행동을 취하며, 결과가 L1 체인으로 돌아가는 것을 방해하거나 지연시키기 위한 전략을 따릅니다.
이는 서비스 거부(DoS) 공격과 다릅니다. 서비스 거부 공격에서는 공격자가 프로토콜 내에서 어떤 행동도 취하지 못하도록 방해하려고 합니다. 반면, 지연 공격에서는 행동이 계속 발생하지만, 공격자의 행동 방식이 결과의 확인을 방해하거나 지연시켜(즉, L1에서 자산을 인출하는 것을 지연시켜) 정직한 검증자가 가스를 소모하게 만듭니다.
합리적으로 보이는 모든 Rollup 프로토콜은 참가자가 스테이킹을 해야 하므로, 지연 공격자는 반드시 하나 이상의 스테이킹 권리를 잃게 됩니다. 우리는 여기서 공격자가 일정 한도 내에서 스테이킹 권리를 희생할 의사가 있다고 가정합니다.
우리는 또한 공격자가 거래를 블록체인에 올리는 데 있어 우위를 가지고 있다고 보수적으로 가정합니다. 따라서 공격자가 정직한 주체와 경쟁하여 체인 상 거래의 우선권을 얻으려 할 때마다, 공격자는 항상 이길 것입니다.
마지막으로, 공격자가 기본 L1 블록체인에 대한 접근을 검토할 수 있다고 가정합니다. 이는 Rollup 거래를 제외할 수 있지만, 제한된 시간 동안만 가능합니다. 이를 우리는 "도전 기간"이라고 부릅니다. 특히, 공격자는 개념적으로 "검열 모드"를 활성화하고 비활성화할 수 있습니다. 검열 모드가 활성화되면, 공격자는 어떤 거래가 L1에 도달할 수 있는지를 완전히 제어할 수 있습니다. 그러나 공격자는 도전 기간 내에서만 검열 모드를 활성화할 수 있습니다. (우리는 어떤 검열 모드 기간이 도전 기간을 초과하면, L1 커뮤니티의 사회적 반응이 검열 시도를 저지할 것이라고 가정합니다.)
지연 공격에 대한 프로토콜 평가
프로토콜을 평가할 때, 우리는 여섯 가지 질문을 할 수 있습니다:
해당 프로토콜에 사기 증명 메커니즘이 있습니까? (그렇지 않으면, 지연 공격은 실제로 의미가 없습니다. 참가자는 어떤 결과도 지연시킬 수 없기 때문입니다. 심지어 사기 결과조차도요.)
중앙 집중화된 운영자나 증명자가 있어, 데이터를 단순히 중단하거나 보류함으로써 진행을 방해할 수 있습니까? 그렇다면, 그 주체는 무한 지연을 초래할 수 있습니다.
해당 프로토콜은 최종 진행을 위한 신뢰할 수 없는 보장을 제공합니까? 즉, 공격자가 무엇을 하든, 정직한 참가자가 최종적으로 진행을 강제할 수 있습니까?
프로토콜이 신뢰할 수 없는 프로세스를 보장한다면, 공격자가 초래할 수 있는 지연의 한계는 무엇입니까?
공격자의 비용은 초래된 지연 시간과 어떻게 비례합니까?
정직한 주체의 대응 총 비용은 어떻게 측정됩니까?
이 기준을 정한 후, Arbitrum rollup 프로토콜의 두 가지 역사적 버전을 평가해 보겠습니다.
프로토콜 1: 학술 논문 프로토콜
2018년의 Arbitrum 학술 논문은 대략 다음과 같은 프로토콜을 사용했습니다(관련 없는 일관성 패턴은 무시합니다). 모든 스테이커는 제안된 결과를 주장할 수 있으며, 이를 우리는 주장(assertion)이라고 부릅니다. 특정 시간 창 내에서, 다른 스테이커의 어떤 하위 집합도 주장을 도전할 수 있으며, 주장은 각 도전자에 대해 자신의 주장을 방어해야 합니다. 각 도전이 끝날 때마다, 패배한 주체는 자신의 스테이킹 권리를 잃게 됩니다.
(여기서 여러 스테이커가 주장을 반대할 수 있도록 허용하고, 각 도전자가 주장을 뒤집을 기회를 주는 것이 필요합니다. 이는 악의적인 주체가 의도적으로 자신이 "이겨야 할" 도전을 지는 경우가 있을 수 있기 때문입니다. 각 도전자에게 개별 도전을 주는 것은 정직한 도전자가 잘못된 주장을 이길 수 있도록 보장합니다. 악의적인 주체가 도전을 의도적으로 지더라도 말입니다.)
도전이 없거나 주장이 모든 도전을 이긴 경우, 주장은 확인되고 프로토콜은 계속 진행됩니다. 그러나 주장이 어떤 도전에서든 패배하면, 그 주장은 거부되고 프로토콜 상태는 주장을 하기 전의 상태로 롤백됩니다.
평가
이 프로토콜은 유효한 사기 증명을 가지고 있지만, 진행을 보장하지는 않습니다. 악의적인 참가자가 무한히 잘못된 주장을 할 수 있기 때문입니다. 매번 스테이킹 권리를 희생하더라도, 잘못된 주장을 하고 거부하는 무한 루프를 초래하여 지속적인 롤백과 진행 부족을 초래합니다.
프로토콜 2: 분기 및 가지치기
현재의 Arbitrum 프로토콜(2020년 이후 모든 버전의 Arbitrum에 배포됨)은 이전 프로토콜을 개선하기 위해 분기를 도입했습니다. 그 아이디어는 여러 스테이커가 상호 경쟁하는 주장을 할 수 있도록 하고, 상호 경쟁하는 주장을 분기 체인으로 간주하는 것입니다. 그런 다음 일련의 도전이 분기를 서로 대결시켜, 최종적으로 모든 분기를 가지치기하여 하나의 분기만 남겨 확인되도록 합니다.
구체적인 방식은 다음과 같습니다. 블록체인 내의 각 Rollup 블록은 첫 번째 하위 블록(즉, 후속 블록)이 스테이커에 의해 생성된 시간 스탬프를 추적합니다. 다른 스테이커는 추가 하위 블록을 생성할 수 있습니다. 각 하위 주장은 암묵적으로 자신의 모든 오래된 블록이 잘못되었다고 주장합니다.
주장을 생성하는 스테이커는 이를 스테이킹해야 하며, 다른 스테이커도 이를 스테이킹할 수 있습니다.
두 스테이커가 자매(siblings) 주장에 베팅하고, 두 스테이커 모두 도전 중이 아니라면, 두 스테이커 간에 도전을 시작할 수 있습니다. 여기서 두 자매 주장 중 더 오래된 스테이커가 그 오래된 자매 주장의 정확성을 방어하고, 다른 스테이커가 그 정확성에 도전합니다. 도전에서 패배한 스테이커는 자신의 스테이킹 권리를 잃고, 스테이커 집합에서 제거됩니다.
이 프로토콜은 행동의 마감 기한을 포함합니다. 첫째, 부모 주장을 생성하는 하위 주장의 마감 기한은 첫 번째 하위 주장이 생성된 후의 도전 기간입니다. 둘째, 주장을 스테이킹하는 마감 기한은 해당 주장이 생성된 후의 도전 기간입니다.
주장을 스테이킹하는 마감 기한이 지나고, 아무 스테이커도 해당 주장에 스테이킹하지 않으면, 그 주장은 삭제됩니다. 가지치기된 주장의 모든 자손, 손자 또는 기타 후손도 동시에 가지치기됩니다.
어떤 주장이 도전 기간 이전에 생성되고, 가지치기되지 않은 자매 주장이 없다면, 그 주장은 확인될 수 있으며, 이는 프로토콜의 진행을 나타냅니다.
평가
이 프로토콜은 유효한 사기 증명을 가지고 있으며, 중앙 집중화된 운영자나 증명자가 진행을 방해할 수 없으므로, 어떤 참가자도 진행을 촉진할 수 있습니다. 진행을 촉진하기 위해, 정직한 스테이커는 올바른 하위 주장을 게시할 수 있습니다(존재하지 않는 경우). 그 후, 마감 기한 이전에 제한된 시간이 지나야 하며, 이로 인해 더 이상의 자매 주장이 생성되지 않거나, 기존 자매 주장에 더 많은 스테이커가 베팅할 수 없도록 합니다. 그 시점부터, 정직한 스테이커는 일련의 도전에 참여하여 잘못된 스테이킹 주체를 한 번에 하나씩 이기고 제거합니다(여러 정직한 참가자가 스테이킹에 참여할 경우, 그들은 동시에 상대를 이길 수 있습니다). 모든 이러한 참가자가 제거되면, 올바른 하위 주장을 확인할 수 있습니다.
이 프로토콜에 대한 가장 효과적인 지연 공격은, 악의적인 스테이커가 잘못된 자매 주장에 스테이킹하고, N-1명의 악의적인 스테이커가 올바른 자매 주장에 스테이킹하도록 하는 것입니다. 올바른 자매 주장에 스테이킹하는 정직한 스테이커의 수와 관계없이, 공격자는 정직한 주체가 도전을 시작하기 전에 잘못된 스테이커가 먼저 동맹에 도전하도록 조정할 수 있습니다(비관적으로 말하자면, 공격자가 항상 정직한 주체보다 먼저 거래에 들어갈 수 있다고 가정합니다). 동맹자는 또한 도전을 의도적으로 포기하여 가능한 한 시간을 지연시킵니다(지연 규칙에 따라 각 동맹자는 1~2개의 도전 기간이 필요할 수 있습니다). 모든 N-1명의 동맹자가 자신을 희생한 후에야, 잘못된 베팅을 한 스테이커가 정직한 주체와 도전을 하도록 요구받고, 정직한 주체가 승리하여 결국 잘못된 베팅을 한 스테이커를 제거하게 됩니다.
이 공격은 약 N개의 도전 기간의 지연을 초래하며, 공격자는 N개의 스테이킹 권리를 희생하게 됩니다.
정직한 주체가 이 공격에 대응하는 비용은 정직한 주체의 수에 선형적으로 비례합니다. 왜냐하면 각 정직한 주체가 스테이킹 마감 기한 이전에 스테이킹해야 하기 때문입니다.
요약:
- 진행 보장
- 공격 비용은 초래된 지연과 선형 관계
- 정직한 주체의 비용은 정직한 주체의 수에 선형 관계
허가 기반 검증
현재 Arbitrum에 배포된 프로토콜 2가 직면한 지연 공격 문제는, 검증자 역할을 허가된 주체 집합으로 제한하기로 선택한 이유입니다. 이는 검증을 완전히 허가 없이 수행할 수 없도록 하기 위함입니다. 허가 없는 검증을 구현하기 위한 마지막 단계는 지연 공격에 최대한 저항할 수 있는 프로토콜 버전이 필요합니다. 여러분은 이미 그러한 프로토콜 버전이 존재한다는 것을 추측하셨을 것입니다. 우리는 현재 이를 구현하기 위해 노력하고 있습니다.
곧 출시될 프로토콜 3
이 글은 이미 길어졌으므로, 새로운 프로토콜에 대한 구체적인 설명은 제공하지 않겠습니다. 이는 이후의 글에서 다룰 내용입니다.
간단히 요점을 말씀드리자면: Arbitrum 프로토콜의 다음 버전은 주장과 도전의 작동 방식에 대해 약간의, 그러나 (제가 생각하기에) 우아한 변화를 주어, 최악의 경우 지연 공격이 단 하나의 도전 기간의 지연만 초래하도록 합니다(공격자가 얼마나 많은 스테이킹 권리를 잃고 싶어하든 상관없이).
이는 Arbitrum 연구팀의 기술적 돌파구를 기반으로 하며, "모두 대 모두" 도전이 가능하고 효율적으로 이루어질 수 있게 합니다. 이는 정직한 스테이커가 악의적인 분기 주장을 게시하는 공격자 집단을 효과적으로 이길 수 있게 합니다.
새로운 프로토콜의 규격은 완전히 확정되었으며, 현재 구현 중에 있습니다. 물론, 철저한 테스트와 코드 감사가 이루어지기 전에는 메인넷에 출시하지 않을 것입니다.
이후의 글에서 이 새로운 프로토콜에 대해 깊이 탐구할 것입니다.