The Three Transitions By Vitalik — 상편

GreenGaguri
Decipher Media |디사이퍼 미디어
16 min readJul 5, 2023

--

Author: GreenGaguri, Yechan Jeong

Seoul Nat’l Univ. Blockchain Academy Decipher(@decipher-media)

Reviewed By (하성환, 박찬우, 임요한)

The Three Transitions By Vitalik — 상편

The Three Transitions By Vitalik — 하편

작성 배경

2023년 6월 9일, 글 작성일로부터 약 2주 전, 비탈릭 부테린은 그의 블로그에 ‘The Three Transitions’라는 글을 올렸습니다. 비탈릭 부테린은 이더리움의 창시자이자 블록체인 업계의 오피니언 리더로, 해당 글에서 이더리움의 UX 방향성에 대해 논하였습니다. 우리는 이 글을 통해 현재 블록체인을 대표하는 체인 중 하나인 이더리움이 어떤 문제를 가지고 있는지 살펴보고, 그에 대한 해결책과 방향성에 대한 힌트를 얻을 수 있습니다.

하지만 여느 비탈릭 블로그 글이 그렇듯, 이 글 역시 사전 지식을 필요로 하고, 어느정도 기술적인 깊이가 있습니다. 그래서 독자를 위해 해당 글을 쉽게 풀어서 설명하고, 또 이에 대한 필자의 생각을 덧붙이고자 글을 작성하였습니다. 이해를 돕기 위해 글을 재구성 하였으며, 오해의 소지가 있을만한 의견은 필자가 작성했음을 명확히 밝혔습니다.

The Three Transitions란

이더리움은 실험적인 기술을 넘어, 어느덧 공개성이나 무허가성 등의 가치를 많은 사용자들에게 제공해주는 성숙한 기술이 되었습니다. 이에 더 많은 사용자들을 위하여, 이더리움은 다음 세가지 측면에서의 기술적 전환이 필요합니다. L2의 사용, 스마트 컨트랙트 지갑, 프라이버시.

출처 : 원문(The Three Transitions by Vitalik Buterin)

(1) L2의 사용 : 모든 사용자는 L2를 이용할 필요가 있습니다. 현재 이더리움에서 일반적인 트랜잭션은 약 4달러, 즉 5천원 정도의 가스비를 요구합니다. 그러나 이더리움 가격 급등, 혹은 밈코인 전쟁과 같은 사태는 계속해서 일어날 수 있고, 이에 일반 트랜잭션 비용은 약 80달러, 거의 10만원까지도 올라갈 수 있습니다. 대중, 일반 유저를 대상으로 한 일반적인 서비스가 이더리움(L1) 위에서 사용되기란 쉽지 않습니다.

(2) 스마트 컨트랙트 지갑의 사용 : 모두가 컨트랙트 지갑을 사용해야 합니다. 현재 EOA(Externally Owned Account) 체계는 여러 문제를 가지고 있습니다. 한 번 생성된 비밀키의 변경과 복구가 불가능하고, 이는 사용자 경험을 크게 저하시키며, 어떤 측면에서는 보안을 취약하게 하기도 합니다.

(3) 프라이버시 보장 : 마지막은 프라이버시 문제입니다. 현재 블록체인은 내재된 특성으로 인해 거의 모든 데이터가 공개됩니다. 이런 무분별한 공개성은 오히려 블록체인의 활용처를 제한하고 사용자의 프라이버시를 크게 악화시킵니다.

비탈릭은 위 세가지 전환에 대해, 이것들 없이는 이더리움이 ‘실패’한다라고 말할 정도로 그 중요성을 강조했습니다. 일반적인 블록체인 사용자라면 문제점에 대해 역시 쉽게 공감할 수 있을 것 입니다.

그러나 왜 이 3가지를 묶어서 얘기하고자 했을까요? 왜 굳이 Scalability Trilemma와 같이 삼각형으로 3가지를 표현했을까요?

출처 : “Why sharding is great: demystifying the technical properties” by Vitalik Buterin

이는 비탈릭이 글에서 밝히지 않았기 때문에 알 수 없습니다. 어쩌면 큰 이유없이, 단순히 비탈릭이 삼각형을 좋아해서 그럴 수도 있습니다. 그러나 필자가 추측컨대, 이 세 방향성이 트릴레마와 비슷하게, 독립적인 문제가 아니기 때문일 것입니다. (물론 트릴레마처럼 3가지 조건이 동시에 달성될 수 없다는 뜻은 절대 아닙니다.) 비탈릭은 글에서 위 세가지 전환이 ‘동시에’ 일어나야 한다고 말했습니다. 하나의 방향성을 위해 문제를 해결하는 것이 또 다른 방향성에서 새로운 문제를 야기할 수 있습니다. 일례로, 컨트랙트 월렛을 사용하게 되면, EOA와 달리 각 L2마다 지갑 주소가 달라질 수 있어 여러 L2를 사용하는데 불편함을 야기할 수 있어, 이를 해결해야 합니다.

글의 구성

비탈릭의 ‘The Three Transitions’는 L2, Contract Wallets, 프라이버시 보호, 이 3가지 방향성을 각각 그리고 동시에 달성하기 위한 여러 아이디어를 공유합니다.

글의 구성은 다음과 같습니다. 앞서 말했듯 원글과 구성이 다릅니다. 먼저 (A) 영지식증명을 통한 개인정보 보호 및 증명 서비스 예시를 소개합니다. 다음으로 (B) 자산 보유 및 전송의 프라이버시를 지키기 위한 Stealth Address에 대해 설명할 것입니다. 두 주제가 프라이버시라는 같은 키워드를 가지고 있어 연달아 놓았고, 아래 주제들에 비해 배경 지식을 더 적게 요구한다고 생각하여 앞쪽에 배치했습니다. 그 뒤, © 현재 다양한 여러 L2 위에서 컨트랙트 지갑 주소 체계에 대해 알아보며, 여러 체인 위 단일 주소/키 사용이 실질적으로 어려워짐을 확인할 수 있습니다. 여기까지 상편에서 다루며, ©는 하편에서 다뤄질 주제들의 사전 지식이자 문제 제기라고 알아주시면 됩니다.

하편에서는, (D) 여러가지 지갑의 소유권과 키 관리/복구 시스템을 위한 아이디어인 Key Store Contract에 대해 자세히 살피고, (E) 체인 간 통신을 위해 논의/개발중인 CCIP에 대해 알아볼 것입니다. 이 때, L2 ENS를 예시로 제시할 것입니다. 마지막으로는 ‘The Three Transitions’라는 글에 담긴 비탈릭의 의견과 내용에 대한 필자들의 생각을 공유하며 글을 마무리하고자 합니다.

영지식증명을 통한 개인정보 보호 및 증명 서비스

비탈릭은 이더리움이 자산 뿐만 아니라 데이터도 안전하게 보관할 필요가 있다고 말했습니다. 이를 이행함과 동시에 영지식 증명을 통해 정보의 활용이 가능하게 하는 서비스인 ZuPass를 예시로 들었습니다.

ZuPass는 영지식 증명을 기반으로하는한 신원 증명 서비스입니다. ZuPass에서는 stamps라는 기능을 제공합니다. stamps는 ZuPass 버전의 POAP라고 이해하면 됩니다. stamps는 여러 개의 stamp를 가질 수 있으며, stamp는 일종의 증명입니다. stamps는 각 증명의 세부 정보를 밝히지 않으면서 요청된 검증만 시행할 수 있습니다. 예를 들어, Zuzalu라는 도시에 소속된 Team Cat이라는 Collection의 17번째 증명을 가지고 있다고 해봅시다. 이 때 “나는 Zuzalu의 주민이다.”라는 검증을 Team Cat#17을 밝히지 않고도 통과할 수 있습니다. 이러한 기능을 통해, 유저는 개인 정보를 보호하면서 안전하게 사용 가능합니다.

출처 : “The Three Transitions” by Vitalik Buterin

stamps는 사용자가 로컬에 정보를 저장하게 함으로써 이를 가능하게 합니다. 다만 단점으로는 기기 분실 시 회수가 불가능하다는 것입니다. 이를 방지하기 위해, 증명을 블록체인 등의 데이터 저장소에 보관할 수도 있습니다. 그러나 증명을 다른 사람이 함부로 볼 수 없어야 하므로 암호키가 필요하고 이는 또다른 비용을 초래합니다. 그리고 기기를 분실하는 것과 마찬가지로 암호키를 분실하면 정보에 대한 권한을 모두 잃는 것은 마찬가지입니다. ZuPass에서는 이런 문제를 해결하기 위한 현실적인 해결책으로, 각 유저들이 개인키를 여러 디바이스에 나눠서 저장하게 합니다.

비탈릭이 예시로 든 ZuPass 외에도, Polygon ID 역시 블록체인 위에서 개인정보 관리를 위한 솔루션의 또다른 예로 볼 수 있습니다. Polygon ID는 개인정보를 암호화하여 저장하고, 서비스가 개인정보에 대한 검증을 요청할 시, 마찬가지로 영지식 증명을 활용하여 개인정보 노출 없이 검증을 행합니다.

자산 보유 및 전송의 프라이버시(Stealth Address)

블록체인의 특성상 온체인에서 소유하고 있는 자산과 그 전송은 모두 공개되어 있습니다. 그러나 해당 정보를 노출하고 싶어하지 않는 경우가 비일비재합니다. 이러한 문제를 해결하기 위한 대표적인 솔루션으로 Tornado Cash가 있습니다.

원글에서는 짧게 지나갔지만 이해를 위해 Tornado Cash에 대해 매우 간략히 설명하자면, 다수의 사람이 똑같은 양의 똑같은 Token을 같은 스마트 컨트랙트에 예치하고, 예치 시 암호키를 찾아갑니다. 이 암호키를 가진 사람은, 예치된 자산을 찾아갈 수 있습니다. 예치한 사람과 인출한 사람을 제외하고는 누가 누구에게 주었는지 알 수 없습니다. 정확히는 같은 양의 같은 자산을 예치하고 인출한 사람이 많기 때문에, 정확한 파악이 매우 어렵습니다. 아래 그림은 이해를 돕기 위해 첨부하였습니다. 다시 비탈릭의 글로 돌아가겠습니다.

토네이도 캐시의 매우 간략한 작동 도식
토네이도 캐시의 예치 화면

그러나 토네이도 캐시는 많은 유동성을 필요로하기 때문에 ETH 또는 DAI와 같은 Major ERC-20 토큰으로 사용이 한정됩니다. 또 토네이도 캐시는 유저와 유저 간의 전송이 불가능하고, 유저와 서비스 간의 상호작용만 가능합니다. 즉, 내가 직접 알지 못하는 누군가에게 자산을 전달할 수 없습니다.(필자 의견으로, 토네이도 캐시는 블록체인에 내재된 시스템이 아니라 특정 컨트랙트이기 때문에, 트래킹을 통해 검열의 대상이 될 수 있다는 문제도 있습니다. 이에 대해 더 궁금한 분은 USDC의 토네이도 캐시 유저 자산 동결을 찾아보시면 됩니다.) 그렇다면 좀 더 광범위한 사용을 위해서 어떤 방법이 있을까요? 어떻게 하면 NFT나 사용량이 적은 토큰을 다른 사람들에게 노출하지 않고 전송할 수 있을까요? 이를 위해 비탈릭은 ‘Stealth Address’라는 아키텍쳐를 소개했습니다.

Stealth Address

Stealth Address에 대해 자세히 알아보기 전에 먼저 간략히 설명해보겠습니다. Alice가 Bob에게 어떤 NFT를 보낼 때, Alice가 Bob의 스텔스 주소를 직접(Bob이 아닌 Alice가) 생성하고, 거기에 NFT를 보냅니다. 이 때, Alice가 생성해서 보낸 해당 주소가 Bob의 주소인지는 Alice와 Bob 단 둘만 알고 있고, 해당 주소에 대한 권한은 오직 Bob만 가지고 있습니다. 그럼 아래 도식과 함께 스텔스 주소 체계가 어떻게 동작하는지 자세히 살펴보겠습니다.

먼저 원글에는 설명이 없지만, 주소 체계에 대한 간략한 배경 지식이 필요합니다. 소문자(m, r)은 비밀키를 의미합니다. 이 비밀키를 바탕으로 대문자(M, R)로 표기된 공개키를 만들어냅니다. 이 공개키를 이용해서 우리가 일반적으로 보는 0x152c3…과 같은 지갑 주소가 만들어지는 것입니다. 공개키 M을 바탕으로 만들어진 지갑 주소는 그 공개키를 생성한 비밀키 m으로만 서명이 가능합니다. 더 깊이 있는 이해가 필요하신 분은 이전에 디사이퍼 미디어에서 발간된 “타원곡선 키 톺아보기” 중 개인키와 공개키 생성 방식을 참고해주세요.

출처: “An incomplete guide to stealth addresses” by Vitalik Buterin
  1. Bob은 root spending key(m, 지출 비밀키)와 stealth meta-address(M, 지출 공개키 혹은 스텔스 메타 주소)를 생성합니다.
  2. Bob은 M을 bob.eth의 stealth meta-address로써 ENS record에 추가합니다.(1, 2번은 누군가가 처음으로 스텔스 주소 체계를 이용해 Bob에게 자산을 보내기 이전에 단 한 번만 시행되면 됩니다.)
  3. Alice가 Bob에게, 스텔스 주소 체계를 이용해 비밀리에 자산을 보내고자 합니다. Alice는 Bob이 bob.eth라는 사실은 인지하고 있습니다.
  4. Alice는 Bob의 M을 ENS에서 찾습니다.
  5. Alice는 오직 본인만 알고 있고, 한 번만 사용할 임시키 r을 생성합니다. 이는 Bob의 새로운 스텔스 주소를 생성하기 위함입니다.
  6. Alice는 자신의 임시키 r과 Bob의 meta-address M을 결합해 stealth address를 생성합니다. 그리고 해당 주소로 자산을 전송합니다.
  7. Alice는 그녀의 임시 공개키(ephemeral public key) R을 생성하고, 이를 주소 체계 내 모두가 공유하는 임시 공개키 레지스터에 게시합니다. (이 과정은 stealth address로 송금하는 트랜잭션과 같은 트랜잭션에서 수행할 수 있습니다.)
  8. Bob은 자신에게 속한 stealth address를 찾기 위해 임시 공개키 레지스트리의 전체 목록을 탐색합니다. 물론, 마지막으로 확인한 임시 공개키 이후부터 찾으면 됩니다.
  9. Bob은 각 임시 공개키 R_n을 자신의 root spending key(m)와 결합해 stealth address를 생성하고 해당 주소에 자산이 있는지 확인합니다. 자산이 있으면 그 주소를 기억했다가 언제든지 사용할 수 있습니다.(그림에 나와있는 것과 같이 Alice가 만든 임시 비밀키 r과 Bob의 스텔스 메타 주소 M을 이용해 만든 주소가 R과 m을 이용해서 만든 주소와 동일하며, 이 주소에 대한 권한은 m을 이용해서만 얻을 수 있기 때문입니다.)

이를 이용해 ETH나 Major ERC-20 토큰이 아닌 자산도 다른 사람에게 불필요하게 노출시키지 않고 전송이 가능합니다.

좀 더 복잡할 수 있지만, root spending key(m)를 viewing key(v)와 spending key(k)로 분리해서 관리하면 좀 더 다양한 사용이 가능해집니다. 예를 들어, 내가 허용하는 특정 프로토콜에 v만 제공해서 내가 가진 POAP를 전부 다 보여줄 수 있습니다. 이러면 스텔스 주소를 매번 일일이 다 보내줄 필요가 없습니다.

비탈릭이 지적한 스텔스 주소 체계의 큰 약점은 가스비 문제입니다. Alice가 NFT를 보냈지만, 새롭게 생성된 Bob의 스텔스 주소에는 NFT 외에 ETH를 지니고 있지 않습니다. 이 때, NFT 사용이나 전송을 하려면 가스비가 필요하고, 필요한 가스비를 보내는 것은 Bob이 ETH를 보유하고 있는 지갑 주소와 해당 스텔스 주소의 연결을 일으켜, 다른 사람이 Bob의 지갑 주소임을 알게되는 문제가 있습니다. 필자가 생각했을 때, 금전적, UX 측면에서의 비용이 크지만 제일 간단한 해결책으로 Alice가 NFT와 함께 ETH를 보내주는 것, 또는 Bob이 ETH를 들고 있는 지갑 주소에서 토네이도 캐시를 이용해 새로운 스텔스 주소로 ETH를 보내는 것입니다.

viewing key와 spending key 분리의 더 자세한 원리와, 비탈릭이 생각하는 가스비 문제의 해결 방안이 궁금하신 분은 원글을 확인해주시면 됩니다. 본 글의 흐름상 중요하게 다룰 부분이 아니라고 생각해 생략했습니다.

아이덴티티 관리의 어려움

이 부분은 원 글에서 비탈릭이 강조한 “Instructions for how to interact with me” would no longer just be an ETH address; they would have to be, in some form, some combination of multiple addresses on multiple L2s, stealth meta-addresses, encryption keys, and other data. 와 본 글의 하편의 주제들이 대두된 배경과 사전 지식의 이해를 돕기 위하여, 필자가 엮어서 작성하였습니다. 아래 글에서 필자는, 블록체인에서 나의 자산과 데이터, 그리고 그것들을 관리하기 위한 주소나 암호 등이 점점 많아지고 복잡해지고 있고, 그래서 이를 관리하기 위한 솔루션이 필요하다는 것을 전달하고 싶습니다.

스마트 컨트랙트 지갑의 사용은 각 체인(L2) 별 같은 주소 사용을 어렵게 합니다. 기존 EOA(Externally Owned Account)는 대부분 EVM 체인에서 하나의 비밀키만 가지고 주소를 관리할 수 있습니다. 비밀키 하나를 생성하면, 그에 대응 하는 공개키와 주소가 생성되고, 해당 주소는 대부분 체인(L2)에서 사용 가능합니다. 어떤 새로운 체인에서 한 번도 트랜잭션을 일으킨 적이 없더라도, 누군가가 해당 주소로 자산을 보내면 그 자산은 본인 소유가 되는 것입니다. 그러나 스마트 컨트랙트 주소 체계는 다릅니다. 이는 비밀키로부터 만들어지는게 아니라, 여러가지 랜덤한 요소들을 기반으로 생성됩니다. 그러나 EIP-1014(CREATE2)를 이용하여 컨트랙트를 생성하면, 스마트 컨트랙트 주소를 결정론적으로 생성할 수 있습니다.

EIP-1014 CREATE2

그러나 CREATE2로 문제가 완벽히 해결되지는 않습니다.

출처: https://safe.mirror.xyz/4GcGAOFno-suTCjBewiYH4k4yXPDdIukC5woO5Bjc4w

앞서 EOA 체계에서 하나의 비밀키를 가지고 “대부분” EVM 체인에서 동일한 주소를 소유할 수 있다고 말했습니다. 이더리움의 L2의 형태 중 zk-EVM이 존재합니다. 이 zk-EVM에는 type 1,2,3,4가 있습니다. 숫자가 커질수록 zk 계산이 효율적이고, 숫자가 낮을수록 EVM과 동일성이 높습니다. type4 zk-EVM 같은 경우는 사실 zk-VM이라고 불릴 정도로 동일성이 낮아, EVM-equivalent가 아니라 EVM-compatible L2라고도 합니다. 위 그림에서 이더리움과 폴리곤은 같은 비밀키로 동일한 주소가 생성되는 반면, type4 zk-EVM인 zkSync의 주소는 다른 것을 확인할 수 있습니다. EOA 주소 체계와 마찬가지로 앞서 말한 CREATE2도 당연히 호환되지 않습니다.

또 만약 여러 체인(이더리움, 폴리곤, 옵티미즘)에서 같은 비밀키로 동일한 주소의 스마트 컨트랙트 지갑을 관리하고 있다고 가정해봅시다. 이 때, 보안상의 문제로 옵티미즘에서 스마트 컨트랙트 지갑의 검증키를 변경했습니다. 하지만 이더리움과 폴리곤의 검증키는 여전히 그대로 입니다. 다른 검증 키를 계속 사용해야하고, 모든 체인에서 옵티미즘과 동일한 검증키를 사용하고 싶다면 각 체인 별로 변경해줘야합니다.

L2가 점점 더 많아지면서 이러한 문제들이 더욱 복잡해집니다. 또한, 이전 부분의 스텔스 주소 체계가 큰 장점을 가지고 있지만 이더리움 상에서 나를 나타내는 오브젝트가 하나 더 추가되어야 한다는 문제가 있습니다. 이더리움 지갑 주소와 ENS 그리고 ENS의 나의 메타 어드레스를 등록해야하고, 사용자는 단순 지갑 주소의 비밀키 외에도 스텔스 메타 주소의 지출 비밀키도 관리해야합니다. viewing key를 분리하면 키가 하나 더 생기고, ZuPass와 같은 서비스 사용을 위해서는 증명을 보관하기 위한 암호키가 또 하나 필요해집니다.

이러한 복잡성은 이더리움의 사용자 경험을 크게 저하시키고, 키 관리나 복구를 매우 어렵게 합니다. 이를 위해 키를 한군데서 관리할 수 있는 솔루션이나 아키텍쳐가 필요합니다. 또 L1 <> L2 간 통신과 연산을 필요로 합니다. 이에 대한 해결책으로 비탈릭이 제시한 Key Store Contract를 소개하고, 체인 간 통신을 위한 CCIP를 같이 살펴보겠습니다. 이는 하편에서 다뤄집니다.

--

--