이더리움이 Rollup 기술을 사용할 때의 안전 위험은 어디에 있나요?
본 문서는 공공 계정 백계획에 게시되었으며, 저자: Qingzhou입니다.
이더리움은 Rollup 중심의 2.0 로드맵을 확인했으며, 이는 Rollup을 뜨거운 기술로 만들었고, layer2 확장의 주류 기술이 되었다고 할 수 있습니다. 제로 지식 증명과 결합된다면, Rollup은 layer2 기술에서 해결책의 집합체가 될 것입니다.
하지만 "절대적으로 안전한 시스템은 없다"는 말처럼, Rollup 역시 일정한 보안 위험이 존재하며, 이더리움 연구자 포럼의 개발자들이 이 문제에 대해 논의하고 있습니다. 아래는 백계획 팀이 이더리움 개발자 "jchancehud"가 이전에 발표한 가상 Rollup 공격에 대한 논의를 정리하고 수정한 내용입니다.
Rollup의 보안 위험 원인
모의 Rollup 공격의 기본 원리는 다음과 같습니다: 가상 상태가 유효하기만 하면, 어떤 이더리움 노드도 Optimistic Rollup 조정자에게 거짓말을 할 수 있습니다. 조정자는 거래를 전송하거나 이더리움 공급자를 전환하려고 시도할 때(즉, 전체 노드 상태를 동기화할 때)만 이를 발견할 수 있습니다.
Optimistic Rollup은 이더리움 네트워크에서 calldata를 사용하여 블록 정보를 저장함으로써 이루어집니다. 이 과정은 누구나 이더리움 노드를 조작하고 Rollup 상태를 다운로드할 수 있게 합니다. 하지만 실제로는 일부 사람들이 자신의 이더리움 노드를 조작하지 않고, 호스팅 솔루션(예: Infura)에 의존합니다.
유효성 검증 필요
빠르고 저렴하게 유효한 Rollup 체인을 구축하려면 거래를 수행하고 상태를 구축한 후 이를 이더리움 네트워크 외부의 다른 위치에 저장해야 합니다. Rollup 조정자가 이더리움 노드로부터 상태 기록을 수신할 때, 조정자는 상태 거래를 재생하여 데이터가 유효한지 확인할 수 있습니다. 그러나 조정자는 체인 상에 해당 상태가 존재하는지 확인할 수 없으며, 가장 좋은 방법은 이더리움 노드에 문의하는 것입니다.
인위적 공격 발생 시
Untrust라는 이름의 이더리움 노드 서비스를 상상해 보십시오. Untrust는 이더리움 dapp에 저렴한 인프라를 제공합니다. 그들이 신뢰하지 않기로 선택하면 특정 Rollup을 확인하고 허구의 기록을 생성할 수 있습니다. 그들은 심지어 일부 실제 거래에서 통신 데이터를 추출하고 이를 가상 거래와 혼합하여 반가상 기록을 생성할 수 있습니다. 이렇게 하면 그들은 완전히 다른 현재 상태 해시를 생성하지만, 이는 Untrust의 Rollup 운영자가 (체인에) 블록을 제출할 때만 발견됩니다(이는 사기적입니다).
이러한 유형의 공격은 특별히 강력하지 않습니다. 공격자는 서명을 위조할 수 없으며, 자금을 직접 훔칠 수는 없지만, Rollup 내에서 자신의 활동에 대해 거짓말을 할 수 있습니다.
Untrust가 더욱 복잡해진다고 상상해 보십시오. 그들은 MoneyMover라는 Rollup을 공격하기로 결정합니다.
MoneyMover 주소에 대한 요청을 받을 때, 그들은 완전히 독립적인 이더리움 네트워크에서 실행되는 노드로부터 정보를 반환합니다. 이 독립적인 이더리움 네트워크에서 Untrust는 대부분의 거래를 미러링(계좌 잔액을 비슷하게 보이게 함)하고 필요할 때 자신의(가짜) 거래를 주입합니다.
이제 Untrust가 MoneyMover Rollup 결제를 사용하는 웹사이트를 찾았다고 가정해 보겠습니다. 이 웹사이트는 자체 MoneyMover 조정자를 운영하며, 해당 조정자는 Untrust와 연결되어 이더리움 네트워크에 접근합니다.
Untrust는 미러링 네트워크에서 허구의 거래를 생성할 수 있으며, MoneyMover 조정자는 이를 유효한 것으로 해석합니다(상태 거래가 유효하기만 하면). MoneyMover 조정자는 어떤 피어와도 연결되어 있지 않기 때문에, 체인 상에 존재하는지를 확인하는 유일한 방법은 이더리움 노드(이 경우 Untrust)에 문의하는 것입니다.
Untrust는 미러링 네트워크에서 허구의 거래를 수행했으며, 해당 웹사이트에서 운영하는 MoneyMover 조정자는 이를 유효한 결제로 감지합니다. 이제 Untrust는 비용을 지불하지 않고도 해당 웹사이트에 접근할 수 있습니다. 웹사이트는 그들이 거래를 제출하거나 다른 이더리움 공급자로 전환할 때(즉, 다른 노드와 데이터를 동기화해야 할 때)만 이러한 허구의 결제를 발견할 것입니다.
실제로 발생할 수 있는 위험
위의 공격은 조정자가 자신의 이더리움 노드를 운영하지 않을 때만 의미가 있습니다. 몇 가지 문제가 있는 상황이 있습니다:
- 조정자 데이터의 하위 사용자는 그들이 수신한 데이터가 (체인 상에) 존재하는지 알 수 없으며, 사용자는 자신이 운영하는 노드가 없기 때문에 조정자가 사용하는 eth 노드를 신뢰할 수 없습니다.
- 사기 증명자(악의적인 거래를 증명하는 쪽)는 특히 이러한 공격에 취약합니다. 왜냐하면 그들은 사기 행위가 감지될 때만 거래를 제출하기 때문입니다. 악의적인 eth 노드는 블록체인 데이터에서 무효 거래를 분리하고 단지 다른 상태 해시를 반환할 수 있습니다. 사기 증명자는 상태 해시가 허구임을 알 수 없으며, 결코 사기 주장을 제출하지 않을 것입니다.
- eth 노드 운영자가 Rollup 조정자에게 거짓말을 하여 그들이 무효 상태 거래를 제출하거나 무효 사기 주장을 제출하도록 유도합니다. 이러한 일이 발생하면, 악의적인 eth 노드 운영자는 유효한 거래 상대방으로 행동하고 담보 자금을 수집할 수 있습니다.
해결책 1
작업 증명 체인의 맥락에서 조정자는 블록 데이터를 요청하고 그 데이터가 충분히 어려운지 확인할 수 있습니다. 현재 난이도의 최소 절반을 확인하는 것만으로도 대부분의 공격이 재정적 문제로 인해 실현 불가능하게 만들 수 있습니다.
지분 증명 체인에서는 이 과정이 실행 불가능해집니다. 왜냐하면 악의적인 eth 노드가 투표하지 않은 주소에서 서명을 제공할 수 있기 때문입니다. 그들은 쿼리할 때 담보 금액을 스테이킹함으로써 이를 수행할 수 있습니다.
해결책 2
그다지 우아하지 않은 해결책은: 신뢰할 수 있는 노드에 대해 지속적으로 서명하고, 체인에 존재하는 Rollup 상태 해시의 목록을 게시하는 것입니다. 이 목록은 IPFS와 같은 서비스에 게시될 수 있습니다. 조정자 노드는 알려진 신뢰할 수 있는 공개 키의 사전 설정된 목록(롤업 생성자, EF 등)을 포함할 수 있습니다.
조정자는 다음과 같은 경우 Rollup 데이터가 진짜임을 알 수 있습니다: - 모든 상태 거래가 유효합니다.
- 모든 상태 해시는 신뢰할 수 있는 출처(노드)에서 서명되었습니다.
이것은 Rollup 데이터가 유효하고 허구가 아님을 보장하며, Rollup 노드가 데이터를 동기화하기 위해 어떤 이더리움 노드도 사용할 수 있게 합니다.
위의 내용은 "jchancehud"가 논의한 Rollup 보안 공격의 가능성입니다. 주로 Rollup이 체인 외 상태이기 때문에 많은 상태에서 정보 동기화가 지연될 수 있는 상황이 발생할 수 있습니다. "jchancehud"에 따르면, 체인 외 상태의 유효성을 검증해야 하는 쪽은 다른 이더리움 전체 노드의 데이터를 동기화해야 최종 안전성을 확인할 수 있으며, 이는 많은 플랫폼이 이더리움 노드를 운영해야 함을 의미합니다.
위에서 언급한 가상 공격 방식에 대해 이더리움의 layer2 솔루션 팀 SKALE Labs의 최고 기술 책임자 "Konstantin Kladko"는 "정말 흥미롭습니다! 이는 Infrua를 파괴함으로써 모든 Rollup을 기본적으로 파괴할 수 있음을 나타냅니다."라고 말했습니다.
물론, 이는 Infura를 통해 이더리움과 통신하는 제품을 나타내며, Infura는 상당한 이더리움 노드 서비스 규모를 차지하고 있습니다. 이전에 Infura가 이더리움 네트워크의 최대 단일 지점 취약점이 될 것인지에 대한 논의도 있었습니다. 이 단일 지점 보안 위험에 대해서는 주로 다중 노드 로드 밸런싱 방식으로 처리하여 최대한 회피하려고 합니다.
"jchancehud"의 논의에 대해 가장 흥미로운 점은 개발자 "adlerjohn"이 이러한 가상의 "공격"이 optimistic Rollup뿐만 아니라 zkRollup에도 적용될 수 있으며, 실제로는 모든 스마트 계약에도 적용될 수 있다고 제안한 것입니다.
이 추론은 "정보 비대칭 위험이 존재하는 한" 협력 과정에서 "jchancehud"가 언급한 공격 위험에 직면할 것이라는 것을 기반으로 할 가능성이 높습니다.
따라서 "adlerjohn"은 비트코인 백서 8절에서 정보의 진위를 검증하는 방법, 즉 검증자가 가장 긴 체인을 확인하고 가장 긴 체인을 신뢰하는 방식을 제시했습니다. 이 방법은 Sybil 노드가 허위 정보를 제공하는 것을 방지하는 잘 알려진 계획을 설명합니다. 이렇게 하면 대다수의 계산이 정직할 필요가 없습니다.
비트코인 백서의 8절
또한, "adlerjohn"은 Rollup의 상태 루트가 이벤트로 발행될 수 있으며, 심지어 이더리움 상태에 저장될 수 있고, 허구의 거래 쿼리도 수행할 수 있다고 제안했습니다(예: 비트코인 백서 7절에서 블록 헤더를 검증하여 확인할 수 있다고 언급됨).
비트코인 백서의 8절
또한, "adlerjohn"은 optimistic Rollup 계획에 "최소 실행 가능한 병합 합의"라는 설계를 포함할 수 있다고 언급했습니다. 이 설계는 순서가 있는 데이터를 게시하여 데이터 가용성을 실현할 수 있으며, 여러 사이드 체인 및 샤딩을 사용할 수 있게 합니다.
하지만 "adlerjohn"이 제안한 방식은 상당한 설계 난이도가 존재할 것으로 예상됩니다.
논의의 마지막에 "jchancehud"는 "adlerjohn"에게 이러한 공격 예측이 ZKRollup에 적용될 수 있는지 확실하지 않다고 답했습니다. 그러나 ZK 증명이 생성하기 더 어렵기 때문에 최소한 더 어려울 것입니다. Rollup이 널리 채택된다면, Rollup을 고려하는 것이 특히 중요합니다.
Rollup 조정자는 사용 노드를 사용하기 전에 노드 내의 모든 블록 헤드를 검증할 수 있으며, 이는 또 다른 잠재적 해결책이지만, 시간과 대역폭이 비쌉니다. 그러나 사용자는 자신이 신뢰할 수 있는 eth 경량 노드를 운영하는 것이 가장 좋습니다. 검증 문제를 해결했다면, 경량 노드를 운영하여 이벤트를 쿼리할 수도 있습니다.
논의의 마지막에 우리는 안전성, 확장성, 효율성을 달성하기 위해 이러한 솔루션이 공학적 사고로 시도될 수 있음을 발견하지만, 구현 과정은 반드시 어려울 것입니다. 왜냐하면 서로 다른 개발자들의 논의 사고가 최종적으로 코드를 통합해야 하며, 네트워크 구조, 클라이언트, 언어, 운영 인터페이스 등 여러 도전 과제를 포함해야 하기 때문입니다.
타임스탬프는 앞으로 나아가고, 블록은 계속해서 생성되며, 우리는 계속 기대해 봅시다.