Mastering Zcash

2026년 1월 12일
1989년 베를린 장벽 붕괴를 축하하는 레너드 번스타인의 '자유의 송가' 콘서트
1989년 크리스마스, 베를린 장벽 붕괴를 축하하는 레너드 번스타인의 "자유의 송가" 콘서트. 오케스트라는 동서독과 전후 베를린 점령 4개국을 대표하는 연주자로 구성되었다. 이 콘서트는 20개국 이상에서 약 1억 명의 시청자에게 생중계되었다. 억압, 전체주의, 공산주의에 대한 자유, 민주주의, 자본주의의 승리.

Giulia Mouland의 피드백과 편집 검토, 그리고 Arjun Khemani의 지원에 깊은 감사를 드린다.


목차

1. 서론

현금을 사용하지 않는 한, 당신이 하는 모든 구매 정보는 추적되어 무기한 저장된다. 무엇을 샀는지, 얼마나 민감한 거래인지는 중요하지 않다. 온라인과 오프라인 상거래를 가능하게 하는 인프라는 사실상 피할 수 없는 감시 장치가 되어버렸다.

비트코인이 처음 출시되었을 때, 많은 사람들이 이 문제를 해결해줄 것이라 기대했다. 하지만 안타깝게도 그렇지 못했다. 사실 많은 사람들의 이해와는 달리, 비트코인은 믿기 어려울 정도로 투명하다. 모든 거래가 영구적으로 저장되어 누구나 볼 수 있기 때문이다. 물론 지갑은 가명(pseudonymous)으로 운영되지만, BTC를 받으려면 주소를 상대방에게 알려줘야 하고, 그 순간 당신의 전체 거래 내역과 잔액이 송금인에게 노출된다. 게다가 Arkham 같은 서비스들 덕분에 이제는 일반인도 손쉽게 지갑을 추적하고 신원을 파악할 수 있게 되었다.

역주: 가명성(Pseudonymity)이란?
실명 대신 다른 식별자(예: 지갑 주소)를 사용하는 것을 말한다. 익명성과 달리, 가명은 행동 패턴을 분석하면 실제 신원과 연결될 수 있다.

이것이 바로 당국이 비트코인을 용인하는 이유다. 국가 입장에서 투명한 블록체인은 그들이 직접 통제하는 디지털 화폐(흔히 중앙은행 디지털화폐, CBDC라고 부른다)보다 여러 면에서 더 낫다. 비트코인 사용에 대한 대중의 저항도 없고, 당국이 체인 데이터를 어떻게 활용하는지에 대한 감독도 없으니, 국가는 아무런 제재 없이 모든 것을 완벽하게 추적할 수 있다.

어떤 면에서 비트코인은 자신이 대체하려 했던 은행 시스템보다 더 나쁘다. 최소한 은행 기록은 일반 대중에게는 비공개다. 비트코인은 그렇지 않다.

바로 이런 이유로 Zcash는 다른 접근법을 취한다. 기본값이 투명성인 대신, 기본값이 프라이버시인 것이다. 이것은 차폐된(shielded) Zcash 거래를 할 때, 송신자, 수신자, 거래 금액이 모두 암호화된다는 의미다. 네트워크는 거래가 유효한지, 즉 당신이 보유한 ZEC보다 더 많이 지출하려는 것은 아닌지 검증하지만, 거래 자체에 대한 어떤 정보도 알지 못한다.

참고
ZEC는 Zcash의 티커 심볼로, 비트코인의 BTC와 같은 역할을 한다.

처음 생각해보면 이건 불가능해 보인다. 증명하려는 것을 드러내지 않고 어떻게 그것이 참임을 증명할 수 있을까? 답은 영지식 증명(zero-knowledge proofs), 구체적으로는 zk-SNARKs라는 구조에 있다. 이 글에서 zk-SNARKs에 대한 설명은 일반 독자들이 접근할 수 있도록 가볍게 다룰 것이다. 이를 깊이 이해하려면 대수학과 커밋먼트 스킴(commitment schemes)에 대한 상당한 배경 지식이 필요한데, 이는 본 글의 범위를 벗어난다.

역주: 영지식 증명이란?
"나는 비밀번호를 알고 있다"는 것을 비밀번호 자체를 보여주지 않고 증명하는 기술이다. 마치 금고를 열 수 있다는 것을 금고 비밀번호를 말하지 않고 증명하는 것과 같다.

우리는 또한 Zcash의 학술적 암호학에서의 기원, 이를 형성한 철학, 그리고 오늘날 존재하는 프로토콜의 모습을 다룰 것이다.

이 Zcash 종합 연구의 일부 내용은 다소 기술적이다. 모든 사람이 최대한 명확하고 접근하기 쉽게 이해할 수 있도록 노력했지만, 특정 개념이 어렵다면 AI에게 설명을 요청하거나, 그냥 넘어갔다가 나중에 다시 읽어보길 권한다. 그래도 안 된다면 언제든 질문해주길 바란다.

데이비드 차움, 암호학 선구자
데이비드 차움(David Chaum), 암호학계 선구자.

2. 기원

2.1 데이비드 차움과 디지털 현금의 탄생

프라이버시를 보장하는 디지털 화폐라는 아이디어는 결코 새로운 것이 아니다. 사실 1982년으로 거슬러 올라간다. 당시 컴퓨터 과학 박사과정 학생이었던 데이비드 차움은 "추적 불가능한 결제를 위한 블라인드 서명(Blind Signatures for Untraceable Payments)"이라는 논문을 발표했다.

이 논문의 핵심 통찰은 단순하면서도 우아했다. 은행이 디지털 토큰의 내용을 보지 않고도 서명할 수 있다는 것이다. 마치 봉인된 봉투의 바깥쪽에 서명하는 것처럼 말이다. 그러면 토큰이 사용될 때, 은행은 자신의 서명을 통해 그 유효성을 검증할 수 있지만, 그 지출을 인출과 연결할 수는 없다.

1989년, 데이비드 차움은 이 아이디어를 상용화하기 위해 DigiCash라는 회사를 설립했다. 제품 이름은 ecash였고, 사용자들이 은행 계좌에서 디지털 토큰을 인출하여 구매자와 구매를 연결하는 흔적을 남기지 않고 상점에서 사용할 수 있게 했다. 도이치방크(Deutsche Bank)와 크레디트스위스(Credit Suisse)를 포함한 여러 은행들이 이 기술을 시범 운영했다.

안타깝게도 DigiCash는 성공하지 못했다. 타이밍이 맞지 않았던 것이다. 이것이 인터넷 상거래가 보편화되기 전, 사람들이 온라인 프라이버시의 중요성을 이해하기 전에 만들어졌다는 점을 기억하라. 회사는 1998년에 파산 신청을 했지만, ecash를 통해 차움은 프라이버시를 보장하는 디지털 화폐가 가능하다는 것을 증명했다.

2.2 사이퍼펑크

얼마 지나지 않아 다른 종류의 운동이 형성되기 시작했다. 1992년, 암호학자, 해커, 자유지상주의자 그룹이 샌프란시스코 베이 에어리어에서 만나고 전자 메일링 리스트를 통해 소통하기 시작했다. 그들은 스스로를 사이퍼펑크(cypherpunks)라고 불렀다.

사이퍼펑크들은 논문을 쓰는 학자들이 아니었다. 그들은 코드를 작성하는 이념가들이었다. 그들의 창립 전제는 디지털 시대에 프라이버시는 정부나 기업이 부여하는 것이 아니라, 개인들이 암호학적 도구를 사용해 구축하고, 배포하고, 방어해야 한다는 것이었다. 1993년, 그룹 멤버인 에릭 휴즈(Eric Hughes)는 이 개념을 "사이퍼펑크 선언문(A Cypherpunk's Manifesto)"에서 결정화했다.

"프라이버시는 전자 시대의 열린 사회에 필수적이다... 우리는 정부, 기업, 또는 다른 거대하고 얼굴 없는 조직들이 선의로 프라이버시를 부여해줄 것이라 기대할 수 없다... 프라이버시를 원한다면 우리 스스로 지켜야 한다... 사이퍼펑크는 코드를 작성한다."

이 메일링 리스트는 이후 30년간의 암호학 발전을 형성할 아이디어들의 용광로가 되었다. 멤버들 중에는 줄리안 어산지(WikiLeaks 이전의), 할 피니(훗날 최초의 비트코인 거래를 받게 되는), 닉 재보(비트코인의 개념적 전신인 bit gold를 제안한), 웨이 다이(사토시 나카모토가 인용한 b-money 제안자)가 있었다. 1997년에는 또 다른 멤버인 아담 백(Adam Back)이 훗날 비트코인이 채택하게 될 작업증명(Proof of Work) 시스템인 Hashcash를 발명했다.

사이퍼펑크들은 성공적인 프라이버시 화폐를 만들지 못했다. 아니, 만들었을까? 비트코인의 창시는 사이퍼펑크와 연관된 것으로 알려진 익명의 사토시 나카모토에게 귀속되며, 그는 10년 넘게 활동하지 않고 있다. 어쨌든 우리가 확실히 아는 것은, 사이퍼펑크들이 프라이버시 화폐를 가능하게 만든 문화, 도구, 지적 프레임워크를 구축했다는 것이다.

2.3 비트코인: 잘못된 트레이드오프

2008년 10월 31일, 사토시 나카모토는 "비트코인: P2P 전자 현금 시스템(Bitcoin: A Peer-to-Peer Electronic Cash System)"이라는 논문을 암호학 메일링 리스트에 게시했다. 이 논문은 수십 년간 디지털 화폐 설계자들을 괴롭혀온 문제에 대한 해결책을 설명했다. 중앙 기관에 의존하지 않고 어떻게 이중 지불을 방지할 수 있을까?

사토시가 제안한 답은 블록체인이었다. 분산된 채굴자 네트워크가 유지하고 작업증명으로 보안되는 공개 원장. 이것은 훌륭했고, 작동했다! 비트코인은 2009년 1월에 출시되었고, 처음으로 사람들은 은행, 중개인, 허가 없이 인터넷을 통해 가치를 전송할 수 있게 되었다.

참고
채굴자와 작업증명(PoW)이 무엇이고 Zcash의 맥락에서 어떻게 작동하는지는 이 글의 뒷부분에서 다룰 것이다.

그러나 앞서 언급했듯이 한 가지 명백한 문제가 있었다. 비트코인은 프라이버시를 보장하지 않는다. 블록체인은 설계상 완전히 공개된다. 모든 거래, 모든 주소, 모든 잔액이 관심 있는 누구에게나 보인다. 사토시는 논문에서 이 문제를 인정하며, 사용자들이 각 거래마다 새 주소를 사용하면 어느 정도 프라이버시를 보존할 수 있다고 제안했다. 하지만 이는 약한 완화책에 불과했다. 주소는 클러스터링될 수 있고, 거래 그래프는 분석될 수 있으며, 거래소, 상점, 메타데이터를 통해 실제 신원이 연결될 수 있기 때문이다.

나카모토는 또한 프라이버시를 보존하는 형태의 비트코인이 더 깔끔한 프로토콜 구현을 가능하게 할 것이라고 인정했지만, 당시에는 영지식 증명으로 그것을 어떻게 실현할 수 있을지 상상할 수 없었다.

문제는 프라이버시 문제가 수년간 간과되었다는 것이다. 초기 비트코인 사용자들은 가명성이 익명성에 충분히 가깝다고 가정했지만, 틀렸다. 2010년대 초반, 연구자들은 블록체인 분석으로 높은 정확도로 사용자를 신원 파악할 수 있음을 증명했다. 2014년에 설립된 Chainalysis 같은 회사들은 이것을 사업화하여 법 집행 기관, 거래소, 심지어 정부에 블록체인 포렌식을 판매했다.

비트코인은 이중 지불 문제를 해결했지만, 프라이버시 문제는 더 악화시켰다.

2.4 Zerocoin: 덧붙이기식 시도

2013년, 존스홉킨스 대학교의 암호학자 매튜 그린(Matthew Green)과 두 명의 대학원생 이안 마이어스(Ian Miers), 크리스티나 가먼(Christina Garman)이 비트코인의 문제에 대한 해결책을 제안하는 "Zerocoin" 논문을 발표했다.

그들의 아이디어는 비트코인 위에 프라이버시 레이어를 추가하는 것이었다. 사용자들이 비트코인을 제로코인으로 변환할 수 있게 하는 것인데, 제로코인은 거래 내역이 없는 익명 토큰이다. 나중에 사용하고 싶을 때 다시 비트코인으로 변환하면 된다. 이 변환 과정은 영지식 증명이라는 암호학적 기법에 의존했는데, 이를 통해 유효한 제로코인을 소유하고 있음을 그 출처를 밝히지 않고 증명할 수 있었다.

Zerocoin은 이론적으로는 작동했지만 문제가 있었다. 첫째, 증명의 크기가 컸다. 일반 비트코인 거래에 필요한 수백 바이트보다 두 자릿수나 더 컸다. 둘째, 암호학적으로도 제한이 있었다. 소유권은 증명할 수 있었지만 거래 금액은 숨길 수 없었다. 셋째, 가장 치명적으로, 비트코인이 이를 프로토콜 변경으로 채택해야 했는데, 비트코인의 보수적인 개발 문화에서는 가능성이 희박했다.

비트코인 커뮤니티는 Zerocoin을 논의했고 결국 거부하기로 결정했다. 이 제안은 프로토콜에 포함되지 못했다.

2.5 Zerocash: 재설계

2014년, 새로운 논문이 발표되었다. 저자 목록은 새로운 세대의 영지식 증명을 연구해온 암호학자 엘리 벤-사손(Eli Ben-Sasson)과 알레산드로 키에사(Alessandro Chiesa), 그리고 에란 트로머(Eran Tromer)와 마다르스 비르자(Madars Virza)가 추가되어 확장되었다.

논문 제목은 "Zerocash: 비트코인 기반의 분산형 익명 결제(Zerocash: Decentralized Anonymous Payments from Bitcoin)"였다. 제목이 암시할 수 있는 것과 달리, 이것은 단순한 비트코인 확장이 아니라 완전한 재설계였다.

핵심 혁신은 zk-SNARKs의 사용이었다. 이는 "Zero-Knowledge Succinct Non-Interactive Arguments of Knowledge"의 약자다. 이것은 크기가 작고(수백 바이트), 검증이 빠르며(밀리초 단위), 숨겨진 데이터에 대한 복잡한 진술을 증명할 수 있을 만큼 표현력이 있는 영지식 증명이었다. zk-SNARKs를 사용하면 유효한 코인을 소유하고 있다는 것만 증명하는 것이 아니라, 전체 거래가 유효하다는 것을 증명할 수 있다. 이것은 사소한 일이 아니다. 시스템이 송신자, 수신자, 금액을 드러내지 않으면서 거래 금액이 정확하고 이중 지불이 없음을 검증한다는 의미이기 때문이다.

역주: zk-SNARKs를 쉽게 이해하기
마치 "나는 스도쿠를 풀었다"를 증명하되, 실제 답을 보여주지 않는 것과 같다. 검증자는 당신이 정말 풀었는지 확인할 수 있지만, 답 자체는 알 수 없다.

그러나 문제가 있었다. zk-SNARKs는 신뢰 설정(trusted setup)이 필요했다. 누군가가 시스템이 영원히 사용할 공개 매개변수 집합을 생성해야 했는데, 만약 그 사람이 매개변수 생성에 사용된 비밀 값(소위 "유독성 폐기물(toxic waste)")을 보관한다면, 감지할 수 없게 위조 코인을 만들 수 있었다. 이것은 심각한 우려였지만, 연구자들은 신중한 절차 설계로 이를 방지할 수 있다고 믿었다.

2.6 제네시스 블록

주코 윌콕스(Zooko Wilcox)는 수십 년간 프라이버시와 암호학 분야에 있었다. 그는 1990년대에 DigiCash에서 일했고 Tahoe-LAFS 같은 강력한 프라이버시 속성을 가진 분산 저장 프로젝트에 참여했다. 그래서 Zerocash 논문이 발표되었을 때, 그것은 즉각적으로 맞아떨어졌다.

2016년, 윌콕스는 Zcash Company(나중에 Electric Coin Company로 개명)를 설립하고 Zerocash를 실제 운영되는 암호화폐로 만들 팀을 구성했다. 앞서 언급한 학술 저자들이 프로젝트의 자문 및 협력자로 합류했다.

앞서 강조한 신뢰 설정 문제는 창의적인 해결책이 필요했다. 팀은 정교한 다자간 계산 절차를 설계했다. 전 세계 다른 위치에 있는 여섯 명의 참가자가 공개 매개변수를 생성하기 위해 무작위성을 기여하고, 최소한 한 명의 참가자가 자신의 비밀 입력을 파괴하기만 하면 유독성 폐기물은 복구 불가능하게 된다. 절차는 2016년 말에 진행되었으며, 참가자 중에는 비트코인 코어 개발자 피터 토드(Peter Todd)와 과정을 기록한 기자들이 포함되었다. 절차가 손상되지 않도록 하기 위해 광범위한 작업이 이루어졌다.

2016년 10월 28일, Zcash 제네시스 블록이 채굴되었다. 처음으로 실제 운영되는 암호화폐가 진정한 암호학적 프라이버시를 제공했다. 데이비드 차움의 첫 논문으로부터 34년 만에, 추적 불가능한 디지털 화폐의 꿈이 살아있는 네트워크에서 실현되었다.

바이마르 공화국의 초인플레이션
바이마르 공화국의 초인플레이션. 지폐가 너무 가치가 떨어져 벽지로 사용되었다.

3. Zcash란 무엇인가?

3.1 비트코인 기초


이미 비트코인의 작동 방식을 이해하고 있다면 이 섹션을 건너뛰어도 좋다. 이 섹션은 비트코인의 내부 작동에 익숙하지 않은 독자들을 위한 것이다.

비트코인은 본질적으로 중앙 운영자가 없는 결제 시스템이다. 은행도, 회사도, 지목할 수 있는 단일 서버도 없다. 분산된 메커니즘은 전 세계 수천 대의 컴퓨터가 블록체인이라 불리는 공유 원장의 동일한 사본을 유지하고, 동기화 상태를 유지하기 위한 규칙 집합을 따르는 방식으로 작동한다.

블록체인은 추가 전용(append-only) 데이터 구조이며, 말 그대로 블록들의 체인이다. 새 항목(블록)을 추가할 수는 있지만, 이전 것을 수정하거나 삭제할 수는 없다. 각 새 블록은 블록이 생성된 시점에 네트워크에서 이루어진 거래들로 구성된다. 또한 각 블록은 이전 블록을 참조하여 체인을 형성한다. 과거의 거래를 변경하려면 그 이후의 모든 블록을 다시 작성해야 하는데, 충분한 시간이 지나면 이는 계산적으로 불가능해진다.

3.1.1 키와 소유권

비트코인은 지갑에 공개키 암호화를 사용한다. "지갑을 만든다"는 것은 실제로 키 쌍을 생성하는 것이다. 개인키(비밀로 유지되는 큰 난수)와 그에 상응하는 공개키(개인키에서 수학적으로 도출된다). 비트코인 주소는 해싱과 인코딩을 통해 공개키에서 파생된다.

예시
실제로 어떻게 생겼는지 예시이다(... 으로 축약):

개인키: 1E99423A4ED27608A15...E6E9F3A1C2B4D5F6A7B8C9D0
공개키: 03F028892BAD7ED57D2F...3A6A6C6E7F8C9D0A1B2C3D4E5F607182
비트코인 주소: 1BoatSLRHtKNngkdXEeobR76b53LETtpyT

개인키로는 메시지에 서명할 수 있고, 공개키로는 누구나 그 서명이 해당 개인키에서 왔는지 개인키 자체를 드러내지 않고 검증할 수 있다. 이 암호학이 개인키의 프라이버시를 유지한다. 개인키로 이체를 승인하는 메시지에 서명하면, 네트워크는 당신의 개인키를 보지 않고도 공개키로 서명을 검증할 수 있다.

여기서 중요한 결론은 지갑이 어떤 의미 있는 방식으로 BTC를 "보유"하지 않는다는 것이다. 컴퓨터에 코인이 담긴 파일이 있는 게 아니다. 대신 블록체인이 어떤 주소가 어떤 출력을 통제하는지의 기록을 보유하고, 지갑은 단지 서명 도구일 뿐이다. 개인키를 저장하고 이를 사용해 거래를 승인한다. 개인키를 잃으면 자금에 대한 접근을 잃는다. 코인이 사라졌기 때문이 아니라, 더 이상 소유권을 증명할 수 없기 때문이다.

3.1.2 거래와 UTXO

거래는 비트코인 가치가 이동하는 방식이다. BTC를 보낼 때, 당신은 본질적으로 "나는 이 코인들을 이 주소로 이체하는 것을 승인한다"라고 말하는 서명된 메시지를 발행한다. 그런데 정확히 이 코인들이란 무엇인가?

비트코인은 잔액을 추적하지 않는다. 어딘가에 "주소 X는 3.5 BTC를 가지고 있다"고 말하는 데이터베이스 항목이 있는 게 아니다. 대신 비트코인은 미사용 거래 출력(Unspent Transaction Outputs), 흔히 UTXO라고 줄여 부르는 것을 사용한다. 모든 거래는 기존 출력을 소비하고 새로운 출력을 생성한다. 당신이 통제하지만 아직 지출하지 않은 출력들이 당신의 UTXO다. 이것은 당신의 "잔액"이 단지 미사용 출력들의 합계라는 의미다.

예시
20달러짜리 지폐가 있고 12달러짜리 물건을 사고 싶다고 상상해보라. 당연히 지폐를 반으로 찢을 수는 없으니, 20달러를 건네고 8달러를 거스름돈으로 받는다.

UTXO도 같은 방식으로 작동한다. 5 BTC 출력을 소유하고 있고 누군가에게 3 BTC를 보내고 싶다면, 전체 5 BTC 출력을 소비하고 두 개의 새 출력을 만들어야 한다. 수신자에게 3 BTC, 그리고 거스름돈으로 자신에게 돌아오는 2 BTC. 원래의 5 BTC 출력은 이제 '사용됨'이 되어 다시는 사용할 수 없다.

결과적으로, 비트코인 거래는 일부 메타데이터와 함께 다음을 포함하는 데이터 구조다.

  • 입력(Inputs): 지출하려는 UTXO에 대한 참조와 통제를 증명하는 서명
  • 출력(Outputs): 생성되는 새 UTXO, 각각 수신자의 공개키에 잠김

3.1.3 채굴과 작업증명(PoW)

거래는 스스로 확인되지 않는다. 거래들은 멤풀(mempool, 메모리 풀)이라 불리는 노드의 대기 영역에 있다가 채굴자가 블록에 포함시킬 때까지 기다린다. 채굴은 새 블록이 체인에 추가되는 과정이며, 비용이 많이 들도록 설계되었다. 이것은 버그가 아니라 기능이다.

채굴이 해결하는 문제는 다음과 같다. 중앙 권한이 없는 분산 네트워크에서, 누가 어떤 거래가 유효한지 결정하는가? 누가 순서를 결정하는가? 두 개의 충돌하는 거래가 나타나면, 예를 들어 누군가가 같은 코인을 두 번 지출하려 한다면, 누가 이 충돌을 해결하는가?

비트코인의 해결책은 다음과 같다. 유효한 블록을 만들려면, 채굴자는 논스(nonce)라 불리는 숫자를 찾아야 한다. 블록 헤더(이전 블록의 해시, 타임스탬프 등을 포함)가 이 논스와 결합되어 해싱되었을 때, 결과 해시가 특정 목표값 아래여야 한다. 암호학적 해시는 사실상 무작위이므로, 유효한 논스를 찾는 방법은 추측하는 것밖에 없다. 그래서 채굴자들은 초당 수십억 번 추측한다.

3.1.4 투명성 트레이드오프

중요한 것은, 이 시스템이 중앙 권한 없이 기능하려면 모든 사람이 모든 것을 검증할 수 있어야 한다는 점이다. 모든 노드가 체인의 전체 역사에 대해 모든 거래를 확인하고, 모든 UTXO가 추적되며, 모든 서명이 검증된다.

이것은 프라이버시를 희생시킨다. 모든 거래와 주소 잔액이 공개되기 때문이다. 2009년 제네시스 블록부터 가장 최근에 채굴된 블록까지 전체 자금 흐름이 블록체인을 다운로드하는 누구에게나 보인다.

비트코인은 신뢰 없는 디지털 화폐 문제를 해결했지만, 신뢰 없는 프라이버시 디지털 화폐 문제는 해결하지 못했다. 바로 여기서 Zcash가 등장한다.

3.2 비트코인, 하지만 프라이버시가 있는

Zcash는 사실상 비트코인과 같지만, 암호화가 추가되었다. 실제로 많은 사람들이 완전히 다른 암호화폐임에도 불구하고 "암호화된 비트코인"이라고 부른다.

Zcash의 경제학은 비트코인과 거의 동일하므로, 비트코인의 통화 정책을 이해한다면 Zcash의 것도 이해한 것이다. Zcash는 비트코인이 2,100만 BTC 상한을 가진 것처럼 2,100만 ZEC의 하드캡을 가진다. 새 코인은 비트코인과 마찬가지로 약 4년마다 반감되는 채굴 보상을 통해 유통에 들어온다.

합의 메커니즘도 작업증명이지만, Zcash는 채굴에 비트코인의 SHA256 기반 시스템 대신 Equihash를 사용한다.

참고
ASIC은 Application-Specific Integrated Circuit(주문형 반도체)의 약자로, 암호화폐를 채굴하기 위해 특별히 설계된 컴퓨터라고 생각하면 된다.

내부적으로 Zcash는 비트코인과 같은 UTXO 거래 모델을 사용한다.

그러나 Zcash는 UTXO로 할 수 있는 것에서 비트코인과 다르다. 비트코인은 하나의 자금 풀, 즉 공개 체인을 가지고 있는 반면, Zcash는 투명 풀(transparent pool)차폐 풀(shielded pools)로 나뉜 여러 풀을 가지고 있다. 하지만 두 풀 모두 ZEC를 통화로 사용하며, 둘 사이에서 자금을 이동할 수 있다.

차폐 풀은 완전히 다르며 Zcash에 고유하다. 세 개의 풀이 있는데, Sprout, Sapling, Orchard이며, Orchard가 가장 새롭고 진보되었다. Sprout과 Sapling은 이전 네트워크 업그레이드로 거슬러 올라가고 신뢰 설정에 의존하므로 현재는 거의 사용되지 않는다. Orchard는 신뢰 설정이 필요 없다.

참고
이제부터 Zcash 풀을 투명 풀과 차폐 풀로 지칭할 것이다. 여러 차폐 풀이 있지만, 실제로는 통합된 전체로 간주되며 오늘날 주로 사용되는 것은 Orchard다.

투명 풀은 호환성과 선택권을 위해 존재한다. 일부 사용자는 감사 가능성을 원하고, 일부 애플리케이션은 이를 필요로 하며, 거래소는 규제 준수를 위해 종종 투명 주소를 사용한다. 이 경우 투명성은 버그가 아니라 기능이며, 차폐 풀에서 프라이버시를 위한 Zcash의 암호화 의존성은 투명 풀의 사용에 영향을 받지 않는다.

투명 풀과 차폐 풀을 서로에게 전혀 영향을 미치지 않는 완전히 독립적인 두 시스템으로 생각해야 한다. 사람들은 종종 Zcash의 투명성 기능이 어떻게든 프라이버시를 감소시킨다고 잘못 비판하지만, 이는 거짓이다. Zcash의 익명성 집합(anonymity set)은 투명 주소에 얼마나 많은 ZEC가 있는지와 수학적으로 독립적이다. 따라서 99%의 ZEC가 투명하더라도, 차폐된 1%의 프라이버시는 차폐 풀 자체에 의해서만 결정된다.

3.3 근본적인 문제

비트코인에서는 거래 검증이 간단하다. 입력이 존재하고 이전에 지출되지 않았는지, 서명이 유효한지, 출력이 입력을 초과하지 않는지 확인한다. 이러한 조건을 검증하는 데 필요한 모든 정보가 블록체인에 있으며 모든 사람에게 보인다.

이러한 투명성이 비트코인을 신뢰 없이 만드는 것이다. 모든 것을 직접 검증할 수 있기 때문에 누구도 신뢰할 필요가 없다. 원한다면 최대한의 무신뢰성을 위해 노드를 운영할 수도 있다. 그러나 이것은 또한 비트코인을 감시 도구로 만드는 것이기도 하다. 검증을 가능하게 하는 바로 그 데이터가 추적을 가능하게 하는 데이터이기 때문이다.

Zcash는 둘 다 원한다. 무신뢰 검증과 프라이버시. 하지만 이 둘은 서로 모순되는 것처럼 보인다. 거래를 볼 수 없는데 네트워크가 어떻게 거래가 유효한지 검증할 수 있는가?

검증이 실제로 무엇을 필요로 하는지 생각해보라:

  1. 입력이 존재한다 — 존재하지 않는 코인은 지출할 수 없다.
  2. 입력이 이전에 지출되지 않았다 — 이중 지불이 없어야 한다.
  3. 지출 권한이 있다 — 개인키를 통제하고 있다.
  4. 계산이 맞다 — 출력이 입력을 초과하지 않는다.

비트코인에서 노드와 채굴자는 데이터를 보고 이 네 가지 기준을 확인한다. Zcash에서는 송신자, 수신자, 금액이 암호화되어 데이터가 보이지 않는다. 그렇다면 누가 어떻게 이 기준을 확인할 수 있는가?

답은 Zcash가 노드와 채굴자에게 데이터를 확인하라고 요청하지 않는다는 것이다. 대신 송신자가 zk-SNARK라는 암호학적 증명을 제공하여 기본 정보를 드러내지 않고 거래가 유효함을 증명한다. 채굴자와 노드는 입력이 무엇인지, 수신자가 누구인지, 얼마가 전송되는지 알지 못한다. 오직 한 가지만 안다. 증명이 유효하므로 거래가 유효하다는 것.

미친 것처럼 들린다. 금융 거래가 유효한지 보지 않고 검증할 수 있다니!

다음 섹션들은 이것이 왜 가능한지 설명한다. Zcash가 가치를 어떻게 표현하고 무엇이 지출되었는지 추적하는 방법, 그리고 영지식 증명이 어떻게 모든 것을 연결하는지를 포함한다.

3.4 차폐된 노트(Shielded Notes)

앞서 언급했듯이, 비트코인은 UTXO를 사용한다. Zcash의 차폐 풀은 개념적으로 유사한 노트(notes)라는 것을 사용한다. 노트를 암호화된 UTXO라고 생각하면 된다.

그렇다면 노트란 무엇인가? 노트는 특정 양의 ZEC를 나타내는 암호화된 객체다. UTXO처럼 개별적인 가치 덩어리지만, UTXO와 달리 내용이 숨겨져 있다. 차폐된 ZEC를 받으면 노트가 생성된다. 차폐된 ZEC를 지출하면 해당 노트가 소비되고 수신자와 해당되는 경우 거스름돈을 위한 새 노트가 생성된다. UTXO와 정확히 같다.

예시

복호화 후 Orchard 노트가 어떻게 생겼는지 보자:

{
          "addr": "u1pg2aaph7jp8rpf6...sz7nt28qjmxgmwxa",
          "v": 150000000,
          "rho": "0x9f8e7d6c5b4a...f8e7d6c5b4a39281706f5e4d3c2b1a0",
          "psi": "0x1a2b3c4d5e6f70...c4d5e6f708192a3b4c5d6e7f809",
          "rcm": "0x7a3b4c5d6e7b...d8e9f0a1b3d4e5f6a7b8c9d0e1f2a3b"
        }

이 예시에서 값 필드 v는 1.5 ZEC(150,000,000 자토시)를 보여준다. 다른 필드들 rho, psi, rcm은 나중에 다룰 것이다. 지금은 이것들이 Zcash 노트를 뒷받침하는 암호화를 가능하게 하는 것이라고 이해하면 된다.

역주: 자토시(zatoshi)란?
비트코인의 최소 단위가 사토시(satoshi)인 것처럼, Zcash의 최소 단위는 자토시다. 1 ZEC = 100,000,000 자토시.

노트는 절대 수정되지 않는다. 잔액 업데이트 같은 것이 없다. 대신 생성되고, 존재하고, 지출될 때 파괴된다. 10 ZEC가 있고 3 ZEC를 지출하면, 원래 10 ZEC 노트가 완전히 소비되고 두 개의 새 노트가 생성된다. 수신자에게 주어지는 3 ZEC와 자신에게 돌아오는 7 ZEC. UTXO와 똑같다.

Zcash 노트와 비트코인 UTXO 사이의 결정적인 차이는 가시성이다. 비트코인 UTXO는 공개되어 있어 누구나 그 가치, 언제 지출되는지 등을 볼 수 있다. Zcash 노트는 암호화되어 있어 소유자와 뷰잉 키를 공유받은 사람만 내용을 볼 수 있다. 블록체인은 노트 자체가 아니라 노트에 대한 암호학적 커밋먼트를 저장한다.

예시

블록체인은 복호화된 노트를 절대 보지 않는다. Orchard에서 각 '액션'은 지출과 출력을 함께 묶는다. 실제로 기록되는 것은 이렇다.

{
          "cv": "0x9a8b7c6d5...8d7e6f5a4b3c2d1e0f9a8b",
          "nullifier": "0x2c3d4e5f6a7b...d2e3f48e9f0a1b2c3d",
          "rk": "0x5e6f7a8b...5a6b7c8d9e0f1a2b3c4d5e6f",
          "cmx": "0x1a2b3c4d5e6f7...d3e4f5a6b7c8d9e0f1a2b",
          "ephemeralKey": "0x4d5e6f7a8b9...4f5a6b7c8d9e0f1a2b3c4d5e",
          "encCiphertext": "0x8f7e6d5c4b3...a29180f7e6d5c",
          "outCiphertext": "0x3c4d5e6f7a8...b9c0d1e2f3a4b5c"
        }

보다시피, 모든 것이 암호화되어 있다. 각 필드의 구체적인 내용은 나중에 다룰 것이다.

노트가 숨겨져 있다면, 네트워크는 그것이 존재하는지 어떻게 아는가? 또는 언제 지출되었는지 어떻게 아는가? 여기서 커밋먼트와 널리파이어가 등장한다.

3.5 커밋먼트와 널리파이어

Zcash의 차폐 풀은 비트코인이 투명성을 통해 사소하게 해결하는 두 가지 문제에 직면한다.

  1. 노트가 존재함을 증명하기: 누군가가 차폐된 ZEC를 보내면, 네트워크는 그 노트가 진짜인지 어떻게 아는가?
  2. 이중 지불 방지: 노트를 지출할 때, 네트워크는 이전에 지출하지 않았다는 것을 어떻게 아는가?

Zcash의 해결책은 두 가지 암호학적 메커니즘의 조합이다. 커밋먼트(commitments)널리파이어.

3.5.1 커밋먼트

커밋먼트는 노트의 필드들을 함께 해싱하여 계산된 값이다. Orchard에서 어떻게 보이는지 살펴보자.

cmx = Hash(addr, v, rho, psi, rcm) = 0x1a2b3c4d...9ca6b7c8d9e0f1a2b

'Hash'는 사용되는 해싱 함수를 나타낸다. 차폐된 노트의 필드들을 받아서 해시 함수에 입력하면, 해시를 반환한다(이 경우 0x1a2b3c4d...9ca6b7c8d9e0f1a2b).

이것을 유용하게 만드는 두 가지 속성이 있다.

  1. 단방향성: 반환된 해시가 주어져도, 노트의 내용을 복구할 수 없다. 노트의 내용이 숨겨진다.
  2. 충돌 저항성: 같은 커밋먼트를 생성하는 두 개의 다른 노트를 찾을 수 없다. 각 노트는 정확히 하나의 커밋먼트에 매핑된다.

노트가 생성될 때마다, 그 커밋먼트가 커밋먼트 트리에 추가된다. 이것은 네트워크에서 생성된 모든 노트 커밋먼트를 포함하는 머클 트리(Merkle tree)다.

정보

머클 트리는 항목이나 전체 집합을 드러내지 않고 항목이 큰 집합에 있음을 증명할 수 있게 하는 데이터 구조다.

작동 방식은 이렇다. 값 목록(우리 경우 노트 커밋먼트)으로 시작한다. cm0 cm1 cm2 cm3

쌍을 만들어 각 쌍을 함께 해시한다.

  • H0 = Hash(cm0, cm1)
  • H1 = Hash(cm2, cm3)

이제 두 해시가 있다. 쌍을 만들어 다시 해시한다.

root = Hash(H0, H1)

지금까지 원래 집합에서 항목 쌍을 취해 해시 함수로 각 쌍을 결합했다. 그런 다음 결과 해시들을 쌍으로 그룹화하고 다시 해시하여, 단일 최종 해시에 도달할 때까지 이 과정을 레이어별로 반복한다. 이 최종 값을 루트 해시 또는 머클 루트라고 한다.

이 루트 해시는 전체 집합을 효과적으로 요약한다.

      root
      /  \
     /    \
    H0    H1
    / \   / \
   /   \ /   \
  cm0 cm1 cm2 cm3

머클 트리의 핵심 속성은 어떤 잎(커밋먼트)을 변경해도, 즉 cm0, cm1 등의 값을 변경해도, 그 위의 모든 해시가 루트까지 전부 바뀐다는 것이다. 루트는 전체 트리의 지문 역할을 한다. 같은 루트가 있다면 같은 트리가 있어야 한다.

또한 머클 증명은 전체 트리를 확인하지 않고도 트리의 항목을 효율적으로 확인하는 방법을 제공한다.

예를 들어, cm1이 트리에 있음을 증명하는 것은 모든 커밋먼트를 드러낼 필요가 없다. 머클 경로, 즉 루트까지 가는 길의 형제 해시들만 제공하면 된다. cm1의 머클 경로는 [cm0, H1]이다.

검증자가 확인하는 방법은 이렇다.

  • [cm0, H1]의 첫 번째 요소인 cm0을 취해서 확인하려는 항목 cm1과 해시한다. 이렇게 하면 H0을 얻는다. Hash(cm0, cm1) = H0
  • 첫 단계의 출력(H0)을 [cm0, H1]의 다음 항목인 H1과 해시한다. 이렇게 하면 root 해시를 얻는다. Hash(H0, H1) = root

결과가 알려진 루트와 일치하면, cm1이 트리에 있다고 결론 내릴 수 있다. 중요한 것은 검증자가 cm2cm3을 절대 보지 않는다는 것이다. 검증에 필요하지 않기 때문이다.

커밋먼트 트리는 생성된 모든 차폐된 노트 커밋먼트를 포함하며, 수백만 개의 리프(커밋먼트)에 달한다. 따라서 노트를 지출할 때, (zk-SNARK 내부에서) 현재 루트까지의 유효한 머클 경로와 커밋먼트를 알고 있음을 어떤 커밋먼트가 당신 것인지 드러내지 않고 증명한다.

커밋먼트 트리는 노드가 유지하는 체인 상태의 일부로 저장된다. 각 블록은 노드가 트리의 로컬 사본에 추가하는 새 노트 커밋먼트를 도입하고, 이에 따라 루트를 업데이트한다. 앵커(anchor)라고 알려진 현재 루트는 거래가 멤버십을 증명할 때 참조하는 것이다.

3.5.2 널리파이어

커밋먼트가 존재 문제를 해결할 수 있지만, 새로운 문제를 만든다. 같은 노트를 두 번 지출하는 것을 어떻게 방지하는가?

비트코인에서는 이것이 사소하다. UTXO를 지출할 때 거래 식별자와 출력 인덱스를 직접 참조하므로 모든 사람이 UTXO가 지출되었음을 볼 수 있다. 다시 지출하려고 하면 노드가 거래를 거부하는데, UTXO가 소비된 것으로 표시되었기 때문이다.

Zcash에서는 같은 방식이 불가능하다. 노트 지출에 커밋먼트를 가리키는 것이 필요하다면, 어떤 커밋먼트를 지출하는지 드러나게 되고 해당 노트를 모든 향후 거래와 연결하여 프라이버시를 침해하게 된다.

Zcash에서 같은 노트를 두 번 지출하는 것을 방지하는 해결책은 널리파이어(nullifiers)다. 널리파이어는 노트에서 파생된 값이며, 노트의 소유자만 계산할 수 있다.

예시

커밋먼트 트리에 100만 개의 노트가 있고, 그 중 하나가 당신의 것, 구체적으로 '커밋먼트 0x1a2b...'라고 하자.

노트를 쓰려면 "0x1a2b...를 쓰고 있다"라고 말해야 한다면:

모든 사람이 0x1a2b...가 당신의 것임을 안다. 더 이상 백만 개의 익명 커밋먼트 중 하나가 아니다. 이 거래를 만든 사람의 것으로 태그가 붙는다. 그 커밋먼트 안에 뭐가 있는지는 모르지만, 그것이 당신의 것임을 아는 것 자체가 문제다.

송신자가 이제 당신을 추적할 수 있다. ZEC를 보내서 그 노트를 생성한 사람이 자신이 만든 커밋먼트를 안다. 그래서 당신이 쓰면서 그것을 가리키면, 그들은 지불이 사용되었음을 관찰하고 당신이 언제 자금을 이동했는지 알 수 있다.

시간이 지나면서 지출이 연결 가능해질 수 있다. 관찰자가 지출 패턴, 타이밍, 목적지를 기반으로 거래들을 상관시킬 수 있어서, 당신의 커밋먼트들이 "아마 같은 사람"으로 클러스터링된다.

널리파이어가 이 문제들을 해결한다. 커밋먼트 0x1a2b...에 대응하는 널리파이어 0x2c3d...를 공개하면, 당신의 개인키를 모르고는 커밋먼트에서 널리파이어로의 매핑을 계산할 수 없다. 커밋먼트는 머클 트리에서 익명으로 남고, 지출들을 연결할 수 없으며, 송신자는 자신의 지불이 사용되었는지 알 수 없다.

Orchard에서 널리파이어 예시는 이렇다.

nullifier = Hash(nk, rho, psi) = 0x2c3d4e5f6a7b...d2e3f48e9f0a1b2c3d

nk는 널리파이어 파생 키로, 오직 당신만 가진 비밀키다. rhopsi는 이전에 본 것처럼 노트 자체의 값들이다. 다른 누구도 당신의 nk가 없기 때문에 이 널리파이어를 계산할 수 없다. Hash는 이전 예시들처럼 사용되는 해싱 함수다(나중에 다룰 것이다).

노트를 쓸 때마다 그 널리파이어도 공개한다. 네트워크는 공개된 모든 널리파이어의 모음인 널리파이어 집합을 유지한다. 그래서 널리파이어가 이미 집합에 있으면 거래가 거부되어 이중 지불이 방지된다.

예시

시간이 지나면서 널리파이어 집합이 어떻게 성장하는지 보자:

  • 블록 1000000: 널리파이어 집합 = { }
  • 블록 1000001: 널리파이어 집합 = { 0x2c3d...3d }
  • 블록 1000002: 널리파이어 집합 = { 0x2c3d...3d, 0x8f7a...2b }
  • 블록 1000003: 널리파이어 집합 = { 0x2c3d...3d, 0x8f7a...2b, 0x1e4c...9a }

각 지출은 정확히 하나의 널리파이어를 추가한다. 집합은 줄어들 수 없고 오직 성장만 한다.

반복이 될 수 있지만, 연결 불가능성(unlinkability)이 왜 핵심 속성인지 한 번 더 다루겠다. 널리파이어는 어떤 커밋먼트에 해당하는지에 대해 아무것도 드러내지 않는다. 관찰자는 널리파이어가 나타나는 것을 보고 어떤 노트가 지출되었음을 알지만, 어떤 것인지는 알 수 없다. 커밋먼트 트리에 수백만 개의 노트가 있을 수 있고 널리파이어는 그 중 어떤 것에도 해당할 수 있다.

3.5.3 종합하기

커밋먼트는 절대 삭제되지 않으므로(커밋먼트 트리는 추가 전용이고 무한정 성장한다), 노트가 지출된 후에도 커밋먼트는 트리에 남아 있다.

이것이 바로 Zcash의 익명성 집합을 강력하게 만드는 것이다. 지출은 "나는 이 트리의 N백만 개 커밋먼트 중 하나를 알고 있다"를 어떤 것인지 드러내지 않고 증명해야 한다. 지출된 노트의 커밋먼트는 다른 것들 사이에 섞여 있어서, 관찰자가 널리파이어가 나타나는 것을 보더라도 수백만 개의 커밋먼트 중 어떤 것에 해당하는지 좁힐 수 없다.

당신의 프라이버시 집합은 네트워크에서 생성된 모든 차폐 노트를 포함한다.

요약하면, 모든 차폐 거래는 다음을 포함한다.

  • 노트 생성 — 커밋먼트 트리에 새 노트 커밋먼트 추가
  • 노트 지출 — 널리파이어 집합에 널리파이어를 공개하고 추가

거래를 구성하려면, 다음을 증명하는 zk-SNARK를 제공해야 한다.

  • 유효한 머클 경로를 통해 트리에 커밋먼트가 있는 노트를 안다
  • 그 노트의 널리파이어를 계산하는 데 필요한 비밀키를 안다
  • 공개하는 널리파이어가 그 노트에 대응한다
  • 전체 거래의 금액이 균형을 이룬다. 입력 = 출력 + 수수료

네트워크는 증명을 검증하고, 널리파이어가 집합에 있는지 확인하고, 거래를 수락한다. 중요한 것은 어떤 커밋먼트가 지출되었는지, 누가 누구에게 자금을 보냈는지, 얼마가 전송되었는지 절대 알지 못한다는 것이다.

3.6 키와 주소

비트코인은 단순한 키 모델을 가진다. 하나의 개인키, 하나의 공개키, 그리고 하나 이상의 주소. Zcash의 차폐 시스템은 더 복잡한데, 다른 작업이 다른 수준의 접근을 필요로 하기 때문이다. Zcash는 이 복잡성을 해결하기 위해 키 계층 구조를 활용한다.

3.6.1 지출 키

지출 키(spending key, sk)는 마스터 비밀로, 256비트의 매우 길고 무작위인 숫자다. 이것을 가진 사람은 당신의 자금을 지출할 수 있다. 다른 모든 것이 지출 키에서 파생되기 때문이다.

3.6.2 전체 뷰잉 키

전체 뷰잉 키(full viewing key, fvk)는 지출 키에서 파생되며, 지갑 활동에 대한 모든 것을 볼 수 있게 한다. 들어오는 결제, 나가는 결제, 금액, 메모 필드. 하지만 지출은 처리할 수 없다.

전체 뷰잉 키는 통제권을 주지 않고 감사 접근을 부여하고 싶은 경우에 유용하다. 뷰잉 키를 통해 회계사가 거래 내역을 확인할 수 있고, 사업체가 규정 준수 담당자에게 장부를 검토하게 할 수 있으며, 세무 당국이 보고된 소득을 확인할 수 있다. 모두 감사자가 자금을 가져갈 위험 없이.

3.6.3 들어오는/나가는 뷰잉 키

전체 뷰잉 키는 구성 요소로 분할될 수도 있다.

  • 들어오는 뷰잉 키(incoming viewing key, ivk): 당신에게 보내진 노트를 감지하고 복호화할 수 있지만, 다른 사람에게 보낸 노트는 볼 수 없다.
  • 나가는 뷰잉 키(outgoing viewing key, ovk): 나가는 암호문을 복호화할 수 있어, 무엇을 누구에게 보냈는지 볼 수 있다.

이 세분화는 사용자가 제한된 정보만 공유하고 싶을 수 있기 때문에 존재한다. 예를 들어, 서비스가 받은 결제를 알려줄 수 있도록 들어오는 뷰잉 키를 제공하면서도 지출 패턴에 대한 정보는 드러내지 않고 싶을 때.

3.6.4 널리파이어 파생 키

널리파이어 파생 키(nullifier deriving key, nk)도 지출 키에서 파생되며, 지출할 때 널리파이어를 계산하는 데 사용된다. 이것은 노트를 지출된 것으로 표시하는 데 필요하며, 뷰잉 키만으로는 거래를 승인할 수 없는 이유다. nk에 접근할 수 없기 때문이다.

3.6.5 주소

계층 구조의 맨 아래에는 주소가 있다. 사람들이 당신에게 지불할 수 있도록 주는 것이다. Orchard에서 주소는다양화자(diversifier)라고 하는 작은 랜덤 데이터 조각을 사용해 전체 뷰잉 키에서 파생된다.

다양화자는 다양화된 주소(diversified addresses)를 가능하게 한다. 단일 지갑에서 수십억 개의 연결 불가능한 주소를 생성할 수 있다는 의미다. 각 주소는 완전히 다르지만, 모두 같은 키 집합으로 연결된다. 게다가 상호작용하는 모든 사람이나 서비스에 고유한 주소를 줄 수 있다.

예시

고용주, 클라이언트, 거래소로부터 지불을 받는다고 하자. 각각에게 다른 다양화된 주소를 준다.

  • 고용주 지불 주소: u1employer8jp8rpf6...qjmxgmwxa
  • 클라이언트 지불 주소: u1clientaph7jp8rpf...sz7nt28qj
  • 거래소 지불 주소: u1exchng2aaph7jp8...gmwxasz7n

세 주소는 당신의 것이고 지갑이 각 송신자의 들어오는 지불을 받지만, 고용주, 클라이언트, 거래소는 주소를 비교해서 같은 사용자에게 지불하고 있다는 것을 추론할 수 없다.

3.6.6 키 계층 구조

계층 구조는 다음과 같다.

지출 키 (sk)
|
+---> 풀 뷰잉 키 (fvk)
|         |
|         +---> 인커밍 뷰잉 키 (ivk)
|         |
|         +---> 아웃고잉 뷰잉 키 (ovk)
|         |
|         +---> 주소 (diversifier를 통해)
|
+---> 널리파이어 파생 키 (nk)

계층 아래로 내려갈수록 각 수준은 더 적은 정보를 드러낸다. 지출 키는 모든 것을 할 수 있고, 전체 뷰잉 키는 모든 것을 보지만 지출은 못 하고, 들어오는 뷰잉 키는 들어오는 자금만 본다. 마지막으로 주소는 아무것도 드러내지 않는다. 그냥 목적지일 뿐이다.

엘리 벤-사손, Zcash 공동 창립자이자 현재 StarkWare 대표
엘리 벤-사손(Eli Ben-Sasson), Zcash 공동 창립자이자 현재 StarkWare를 이끌고 있다.

4. 트랜잭션 생애주기

이 장에서는 차폐된(shielded) ZEC를 전송할 때 정확히 어떤 일이 일어나는지, '보내기' 버튼을 누르는 순간부터 수신자의 잔액이 업데이트되는 순간까지 전 과정을 다룬다. 이를 설명하기 위해 하나의 트랜잭션이 거치는 모든 단계를 따라가며, 지갑이 무엇을 계산하는지, 네트워크가 무엇을 보는지, 그리고 블록체인에 최종적으로 무엇이 기록되는지 살펴볼 것이다.

4.1 상황 설정

앨리스가 밥에게 5 ZEC를 보내려 한다. 그녀는 지갑을 열고, 밥의 차폐 주소를 입력하고, 금액을 지정한 뒤, 전송을 확인한다. 이후 일어나는 일에는 지금까지 다룬 모든 메커니즘이 관여한다. 노트(note), 커밋먼트(commitment), 널리파이어(nullifier), 키, 머클 증명, 그리고 zk-SNARK가 그것이다.

앨리스의 지갑에는 두 개의 미사용 노트가 있다.

  • 노트 A: 3 ZEC
  • 노트 B: 4 ZEC

그녀는 둘 다 사용하여(총 7 ZEC) 밥에게 5 ZEC를 보내고, 0.001 ZEC의 수수료를 지불한 뒤, 1.999 ZEC를 거스름돈으로 받을 것이다.

4.2 노트 선택과 조회

기억해야 할 점이 있다. 앨리스의 지갑은 실제로 ZEC를 저장하는 것이 아니라, 노트를 사용하는 데 필요한 정보를 저장한다. 즉, 복호화된 노트 데이터와 그것을 통제하는 키를 보관하는 것이다. 앨리스가 지갑을 동기화할 때, 지갑은 블록체인을 스캔하면서 그녀의 수신용 조회 키(incoming viewing key)를 사용해 모든 차폐 출력의 복호화를 시도하고, 성공한 것들을 저장해 둔다.

노트 A의 예시는 다음과 같다.

{
  "addr": "u1alice...",
  "v": 300000000,          // 3 ZEC (자토시 단위)
  "rho": "0x7a8b9c...",
  "psi": "0x1d2e3f...",
  "rcm": "0x4a5b6c...",
  "position": 847291,      // 커밋먼트 트리에서의 위치
  "cmx": "0x9f8e7d..."     // 커밋먼트
}

position 필드가 중요한 이유는 이 노트가 커밋먼트 트리의 어디에 위치하는지 지갑에 알려주기 때문이다. 이 정보는 머클 증명을 구성하는 데 필수적이다.

4.3 머클 경로 가져오기

노트를 사용하려면 앨리스는 해당 커밋먼트가 트리에 존재한다는 것을 증명해야 한다. 단, 어떤 커밋먼트인지는 드러내지 않으면서 말이다. 이를 위해서는 커밋먼트에서 루트까지의 머클 경로를 증명해야 한다.

앨리스의 지갑은 풀 노드에 각 노트 위치의 머클 경로를 요청한다. 깊이 32인 트리에서 위치 847,291에 있는 노트 A의 경우, 경로는 32개의 형제 해시로 구성된다.

merkle_path_A = [
  "0x1a2b3c...",  // 레벨 0의 형제 노드
  "0x4d5e6f...",  // 레벨 1의 형제 노드
  ...            // 30개의 추가 형제 노드
  "0x7g8h9i..."   // 레벨 31의 형제 노드
]

이 경로에 접근할 수 있는 사람이라면 누구나 cmx_A가 트리에 있음을 확인할 수 있다. 해시를 역산해서 루트까지 도달하면 되기 때문이다. 하지만 zk-SNARK 내부에서 앨리스는 cmx_A나 경로 자체를 공개하지 않고도 이를 증명할 수 있다.

지갑은 또한 앵커(anchor)를 기록하는데, 이는 경로를 가져온 시점의 머클 루트다. 트랜잭션은 이 앵커를 참조하고, 노드들은 이것이 최근의 유효한 루트인지 검증하는 데 사용한다.

4.4 널리파이어 계산

앨리스는 노트들과 그 머클 경로를 확보했다. 이제 노트들을 사용된 것으로 표시해야 한다.

3.5절에서 다뤘듯이, 널리파이어는 사용되는 노트를 공개하지 않으면서 이중 지불을 방지한다는 근본적인 문제를 해결한다. 비트코인에서는 UTXO를 직접 가리켜야 하고 모두가 그것이 소비되었음을 볼 수 있다. 하지만 Zcash에서 커밋먼트를 직접 가리키면 프라이버시가 파괴된다. 당신이 그 특정 노트와 연결되어 버리기 때문이다.

앨리스는 사용할 각 노트에 대해 널리파이어를 계산한다. 널리파이어는 노트의 데이터와 그녀의 비밀 널리파이어 도출 키(nk)로부터 도출된다.

nullifier_A = Hash(nk, rho_A, psi_A) = 0x2c3d4e5f...
nullifier_B = Hash(nk, rho_B, psi_B) = 0x8f7a9b2c...

rhopsi 값은 각 노트에 고유한 것으로, 노트가 생성될 때 설정된다. nk는 앨리스의 지출 키에서 도출되며, 오직 그녀만이 이를 소유한다.

이 구조에는 두 가지 중요한 속성이 있다.

1. 결정론적이다. 각 노트는 정확히 하나의 널리파이어를 생성한다. 앨리스가 노트 A를 두 번 사용하려 하면, 0x2c3d4e5f...를 두 번 공개해야 한다. 네트워크는 지금까지 공개된 모든 널리파이어의 집합(nullifier set)을 유지하므로, 두 번째 시도는 해당 널리파이어가 이미 존재하기 때문에 거부된다.

2. 연결 불가능하다. 앨리스 외에는 누구도 그녀의 노트에 대한 널리파이어를 계산할 수 없다. 다른 누구도 그녀의 nk를 갖고 있지 않기 때문이다. 결정적으로, 널리파이어로부터 역산해서 대응하는 커밋먼트를 알아내는 것도 불가능하다. 따라서 0x2c3d4e5f...가 블록체인에 나타나면, 관찰자들은 어떤 노트가 사용되었다는 것은 알 수 있지만, 트리에 있는 수백만 개의 커밋먼트 중 어떤 것인지는 알 수 없다.

널리파이어는 앨리스의 트랜잭션에 포함되어 온체인에 공개되지만, 이것이 그녀의 지출에 대한 유일한 공개적 흔적이다. 불투명한 32바이트 값 두 개뿐이며, 노트 자체나 금액, 또는 누가 통제했는지에 대해서는 아무것도 드러내지 않는다.

참고
널리파이어 집합은 계속 커지기만 한다. 커밋먼트 트리와 달리(추가만 가능하지만 생성된 모든 노트를 추적), 널리파이어 집합은 사용된 노트를 추적한다. 노트의 커밋먼트는 사용된 후에도 영원히 트리에 남아 있다. 널리파이어가 널리파이어 집합에 존재한다는 것이 해당 노트가 소비되었음을 표시하는 것이다.

4.5 출력 노트 생성

앨리스는 7 ZEC(3 ZEC + 4 ZEC)를 사용하고 있으며, 두 개의 새 노트를 생성해야 한다. 밥에게 5 ZEC, 자신에게 거스름돈 1.999 ZEC를 보내야 하고, 0.001 ZEC는 트랜잭션 수수료다.

각 노트에는 새로운 난수가 필요하므로, 앨리스의 지갑은 각 노트를 고유하게 만들고 의도된 수신자만 사용할 수 있게 하는 암호학적 구성 요소들을 생성한다.

4.5.1 노트 구성 요소 생성

밥의 5 ZEC 노트의 경우:

{
  "addr": "u1bob...",           // 밥의 차폐 주소
  "v": 500000000,               // 5 ZEC (자토시 단위)
  "rho": "0x3e4f5a6b...",       // 결정론적으로 도출됨
  "psi": "0x7c8d9e0f...",       // 무작위
  "rcm": "0x1a2b3c4d..."        // 무작위 (커밋먼트 랜덤값)
}

앨리스의 1.999 ZEC 거스름돈 노트의 경우:

{
  "addr": "u1alice...",         // 앨리스 자신의 주소
  "v": 199900000,               // 1.999 ZEC (자토시 단위)
  "rho": "0x5f6a7b8c...",
  "psi": "0x9d0e1f2a...",
  "rcm": "0x4e5f6a7b..."
}

Orchard에서 rho 값은 트랜잭션으로부터 결정론적으로 도출되는데, 이는 특정 유형의 암호학적 공격을 방지하기 위함이다. psircm 값은 새로 샘플링된 난수다. 이 값들이 함께 작용하여, 앨리스가 밥에게 5 ZEC를 천 번 보내더라도 매번 노트의 커밋먼트가 달라지도록 보장한다.

4.5.2 커밋먼트 계산

노트 구성 요소가 준비되면, 앨리스는 각 출력에 대한 커밋먼트를 계산한다.

cmx_bob = Hash(addr_bob, 500000000, rho_bob, psi_bob, rcm_bob)
        = 0x8a9b0c1d...
cmx_alice = Hash(addr_alice, 199900000, rho_alice, psi_alice, rcm_alice)
          = 0x2d3e4f5a...

이 커밋먼트들이 온체인에 공개되어 커밋먼트 트리에 추가될 것이다. 커밋먼트는 노트 자체에 대해 아무것도 드러내지 않는다. 불투명한 32바이트 해시일 뿐이다. 하지만 기저 값을 아는 사람(구체적으로 수신자)은 커밋먼트가 특정 노트에 대응하는지 검증할 수 있다.

4.5.3 노트 암호화

커밋먼트는 온체인에 올라가지만, 밥이 나중에 자신의 5 ZEC를 사용하려면 실제 노트 데이터가 필요하다. 그는 금액, rho, psi, rcm을 알아야 한다. 이것들 없이는 커밋먼트가 쓸모없다. 유효한 널리파이어를 구성하거나 소유권을 증명할 수 없기 때문이다.

앨리스는 의도된 수신자만 읽을 수 있도록 각 노트를 암호화한다.

- 밥에게: 앨리스는 밥의 주소(그의 공개 키 정보를 포함)를 사용해 노트를 암호화한다. 결과물은 encCiphertext 암호문으로, 밥의 수신용 조회 키로만 복호화할 수 있는 암호화된 데이터 덩어리다. 밥의 지갑이 블록체인을 스캔하다가 이 암호문을 성공적으로 복호화하면, 그는 5 ZEC를 받았음을 알게 되고 나중에 사용하는 데 필요한 모든 데이터를 저장한다.

- 앨리스의 기록용: outCiphertext라는 두 번째 암호문이 있다. 이것은 앨리스의 발신용 조회 키(outgoing viewing key)로 암호화되어, 그녀의 지갑이 무엇을 보냈는지 기억할 수 있게 한다. 이것 없이는 앨리스가 자금이 어디로 갔는지 기록을 갖지 못할 것이다. 평문이 아닌 암호화된 형태인 이유는 노드 운영자와 관찰자가 읽을 수 없게 하기 위함이다.

{
  "cmx": "0x8a9b0c1d...",
  "ephemeralKey": "0x6b7c8d9e...",
  "encCiphertext": "0x9f8e7d6c5b4a...[512 바이트]...",
  "outCiphertext": "0x3c4d5e6f7a8b...[80 바이트]..."
}

ephemeralKey는 이 특정 암호화를 위해 생성된 일회용 공개 키이며, 밥은 자신의 개인 키와 함께 이것을 사용해 encCiphertext를 복호화할 수 있다. 이것은 공개 키 암호화의 표준적인 방식이지만, 차이점은 이것이 밥의 주소를 어떤 신원과도 연결하지 않는 시스템 내에서 일어나며, 암호문이 외부 관찰자에게 아무것도 드러내지 않는다는 것이다.

참고
암호화는 zk-SNARK가 증명하는 것의 일부가 아니다. 암호화는 수신자만 자금에 접근할 수 있도록 보장하는 별도의 계층이며, 증명은 노트가 올바르게 형성되었고 트랜잭션 금액이 균형을 이루는지 검증한다. 만약 앨리스가 잘못 암호화하거나 악의적으로 잘못된 키를 사용했다면, 트랜잭션은 여전히 온체인에서 유효하겠지만 밥은 자신의 노트를 찾거나 사용할 수 없을 것이다.

이 시점에서 앨리스는 출력에 필요한 모든 것을 갖추었다. 공개할 두 개의 커밋먼트와 각 수신자가 자신의 노트를 청구할 수 있도록 하는 암호화된 페이로드가 있다. 이제 어려운 부분이 온다. 이 중 어떤 것도 드러내지 않으면서 유효성을 증명하는 것이다.

4.6 증명

앨리스는 모든 조각을 모았다. 사용할 두 노트, 그 머클 경로, 사용된 것으로 표시할 널리파이어, 그리고 커밋먼트와 암호화된 페이로드가 포함된 두 개의 새 출력 노트. 이제 세부 사항을 공개하지 않으면서 네트워크에 모든 것이 유효함을 어떻게 납득시킬 것인가?

여기서 zk-SNARK가 등장한다.

4.6.1 증명이 입증하는 것

증명은 다음 모든 것이 참임을 입증하는 암호학적 객체다.

- 입력 노트가 존재한다. 앨리스는 커밋먼트 트리에 있는 커밋먼트 두 개를 알고 있다. 그녀는 해당 커밋먼트에서 앵커(트리 루트)까지의 유효한 머클 경로를 제시하여 이를 증명한다. 증명은 앨리스가 어떤 커밋먼트를 참조하는지 드러내지 않으며, 단지 수백만 개 중 어딘가에 있다는 것만 보여준다.

- 앨리스가 입력을 통제한다. 앨리스는 두 노트의 지출 키를 알고 있다. 구체적으로, 널리파이어를 도출하고 지출을 승인하는 데 필요한 비밀 값을 알고 있다. 이것 없이는 누구나 다른 사람의 노트를 사용하려 할 수 있을 것이다.

- 널리파이어가 정확하다. 그녀가 공개하는 널리파이어는 실제로 그녀가 사용하는 노트에 대응한다. 앨리스는 임의의 널리파이어를 공개할 수 없다. 그것들은 적절한 공식을 사용하여 자신이 통제하는 실제 노트로부터 도출되어야 한다.

- 트랜잭션 금액이 균형을 이룬다. 입력 값의 합(3 + 4 = 7 ZEC)이 출력 값의 합(5 + 1.999 = 6.999 ZEC)과 수수료(0.001 ZEC)의 합과 같다. ZEC가 생성되거나 파괴되지 않는다. 이것이 시스템의 근본적인 보존 법칙이다.

- 출력 커밋먼트가 올바르게 형성되었다. 그녀가 밥의 노트와 자신의 거스름돈 노트에 대해 공개하는 커밋먼트가 유효한 노트 데이터로부터 올바르게 계산되었다. 그녀는 쓰레기 커밋먼트를 공개할 수 없다. 적절한 구조를 따라야 한다.

네트워크는 어떤 노트가 사용되었는지, 수신자가 누구인지, 당사자 간에 얼마가 이동했는지 알지 못한다. 오직 누군가 유효한 트랜잭션을 만들었다는 것만 안다. 실제 입력, 실제 출력, 정확한 수학, 적절한 승인. 이것이 전역 상태를 업데이트하기에(커밋먼트 추가 및 널리파이어 기록) 충분하며, 트랜잭션 자체에 대해서는 아무것도 알 필요가 없다.

4.6.2 증명의 실체

이 모든 복잡성을 거친 후, 증명 자체는 거의 허무할 정도다. 대략 1~2킬로바이트의 데이터에 불과하다! 수학적 논증을 인코딩한 작은 바이트 덩어리일 뿐이다.

검증은 빠르다. 보통 수준의 하드웨어에서 몇 밀리초면 된다. 노드는 증명을 받아 검증 알고리즘을 실행하고, 이진 답변을 반환한다. 유효하거나 무효하거나. 판단의 여지도, 휴리스틱도, 확률적 추측도 없다. 수학이 맞아떨어지거나 그렇지 않거나다.

이 비대칭성이 zk-SNARK의 마법이다. 증명을 생성하는 것은 계산적으로 비용이 많이 든다. 앨리스의 지갑은 타원 곡선 연산과 다항식 수학을 처리하며 실제 작업을 수행한다. 하지만 증명을 검증하는 것은 저렴하다. 이 비대칭성이 시스템을 실용적으로 만든다. 네트워크의 모든 노드가 무거운 계산을 다시 하지 않고도 모든 차폐 트랜잭션을 검증할 수 있다.

4.6.3 서킷(Circuit)

앨리스는 실제로 이 증명을 어떻게 생성하는가? 자신의 트랜잭션 데이터를 서킷이라고 불리는 것에 통과시켜서다. 서킷은 유효한 Orchard 지출을 위해 어떤 조건이 충족되어야 하는지를 정확히 명시한 것이다.

서킷을 수학적 제약 조건으로 인코딩된 거대한 체크리스트라고 생각하면 된다. "머클 경로가 유효해야 한다"를 증명하는 단계는 올바른 출력을 생성해야 하는 일련의 해시 계산이 된다. "널리파이어가 올바르게 도출되어야 한다"는 특정 값들이 서로 어떻게 관계되어야 하는지에 대한 제약이 된다. 마지막으로 "금액이 균형을 이뤄야 한다"는 충족되어야 하는 방정식이 된다.

앨리스의 지갑은 그녀의 비공개 입력(노트, 키, 경로, 랜덤값)을 가져와 모든 제약을 만족하는 값을 찾기 위해 이 서킷을 처리한다. 그런 다음 zk-SNARK 기계가 이 전체 만족 할당을 누구나 검사할 수 있는 작은 증명으로 압축한다.

참고
서킷은 프로토콜 수준에서 고정되어 있으며, 모든 Orchard 트랜잭션은 Zcash 명세에 정의된 동일한 서킷을 사용한다. 앨리스는 규칙을 수정할 수 없다. 단지 자신이 규칙을 따랐음을 증명할 수 있을 뿐이다. 이것이 시스템을 무신뢰(trustless)로 만든다. 노드는 앨리스를 신뢰할 필요가 없다. 그녀의 증명이 합의된 범용 서킷을 통과하는지만 검증하면 된다.

앨리스의 지갑은 이제 증명을 생성했다. 유효한 트랜잭션이 존재한다고 주장하는 약 1.5KB 객체이지만, 그것이 무엇인지는 말하지 않는다. 이제 모든 것을 패키징해서 네트워크에 보낼 시간이다.

4.7 트랜잭션 조립

앨리스는 널리파이어, 출력 노트, 암호화된 페이로드, 증명을 갖추었다. 이제 네트워크가 처리할 수 있는 트랜잭션으로 모든 것을 패키징해야 한다.

4.7.1 액션 구조

Orchard는 액션(action)이라는 구조를 사용한다. 각 액션은 정확히 하나의 지출과 하나의 출력을 함께 묶는다. 이것은 의도적인 설계 선택이다. 이전 Zcash 프로토콜(Sprout과 Sapling)은 지출과 출력을 분리했는데, 이것이 트랜잭션 구조에 대한 정보를 누출했다. 세 개의 지출과 하나의 출력이 있는 트랜잭션을 보면, 무언가를 배우게 되는 것이다. Orchard는 1:1 쌍을 강제함으로써 이 문제를 제거한다.

앨리스는 두 개의 노트를 사용하고 두 개의 출력을 생성하므로, 그녀의 트랜잭션은 두 개의 액션을 포함한다.

액션 0: 노트 A(3 ZEC) 사용, 밥의 노트(5 ZEC) 생성
액션 1: 노트 B(4 ZEC) 사용, 앨리스의 거스름돈 노트(1.999 ZEC) 생성

각 액션 내의 쌍은 임의적이다. 액션 0이 노트 A가 밥의 5 ZEC로 "되었다"는 것을 의미하지 않는다. 값이 일치하지 않으며, 그래도 괜찮다. 중요한 것은 전역 제약이다. 총 입력이 총 출력과 수수료의 합과 같아야 한다. 액션 구조는 단지 관찰자가 트랜잭션 형태를 추론할 수 없도록 보장할 뿐이다.

참고
앨리스가 두 개의 노트를 사용하지만 하나의 출력만 생성하고 싶다면 어떻게 할까? 그래도 두 개의 액션이 필요하므로, 두 번째 액션에 더미 출력을 생성해야 한다. 더미는 구조의 균형을 맞추기 위해서만 존재하는 영가(zero-value) 노트다. 반대의 경우도 마찬가지다. 하나의 입력은 있지만 두 개의 출력이 필요하면, 더미 지출을 포함한다. 관찰자는 실제 액션과 더미를 구별할 수 없다.

4.7.2 온체인에 올라가는 것

앨리스의 트랜잭션이 실제로 담고 있는 내용은 다음과 같다.

{
  "anchor": "0x7f8e9d0c...",

  "actions": [
    {
      "cv": "0x9a8b7c6d...",
      "nullifier": "0x2c3d4e5f...",
      "rk": "0x5e6f7a8b...",
      "cmx": "0x8a9b0c1d...",
      "ephemeralKey": "0x6b7c8d9e...",
      "encCiphertext": "0x9f8e7d6c...[580 바이트]",
      "outCiphertext": "0x3c4d5e6f...[80 바이트]"
    },
    {
      "cv": "0x1b2c3d4e...",
      "nullifier": "0x8f7a9b2c...",
      "rk": "0x4d5e6f7a...",
      "cmx": "0x2d3e4f5a...",
      "ephemeralKey": "0x8c9d0e1f...",
      "encCiphertext": "0x7e8f9a0b...[580 바이트]",
      "outCiphertext": "0x5a6b7c8d...[80 바이트]"
    }
  ],

  "proof": "0x1a2b3c4d...[~1.5 KB]",
  "bindingSig": "0x4e5f6a7b...[64 바이트]"
}

각 항목을 설명하면 다음과 같다.

- anchor: 앨리스의 증명이 참조하는 머클 루트. 이것은 그녀의 트랜잭션을 커밋먼트 트리의 특정 상태에 고정시킨다. 노드는 이것이 최근의 유효한 루트인지 검증한다.

- cv (value commitment): 각 액션에서 사용되거나 생성되는 값에 대한 암호학적 커밋먼트. 실제 금액을 드러내지 않는다. 대신, 트랜잭션 전체의 모든 cv 값의 합이 순 흐름을 인코딩하도록 구성된다.

- nullifier: 노트 A와 노트 B의 널리파이어. 이것들이 널리파이어 집합에 추가되어, 해당 노트들을 영원히 사용된 것으로 표시한다.

- rk (randomized verification key): 지출 승인 서명을 검증하는 데 사용된다. 앨리스가 자신의 실제 지출 키를 드러내지 않으면서 이 특정 트랜잭션을 승인했음을 증명한다.

- cmx: 밥의 노트와 앨리스의 거스름돈 노트에 대한 커밋먼트. 이것들이 커밋먼트 트리에 추가된다.

- ephemeralKey + encCiphertext + outCiphertext: 암호화된 노트 데이터. 이것들은 합의에 영향을 미치지 않지만, 이것 없이는 수신자가 자금을 청구할 수 없다.

- proof: 모든 것이 유효함을 증명하는 zk-SNARK. 하나의 증명이 전체 트랜잭션(두 액션 모두)을 커버한다.

- bindingSig: 모든 조각을 함께 묶는 서명. 모든 액션에 걸친 cv 값이 올바르게 합산됨을(가치 보존 보장) 그리고 트랜잭션이 변조되지 않았음을 증명한다.

4.7.3 수수료

수수료가 어디에도 명시적으로 표시되지 않은 것을 눈치챘을 것이다. 이는 수수료가 암묵적이기 때문이다. 앨리스의 입력 총액은 7 ZEC이고 출력 총액은 6.999 ZEC다. 그 차이인 0.001 ZEC가 트랜잭션 수수료이며, 채굴자가 가져간다.

수수료는 공개된다. 관찰자는 트랜잭션 처리에 얼마가 지불되었는지 볼 수 있지만, 이것이 유일하게 보이는 값이다. 입력 금액, 출력 금액, 당사자 간 가치 이전은 숨겨진 채로 남아 있다.

4.8 브로드캐스트와 멤풀

앨리스의 지갑이 완전한 트랜잭션을 조립했다. 이제 네트워크에 도달해야 한다.

4.8.1 네트워크에 전송

전송 과정은 다음과 같이 진행된다. 앨리스의 지갑은 하나 이상의 Zcash 노드에 연결하여 트랜잭션을 브로드캐스트한다. 메시지는 P2P 네트워크를 통해 전파되며, 채굴자와 더 넓은 네트워크에 도달할 때까지 노드에서 노드로 전달된다.

앨리스의 관점에서 이 과정은 1~2초 정도 걸린다. 그녀는 지갑에서 "트랜잭션 브로드캐스트됨"을 보고 확인을 기다린다.

4.8.2 초기 검증

노드가 앨리스의 트랜잭션을 받으면, 맹목적으로 수락하지 않는다. 더 멀리 릴레이하거나 멤풀에 추가하기 전에, 노드는 일련의 검사를 수행한다.

1. 증명 검증: 노드는 앨리스의 증명에 대해 zk-SNARK 검증기를 실행한다. 이것은 몇 밀리초가 걸린다. 증명이 무효하면, 트랜잭션은 즉시 거부된다.

2. 앵커 검사: 노드는 앨리스가 사용한 앵커가 유효한지 검증한다. 구체적으로, 이것은 커밋먼트 트리의 최근 루트여야 한다.

3. 널리파이어 검사: 노드는 두 널리파이어를 자신의 로컬 널리파이어 집합과 대조한다. 하나라도 이미 존재하면, 앨리스는 이중 지불을 시도하는 것이다. 트랜잭션은 거부된다.

4. 구조적 유효성: 노드는 트랜잭션이 올바른 형태인지 확인한다. 올바른 필드 길이, 유효한 인코딩, 바인딩 서명 검증 등.

모든 검사가 통과하면, 노드는 트랜잭션을 유효한 것으로 간주한다. 그런 다음 트랜잭션을 멤풀(memory pool, 확인되지 않은 트랜잭션의 대기 영역)에 추가하고 다른 노드에 릴레이한다.

4.8.3 멤풀에서 대기

멤풀은 트랜잭션의 대기 공간이다. 앨리스의 트랜잭션은 채굴자가 그것을 선택하여 블록에 포함시키기를 기다리는 수백 또는 수천 개의 다른 트랜잭션과 함께 거기에 있다.

채굴자는 수수료에 기반하여 멤풀에서 트랜잭션을 선택한다. 수수료가 높은 트랜잭션이 일반적으로 먼저 선택된다. 앨리스는 0.001 ZEC를 지불했는데, 이는 Zcash에서 일반적인 수준이며, 정상적인 네트워크 조건에서는 다음 블록이나 그 다음 블록에 포함되기에 충분하다.

참고
멤풀은 전역적이거나 동기화되지 않는다. 각 노드는 자체 멤풀을 유지한다. 네트워크 전파 지연으로 인해, 다른 노드들이 어느 순간에 약간 다른 대기 트랜잭션 집합을 가질 수 있다. 이것은 합의에 중요하지 않다. 중요한 것은 어떤 트랜잭션이 블록에 들어가느냐다.

트랜잭션이 브로드캐스트되었다. 노드가 검증했다. 이제 앨리스는 채굴자가 최종 작업을 수행하기를 기다린다.

4.9 블록 포함과 최종성

채굴자가 자신의 멤풀에서 앨리스의 트랜잭션을 선택하고, 다른 트랜잭션과 함께 묶어 새 블록을 채굴하는 작업을 시작한다.

4.9.1 블록 채굴

Zcash는 비트코인과 마찬가지로 작업 증명(Proof of Work)을 사용한다. 채굴자는 이전 블록의 해시, 타임스탬프, 포함된 트랜잭션의 머클 루트, 그리고 논스(nonce)를 포함하는 블록 헤더를 구성한다. 그런 다음 목표 난이도 이하의 해시를 생성하는 논스를 찾을 때까지 논스를 반복해서 시도한다.

이 과정은 비트코인 입문서(3.1절)에서 다룬 것과 동일하지만, 한 가지 예외가 있다. Zcash는 SHA256 대신 Equihash 알고리즘을 사용한다.

채굴자가 유효한 논스를 찾으면 블록을 브로드캐스트하고, 다른 노드들이 이를 검증한다. 모든 것이 확인되면, 노드들은 블록을 자신의 체인에 추가하고 앨리스의 트랜잭션은 영구 기록의 일부가 된다.

4.9.2 상태 업데이트

블록이 승인되면, 네트워크의 상태가 변경된다.

1. 커밋먼트 트리가 성장한다. 밥의 노트 커밋먼트와 앨리스의 거스름돈 노트 커밋먼트가 커밋먼트 트리에 추가된다. 새로운 머클 루트가 계산된다. 이 루트는 향후 트랜잭션에서 유효한 앵커가 된다.

2. 널리파이어 집합이 확장된다. 앨리스의 두 널리파이어가 널리파이어 집합에 추가된다. 해당 노트들은 이제 영구적으로 사용된 것으로 표시된다.

3. 블록 보상이 발행된다. 채굴자는 새로 발행된 ZEC(블록 보조금)와 블록에 포함된 모든 트랜잭션 수수료의 합을 받는다.

4.9.3 확인(Confirmations)

앨리스의 트랜잭션은 이제 확인되었지만, 확인이 최종성을 의미하지는 않는다.

비트코인과 마찬가지로, Zcash도 일시적인 체인 포크를 경험할 수 있다. 트랜잭션이 뒤집어질 확률은 각 추가 확인마다 기하급수적으로 감소한다. 한 블록 후에는 재조직 가능성이 작다. 여섯 블록 후에는 실용적인 목적으로 볼 때 가능성이 무시할 수 있는 수준이다.

참고
Zcash의 블록 시간은 75초로, 비트코인의 10분에 비해 훨씬 짧다. 따라서 확인이 훨씬 빠르게 누적된다. Zcash에서 여섯 번의 확인은 약 7분 30초가 걸리는 반면, 비트코인에서는 한 시간이 걸린다.

트랜잭션이 채굴되었고 상태가 업데이트되었다. 앨리스의 이전 노트들은 영원히 사라지고, 커밋먼트 트리의 두 개의 새 노트로 대체되었다. 그 노트 중 하나는 밥의 것이고, 이제 그가 그것을 찾아야 한다.

4.10 수신자 감지

앨리스의 트랜잭션이 온체인에 있다. 밥의 5 ZEC는 트리의 커밋먼트로 존재하지만, 밥은 아직 그것을 모른다. 그의 지갑이 해당 노트를 찾아야 한다.

4.10.1 블록체인 스캔

밥의 지갑은 주기적으로 네트워크와 동기화하여 새 블록을 다운로드하고 들어오는 지불을 스캔한다. 문제는 밥이 단순히 자신의 주소를 검색할 수 없다는 것이다. 차폐 출력은 주소를 평문으로 포함하지 않으며, 모든 출력은 무작위 암호화 데이터처럼 보인다.

밥의 지갑은 만나는 모든 차폐 출력의 복호화를 시도한다. 모든 블록의 모든 액션의 모든 encCiphertext에 대해, 지갑은 밥의 수신용 조회 키를 사용하여 복호화를 시도한다. 이러한 시도의 대부분은 실패하여 사용할 수 없는 데이터를 생성하지만, 그것은 예상된 것이다. 해당 출력은 다른 사람의 것이기 때문이다.

마침내 밥의 지갑이 앨리스의 트랜잭션에 도달하여 액션 0의 암호문을 복호화하려 할 때, 복호화가 성공하고 유효한 노트 데이터가 나타난다.

4.10.2 노트 복구

복호화가 작동하면, 밥의 지갑은 전체 노트 평문을 복구한다.

{
  "addr": "u1bob...",
  "v": 500000000,
  "rho": "0x3e4f5a6b...",
  "psi": "0x7c8d9e0f...",
  "rcm": "0x1a2b3c4d..."
}

밥은 이제 필요한 모든 것을 갖추었다.

- 값: 5 ZEC(500,000,000 자토시). 그의 지갑은 그에 따라 잔액을 업데이트한다.

- 노트 구성 요소: 앨리스가 생성한 rho, psi, rcm 값. 이것들은 필수적이다. 이것들 없이는 밥이 커밋먼트를 계산하거나, 나중에 노트를 사용하기 위해 널리파이어를 도출할 수 없다.

- 위치: 밥의 지갑은 또한 이 커밋먼트가 트리의 어디에 위치하는지 기록한다. 밥이 결국 사용할 때 머클 경로를 구성하려면 이 위치가 필요하다.

4.10.3 노트 검증

밥의 지갑은 복호화된 데이터를 맹목적으로 신뢰하지 않는다. 복구된 값으로부터 커밋먼트를 재계산한다.

cmx_check = Hash(addr_bob, 500000000, rho, psi, rcm)

cmx_check가 앨리스의 트랜잭션에서 온체인에 공개된 cmx와 일치하면, 노트는 유효하다.

4.10.4 사용 가능한 노트

밥은 이제 사용 가능한 5 ZEC 노트를 소유한다. 그의 지갑은 노트 데이터를 로컬에 저장하고 그가 사용하고 싶을 때를 위해 준비해 둔다. 그 시점에 그는 앨리스가 그에게 보내기 위해 따랐던 것과 동일한 과정을 따를 것이다.

  1. 노트 선택
  2. 머클 경로 가져오기
  3. 널리파이어 계산
  4. 수신자를 위한 출력 노트 생성
  5. 증명 생성
  6. 트랜잭션 브로드캐스트

주기가 반복된다. 밥의 지출은 널리파이어를 드러내어 그의 노트를 소비된 것으로 표시하고, 새 커밋먼트가 트리에 추가되며, 그러면 새 수신자가 스캔하고 복호화하여 자금을 발견한다.

참고
스캔은 차폐 지갑의 주요 성능 병목점이다. 몇 달간 오프라인이었던 지갑은 따라잡기 위해 수백만 개의 출력을 시험 복호화해야 한다. 이것이 라이트 클라이언트와 최적화된 동기화 프로토콜이 중요한 이유다. Project Tachyon은 망각적 동기화(oblivious synchronization)를 통해 따라잡기 과정을 극적으로 개선하는 것을 목표로 한다.

앨리스가 밥에게 5 ZEC를 보냈다. 네트워크는 누가 누구에게 무엇을 보냈는지 알지 못한 채 트랜잭션을 검증했지만, 밥은 다른 누구도 그가 받았다는 것을 모르는 상태에서 자신의 지불을 감지할 수 있었다. 트랜잭션이 완료되었다.

제러미 벤담의 판옵티콘, 1791년
제러미 벤담의 판옵티콘(Panopticon), 1791년. 수감자들이 감시당하고 있는지 알 수 없도록 설계된 감옥. 그들은 스스로를 감시하는 법을 배우게 된다.

5. 프라이버시의 철학

5.1 진보의 조건

진보는 실험을 필요로 하고, 실험은 프라이버시를 필요로 한다.

모든 사회적, 과학적, 경제적 발전은 결과가 명확해지기 전에 새로운 아이디어를 시도하는 누군가에서 비롯되었다. 이러한 실험들 대부분은 실패한다. 일부는 이단이다. 일부는 동시대의 기준으로는 명백히 무책임하다.

갈릴레오는 태양이 우주의 중심이 아니라는 것을 확립한 가설인 지동설을 옹호했다는 이유로 가택 연금에 처해졌다. 앨런 튜링은 영국의 반동성애 법률에 따라 기소되었고, 화학적 거세에 처해진 후 자살했다. 역사는 주류 사회가 범죄자, 이단자 또는 위협으로 취급했지만 나중에 선구자로 인정받은 사람들로 가득하다.

이것이 프라이버시가 본질적인 이유다. 허용되는 사고와 행동의 경계를 탐구하는 것은 관찰자에게 보이지 않는 공간을 필요로 한다.

이것은 추상적인 우려가 아니다. 자신의 말이 감시당하고 있음을 알고 자기 검열을 한 모든 사람의 현실이다. 거래가 추적 가능함을 알고 논쟁적이거나 새로운 대의에 기부하지 않기로 선택한 모든 사람의 현실이다. 검색 기록이 남음을 알고 민감한 주제를 조사하지 않은 모든 사람의 현실이다. 감시는 행동을 바꾼다. 그것이 감시의 주요 기능 중 하나다. 때로 행동을 바꾸는 것은 아이디어를 제약하는 것이며, 따라서 진보를 제약하는 것이다.

5.1.1 화폐, 마지막 독점

역사를 통틀어 자유는 그것을 보호할 도구에 의존해 왔다.

인쇄술은 표현의 자유를 촉진했다. 구텐베르크 이전에 아이디어는 종종 필경사와 성직자에게 묶여 있었고, 제도적 권위 뒤에 갇혀 있었다. 인쇄술은 정보에 대한 독점을 깨뜨렸다.

인터넷은 지리의 독점을 깨뜨렸다. 아이디어는 이제 국경을 넘어 순식간에 공유될 수 있었다. 물리적 근접성 없이도 협력이 가능해졌다. 정보가 장애물을 우회할 수 있게 되면서 검열은 더 어려워졌다.

화약은 기사와 왕의 폭력 독점을 산산조각 냈다. 머스킷총을 든 농민이 갑옷 입은 영주에게 도전할 수 있었다. 권력은 더 분산되었다.

매번 새로운 도구가 오래된 독점을 부쉈다. 이제 하나의 독점이 남아 있다. 바로 화폐다.

화폐는 인류가 만든 가장 강력한 협력 기술이다. 우리가 가치를 신호하고, 자원을 배분하고, 대규모로 협력하는 방식이다. 하지만 화폐는 여전히 상당히 제한되어 있다. 화폐는 가장 많이 감시되고 가장 많이 통제되는 기술이다. 모든 거래가 모니터링될 수 있다. 정부는 키 입력 한 번으로 계좌를 동결할 수 있다. 은행은 하룻밤 사이에 당신을 차단할 수 있다. 점점 더 자본 통제는 당신이 자신의 현금을 인출하는 것조차 막을 수 있다.

다른 누군가가 당신의 모든 거래를 볼 수 있고, 승인 여부를 결정할 수 있으며, 나중에 그 결정을 번복하고 접근을 차단할 수 있다면, 그 돈은 진정 당신의 것이 아니라고 할 수 있다.

5.1.2 시장에서의 프라이버시

자유 시장에는 프라이버시가 필요하다. 이 결론은 시장이 어떻게 작동하는지 이해하면 자연스럽게 따라온다.

시장은 가격을 통해 정보를 집계한다. 참여자들이 사적 지식에 기반하여 결정을 내리면, 그 결정들의 총합에서 가격이 도출된다. 이 메커니즘은 참여자들이 사적 정보에 기반하여 결정을 내리되 그것을 조기에 드러내지 않을 수 있을 때만 기능한다. 모든 포지션을 취하기 전에 공개해야 하는 트레이더는 선행매매(front-run)를 당할 것이다. 모든 공급업체 관계를 공개해야 하는 기업은 가격 경쟁에서 밀릴 것이다. 모든 기부를 발표해야 하는 후원자는 압박을 받을 것이다.

아무리 작은 정보의 유출이라도 시장을 변화시킨다. 편향을 도입하고 결정을 왜곡하기 때문이다. 시스템에 감시가 많을수록 더 많은 왜곡이 발생한다. 완벽한 시장은 사적 정보에 따라 자유롭게 행동할 수 있는 참여자를 필요로 하는데, 이는 절대적 감시 조건에서는 불가능하다.

당신의 순자산이 공개 API가 되어서는 안 된다. 당신의 거래 내역이 검색 가능한 데이터베이스가 되어서는 안 된다. 당신의 금융 생활이 관찰자의 승인 대상이 되어서는 안 된다. 이것은 극단적인 사례나 편집증적 우려가 아니다. 시장이 기능하고 개인이 자유로워지기 위한 기본 요건이다.

5.2 투명성의 함정

암호화폐는 금융 감시로부터 우리를 해방시킬 것이었다. 하지만 정반대의 결과를 낳았다.

이 운동을 구축한 사이퍼펑크들은 무엇이 걸려 있는지 이해했다. 그들은 디지털 시대의 프라이버시가 정부나 기업에 의해 주어지지 않을 것이며, 암호학적 도구로 구축하고, 배포하고, 방어해야 한다는 것을 이해했다. 비트코인은 이 전통에서 탄생했고, 화폐가 정부 통제 밖에 존재할 수 있다는 첫 번째 증거가 되는 데 성공했다.

그러나 비트코인에는 큰 결함이 있다. 기본적으로 투명하다는 것이다. 모든 거래, 모든 주소, 모든 잔액이 보고자 하는 누구에게나 보인다. 블록체인은 그것을 통과한 모든 경제 활동의 영구적인 공개 장부다. 사토시는 원래 백서에서 이 한계를 인정하며, 사용자가 각 거래마다 새 주소를 생성하여 어느 정도 프라이버시를 보존할 수 있다고 제안했다. 그것은 당시에도 약한 완화책이었고, 지금은 터무니없는 것이 되었다.

가명성(pseudonymity)은 당신의 신원이 주소에 직접 연결되지 않음을 의미한다. 그럼에도 당신의 신원은 행동 관찰을 통해 누출될 수 있다. 거래하는 시간, 이동하는 금액, 상호작용하는 주소, 요컨대 반복하는 패턴들. 각 데이터 포인트마다 주소에 대한 가능한 신원의 집합이 좁아지고, 마침내 충분한 제약이 쌓이면 집합은 하나로 수렴한다.

AI 시대에 가명성은 빌린 시간 위의 프라이버시다. 컴퓨팅 파워에 의해 해체되기를 기다리는 환상에 불과하다.

5.2.1 상거래에는 불투명성이 필요하다

투명성 문제는 개인에게만 국한되지 않는다. 상거래 역시 프라이버시 없이는 무너진다.

투명한 체인에서 기업에 단 한 번 결제할 때 어떤 일이 일어나는지 생각해 보라. 이제 당신은 그들의 주소를 볼 수 있고, 그 주소에서 잠재적으로 그들의 총 수입, 고객 주소, 공급업체 관계, 급여, 심지어 현금 흐름과 운영 자금까지 도출할 수 있다.

인사 부서가 급여 구조를 철저히 비밀로 다루는 이유가 있다. 기업이 공급업체 계약을 공개하지 않는 이유가 있다. 재무제표가 실시간으로 대중에게 스트리밍되는 대신 분기별로 통제된 형식으로 공개되는 이유가 있다. 경쟁 시장은 정보 비대칭을 필요로 한다. 기업은 사적 지식에 기반하여 행동하되 그것을 경쟁자에게 방송하지 않을 수 있어야 한다.

동일한 논리가 개인에게도 적용된다. 당신의 지출 패턴이 건강 상태, 정치적 성향, 종교적 관행, 개인적 관계를 드러낸다면, 모든 거래는 당신이 누구인지, 무엇을 소중히 여기는지, 어떻게 영향을 받거나 강요당할 수 있는지에 대한 그림을 생성하는 데이터 포인트가 된다.

웹은 온라인 상거래가 기능하기 전에 HTTPS가 필요했다. 신용카드 번호를 평문으로 전송하는 것은 보안상의 이유로 명백히 용납할 수 없었다. 인터넷의 결제 계층에도 동일한 진화가 필요하다. 평문 거래가 프로토타입이었다면, 프로덕션에는 암호화가 필요하다.

5.3 프라이버시는 절대적이어야 한다

절반의 조치는 효과가 없다. 프라이버시는 이진적이기 때문이다. 있거나 없거나 둘 중 하나다.

극단적으로 들릴 수 있지만, 이는 정보가 작동하는 방식에서 따라온다. 비밀은 누출될 때까지만 비밀이다. 일단 누출되면 다시 누출되지 않은 상태로 돌아갈 수 없다. 영구 저장, 패턴 인식, AI 기반 분석의 세계에서 어떤 부분적 누출이든 완전한 누출로 성장한다. 문제는 나머지 정보가 추출될지 여부가 아니라 언제인가다.

5.3.1 단일 비트 문제

거래 데이터의 99%를 숨기지만 나머지 1%는 누출하는 프라이버시 시스템을 상상해 보라. 그 1%는 수용 가능해 보일 수 있지만, 정보는 복합적으로 작용한다. 누출된 한 비트가 가능성을 제약하고, 두 비트가 더 제약한다. 각 추가 누출이 당신이 누구일 수 있는지, 무엇을 하고 있을 수 있는지, 왜 그러는지에 대한 가능성을 좁힌다.

적대자들은 인내심이 있다. 그들은 시간이 지남에 따라 부분적인 정보 조각을 수집하고, 데이터 소스 간에 상관관계를 파악하며, 노이즈에서 신호를 추출하기 위해 통계 기법을 적용할 것이다. 여기서 타이밍 상관관계, 저기서 금액 패턴, 다른 곳에서 네트워크 그래프 연결. 개별적으로는 당신을 식별하기에 충분하지 않지만, 수렴하면 가능해진다.

기억하라. 이것은 가설이 아니라 체인 분석, 메타데이터 분석, 그리고 모든 현대 감시 시스템의 방법론이다. 작은 누출이 작게 남을 것이라는 가정은 틀렸다. 작은 누출이 축적되어 완전한 그림을 구성한다.

누출이 있는 모든 프라이버시 시스템은 다음 질문에 답해야 한다. 무한한 시간과 컴퓨팅 파워를 가진 적대자가 그 누출에 대해 최적화하면 어떻게 되는가? 답이 "그들이 결국 이긴다"라면, 그 시스템은 프라이버시를 제공하지 않는다. 단지 지연된 노출을 제공할 뿐이다.

5.3.2 난독화 vs 암호화

정보를 숨기는 데는 두 가지 접근법이 있다. 노이즈 속에 숨겨 찾기 어렵게 만드는 난독화(obfuscation), 또는 키 없이는 수학적으로 접근 불가능하게 만드는 암호화(encryption)다.

난독화는 건초 더미에 바늘을 숨기는 것이다. 누군가가 더 좋은 자석을 만들기 전까지는 효과가 있다. 바늘은 여전히 거기 있고, 충분한 노력으로 여전히 찾을 수 있다. 보안은 경제적이지 수학적이지 않다. 바늘을 찾는 비용이 그 가치보다 크다는 데 베팅하는 것이다. 하지만 비용은 시간이 지남에 따라 하락한다. 컴퓨팅은 더 저렴해진다. 알고리즘은 더 똑똑해진다. 적대자들은 더 동기부여된다. 오늘 숨겨진 것이 내일 사소하게 노출될 수 있다.

암호화는 바늘을 파괴하고 잠긴 설명만 보관하는 것이다. 키 없이는 그 설명이 무작위 노이즈와 구별할 수 없다. 도움이 되는 자석은 없다. 무작위성에서 의미를 추출하는 계산량은 존재하지 않는다. 보안은 수학적이지 경제적이지 않다. 시간이 지나도 약화되지 않는다. 2016년의 암호화된 메시지는 암호학이 건전했다면 당시와 정확히 동일하게 안전하다.

이 구분은 금융 프라이버시에 매우 중요하다. 난독화 기반 접근법은 당신의 거래를 다른 거래와 섞거나, 미끼 속에 숨기거나, 데이터에 노이즈를 추가한다. 이러한 기법들이 분석 비용을 높이지만, 분석을 불가능하게 만들지는 않는다. 분석 기법이 향상되면 보호가 약해진다. 5년 전에 적절했던 프라이버시가 오늘 깨질 수 있고, 오늘 적절해 보이는 프라이버시가 2030년의 도구로 깨질 수 있다.

암호화 기반 접근법은 거래 자체를 숨긴다. 분석할 거래가 없고, 유효한 거래가 발생했다는 증명만 있다. 데이터는 단순히 가려진 것이 아니라 부재한다. 따라서 분석 기법의 미래 발전에 면역이다. 존재하지 않는 데이터에서 패턴을 찾을 수는 없다.

5.3.3 이것이 아키텍처를 결정하는 이유

이것이 Zcash가 거래를 난독화하는 대신 암호화하는 이유다. 발신자, 수신자, 금액이 미끼 속에 숨겨지거나 노이즈와 섞이지 않는다. 대신 암호화된다. 블록체인은 난독화된 데이터가 아니라 커밋먼트와 증명을 저장하므로, 네트워크가 보는 것은 수학적으로 무작위 바이트와 구별할 수 없다.

간결한 논증은 이렇다. 프라이버시가 절대적이어야 하고, 부분적 누출이 완전한 노출로 복합되며, 적대자의 역량은 시간이 지남에 따라 증가할 뿐이라는 것을 받아들인다면, 암호화가 유일하게 실행 가능한 아키텍처다. 영구적인 해결책이며, 난독화는 일시적인 조치일 뿐이다.

선택은 더 많은 프라이버시와 더 적은 프라이버시 사이가 아니다. 유지될 프라이버시와 결국 실패할 프라이버시 사이다. 중간 지대는 없다.

5.4 거시적 논거

지금까지의 프라이버시 논증은 철학적이었다. 프라이버시가 진보를 가능하게 하고, 투명성이 감시와 같으며, 부분적 프라이버시는 실패한다는 것은 어느 시대에나 참이다. 하지만 우리는 아무 시대에나 사는 것이 아니다. 현 시대의 거시 환경은 프라이버시를 가치 있을 뿐만 아니라 긴급하게 만든다.

5.4.1 역사는 끝나지 않는다

현대 서구 사회의 안정성이 사람들로 하여금 안정성의 영속성을 잘못 판단하게 했을 수 있다. 역사를 통틀어 세계 전역에서 안정성은 예외이지 규칙이 아니다. 정권은 붕괴한다. 화폐는 실패한다. 부채 주기는 리셋된다. 자본 통제는 하룻밤 사이에 나타난다. 이것들은 드문 사건이나 먼 역사가 아니다. 지금 이 순간 어딘가에서 누군가에게 일어나고 있는 현대 세계의 특징이다.

지난 10년만 해도 키프로스는 금융 위기 동안 은행 예금을 압류했고, 그리스는 시민들이 자신의 돈을 인출하는 것을 막는 자본 통제를 시행했다. 레바논의 은행 시스템은 붕괴했고, 저축은 수년간 지속된 인출 한도 뒤에 갇혔다. 아르헨티나는 우울할 정도로 규칙적으로 화폐 위기를 겪었다. 나이지리아는 외화 접근을 제한했다. 중국은 자본 유출 통제를 강화했다.

일관된 패턴이 있다. 정부는 재정 압박에 직면하면 금융 통제에 손을 뻗는다. 국가 경제와 중앙은행은 은행 계좌를 동결하고, 인출을 제한하고, 이체를 차단하고, 자산을 압류할 수 있게 한다. 따라서 질문은 어떤 자산이 압류 가능하고 어떤 것이 아닌가가 된다.

금은 역사적으로 재정적 예측 불가능성 시나리오에 대한 헤지 역할을 해왔다. 대규모로 몰수하기 어렵고, 추적하기 어려우며, 정권 전환에도 가치를 유지한다. 불행히도 금은 현대 세계에서 사용자 경험이 끔찍하다. 물리적으로 획득해야 하고, 진위를 확인해야 하고, 안전하게 보관해야 하며, 운송은 위험이 높다. 사용자 경험의 마찰이 대부분의 사람들에게 실용적인 가치 저장 수단으로서의 유용성을 제한한다.

비트코인은 디지털 금이 되어야 했다. 어떤 면에서는 그렇다고 할 수 있지만, 그 투명성은 다른 취약점을 만든다. 당신의 모든 거래가 공개 장부에 보인다면, 국가는 단순히 당신의 보유량을 식별하고, 움직임을 추적하고, 법적 채널을 통해 압력을 가할 수 있다. 비트코인을 무신뢰(trustless)로 만드는 투명성이 또한 표적이 될 수 있게 만든다.

5.4.2 감시 래칫

감시 역량은 한 방향으로만 움직인다. 확장이다.

정부는 데이터를 축적하고, 시스템을 구축하고, 분석가를 고용하고, 분석 기법을 개발한다. 정부는 부처 간에, 심지어 국경을 넘어 정보를 공유할 수 있다. 일단 구축된 감시 인프라는 해체되지 않는다. 업그레이드될 뿐이다.

역자 주: 래칫(Ratchet)
한 방향으로만 회전하는 톱니바퀴 메커니즘을 말한다. 여기서는 감시 역량이 한번 확장되면 줄어들지 않고 계속 늘어나기만 하는 특성을 비유적으로 표현한 것이다.

AI가 이러한 발전을 극적으로 가속화할 것이다. 한때 분석가 팀이 필요했던 패턴 매칭이 이제 자동화될 수 있다. 한때 사일로에 있던 메타데이터가 이제 대규모로 상관 분석될 수 있다. 한때 몇 달이 걸리던 행동 분석이 이제 실시간으로 일어날 수 있다. 1인당 감시 비용이 0을 향해 떨어진다. 유일한 한계는 분석할 데이터가 존재하느냐다.

투명한 블록체인에서 그 데이터는 모든 것이다. 말 그대로 당신이 한 모든 거래가 영구적으로 보존되어 더 나은 분석 도구를 기다린다. 블록체인은 잊지 않으며, 그것을 채굴하여 정보를 얻는 적대자들도 마찬가지다.

오늘 당신이 하는 일은 내일의 도구로 분석될 것이다. 지금 익명으로 보이는 거래가 5년 후에는 사소하게 추적 가능할 수 있다. 오늘 노이즈 속에 숨겨진 것처럼 보이는 패턴이 알고리즘이 향상되면 명백한 신호가 될 수 있다. 2026년에 내리는 결정은 2030년의 프라이버시와 분석 상태를 고려해야 한다.

5.4.3 우리가 기억해야 할 선례

권위주의 통제의 가장 효과적인 도구 중 하나는 의무 공개다. 몰수로 시작하지 않고 정보 수집으로 시작한다. 종교를 등록하라. 자산을 신고하라. 결사를 보고하라. 행정적이고 관료적으로 제시되지만, 이것들은 종종 더 나쁜 것의 전조다.

일단 공개가 의무화되면, 인구를 분류할 수 있고, 집단을 식별하고, 분석하고, 평가할 수 있다. 그들이 우리가 승인하지 않는 종교를 따르는가? 우리가 위협적이라고 생각하는 결사에 속해 있는가? 우리가 원할 수 있는 자산을 소유하고 있는가? 분리와 구분이 박해에 선행한다. 데이터가 존재하면 표적화된 행동이 가능해진다.

권위주의 통제는 살아 있는 사람의 기억 속에서 일어났으며, 현대 기술이 제공하는 확장성 이점 없이도 일어났다. 나치는 종이 기록과 서류 캐비닛을 사용했다. 오늘날 우리의 디지털 도구는 인구 규모의 식별과 표적화를 손쉽게 만든다.

사적 자산을 보유하는 것은 이러한 위협을 거부하는 것이다. 당신의 금융 생활이 권력에 읽혀야 한다는 전제를 거부하는 것이다. 구현되었을 때 재앙적임이 입증된 철학에 대한 입장이다.

AI 기반 감시는 계속 확장되고 있다. 불리한 집단에 대한 법 시스템의 무기화가 증가하고 있다. 재정 압박이 가중되면서 자본 통제가 더 흔해지고 있다. 정치적 이유로 인한 몰수가 선진 민주주의에서도 더 이상 상상할 수 없는 일이 아니다.

당신의 부의 안전은 누가 선거에서 이기느냐에 의존해서는 안 된다. 당신의 저축이 정책 변경 하나로 압류될 위험에 처해서는 안 된다. 당신의 금융 프라이버시가 규칙을 구부릴 의향이 있음을 보여준 기관들의 지속적인 선의에 의존해서는 안 된다.

요약하면, 프라이버시에 대한 거시적 논거는 나쁜 일들이 일어났고, 일어나고 있으며, 계속 일어날 것이라는 것이다. 문제는 그것들이 당신의 문 앞에 도착했을 때 준비가 되어 있을 것인가다.

5.5 역사의 분기점

우리는 분기점에 있다. 화폐의 인프라가 재구축되고 있다. 지금 내리는 선택이 나중에 무엇이 가능할지를 결정할 것이며, 갈래들은 급격히 갈라진다.

5.5.1 감시 화폐

한 경로는 완전한 금융 가시성으로 이어진다. 모든 거래가 기록되고, 모든 기부가 분석되고, 모든 구매가 프로필을 구축한다. 이 결과는 우리 현재 시스템의 궤적이다.

중앙은행 디지털 화폐(CBDC)가 전 세계에서 시범 운영되고 있다. 예를 들어, 중국의 디지털 위안화는 이미 대규모로 배치되었고, 유럽중앙은행은 디지털 유로를 개발 중이며, 연방준비제도는 디지털 달러를 연구했다. 중요한 것은 이러한 시스템이 설계상 프라이버시 보호가 아니라 감시 가능형이라는 점이다. 목표는 가시성 증가다. 누가 무엇을 어디서, 언제, 누구와 썼는지.

프로그래머블 머니는 재정 통제의 논리를 더욱 확장한다. 지출을 강제하는 화폐 만료일, 구매할 수 있는 상품 범주에 대한 제한, 금융 접근이 행동 점수에 따라 달라지는 사회 신용 시스템, 승인된 판매자에서만 사용할 수 있는 경기 부양금 등을 도입한다. 이 중 어느 것도 음모를 필요로 하지 않는다. 인프라가 구축되고 그것을 사용할 인센티브가 생기기만 하면 된다.

투명한 블록체인은 CBDC 구축의 오버헤드 없이 감시를 제공함으로써 인프라 요소를 충족한다. 시민들이 자발적으로 공개 장부에 거래를 기록할 때 정부가 디지털 화폐를 발행할 필요가 없다. 결과는 같다. 경제 활동이 그것을 읽을 도구를 가진 누구에게나 읽힐 수 있는 판옵티콘.

완전한 금융 가시성의 경로는 화폐가 통제 수단이 되는 미래로 이어진다. 자발적 협력의 도구가 아니라 사회 관리를 위한 장치. '올바르게' 지출하면 내버려 두고, '잘못' 지출하면 표시되고, 제한되고, 동결된다. 거래의 자유가 빅 브라더가 부여하는 특권이 된다.

5.5.2 자유 화폐

다른 경로는 감시되거나, 검열되거나, 통제될 수 없는 화폐로 이어진다. 거래는 기본적으로 비공개이고, 계좌 잔액은 소유자에게만 보이며, 경제 활동은 참여자에게는 읽히지만 관찰자에게는 불투명하다.

중요한 점은 이 경로가 무정부 상태, 즉 규칙이 없는 상태로 귀결되지 않는다는 것이다. 이 경로의 결과는 규칙이지만, 기관이 아닌 수학에 의해 집행되는 규칙이다. 암호학이 방지하기 때문에 이중 지불이 불가능하다. 프로토콜이 금지하기 때문에 공급을 늘릴 수 없다. 필요한 키에 접근할 수 없기 때문에 거래를 위조할 수 없다. 규칙은 시스템 자체에 내장되어 있고, 정부 대신 노드에 의해 집행되며, 중요하게도 재량적 무효화에 면역이다.

이 미래에서 시장은 관찰의 왜곡 효과 없이 기능한다. 그룹 협력은 감시의 영향 없이 가능하다. 반대 조직은 재정 지원을 추적할 수 없기 때문에 가능하다. 혁신은 실험을 모니터링할 수 없기 때문에 가능하다. 따라서 5.1절에서 설명한 진보의 조건이 보존된다.

5.5.3 암호화의 선례

자유의 경로가 막히지 않았다고 믿을 이유가 있다.

1990년대에 미국 정부는 강력한 암호화를 금지하려 했다. NSA와 FBI는 암호화된 통신이 범죄자와 테러리스트를 지원할 것이라고 주장하며, 정부에 백도어 접근을 제공하는 키 에스크로 시스템을 추진했다. 이러한 연방 기관들은 암호화 소프트웨어를 군수품으로 분류하여 수출을 불법화했다.

역자 주: 키 에스크로(Key Escrow)
암호화 키의 복사본을 제3자(주로 정부 기관)에게 맡기는 시스템이다. 필요시 정부가 암호화된 통신을 복호화할 수 있게 하려는 목적이었으나, 프라이버시 침해 우려로 큰 반발을 샀다.

사이퍼펑크들이 이러한 조치에 반대하고 패배시켰지만, 암호화는 어쨌든 퍼졌다. 연구자들은 알고리즘을 발표했다. 개발자들은 소프트웨어를 출시했다. 인터넷은 TLS를 채택했다. 오늘날 암호화는 단순히 합법적인 것이 아니라 의무적이다. HTTPS는 은행, 상거래, 통신에 필수다. 한때 암호화를 금지하려 했던 정부가 이제 시민을 보호하기 위해 암호화를 의무화한다.

"암호화는 위험하다"에서 "암호화는 필수다"로의 전환에는 약 20년이 걸렸다. 사적 화폐도 이 궤적을 따를 가능성이 매우 높다. 오늘날 금융 프라이버시는 의심의 눈으로 취급된다. 규제 당국은 그것을 범죄자를 위한 도구로 보고, 컴플라이언스 프레임워크는 투명성을 기본으로 가정한다. 통신 프라이버시에 대한 논거는 정당하고 중요한 것으로 간주되며, 금융 프라이버시에도 확장된다. 개인은 감시로부터 보호가 필요하고, 상거래는 기밀성이 필요하며, 대안은 통제 표면이 어디에나 있는 세계다.

Zcash는 미국에서 합법이다. 규제된 거래소에서도 거래된다. 거의 10년 동안 금지되지 않고 운영되어 왔다. 이것은 우연이 아니다. 암호화를 보호했던 것과 동일한 법적, 정치적 논리를 반영한다. 암호학적 도구를 사용할 권리는 방어 가능하고, 프라이버시의 이점은 그것을 남용할 자들을 훨씬 넘어 확장된다.

5.5.4 선택

이 경로들은 상호 배타적이다. 감시 화폐와 자유 화폐를 둘 다 가질 수 없다. 금융 프라이버시와 보편적 거래 모니터링을 둘 다 가질 수 없다. 현재 구축 중인 인프라가 우리가 어느 세계에 살게 될지를 결정한다.

거래를 차폐하기로 선택하는 것은 단순히 개인적인 재정 결정이 아니다. 어떤 미래의 경로를 선택할지에 대한 투표다. 당신의 선택이 당신의 선호를 드러낸다. 차폐 풀의 모든 거래가 네트워크를 강화하고, 사적 화폐를 채택하는 모든 사용자가 그것을 더 실행 가능하게 만든다. 기술은 존재한다. 이제 우리는 그것을 사용하기로 결정해야 한다.

감시 화폐는 경제적 자유가 권력자들이 부여하는 허가인 미래로 이어진다. 자유 화폐는 경제적 자유가 수학에 의해 보장되는 근본적인 것인 세계로 이어진다. 당신은 어느 쪽을 선택하겠는가?

2007년 9월 노던 록 은행 앞에 줄을 선 예금자들
2007년 9월 노던 록(Northern Rock) 은행 앞에 줄을 선 예금자들. 150년 만에 처음으로 영국에서 발생한 뱅크런.

6. 진화와 경제

6.1 프로토콜 세대

Zcash는 출시 이후 핵심 암호학을 두 번 업그레이드했다. 각 세대가 거듭될수록 성능은 향상되고, 보안은 강화되며, 신뢰 가정은 줄어들었다. 오늘날의 프로토콜은 2016년의 프로토콜보다 본질적으로 더 나아졌다.

6.1.1 Sprout (2016)

최초의 차폐 풀은 프라이버시 암호화폐가 가능하다는 것을 증명했다. 처음으로 프로덕션 네트워크가 영지식 증명에 기반한 암호학적 프라이버시를 제공했다.

하지만 Sprout은 프로덕션의 탈을 쓴 프로토타입에 불과했다. 차폐 트랜잭션을 생성하려면 약 40초의 계산과 수 기가바이트의 RAM이 필요했다. Sprout은 휴대폰에서는 사용할 수 없었고, 노트북에서도 겨우 사용할 수 있는 수준이었다. 차폐 비용이 너무 높았기 때문에 대부분의 트랜잭션은 투명한 상태로 남았다.

Sprout은 또한 신뢰 설정 의식(trusted setup ceremony)을 필요로 했다. 여섯 명의 참가자가 초기 매개변수를 생성하면서, 각자 자신의 비밀 기여분을 파괴하기 위해 정교한 예방 조치를 취했다. 의식은 성공했지만, 불편한 질문이 남았다. 누군가 몰래 독성 폐기물(toxic waste)을 보관했다면 어떻게 되는가?

역자 주: 독성 폐기물(Toxic Waste)
신뢰 설정 과정에서 생성되는 비밀 값들을 말한다. 이 값들이 유출되면 공격자가 위조된 증명을 생성할 수 있어, 반드시 파괴되어야 한다. '독성 폐기물'이라는 이름은 이 데이터가 절대로 존재해서는 안 된다는 점을 강조한다.

6.1.2 Sapling (2018)

2년 후, Sapling이 Sprout의 암호학을 훨씬 더 효율적인 것으로 대체했다. 증명 생성에 필요한 시간이 40초에서 불과 몇 초로 줄어들었다. 메모리 요구량은 수십 메가바이트로 떨어졌고, 차폐 트랜잭션이 처음으로 모바일 기기에서 실용적으로 사용 가능해졌다.

Sapling은 또한 프라이버시를 더 사용하기 쉽게 만드는 기능들을 도입했다. 예를 들어, 조회 키(viewing key)를 통해 사용자는 지출 권한을 노출하지 않고도 자신의 거래 내역에 대한 읽기 권한을 공유할 수 있게 되었다. 다양화된 주소(diversified addresses)를 통해 단일 지갑이 수십억 개의 연결 불가능한 수신 주소를 생성할 수 있게 되었다.

중요한 점은 신뢰 설정이 여전히 필요했다는 것이다. Powers of Tau라는 새로운 의식에는 수백 명의 참가자가 수개월에 걸쳐 참여했고, 이어서 Sapling 전용 단계가 진행되었다. 더 큰 규모의 의식이 신뢰도를 높였지만, 신뢰 모델은 동일했다. 최소한 한 명의 참가자가 정직했다고 믿어야 한다.

6.1.3 Orchard (2022)

Orchard는 증명 시스템 전체를 교체했다. Halo 2 증명 시스템을 기반으로 구축되어, 신뢰 설정이 필요하지 않았다. 의식도 없었다. 따라서 독성 폐기물도 없고, 수년 전에 일어난 사건에 대한 신뢰 가정도 없다.

Orchard의 성능은 Sapling과 비슷하지만, 증명 크기가 약간 더 크고 설정 요구사항이 없다. 암호학 구조도 다르게 설계되어, 재귀적 증명을 위해 특별히 설계된 새로운 곡선 사이클(Pallas와 Vesta)을 사용한다.

역자 주: 재귀적 증명(Recursive Proofs)
증명 안에 다른 증명의 검증을 포함시키는 기술이다. 이를 통해 여러 증명을 하나로 압축하거나, 블록체인의 전체 상태를 작은 증명으로 요약할 수 있다. Halo 2의 핵심 혁신 중 하나다.

Orchard는 Zcash가 항상 가지려 했던 풀이다. 이전 세대들은 당시 가능했던 최선의 기술이었고, Orchard는 연구가 비전을 따라잡았을 때 가능해진 것이다.

6.1.4 현재

Orchard는 이제 새로운 차폐 트랜잭션의 기본값이다. Zashi 같은 일부 지갑은 사용자를 자동으로 Orchard로 안내하고, 지출 전에 투명 자금을 자동으로 차폐한다.

Sapling은 여전히 지원되지만 단계적으로 폐지되고 있다. 프로토타입과 프로덕션 준비 시스템 사이의 다리 역할을 했지만, Orchard가 최종 목적지다.

Sprout은 더 이상 사용되지 않는다. 풀은 여전히 온체인에 존재하지만, 지갑은 더 이상 새로운 Sprout 트랜잭션을 생성하지 않으며, Sprout에 자금이 있는 사용자는 마이그레이션하도록 권장된다.

6.2 턴스타일(Turnstiles)

프라이버시는 감사 문제를 야기한다. 투명한 체인에서는 모든 코인을 셀 수 있다. 공급량은 모든 잔액의 합이며 누구나 볼 수 있다. 버그로 인해 무에서 코인이 생성되면, 총량이 증가하는 것을 볼 수 있다.

차폐 풀은 잔액을 숨긴다. 누가 무엇을 보유하고 있는지 볼 수 없기 때문에 모든 사람의 보유량을 단순히 합산할 수 없다. 그렇다면 위조 코인이 차폐 풀에 들어오면 어떻게 알 수 있는가?

답은 턴스타일이다.

역자 주: 턴스타일(Turnstile)
지하철 개찰구처럼 한 방향으로만 통과할 수 있는 회전문을 말한다. Zcash에서는 차폐 풀에 들어가고 나가는 자금의 흐름을 추적하는 메커니즘을 이 비유로 표현한다.

6.2.1 메커니즘

각 차폐 풀은 자체 턴스타일을 가진다. 풀에 들어오고 나간 ZEC의 누적 집계다. 코인이 투명 풀에서 차폐 풀로 이동하면 턴스타일이 입금을 기록하고, 코인이 다시 나가면 출금을 기록한다.

계산은 간단하다. 턴스타일이 100만 ZEC가 풀에 들어오고 80만 ZEC가 나갔다고 표시하면, 최대 20만 ZEC가 남아 있다. 누군가 30만 ZEC를 인출하려 하면, 무언가 잘못된 것이다. 암호학이 실패했거나, 누군가 사기를 시도하고 있는 것이다.

턴스타일은 위조를 방지하지 않는다. 대신 감지한다. 더 정확히 말하면, 턴스타일은 위조 코인을 현금화하려는 모든 시도를 감지한다. 차폐 풀 내부에서 ZEC를 위조할 수는 있다(어떻게든 복잡한 암호학을 깨뜨린다면). 하지만 불일치가 기록되지 않고는 투명 풀에서 그 코인을 사용할 수 없다.

6.2.2 Sprout 버그

2018년에 Sprout 암호학에서 취약점이 발견되었다. 증명 시스템의 결함으로 인해 공격자가 차폐 풀 내부에서 감지 없이 코인을 생성할 수 있었을 것이다.

버그는 보안 감사 중에 Zcash 팀에 의해 발견되었고, 악용이 발생하기 전에 패치되었다. 하지만 이 사건은 턴스타일의 중요성을 보여주었다.

공격자가 버그를 악용했다면, Sprout 내에서 임의의 ZEC를 발행할 수 있었을 것이다. 하지만 그 코인을 조용히 추출할 수는 없었을 것이다. 위조된 ZEC를 투명 풀이나 다른 차폐 풀로 옮기려는 순간, 턴스타일 계산이 깨지고 감사자들은 Sprout에서 들어온 것보다 더 많은 ZEC가 나갔음을 볼 수 있었을 것이다.

턴스타일은 모든 공격의 피해 범위를 성공적으로 제한할 것이다. 치명적인 암호학적 실패조차도 감지 불가능한 인플레이션을 생성하지 않을 것이기 때문이다. 피해는 풀의 용량에 의해 제한될 것이고, 위조된 가치를 실현하려는 모든 시도는 경보를 울릴 것이다.

6.3 개발 자금 조달

Zcash는 출시 시 논쟁적인 선택을 했다. 프로토콜 수준에서 개발 자금을 조달하기로 한 것이다. 기부나 기업 후원에 의존하는 대신, 모든 블록 보상의 일부가 개발 조직에 직접 전달된다.

6.3.1 창립자 보상 (2016-2020)

처음 4년간, 모든 블록 보상의 20%가 창립자, 초기 투자자, 직원, 그리고 Zcash 재단에 전달되었다. 이것이 창립자 보상(Founders' Reward)이다.

이 계획은 출시 전에 공개되었고, 채굴하거나 ZEC를 구매하는 누구나 조건을 알고 있었음에도 불구하고 논쟁적인 결정으로 남았다. 비판자들은 이를 채굴자에 대한 세금이자 내부자들에 대한 횡재로 보았다. 반면 지지자들은 수년간의 지속적인 암호학 연구가 필요한 프로젝트를 위한 필수 자금으로 보았다.

창립자 보상은 2020년 11월 첫 번째 반감기에 종료되었고, 모든 수령자는 약속된 것을 정확히 받았다. 창립자들은 더 이상 프로토콜 보상을 받지 않는다.

역자 주: 반감기(Halving)
비트코인과 마찬가지로 Zcash도 일정 주기마다 블록 보상이 절반으로 줄어든다.

6.3.2 개발 기금 (2020-2024)

창립자 보상이 만료되기 전, 커뮤니티는 다음에 무엇이 와야 하는지 논의했다. 그 결과가 개발 기금(Dev Fund)으로, 다른 구조 하에서 20% 배분을 계속하는 것이었다.

새로운 분배는 블록 보상의 7%를 Electric Coin Company(주요 개발팀)에, 5%를 Zcash 재단(인프라 및 거버넌스)에, 8%를 독립 위원회가 관리하는 커뮤니티 보조금에 할당했다. 창립자와 초기 투자자는 자금 흐름에서 제외되었다.

개발 기금 계획은 첫 번째 반감기와 2024년 11월 두 번째 반감기 사이에 운영되었다.

6.3.3 확장 개발 기금 (2024-2025)

두 번째 반감기가 다가오면서, 커뮤니티는 다시 배분에 대해 투표했고, 일부 수정과 함께 개발 기금을 연장하기로 결정했다.

개발 자금은 블록 보상의 20%로 계속되지만, 이제 일부는 기존 조직이 아닌 미래 거버넌스 메커니즘이 통제하는 "잠금 상자(lockbox)"로 흐른다. 의도는 시간이 지남에 따라 자금 결정을 분산화하여, 토큰 보유자들에게 개발 자금이 어떻게 사용되는지에 대한 더 직접적인 영향력을 주는 것이다.

6.4 분산 거버넌스

어떤 단일 주체도 Zcash를 통제하지 않는다. 개발, 인프라, 거버넌스는 서로 다른 관할권, 자금원, 임무를 가진 독립 조직들에 분산되어 있다.

6.4.1 조직들

Electric Coin Company (ECC)는 주요 프로토콜 개발팀이다. ECC 팀은 참조 노드 구현을 유지하고, Zashi 지갑을 개발하며, 핵심 연구를 주도한다. ECC는 미국에 기반을 둔 501(c)(3) 비영리 단체인 Bootstrap Project의 자회사다.

Zcash 재단은 인프라, 커뮤니티 프로그램, 보조금을 담당한다. 재단 팀은 Rust로 작성된 독립적인 노드 구현체인 Zebra를 개발하여, 네트워크가 단일 코드베이스에 의존하지 않도록 보장한다. Zcash 재단은 501(c)(3) 공익 자선단체로, 역시 미국에 기반을 두지만 ECC와 운영상 독립적이다.

Shielded Labs는 장기 연구와 생태계 개발에 집중한다. 스위스에 기반을 두고 프로토콜 보상이 아닌 기부로 자금을 조달하여, 기여자 기반에 지리적, 구조적 다양성을 제공한다.

Tachyon은 암호학자 션 보위(Sean Bowe)가 이끌며, Zcash가 확장할 수 있는 인프라를 구축하고 있다. 보위는 Halo 2와 Zcash 핵심 암호학의 대부분을 설계한 인물이다. Tachyon 프로젝트는 지갑이 서버에 정보를 누출하지 않으면서 네트워크와 동기화하는 방식의 혁신을 통해 전 세계적인 프라이빗 거래를 가능하게 하는 것을 목표로 한다.

이 네 조직은 협력하지만 서로에게 답변할 의무는 없다. 의견이 다를 수 있고 때때로 실제로 다르다. 목표와 관점의 다양성은 포획을 방지하고 여러 관점이 프로토콜 결정에 반영되도록 보장하는 기능이다.

6.4.2 ZIP 프로세스

프로토콜 변경은 Zcash 개선 제안(ZIP, Zcash Improvement Proposal) 프로세스를 따른다. 누구나 변경을 제안할 수 있다. 제안은 공개적으로 토론되고, 피드백을 통해 개선되며, 기술적 장점과 커뮤니티 합의에 따라 수락되거나 거부된다.

주요 결정은 ZIP 프로세스를 건너뛰고 커뮤니티 전체 투표를 통해 해결된다. 2020년과 2024년의 개발 기금 연장은 모두 구현 전에 광범위한 공개 심의와 여론 수집을 거쳤다. 토큰 보유자, 채굴자, 커뮤니티 구성원의 의견이 수렴되었다.

2차 세계대전 중 나치 독일이 군사 통신을 암호화하는 데 사용한 에니그마 기계
2차 세계대전 중 나치 독일이 군사 통신을 암호화하는 데 사용한 에니그마 기계. 운영자들은 매일 설정을 변경하여 요격자들에게 임의의 문자열처럼 보이는 메시지를 생성했다.

7. Zcash VS ...

프라이버시는 움직이는 가치가 아닌, 정지해 있는 가치에서 나온다.

이 단일 원칙이 대부분의 프라이버시 솔루션이 실패하는 이유와 기본 레이어 암호화가 유일하게 작동하는 아키텍처인 이유를 설명한다. 이것을 이해하면, 프라이버시 기술의 지형이 명확해진다.

7.1 토네이도 캐시와 믹서

믹서를 사용할 때 어떤 일이 일어나는지 생각해 보자. 자금을 입금하고, 일정 기간 기다린 다음, 새 주소로 인출한다. 목표는 입력과 출력 사이의 연결을 끊는 것이지만, 입금과 인출 모두 보인다. 관찰자는 자금이 언제 들어가고 나오는지 본다. 믹서는 어떤 입력이 어떤 출력에 대응하는지 모호하게 하려 하지만, 이것이 프라이버시를 보장하지는 않는다.

오히려 이것은 움직이는 가치에 프라이버시를 추가하는 것이며, 진입점과 출구점이 정보를 누출한다는 근본적인 이유로 실패한다.

입금은 시간과 금액을 드러낸다. 인출은 시간과 금액을 드러낸다. 이것들이 상관관계가 있으면 프라이버시는 깨진다. 1.5 ETH를 입금하고 한 시간 후에 누군가 1.5 ETH를 인출하면, 연결은 명백하다. 믹서는 고정 액면가와 지연으로 이 문제를 해결하려 하지만, 정보 누출은 남아 있다. 충분한 데이터와 정교한 분석이 있으면 상관관계가 반드시 나타난다.

AI는 이러한 위험을 악화시킨다. 한때 비실용적이었던 패턴 매칭이 타이밍 분석, 금액 클러스터링, 행동 패턴으로 사소하게 풀린다. 모든 믹서는 알고리즘이 풀 방법을 개발하기를 기다리는 퍼즐이다.

들어오는 거래와 나가는 거래를 진정으로 분리하는 유일한 방법은 시간과 가치 양쪽 측면에서 분리하는 것이다. 들어오는 거래가 나가는 거래를 유발해서는 안 된다. 금액과 거래 타이밍이 무관해야 한다.

따라서 프라이빗 시스템은 실제 가치 저장소 역할을 해야 한다. 돈이 들어오고, 머물고, 시간이 흐르고, 삶이 계속된다. 결국 무관한 금액이 무관한 이유로 나간다. 입금과 인출은 단일 작업의 두 부분이 아니라, 수개월 또는 수년간의 진정한 저장으로 분리된 독립적인 사건이다.

이론적으로 토네이도 캐시 같은 믹서에서 이것을 할 수 있다. 자금을 풀에 무기한으로 두면 된다. 하지만 이것은 비실용적이다. 자금이 거기 있는 동안 아무것도 할 수 없기 때문이다.

게다가 토네이도는 고정 액면가 풀을 사용하므로, 풀 내에서 임의의 금액을 보낼 수 없고, 한 토네이도 포지션에서 다른 포지션으로 이체할 수 없으며, 누군가에게 지불하거나 어떤 애플리케이션과도 상호작용할 수 없다. 자금으로 무엇이든 하려면, 투명한 이더리움 주소로 인출해야 하고, 다시 감시 레이어에 노출된다.

Zcash는 다르다. 차폐 간(shielded-to-shielded) 전송이 네이티브이므로, 자금을 받고, 보유하고, 임의의 금액을 지출하고, 거스름돈을 받고, 다시 거래할 수 있다. 이 모든 것이 투명 레이어를 전혀 건드리지 않고 가능하다. Near Intents를 사용해 차폐 풀에서 다른 체인으로 브릿지하면서, 차폐된 ZEC로 지불하고 수신자는 원하는 어떤 자산이든 받을 수 있다. 차폐 풀은 대기실이 아니라 완전히 기능하는 화폐 시스템이다.

이것이 중요한 아키텍처적 차이다. 믹서는 투명한 시스템에서 벗어나는 비상구다. 방문하고, 기다리고, 떠난다. Zcash의 차폐 풀은 목적지다. 거기서 살 수 있다.

7.2 모네로

모네로는 Zcash 외에 가장 널리 사용되는 프라이버시 암호화폐다. 정보 누출 문제에 대해 근본적으로 다른 접근법을 대표하며, 그들의 접근법이 왜 실패하는지 이해함으로써 Zcash의 접근법이 왜 작동하는지 명확해질 것이다.

모네로의 접근법은 링 서명(ring signature)을 사용하는 것이다. 자금을 지출할 때, 거래에는 실제 입력과 블록체인에서 샘플링한 15개의 미끼가 포함된다. 관찰자는 16개의 가능한 발신자를 보고 어느 것이 진짜인지 알 수 없다.

역자 주: 링 서명(Ring Signature)
그룹의 구성원 중 한 명이 서명했음을 증명하되, 정확히 누가 서명했는지는 알 수 없게 하는 암호학적 서명 방식이다. 마치 여러 사람이 원형으로 서서 서명하는 것처럼, 실제 서명자가 그룹 내 어딘가에 숨어 있다.

견고해 보인다. 거래당 16개의 가능성. 실제 지출이 많은 가짜 사이에 숨겨져 있다. 하지만 실제로 이것은 프라이버시가 확률적이지 암호학적이지 않다는 것을 의미할 뿐이다.

법 집행 기관들이 모네로 거래를 성공적으로 추적했다. 일본 경찰이 모네로 거래를 분석하여 18명의 사기 용의자를 식별하고 체포한 문서화된 사례도 있다.

근본적인 문제는 익명성 집합(anonymity set)이다. 각 모네로 거래는 16개의 출력 사이에 숨지만, 각 Zcash 차폐 거래는 풀에서 생성된 모든 노트 사이에 숨는다. 이러한 노트는 수백만 개이므로, Zcash가 제공하는 프라이버시는 점진적으로 우월한 것이 아니라 범주적으로 우월하다.

역자 주: 익명성 집합(Anonymity Set)
특정 행위자가 숨을 수 있는 가능한 후보군의 크기를 말한다. 익명성 집합이 클수록 실제 행위자를 식별하기 어려워진다. 모네로의 16 vs Zcash의 수백만이라는 차이가 프라이버시 수준의 결정적 차이를 만든다.

16은 작은 숫자다. 확률적으로 공격하기에 충분히 작다. 특히 타이밍 분석, 금액 패턴, 행동적 휴리스틱이 후보를 좁힐 수 있는 지금은 더욱 그렇다. 16은 충분한 컴퓨팅과 데이터가 결국 깨뜨릴 정도로 작다.

수백만 노트의 프라이버시 집합에 대해 작동하는 확률적 공격은 없다. 아무것도 제거되지 않기 때문에 제거를 통해 후보를 좁히는 것이 불가능하다. 당신이 지출한 노트는 영원히 수백만 개의 다른 노트와 구별할 수 없는 상태로 남아 있다.

모네로 개발자들도 이 한계를 이해하고 있으며, 링 서명을 영지식 증명으로 대체하는 활발한 연구가 진행 중이다. 사실상 Zcash의 접근법을 채택하려는 것이며, 이는 미끼 기반 프라이버시에 한계가 있다는 암묵적 인정이다.

구분은 간단하다. 모네로는 난독화하고, Zcash는 암호화한다. 난독화는 분석 기법이 향상됨에 따라 시간이 지나면서 약화되지만, 암호화는 그렇지 않다.

기술적 약점 위에 모네로는 문화적 짐도 지고 있다. 커뮤니티가 불법적 사용과의 연관성을 받아들여, 기관의 채택이 거의 불가능해졌다. 이것이 모네로가 거의 모든 주요 거래소에서 상장 폐지된 반면 Zcash는 코인베이스, 제미니 등에서 여전히 이용 가능한 이유의 일부다. 프라이버시 기술은 정당성으로 가는 경로가 필요한데, 모네로는 필요 이상으로 그 경로를 어렵게 만들었다.

7.3 프라이버시 풀(Privacy Pools)

프라이버시 풀은 프라이버시 솔루션에 대한 다른 접근법을 제시한다. 무작위 미끼 사이에 숨거나 모든 것을 암호화하는 대신, 사용자가 알려진 악의적 행위자와 연관되지 않았음을 증명할 수 있게 한다. 자금이 제재된 주소나 표시된 거래에서 오지 않았음을 입증하면서 풀에서 인출할 수 있다.

설계는 영리하다. 연관 집합(association sets)을 통해 누구와 그룹화될 의향이 있는지 정의할 수 있다. 따라서 어떤 특정 입금이 자신의 것인지 드러내지 않으면서 "깨끗한" 집합의 구성원임을 증명한다. 규제 당국은 자금이 오염되지 않았다는 보증을 받고, 사용자는 어느 정도의 프라이버시를 받는다. 모두가 행복하다.

단, 이것은 적법 절차(due process)를 뒤집는다.

프라이버시 풀의 전제는 당신이 결백을 증명해야 한다는 것이다. 자금이 범죄자와 연관되지 않았음을 증명하고, "선한" 사용자 집합에 동의하며, 거기 속한다는 암호학적 증거를 제공하는 것이 당신에게 달려 있다. 기본 가정은 의심이며, 그것을 해소해야 하는 부담은 당신에게 있다.

역자 주: 적법 절차(Due Process)
법치주의의 핵심 원칙으로, 정부가 개인의 권리를 제한하기 전에 공정한 절차를 거쳐야 함을 의미한다. 피고인이 유죄임을 검찰이 증명해야 하지, 피고인이 무죄를 증명할 필요가 없다.

기능하는 법 체계에서 당신은 범죄자가 아님을 증명할 필요가 없다. 검찰이 당신이 범죄자임을 증명해야 한다. 프라이버시 풀은 그 반대를 정상화한다. 승인된 연관 집합을 통해 결백을 증명하기 전까지는 유죄라는 것이다.

함의는 넘쳐난다. 당신의 프라이버시가 다른 사람들이 무엇을 공개하기로 선택하느냐에 달려 있기 때문이다. 연관 집합의 구성원들이 자신의 이름을 깨끗이 하기 위해 다양한 활동으로부터의 배제를 증명하기 시작하면, 나머지 구성원들은 더 의심스러워진다. 더 많이 증명하고, 더 많이 공개하고, 집합을 더 좁히라는 끊임없는 압력이 있다. 시스템은 설계상 위축 효과를 만든다.

메시징에는 "규정 준수 암호화"가 존재하지 않는다. 시그널은 당신이 테러리스트와 대화하고 있지 않음을 증명하라고 요구하지 않는다. 범죄자에게 이익이 되는 대가를 치르면서도, 통신 프라이버시가 권리라는 것을 받아들인다.

금융에서 달라야 할 이유가 없다. 돈이 특별하다거나 금융 프라이버시가 유독 해악을 가능하게 한다는 주장은 면밀한 검토를 견디지 못한다. 범죄자들은 자동차, 전화, 인터넷을 사용한다. 하지만 우리는 운전하거나, 전화하거나, 브라우징하기 위해 결백의 증명을 요구하지 않는다.

프라이버시 풀은 감시와 자유 사이의 중간을 찾으려 한다. 규정 준수에 조건부인 프라이버시를 제공하고, 당신이 그것을 받을 자격이 있음을 증명하도록 요구하며, 다른 사람들에게 결백을 납득시키지 못하면 철회될 수 있는 프라이버시를 제공한다.

이것은 추가 단계가 붙은 허가제 금융이다.

7.4 Aztec과 프라이빗 L2들

이더리움 레이어 2들이 프라이버시 기능을 보완하면, 진지한 엔지니어링을 대표한다. Aztec 같은 프로젝트들은 정교한 암호학으로 암호화된 롤업을 구축하고 있다. 기술은 건전하고 팀은 유능하다. 이것은 그들의 기술적 역량에 대한 비판이 아니다.

근본적으로 Aztec과 Zcash는 다른 문제를 해결하고 있다.

Aztec은 스마트 컨트랙트 플랫폼이다. 가치 제안은 프라이빗 프로그래밍 가능성이다. 암호화된 DeFi, 기밀 계산, 프라이빗 애플리케이션. 이것은 가치 있다. Zcash가 다루지 않는 유스 케이스를 가능하게 하기 때문이다. 포지션을 노출하지 않고 복잡한 금융 프로토콜과 상호작용하고 싶다면, 암호화된 스마트 컨트랙트 체인을 사용하라.

Zcash는 화폐다. 가치 제안은 프라이빗한 가치 저장소이자 교환 매체라는 것이다. 밈은 명확하다. 본질적으로 암호화된 비트코인이다. 시스템이 계속 존재하고 기능할 것이라는 확신을 가지고, 수년 또는 수십 년간 부를 비공개로 보유할 장소다.

이것들은 동일한 유스 케이스가 아니다. 따라서 요구사항이 다르다.

가치 저장소는 린디(Lindy)해야 한다. 적대적 조건에서 수년간 운영을 유지하고, 시장 사이클, 규제 압력, 기술적 도전을 깨지지 않고 살아남아야 한다. Zcash는 이미 거의 10년의 이러한 역사를 구축했다. Aztec은 새롭다. 암호학이 완벽할 수 있지만, 시스템은 시간의 검증을 받지 않았다. 실험적 애플리케이션에는 허용될 수 있지만, 부의 보유를 위한 보안에는 그렇지 않다.

역자 주: 린디 효과(Lindy Effect)
비소멸성인 것들(아이디어, 기술, 책 등)의 경우, 이미 존재한 기간이 길수록 앞으로도 더 오래 존재할 것이라는 개념이다. 10년간 작동해온 시스템은 10개월 된 시스템보다 앞으로 10년 더 작동할 가능성이 높다는 뜻이다.

가치 저장소는 또한 밈적 강도(memetic strength)가 필요하다. 비트코인은 부분적으로 "디지털 금"이라는 강력한 서사 덕분에 성공했다. 사람들이 이해하고 믿는 서사다. "암호화된 비트코인"은 Zcash에 유사한 닻을 제공한다. 비트코인의 화폐적 속성을 계승하면서 비트코인에 없는 프라이버시를 추가한다. Aztec에는 이 서사가 없다. 단순히 프라이버시 인프라 레이어이지, 화폐 네트워크가 아니다.

기술적 설계를 넘어서, 사회적 레이어가 있다. Zcash의 커뮤니티는 프라이버시를 타협 불가능한 원칙으로 여기는 공유된 헌신을 중심으로 형성되었고, 거의 10년간 그 헌신을 약화시키려는 법적, 정치적, 평판적 압력에 저항해 왔다. 반면 레이어 2 시스템은 궁극적인 규범과 거버넌스 제약을 레이어 1로부터 물려받는다. 이더리움의 경우, 더 넓은 커뮤니티가 규제 압력에 직면했을 때 강력한 암호화와 거래 프라이버시를 일관되게 방어할지 불분명하다. 장기적인 가치 저장소로 기능하도록 의도된 자산에게, 그 불확실성 자체가 리스크를 구성한다.

Aztec과 유사한 프로젝트들은 프라이빗 애플리케이션에 대한 상당한 수요를 찾을 것이다. 하지만 프라이빗 머니의 핵심 유스 케이스, 부가 무기한으로 쉴 수 있는 장소에서, 그들은 Zcash와 다른 목적을 위해 봉사한다.

삼이즈다트 — 소련 시민들이 국가 검열을 피하기 위해 금지된 문헌을 손으로 복사하고 배포한 활동
삼이즈다트(Samizdat) — 소련 시민들이 국가 검열을 피하기 위해 금지된 문헌을 손으로 복사하고 배포한 활동. 소지 시 투옥될 수 있었다.

8. 오해들

8.1 "Zcash는 기본적으로 프라이빗하지 않다"

이 오해는 역사적으로 지갑의 기본값이었던 것과 프로토콜 설계를 혼동한 것이다.

새로운 ZEC는 항상 차폐 풀로 발행된다. 모든 새 코인은 암호화된 상태로 존재하게 된다. 프로토콜은 가장 근본적인 수준, 즉 발행 단계에서 기본적으로 프라이빗하다.

기본 프라이버시에 대한 오해는 초기 지갑들이 실용적인 이유로 투명 주소를 기본값으로 했기 때문에 생겼다. Sprout과 Sapling에서 차폐 트랜잭션은 계산 비용이 높았고, 거래소들은 투명한 입금을 요구했다. 그래서 저항이 가장 적은 경로가 종종 투명한 경로였다.

Orchard는 이제 차폐 트랜잭션을 더 효율적으로 만들었고, Zashi 같은 지갑은 기본적으로 차폐를 강제한다. 지출을 허용하기 전에 투명 자금을 차폐 풀로 자동으로 이동시킨다. 사용자 경험이 프라이버시 우선으로 바뀌었다.

투명 옵션은 특정 유스 케이스를 위해 남아 있다. 거래소 호환성, 규제 준수, 사용자 선택 등이다. 하지만 현대 Zcash를 통과하는 기본 경로는 처음부터 끝까지 차폐된다.

8.2 "익명성 집합이 작다"

이 오해는 Zcash를 미끼 기반 시스템과 혼동하는 데서 비롯된다.

앞서 다뤘듯이, 모네로에서 당신의 거래는 고정된 수의 미끼 사이에 숨는다. 가능한 발신자가 16명이면, 익명성 집합은 16이다. 따라서 많은 비판자들이 Zcash도 비슷하게 작동한다고 가정한다. 차폐 풀을 사용하는 사람이 적으면, 거래가 소수의 다른 거래 사이에만 숨는다고.

하지만 이것은 틀렸다. Zcash는 미끼를 샘플링하지 않는다. 머클 트리 멤버십 증명을 사용한다.

차폐된 노트를 지출할 때, 생성된 모든 노트를 포함하는 커밋먼트 트리의 어딘가에 그것이 존재한다는 것을 증명한다. 어떤 노트인지는 드러내지 않으면서. 검증자는 당신의 노트가 트리에 있는 수백만 개 중 하나라는 것만 알게 된다. 수백이나 수천이 아니다.

Orchard 풀에는 수백만 개의 노트가 있다. 이것이 모든 차폐 트랜잭션의 익명성 집합이며, 모든 트랜잭션과 함께 성장하고 절대 줄어들지 않는다.

투명 풀의 크기는 무관하다. ZEC의 99%가 투명 주소에 있더라도, 차폐된 1%는 생성된 모든 차폐 노트의 익명성 집합을 갖는다. 두 풀은 수학적으로 독립적이다.

8.3 "선택적 투명성이 프라이버시를 약화시킨다"

이 오해는 투명 풀이 어떻게든 차폐 풀을 오염시킨다고 가정한다.

두 풀은 독립적인 시스템이다. 투명 ZEC와 차폐 ZEC는 병렬로 운영된다. 투명 쪽의 트랜잭션은 차폐 쪽에 대해 아무것도 드러내지 않는다. 차폐 트랜잭션의 암호학적 보장은 얼마나 많은 ZEC가 투명 주소에 있는지에 의존하지 않는다.

화폐를 공유하지만 별개인 두 장부라고 생각하면 된다. 하나의 활동이 다른 것의 프라이버시 속성에 영향을 미치지 않는다.

투명 옵션은 실질적인 가치를 제공하기 때문에 존재한다. 거래소는 입출금에 투명 주소를 사용하여 ZEC를 상장하면서도 규정 준수 요건을 충족할 수 있다. 감사 가능성이 필요한 사용자가 그것을 선택할 수 있게 하고, 투명성이 필요한 애플리케이션이 그 위에 구축할 수 있게 한다.

선택적 투명성은 차폐 프라이버시를 손상시키지 않는다. 단순히 Zcash의 채택 가능성을 높일 뿐이다. 이것은 완전히 기본 프라이빗인 체인에는 없는 것이다. 모네로가 주요 거래소에서 상장 폐지된 반면 Zcash는 코인베이스와 제미니에 남아 있다는 사실이 이를 예시한다.

8.4 "Zcash는 신뢰 설정을 사용한다"

이 오해는 한때 사실이었지만 더 이상 그렇지 않은 것을 업데이트하지 못한 것이다.

Sprout과 Sapling은 신뢰 설정 의식을 필요로 했다. 참가자들이 암호학적 매개변수를 생성하고 이를 만드는 데 사용된 비밀 값을 파괴했다. 누군가 그 비밀을 보관했다면, 증명을 위조하고 위조 ZEC를 발행할 수 있었을 것이다.

앞서 다뤘듯이, 의식은 정교했다. 여러 참가자, 에어갭된 기계, 심지어 나중에 파괴된 하드웨어로 구성되었다. 이러한 강력한 예방 조치에도 불구하고, 신뢰 모델은 약간의 의심을 남겼다.

역자 주: 에어갭(Air-gapped)
보안을 위해 인터넷이나 다른 네트워크에 전혀 연결되지 않은 컴퓨터를 말한다. 물리적으로 격리되어 있어 원격 해킹이 불가능하다.

Orchard는 Halo 2를 사용하여 이 문제를 해결했다. 신뢰 설정이 필요 없는 증명 시스템이다. 의식도 없고, 독성 폐기물도 없고, 비밀이 파괴되지 않을 위협도 없다. 이제 매개변수는 공개적이고 검증 가능한 데이터에서 나온다.

Zcash의 차폐 풀은 이제 비트코인처럼 무신뢰(trustless)다. 보안은 의식 참가자에 대한 믿음이 아닌 암호학적 수학으로 보장된다.

8.5 "사전 채굴(Premine)이 있었다"

이 오해는 근본적으로 틀렸다. 제네시스 블록 이전에 코인이 존재하지 않았고, 사전 채굴은 없었다.

오류는 창립자 보상에서 비롯된다. Zcash의 처음 4년 동안 블록 보상의 20%가 창립자, 투자자, 직원, Zcash 재단에 전달되었다. 하지만 이것은 사전 채굴이 아니었다. 다른 모든 코인과 마찬가지로 채굴을 통해 생성된, 진행 중인 발행의 일부였을 뿐이다.

역자 주: 사전 채굴
암호화폐가 공개되기 전에 개발자나 초기 참여자가 미리 채굴하거나 할당받는 코인을 말한다. 일반 사용자들이 참여할 기회 없이 미리 발행된다는 점에서 불공정하다는 비판을 받는다.

이 구분이 중요하다. 사전 채굴은 다른 누구도 참여할 수 없는 시점에 생성된 코인이다. 반면 창립자 보상은 채굴자 보상과 동일한 비율로 코인을 생성한 뒤 다르게 배분했을 뿐이다. 채굴자는 각 블록의 80%를 받았고, 창립자는 나머지 20%를 받았다. 중요한 점은 둘 다 동일한 발행 일정에서 나왔다는 것이다.

창립자 보상의 조건은 출시 전에 완전히 공개되었다. 백서와 웹사이트 모두 그 이유와 과정을 설명했다. 따라서 2016년에 채굴하거나 ZEC를 구매한 누구나 배분이 어떻게 기능하는지 정확히 알았다. 숨겨진 할당도, 비밀 비축도, 어디선가 나타난 코인도 없었다.

창립자 보상은 2020년 11월 첫 번째 반감기에 종료되었다. 그 시점에 모든 수령자는 공개적으로 약속된 것을 정확히 받았고, 그 이상은 없었다.

8.6 "개발자가 채굴 보상의 20%를 가져간다"

이 오해는 두 프로그램과 그 각각의 수령자를 혼동한다.

창립자 보상은 2016년부터 2020년까지 운영되었고, 블록 보상의 20%를 창립자, 초기 투자자, 직원, Zcash 재단에 전달했으며, 첫 번째 반감기에 종료되었다. 따라서 창립자들은 2020년 이후로 프로토콜 보상을 받지 않는다.

개발 기금은 창립자 보상을 대체했고 2020년부터 2024년까지 운영되었다. 개발 기금도 블록 보상의 20%를 배분하지만, 다른 수령자에게다. ECC는 프로토콜 개발을 위해 7%를 받고, Zcash 재단은 인프라와 보조금을 위해 5%를 받으며, 독립 커뮤니티가 관리하는 커뮤니티 보조금이 8%를 받는다.

오해와 달리, 개발 기금은 개인적 부를 위한 것이 아니다. 오히려 개발자를 고용하고, 인프라를 유지하며, 생태계 프로젝트에 보조금을 수여하는 조직에 자금을 제공한다. 이 기금은 Zcash의 지속적인 개선을 위해 지불된다.

대안은 비트코인의 모델로, 기부와 기업 후원에 의존한다. 이는 그 나름의 트레이드오프가 있는 접근법이다. Zcash는 대신 지속 가능한 개발을 지원하기 위해 프로토콜 수준의 자금 조달을 채택했고, 거의 9년간의 지속적인 업그레이드가 이 선택이 정당했음을 시사한다.

8.7 "Zcash 재단이 Zcash를 통제한다"

이 오해는 어떤 단일 주체도 Zcash를 통제하지 않는다는 것을 이해하지 못한 것이다.

사실 네 개의 독립 조직이 프로토콜에 기여한다. Electric Coin Company (ECC)는 참조 구현과 Zashi 지갑을 구축한다. Zcash 재단은 독립적인 노드 구현체인 Zebra를 유지하고 보조금을 관리한다. Shielded Labs는 스위스에서 연구를 수행한다. 션 보위가 이끄는 Tachyon 팀은 확장성 인프라를 구축한다.

이 조직들은 다른 관할권에서, 다른 자금원으로, 다른 임무를 가지고 운영된다. 프로토콜 개발에서 협력하지만, 이슈에 대해 의견이 다를 수 있고 공통 권위에 답변할 의무가 없다.

이 조직들의 분리는 의도적으로 구현되었다. 조직 중 하나가 압력을 받거나, 포획되거나, 침해되면, 다른 조직들이 계속 기능하고 시스템을 유지할 수 있다. 프로토콜은 단일 팀에 의존하지 않으며, 두 개의 독립적인 노드 구현은 단일한 권위적 코드베이스가 없다는 것을 의미한다.

Zcash는 대부분의 암호화폐 프로젝트보다 거버넌스가 더 분산되어 있다. 비트코인보다 더 분산되어 있다고도 할 수 있다. 비트코인은 단일 구현 메커니즘이 지배하고 소수의 관리자가 무엇이 병합되는지를 통제하기 때문이다.

8.8 "모사드가 Zcash 뒤에 있다"

이 오해는 단순히 음모론이다. 이를 뒷받침하는 증거가 없다.

음모론은 일부 창립자가 이스라엘과 연결되어 있다는 사실이나 학술 암호학자들이 프로젝트에 참여했다는 사실을 지적한다. 이 논리에 따르면, 어떤 국가와 연결된 사람들이 부분적으로 개발한 모든 기술은 그 국가의 정보기관이 통제하는 것이 된다.

Zcash는 오픈 소스다. 말 그대로 모든 코드 라인이 공개되어 있고 감사 가능하다. 암호학은 발표된 수학으로, 전 세계 연구자들이 동료 검토하고 면밀히 조사했다. 백도어가 있다면, 코드와 증명에서 보일 것이다.

역자 주: 모사드(Mossad)
이스라엘의 대외 정보기관으로, CIA나 MI6에 해당한다. 일부 초기 기여자가 이스라엘 출신이라는 이유로 Zcash가 이스라엘 정보기관의 통제를 받는다는 근거 없는 음모론이 존재한다.

또한 여러 국가에 기반을 둔 네 개의 독립 조직이 프로토콜에 기여한다. 커뮤니티에는 모든 대륙의 개발자, 연구자, 사용자가 포함된다. 초기 기여자 중 누군가의 혈통 때문에 정보기관이 전 세계적으로 분산된 오픈 소스 프로젝트를 통제한다고 믿는 것은 단순히 비합리적이다.

동일한 음모론적 사고가 어떤 기술에도 적용될 수 있다. 시그널은 부분적으로 미국 정부의 보조금으로 개발되었는데, 그렇다면 CIA가 시그널 뒤에 있는가? 리눅스에는 모든 주요 정부와 기업의 기여자가 있는데, 그렇다면 여러 정부가 리눅스를 침해한 것인가?

코드는 오픈 소스이고 수학은 공개되어 있다. 둘 다 음모론을 무효화한다.

8.9 "범죄자들은 이유가 있어서 모네로를 사용한다"

이 오해는 범죄자들이 범죄를 숨기기 위해 필연적으로 가장 강력한 프라이버시 기술을 식별했을 것이라고 암시한다. 하지만 이것은 범죄자들에게 너무 많은 공을 돌리는 것이다.

범죄자들은 암호학자가 아니다. 타원 곡선 구현을 평가하거나 익명성 집합 구성을 비교하지 않는다. 대신 익숙한 것과 그들 커뮤니티에서 이미 평판이 있는 것을 사용한다.

모네로는 '범죄 코인'이라는 브랜드를 구축했고 따라서 범죄자들을 끌어들였다. 이것은 모네로의 브랜드와 범죄자들의 모네로 사용 사이의 강화 패턴을 보여줄 뿐, 모네로의 기술적 우월성을 보여주지 않는다.

모네로와 Zcash의 프라이버시 역량 비교는 Zcash에 유리하다. 모네로는 거래를 16개의 미끼 사이에 숨기고, Zcash는 노트를 수백만 개 이상 사이에 숨긴다. 모네로의 미끼는 시간이 지남에 따라 체인 분석으로 제거될 수 있지만, Zcash의 암호학적 구별 불가능성은 그러한 체인 분석 해독을 불가능하게 만든다. 앞서 다룬 일본 사례에서 보듯 법 집행 기관이 모네로 거래를 성공적으로 추적한 상황에서, 모네로가 프라이버시 이유로 범죄자들의 선택이 될 수 없다.

범죄자들은 또한 현금, 선불 전화, 심지어 표준 이메일을 사업에 사용한다. 하지만 아무도 이것들이 가장 안전한 옵션이기 때문에 사용된다고 주장하지 않는다. 오히려 가장 접근하기 쉽고 익숙한 옵션이기 때문에 사용되는 것이다.

범죄자들의 선택은 마케팅과 네트워크 효과에 기반한 결정을 드러낼 뿐, 암호학적 강도에 기반한 이성적 결정을 드러내지 않는다.

8.10 "모든 거래가 프라이빗하기 때문에 모네로가 더 프라이빗하다"

이 오해는 모네로의 의무적 프라이버시가 어떻게든 Zcash의 선택적 프라이버시 모델보다 더 안전하다고 주장한다. 혼란은 설계 기본값과 암호학적 강도를 구별하지 못하는 데서 발생한다.

앞서 다뤘듯이, Zcash도 기본적으로 프라이빗하다. ZEC는 차폐 풀로 발행되고 현대 지갑은 차폐를 강제한다. 기본 경로는 완전히 암호화되어 있다.

모네로와 Zcash의 기본 경로가 다르더라도, 그 구분이 프라이버시 강도를 결정하지는 않을 것이다.

메커니즘이 설정보다 중요하다.

모네로의 메커니즘: 16개의 미끼가 있는 링 서명. 당신의 거래를 16명의 가능한 발신자 사이에 숨긴다. 미끼는 시간이 지남에 따라 체인 분석으로 제거될 수 있으므로, 익명성 집합은 소급적으로 축소되고 연결이 추적될 수 있다.

Zcash의 메커니즘: 수백만 노트 이상의 머클 트리에 대한 영지식 증명. 당신의 거래는 어떤 노트든 지출했을 수 있고, 출처를 추적하기 위한 제거 과정이 없다. 집합은 성장할 뿐이고 암호학적 구별 불가능성은 영구적이다.

모든 문에 약한 자물쇠를 기본으로 다는 것이, 중요한 문에 강한 자물쇠를 기본으로 달고 다른 문에 자물쇠를 추가할 옵션을 두는 것보다 나은 것이 아니다. 의무적인 약한 프라이버시는 단순히 약한 프라이버시이고, 선택적인 강한 프라이버시는 단순히 강한 프라이버시다.

올바른 질문은 프라이버시가 기본값인지 여부가 아니라, 프라이버시가 적대적 분석 하에서 유지되는지 여부다. Zcash의 프라이버시는 유지되고, 모네로의 프라이버시는 그렇지 않다.

초기 Zcash 팀
초기 Zcash 팀. Zcash 공동 창립자 주코 윌콕스-오헌(Zooko Wilcox-O'Hearn)과 당시 주니어 개발자였다가 후에 Bluesky CEO가 된 제이 그레이버(Jay Graber) 등이 포함되어 있다.

9. 앞으로의 길

9.1 Project Tachyon

Tachyon은 Zcash의 세 가지 확장성 병목 현상을 다룬다. 이중 지불 방지, 블록체인 스캔, 그리고 트랜잭션 크기. 이중 지불 방지가 셋 중 가장 어려우며, 그 해결책이 Tachyon을 또 다른 점진적 최적화가 아닌 진정한 돌파구로 만드는 이유를 드러낸다.

9.1.1 널리파이어 문제

Zcash는 널리파이어를 통해 이중 지불을 방지한다. 노트를 지출할 때 널리파이어를 공개하는데, 이는 취소 토큰으로 기능하는 무작위처럼 보이는 문자열이다. 널리파이어는 그것이 취소하는 노트에 연결될 수 없지만, 같은 노트를 두 번 지출하려 하면 같은 널리파이어를 공개하게 되고 네트워크는 중복을 거부해야 함을 안다.

널리파이어 문제는 모든 검증 노드가 지금까지 공개된 모든 널리파이어를 영원히 저장해야 한다는 것이다. 오래된 널리파이어를 정리하는 것은 안전하지 않다. 누군가 오래된 노트를 다시 지출하려 할 수 있기 때문이다. 초당 100개의 트랜잭션에서, 이는 하루에 약 1기가바이트의 상태 성장을 만들어낸다. 익숙하지 않을 수 있지만, 이것은 솔라나 같은 고처리량 체인을 포함한 대부분의 블록체인과 비교해 극단적인 양이다.

9.1.2 순진한 해결책이 실패하는 이유

암호학 커뮤니티는 수년간 재귀적 증명이 이 문제를 해결할 수 있다는 것을 알고 있었다. 네트워크가 널리파이어를 추적하는 대신, 재귀적 증명을 통해 사용자가 이중 지불을 하지 않았음을 증명할 수 있게 한다. 증명을 트랜잭션에 첨부하면 검증자가 증명을 확인한 뒤 오래된 널리파이어를 정리할 수 있다.

악마는 세부 사항에 있다.

접근법 1: 전체 체인 히스토리를 지갑에 다운로드하고 로컬에서 증명을 구성한다. 암호학적으로는 작동하지만 실용적으로는 실패한다. 지갑이 다른 모든 사람이 만드는 모든 트랜잭션의 대역폭과 계산 비용을 부담해야 하기 때문이다. 휴대폰은 이것을 할 수 없다.

접근법 2: 중개 서비스를 추가한다. 트랜잭션을 서비스에 보내고, 서비스가 전체 체인 히스토리를 사용해 증명을 구성한 다음, 브로드캐스트한다. 작동하지만 엄청난 지연을 도입한다. 서비스가 모든 트랜잭션에 대해 전체 체인을 처리해야 하고, 서비스에 트랜잭션 데이터를 신뢰해야 한다.

접근법 3: 널리파이어를 미리 서비스에 보내고, 증명을 돌려받은 다음, 나중에 그 증명을 트랜잭션에 첨부하고 브로드캐스트한다. 영리해 보일 수 있지만 치명적인 결함이 있다. 서비스가 어떤 널리파이어를 지출하려고 준비하는지 관찰할 수 있고, 따라서 트랜잭션을 함께 연결하여 중개자에게 프라이버시를 누출한다.

9.1.3 망각적 동기화(Oblivious Synchronization)

여기에 Tachyon의 해결책이 있다. 계산을 수행하여 이중 지불을 하지 않았음을 증명하되, 최종 트랜잭션에 무엇이 나타나는지 보지 않고 어떤 널리파이어를 지출하는지 알지 못하는 서비스. 서비스는 당신의 트랜잭션을 다른 누구의 것과도 구별할 수 없다.

기술적으로 이것은 "망각적(oblivious)" 서비스로 정의된다. 서비스는 당신을 대신하여 처리하는 실제 데이터에 대해 눈이 멀어 있어서, 도우미를 신뢰하지 않고도 계산적 도움을 받는다.

역자 주: 망각적(Oblivious) 프로토콜
암호학에서 '망각적'이란 서비스 제공자가 처리하는 데이터의 내용을 알 수 없도록 설계된 프로토콜을 말한다. 클라우드에 데이터를 맡기면서도 클라우드가 그 내용을 볼 수 없게 하는 것과 같은 개념이다.

결과는 전체 널리파이어 히스토리를 저장하지 않는 검증자다. 따라서 사용자는 전체 네트워크 활동에 비례하는 비용에 노출되지 않고, Zcash의 핵심 프라이버시 속성인 원장 구별 불가능성이 유지된다.

9.1.4 다른 병목 현상들

블록체인 스캔, 즉 어떤 트랜잭션이 자신의 것인지 식별하는 과정은 새로운 암호학이 아닌 프로토콜 설계 변경을 통해 해결된다. 모든 트랜잭션을 시험 복호화해야 하는 현재 요구 사항이 더 효율적인 결제 프로토콜로 대체된다.

트랜잭션 크기와 검증 시간은 동일한 재귀적 증명 기법을 사용한다. 한계 트랜잭션 크기와 검증 시간이 대략 비트코인 수준으로 떨어진다. 따라서 완전히 프라이빗한 Zcash 트랜잭션이 투명한 비트코인 트랜잭션과 거의 같은 크기와 속도가 된다.

9.1.5 이것이 가능하게 하는 것

Tachyon이 구현되면, Zcash의 확장 제약은 다른 블록체인이 직면하는 것과 동일해진다. 대역폭과 지연 시간. 프라이버시를 비싸게 만들던 암호학적 오버헤드가 사라지고, 휴대폰조차 전체 체인을 처리하지 않고도 프라이빗하게 거래할 수 있다. 노드는 기가바이트의 널리파이어 상태를 저장하지 않고도 검증할 수 있다.

오랫동안 암호화된 화폐의 근본적인 것으로 가정되어 왔던 프라이버시와 규모 사이의 트레이드오프가 암호학적 해결책이 있는 엔지니어링 문제로 밝혀진다.

9.2 네트워크 지속 가능성 메커니즘 (NSM)

비트코인은 다가오는 문제에 직면해 있다. 블록 보상이 0을 향해 반감됨에 따라, 트랜잭션 수수료가 네트워크 보안을 유지하기 위해 채굴자를 보상해야 한다. 수수료가 충분할지는 열린 질문으로 남아 있지만, 테일 에미션 같은 예상되는 대안은 2,100만 개 상한을 깨뜨릴 것이다.

역자 주: 테일 에미션(Tail Emission)
블록 보상이 완전히 0이 되는 대신, 영구적으로 소량의 코인을 계속 발행하는 방식이다. 채굴자 인센티브를 유지할 수 있지만, 총 공급량 상한이 없어진다는 단점이 있다.

Zcash도 이 문제를 물려받지만, 네트워크 지속 가능성 메커니즘은 상한을 깨뜨리지 않고 해결한다.

9.2.1 메커니즘

NSM은 ZEC를 유통 공급량에서 소각하고 미래 블록 보상으로 재도입할 수 있게 한다. 지금 1 ZEC를 소각하면 다음 4년에 걸쳐 추가로 0.5 ZEC가 발행되고, 그 다음 4년에 0.25 ZEC가 발행되는 식이다. 발행은 기존 4년 반감기 일정을 근사하는 지수 감소 모델을 따른다.

단기적으로 이것은 유통 공급량 감소와 희소성 증가를 가져온다. 장기적으로 발행 곡선의 더 먼 지점에서 블록 보상에 사용할 수 있는 ZEC가 더 많아져, 2,100만 개 상한을 초과하지 않으면서 채굴자 인센티브를 유지한다.

9.2.2 세 가지 ZIP

ZIP 233은 자발적 소각을 확립한다. 사용자가 조직이나 개인이 아닌 Zcash 네트워크에 직접 기부할 수 있다. 지갑은 거래 시 ZEC를 소각하는 옵션을 제공할 수 있다. 검증 가능한 소각은 네트워크 지속 가능성에 대한 기여를 증명하는 토큰 게이트 커뮤니티나 신원 배지를 가능하게 한다.

ZIP 234는 발행 곡선을 완만하게 한다. 갑작스러운 반감기 대신 발행이 연속적으로 감소한다. 이는 갑작스러운 공급 충격 없이 소각된 코인을 재도입하기 위한 예측 가능한 메커니즘을 제공한다.

ZIP 235는 트랜잭션 수수료의 60%를 소각한다. 현재 이것은 연간 약 210 ZEC로, 무시할 수 있는 양이다. 요점은 수수료가 낮고 채굴자가 반대할 경제적 인센티브가 없을 때 메커니즘을 확립하는 것이다. 미래 수수료 구조는 NSM이 운영되면 커뮤니티가 결정할 사항으로 남아 있다.

9.2.3 미래 애플리케이션

NSM은 커뮤니티가 앞으로 마주할 유스 케이스를 위한 인프라를 만든다.

  • ZSA 수수료: Zcash 차폐 자산(Zcash Shielded Assets)의 발행, 거래, 브릿지가 ZEC 보유자를 보상하기 위해 일부를 소각할 수 있다.
  • 레거시 지원 수수료: 오래된 풀에 자금을 저장하는 사용자가 수수료를 지불하여, 더 새롭고 안전한 풀로의 마이그레이션을 인센티브화한다.
  • 프라이버시 인센티브화 수수료: 투명 주소 사용에 수수료를 부과하여 감소된 익명성 집합을 보상한다.
  • EIP-1559 스타일 동적 수수료: 네트워크 혼잡에 따라 조정되는 기본 수수료, 부분 소각.

9.2.4 왜 지금인가?

현재 트랜잭션 수수료는 최소 수준이므로, 지금 소각 메커니즘을 구현하면 이더리움이 EIP-1559에서 직면했던 정치적 어려움을 피할 수 있다. 당시 채굴자들은 수수료 소각에 반대할 강한 인센티브가 있었다. 지금 구현하면, Zcash 수수료가 상당해질 때쯤 선례가 존재할 것이다.

NSM은 비트코인의 설계를 개선하는 Zcash의 전통을 이어갈 수 있다. 프라이버시와 개발 기금이 이미 Zcash를 차별화하며, 이 업그레이드는 세 번째 차별화를 추가할 것이다. 비트코인에는 없는 장기 네트워크 지속 가능성을 위한 메커니즘이다.

9.3 양자 저항성

Zcash와 양자 컴퓨팅의 관계는 대부분의 다른 암호화폐보다 미묘하다. 프로토콜은 프로젝트 시작 이래 의도적인 설계 선택의 결과로, 일반적인 시나리오에서 이미 상당한 포스트 양자 프라이버시 보호를 제공한다.

9.3.1 이미 보호되는 것

양자 적대자는 온체인 익명성을 침해할 수 없다. Zcash의 널리파이어, 즉 이중 지불을 방지하는 메커니즘은 대칭 암호학에 기반한 키 기반 의사 난수 함수를 사용하며, 이러한 프리미티브는 양자 공격에 대해 안전하게 유지된다. 따라서 커밋먼트 스킴은 완벽하게 숨겨지고, 대칭 암호화는 포스트 양자 보안을 위해 설계된 키 크기를 사용한다.

이것은 다른 프라이버시 암호화폐와 극명하게 대조된다. 모네로의 키 이미지, 즉 널리파이어에 해당하는 것은 양자 적대자에게 투명해질 것이고, 트랜잭션 그래프가 드러날 것이다. Zcash의 구성은 이 취약점을 완전히 피한다.

9.3.2 두 가지 위협

양자 컴퓨터는 두 가지 별개의 속성을 위협한다. 프라이버시와 건전성(soundness).

프라이버시 우려는 "지금 수확하고, 나중에 복호화(harvest now, decrypt later)" 스타일 공격에 집중된다. 적대자가 오늘 암호화된 트랜잭션 데이터를 수집하고 양자 컴퓨터가 도착하면 나중에 복호화할 수 있다. 이것은 주로 인밴드 비밀 배포, 즉 수신자에게 트랜잭션 세부 사항을 전송하는 메커니즘에 영향을 미친다. Tachyon의 설계는 인밴드 비밀 배포를 완전히 제거하여, 이 미래 위협으로부터 보호한다.

건전성 우려는 양자 컴퓨터에 의해 깨질 수 있는 타원 곡선 암호학에 집중된다. 이것이 위조나 절도를 가능하게 하겠지만, 프라이버시를 침해하지는 않을 것이다. 따라서 위협은 긴급성에서 다르다. 프라이버시 침해는 소급적이지만(과거 트랜잭션이 취약해짐), 건전성 침해는 종종 그렇지 않다(양자 컴퓨터가 나타나면 대응할 수 있음).

역자 주: 건전성(Soundness)
암호학에서 '건전성'은 시스템이 거짓 증명을 받아들이지 않는다는 속성이다. 즉, 유효하지 않은 트랜잭션(예: 이중 지불, 무에서 코인 생성)이 유효한 것으로 통과하지 못함을 의미한다.

9.3.3 양자 복구 가능성

ECC는 Orchard에서 "양자 복구 가능성"을 위한 기술을 개발했다. 다가오는 지갑 변경 후, 양자 컴퓨터가 등장하더라도, 사용자는 양자 적대자가 훔치는 것을 방지하는 특별한 메커니즘을 통해 자금을 복구할 수 있을 것이다. 이 메커니즘은 프라이버시도 보호한다.

지갑 통합 일정은 2026년에 출시되므로, 코인을 차폐하고 이러한 개선을 기다리는 사용자는 보호될 것이다.

9.3.4 오늘의 모범 사례

코인을 차폐하라. 차폐 풀의 설계는 이미 온체인 프라이버시에 대해 상당한 양자 저항성을 제공한다. 가능하면 주소를 비밀로 취급하라. 턴스타일은 최후의 방어선으로 남아 있다. 위조가 발생하더라도, 자금이 차폐 풀을 나갈 때 결국 감지될 것이다.

Zcash의 암호학자들은 발전에 앞서 있을 것이다. 취약한 프리미티브를 격리하는 프로토콜의 모듈식 설계가 전면 개편 없이 미래 업그레이드를 가능하게 하기 때문이다.

1989년 6월 5일 베이징 천안문 광장 근처에서 탱크 행렬 앞에 선 탱크맨
1989년 6월 5일 베이징 천안문 광장 근처에서 탱크 행렬 앞에 선 "탱크맨(Tank Man)".

10. 결론

결론적으로, 이 글은 간단한 관찰로 시작했다. 현금을 사용하지 않는 한, 당신이 하는 모든 구매는 추적되고 무기한 저장된다. 비트코인이 이것을 고칠 수 있었지만, 그러지 못했다. 금융 감시로부터 우리를 해방시켜야 했던 블록체인이 지금까지 배치된 가장 포괄적인 감시 도구가 되었다.

Zcash는 다른 길을 택했다. 기본적으로 투명하고 프라이버시는 나중에 덧붙이는 방식 대신, 가장 어려운 문제를 먼저 해결했다. 트랜잭션을 보지 않고 어떻게 검증하는가?

답에는 영지식 증명, 금액을 숨기는 커밋먼트, 트랜잭션을 연결하지 않고 이중 지불을 방지하는 널리파이어, 그리고 트랜잭션 그래프를 완전히 산산조각 내는 노트 모델이 필요했다. 9년간의 프로토콜 진화가 뒤따랐다. Sprout은 프라이버시가 가능하다는 것을 증명했고, Sapling은 프라이버시를 실용적으로 만들었으며, 이제 Orchard가 그것을 무신뢰로 만들었다.

이 진화의 결과는 원장 구별 불가능성이다. 두 개의 차폐 트랜잭션을 구별할 수 없다. 관찰자도, 검증자도, 무한한 자원을 가진 국가도 마찬가지다. 데이터는 단순히 모호해지거나 미끼와 섞이는 것이 아니라 암호화되어 있다. 네트워크가 보는 것은 수학적으로 무작위 노이즈와 구별할 수 없다. 진정한 스위스 금고다.

앞으로의 길은 여전히 도전적이다. Tachyon은 규모를 제약하는 병목 현상을 제거한다. NSM은 지속 가능한 경제를 만든다. 양자 저항성은 이미 진행 중인 작업으로 해결 가능한 문제다. 기반은 구축되었다. 암호학은 작동한다. 프라이버시는 실재한다.

우리 앞에는 두 개의 미래가 있다. 모든 트랜잭션이 권력을 가진 자에게 보이고, 통제 가능하고, 되돌릴 수 있는 미래. 그리고 돈이 생각만큼 프라이빗한 다른 미래.

Zcash는 돈이 자유로워지는 방법이다.


더 읽을거리