
시리즈: Zcash from First Principles . 아티클 0 . 앵커 대상 독자: 완전한 입문자. 암호학, 블록체인 배경지식, 수학을 전혀 가정하지 않습니다. 이 글을 읽고 나면 얻게 될 것: Zcash가 누가 누구에게 얼마를 보냈는지를 어떻게 숨기면서도, 동시에 전 세계 누구나 돈이 위조되거나 이중 지불되지 않았음을 검증할 수 있게 하는지에 대한 올바른 멘털 모델.
이 시리즈의 이후 모든 글은 이제 곧 만나게 될 이 장치의 한 부분씩을 확대해서 다룹니다. 그러니 여기서 어떤 단어가 다소 뭉뚱그려진 느낌이 든다면, 오히려 좋습니다. 그건 나중에 다시 돌아와 제대로 설명하겠다는 약속입니다.
당신의 은행 거래내역이 마을 광장 벽에 못 박혀 있다고 상상해 보세요. 영원히 말입니다. 누구든지(집주인, 고용주, 낯선 사람, 미래의 고용주, 정부) 당신의 월세, 의료비, 기부금, 커피값 하나하나를 볼 수 있고, 당신이 정확히 누구에게 돈을 보냈고 누가 당신에게 돈을 보냈는지 추적할 수 있습니다.
이건 디스토피아적인 가정이 아닙니다. 대략적으로 Bitcoin이 작동하는 방식이 바로 이것입니다.
Bitcoin은 흔히 "익명"이라고 불리지만, 실제로는 그렇지 않습니다. 그것은 가명성에 가깝습니다. 장부에 당신의 실명이 적히진 않지만, 모든 거래, 금액, 주소 간 연결이 공개되고 영구히 남습니다. "체인 분석"이라는 산업 전체가 바로 이 얇은 가면을 벗겨 실제 사람과 주소를 연결하기 위해 존재합니다. 당신의 주소 중 하나라도 당신과 연결되는 순간, 당신의 금융 이력은 줄줄이 드러나기 시작합니다.
Zcash는 겉보기보다 훨씬 어려운 이 질문에 답하기 위해 만들어졌습니다.
보낸 사람, 받는 사람, 금액을 모두 숨기면서도, 누구나 규칙이 지켜졌는지 검증할 수 있는 돈을 만들 수 있을까?
이 두 목표는 서로 충돌합니다. 공개 장부가 검증 가능한 이유는 모두가 볼 수 있기 때문입니다. 프라이버시는 아무도 볼 수 없다는 뜻입니다. 그렇다면 대중은 들여다볼 수 없는 것을 어떻게 검증할 수 있을까요?
이 역설을 푸는 것이 바로 이 시리즈 전체의 이야기입니다. 시작해 봅시다.
무엇보다 먼저 흔한 오해 하나를 바로잡아야 합니다. Zcash는 "프라이버시 코인"이 아닙니다. 프라이버시를 선택 사항으로 제공하는 코인입니다. 실제로 Zcash는 Bitcoin의 포크로 시작했으며, 동일한 블록체인 위에서 두 개의 병렬 시스템을 함께 가지고 있습니다.
| 투명한 세계 | Shielded 세계 | |
|---|---|---|
| 프라이버시 | Bitcoin처럼 공개 | 비공개 |
| 주소 시작 형태 | t... | z... 또는 u... |
| 발신자 / 수신자 / 금액 | 모두에게 보임 | 모두에게 숨겨짐 |
| 기반 기술 | Bitcoin식 공개 장부 | 암호학적 커밋먼트 + 영지식 증명 |
자금은 이 둘 사이의 경계를 넘나들 수도 있습니다. 자금을 Shielded 세계 안으로 옮기는 것을 shielding이라 하고, 다시 바깥으로 꺼내는 것을 deshielding이라 합니다.
투명한 세계는 "당신이 이미 대략 이해하고 있는 Bitcoin"입니다. 아름다운 암호학이 들어 있는 쪽은 Shielded 세계이고, 이 시리즈가 관심을 두는 것도 오직 그 세계뿐입니다.

이제부터 글의 나머지 전체를 관통할 하나의 핵심 이미지를 소개합니다. 우리는 계속해서 이 그림으로 돌아올 것입니다.
지구상의 누구나 언제든 볼 수 있는 거대한 공개 게시판 하나를 상상해 보세요.
돈을 받는 것은 누군가가 게시판에 봉인된 불투명한 봉투를 하나 꽂아두는 것과 같습니다. 그 봉투 안에는 얼마의 돈이 들어 있는지와 오직 수신자만 읽을 수 있는 비밀이 들어 있습니다. 왜냐하면 그 봉투는 수신자의 개인 키에 맞춰 잠겨 있기 때문입니다. 전 세계는 그저 봉투가 하나 생겼다는 사실만 봅니다. 안을 들여다볼 수 있는 사람은 소유자뿐입니다.
게시판은 오직 커지기만 합니다. 봉투는 절대 떼어지거나 지워지지 않습니다. 새 봉투가 계속 위에 꽂일 뿐이고, 그것은 영원히 남습니다.
돈을 쓰는 것은 커튼 뒤로 들어가서 *"나는 이 게시판 위의 아직 쓰이지 않은 봉투 중 하나의 소유자이고, 그것을 열 권리가 있다"*는 사실을 증명한 뒤, 공개된 "사용됨" 바구니에 고유한 무효 토큰 하나를 떨어뜨리고, 돈을 받을 사람들을 위해 새 봉투들을 게시판에 꽂는 것과 같습니다.
이 짧은 의식(무효 토큰 하나를 꽂고, 새 봉투들을 꽂는 것, 모든 과정은 커튼 뒤에서 진행됨) 자체가 바로 Zcash 결제입니다. 나머지는 모두 세부사항입니다.
이제 이 소품들에 진짜 이름을 붙여 봅시다.
이 다섯 용어가 Shielded Zcash의 전체 어휘입니다. 사전식 정의로 외우지 말고 이야기로 익히면 오래 남습니다.
| 이야기 속 물건 | 실제 Zcash 용어 | 실제 의미 |
|---|---|---|
| 봉투 안의 내용물(금액 + 소유자 + 비밀) | Note | 누군가에게 속한 사적인 "코인", 즉 가치의 한 단위 |
| 게시판 위의 봉인된 불투명 봉투 | Note commitment | 봉투 안의 내용을 숨기면서도 그것이 존재함을 증명하는 암호학적 봉인 |
| 게시판 자체 | Note commitment tree | 지금까지 생성된 모든 note를 덧붙여 기록하는 구조 |
| "사용됨" 바구니 속 무효 토큰 | Nullifier | "이 note는 이제 사용되었다"는 뜻의 고유한 표식 |
| "커튼 뒤에서" 일어나는 마법 | Zero-knowledge proof | 전체 지출이 유효함을, 내용을 전혀 드러내지 않고 증명하는 증명 |
이 글에서 아무것도 기억나지 않더라도 이 표만큼은 기억해 주세요. 이후의 모든 내용은 그저 각 조각이 왜 그런 형태여야만 하는지를 설명하는 것일 뿐입니다.
대부분의 설명 글이 건너뛰는 부분이 바로 여기고, "나는 용어를 외웠다"와 "나는 설계를 이해했다"를 가르는 것도 바로 이 부분입니다. 이 다섯 조각 각각은 하나의 특정한 문제를 해결하기 위해 존재합니다.
보통 봉투는 증기로 뜯어볼 수 있습니다. 그러나 암호학적 note commitment는 그럴 수 없습니다. 이것을 마법처럼 봉인된 완전히 불투명한 봉투라고 생각해 보세요. 이 봉투에는 두 가지 초능력이 있습니다.
봉인이 어떻게 이 두 가지를 동시에 할 수 있을까요? 이건 실제로 답할 수 있는 진짜 질문입니다. 그것이 바로 **아티클 3 (커밋먼트)**의 주제입니다. 지금은 이 봉투를 마법 상자로 받아들이고 계속 가봅시다.
Note를 사용할 때, 당신은 그 note의 nullifier, 즉 "무효 토큰"을 공개합니다. 이 토큰은 note 자체와 당신의 비밀 키로부터 계산됩니다. 이 조합은 동시에 세 가지 성질을 만들어 내는데, 각각 모두 중요합니다.
세 번째 성질이 바로 Zcash 프라이버시의 핵심이며, 아래에서 별도의 섹션으로 다룰 만큼 중요합니다.
모든 것은 커튼 뒤에서 일어나고, 그 뒤에 당신이 세상에 내놓는 것은 zero-knowledge proof입니다. 일종의 위조 불가능한 증명서라고 생각할 수 있습니다. 이 증명은 말없이 다음 사실을 한꺼번에 보증합니다.
기적 같은 점은 이 증명이 위 사실들 중 아무것도 드러내지 않는다는 것입니다. 금액도, 주소도, 어떤 봉투였는지도 드러내지 않습니다. 단지 위의 모든 문장이 참이다라는 사실만 납득시킵니다. 그것이 어떻게 가능한지는 **아티클 5 (영지식 증명)**에서, 이 시리즈의 클라이맥스로 다루게 됩니다.
Note는 태어나고, 게시판 위에서 살다가, 결국 죽습니다. 그리고 결정적으로, 그것의 탄생과 죽음은 지켜보는 누구에게도 서로 관련 없어 보입니다.

이제 Alice가 Bob에게 결제하는 장면을 보면서, 공개되는 단계와 비공개 단계에 각각 이름을 붙여 봅시다.

프라이버시를 가능하게 만드는 비대칭성에 주목하세요.
그렇다면 Bob은 자신이 돈을 받았다는 걸 어떻게 알까요? 그의 note는 그의 키로 암호화되어 있습니다. Bob은 게시판을 계속 스캔하고, 그의 봉투만 그에게는 열립니다. 마치 특정한 자물쇠 묶음에 맞는 유일한 열쇠를 가진 것과 같습니다. 이 메커니즘 뒤에 있는 것이 바로 Viewing Key이며, 이는 나중에 다룰 주제입니다.
| 결제에 대한 사실 | 대중에게 보이는가? |
|---|---|
| 어떤 Shielded 트랜잭션이 발생했다는 사실 | 예 |
| 그것이 모든 규칙을 지켰다는 사실 (위조 없음, 이중 지불 없음) | 예 (증명을 통해) |
| 누가 돈을 보냈는지 | 숨겨짐 |
| 누가 돈을 받았는지 | 숨겨짐 |
| 얼마를 보냈는지 | 숨겨짐 |
| 어떤 이전 note가 사용되었는지 | 숨겨짐 |
이것이 1절에서 제시한 역설의 해답입니다. 대중은 내용물이 아니라 규칙을 검증합니다. 검증과 프라이버시는 더 이상 충돌하지 않습니다. Zero-knowledge proof 덕분에 후자를 건드리지 않고도 전자를 확인할 수 있기 때문입니다.
이 한 가지 아이디어만 이해하면, 왜 Zcash가 프라이빗한지 이해한 것입니다. 천천히 읽어 보세요.
따라서 외부 관찰자는 계속 나타나는 봉투들의 흐름과 계속 나타나는 무효 토큰들의 흐름을 보게 되지만, 둘을 서로 매칭할 수 없습니다. "오늘 떨어진 이 무효 토큰은 지난 3월에 꽂힌 저 봉투에 해당한다"라고 말할 수 없는 것입니다. 그 연결은 오직 note 소유자의 비밀 지식 안에만 존재하며, zero-knowledge proof는 그 연결이 유효하다는 사실을 드러내지 않고 확인해 줍니다.
이 끊어진 연결고리가 바로 Bitcoin에서는 체인 분석 업체들이 집요하게 파고드는 지점이고, Zcash는 그것을 의도적으로 끊어 놓습니다.
직관 테스트: 만약 nullifier가 비밀 키 없이, 오직 note만으로 계산된다면, 5절의 세 가지 성질 중 어느 것이 깨질까요? 그리고 왜 그것이 조용히 프라이버시를 무너뜨리게 될까요? (정답은 맨 끝에 있습니다.)
이 글은 멘털 모델이지, 명세서가 아닙니다. 초심자 친화적으로 만들기 위해 우리는 몇 가지 현실의 요소를 조용히 단순화했습니다. Zcash에는 여러 세대의 Shielded 설계가 있었고(Sprout, 그다음 Sapling, 현재는 Orchard), 실제 트랜잭션은 한 번에 여러 개의 note를 사용하고 생성할 수 있으며, "게시판"은 엄밀히 말하면 실제 핀보드가 아니라 특정한 종류의 트리이고, 가치 균형은 추가적인 암호학적 장부 처리로 강제됩니다. 하지만 이런 세부사항은 방금 배운 이야기의 핵심을 바꾸지 않습니다. 그것들은 이야기를 더 정밀하게 다듬을 뿐입니다. 우리는 한 편씩 차근차근 정확성을 다시 더해 갈 것이고, 그때마다 어디가 더 정교해졌는지를 분명하게 표시할 것입니다.
좋은 교육 콘텐츠는 무엇을 생략했는지 솔직하게 말함으로써 신뢰를 얻습니다. 이 섹션은 바로 그 약속입니다.
위에서 나온 모든 "이건 나중에 다시 다루겠습니다"는 각각 하나의 실마리입니다. 아래는 그 실마리들이 어디에서 회수되는지에 대한 안내입니다.

| 이 글에서 남겨 둔 질문 | 어디에서 해소되는가 |
|---|---|
| 봉인된 봉투가 어떻게 내용을 숨기면서도 동시에 위조 불가능할 수 있을까? | 아티클 3: 커밋먼트 |
| 키와 비밀 레시피는 어디서 오는가? | 아티클 1 & 2: 체와 곡선 |
| "게시판"은 정확히 무엇인가? | 아티클 4: 머클 트리 |
| 아무것도 드러내지 않으면서 무언가를 어떻게 증명할 수 있는가? | 아티클 5: 영지식 증명 |
| 이 다섯 조각이 실제 Zcash에서 어떻게 맞물리는가? | 아티클 6: Shielded 프로토콜 |
이제 당신은 지도를 손에 넣었습니다. 시리즈의 나머지 글은 그 지도를 하나씩 채워 넣습니다.
| 용어 | 쉬운 의미 |
|---|---|
| Note | 가치의 사적인 단위로, Zcash에서 동전이나 지폐에 해당하는 것 |
| Note commitment | note의 존재를 드러내지 않고도 증명하는 암호학적 봉인 |
| Note commitment tree | 모든 note commitment의 추가 전용 공개 기록 |
| Nullifier | note가 사용될 때 공개되는 고유한 "사용됨" 표식으로, 이중 지불을 방지함 |
| Zero-knowledge proof | 어떤 진술이 참이라는 사실만을, 그 외에는 아무것도 드러내지 않고 증명하는 증명 |
| Shielding / deshielding | 자금을 프라이빗한 Shielded 세계 안으로 넣는 것 / 바깥으로 꺼내는 것 |
| Viewing Key | 소유자가 자신에게 도착한 note를 감지하고 읽을 수 있게 해 주는 키 |
Zcash는 항상 프라이빗한가요?
아니요. 프라이버시는 Shielded 세계(z.../u... 주소)에 적용됩니다. 투명한(t...) 트랜잭션은 Bitcoin처럼 공개됩니다.
모든 것이 숨겨져 있다면, 누군가가 공짜 돈을 찍어내는 것을 무엇이 막나요? Zero-knowledge proof입니다. 이 증명은 각 트랜잭션의 출력이 실제로 존재하고 아직 사용되지 않은 입력에 의해 뒷받침되도록 수학적으로 강제하면서도, 동시에 금액은 비밀로 유지합니다.
같은 note를 두 번 쓸 수 있나요? 아니요. Note를 사용할 때 그 note의 nullifier가 공개됩니다. 두 번째 시도는 동일한 nullifier를 다시 공개하게 되는데, 그것은 이미 "사용됨" 바구니에 있으므로 네트워크가 거부합니다.
외부인이 송신자와 수신자를 연결할 수 있나요? 아니요. Commitment(note의 탄생)과 nullifier(note의 죽음)는 소유자의 비밀 지식 없이는 누구도 서로 매칭할 수 없습니다.
만약 nullifier가 비밀 키 없이, 오직 note만으로 계산된다면, 누구나 그것을 계산할 수 있게 되어 성질 #1(소유자만 지불할 수 있음)이 깨집니다. 더 나쁜 점은, 이제 nullifier가 note에 대한 공개 정보로부터 직접 유도 가능해질 수 있어서, 관찰자들이 nullifier를 그 note의 commitment에 다시 연결할 수 있게 될 수 있다는 것입니다. 그러면 성질 #3도 깨지고, 시스템 전체의 프라이버시는 조용히 풀리기 시작합니다. 비밀 키가 있어야만 이 무효 토큰이 오직 당신만 만들 수 있으면서도 동시에 연결 불가능한 것이 됩니다.
아티클 1 . 유한체: 산술이 "되감기듯 순환하는" 낯설고도 아름다운 수 체계, 그리고 이 시리즈의 모든 암호학이 왜 그 안에서 살아가는지. 늘 그렇듯, 직관부터 시작하고 수식은 필요해질 때까지 미루겠습니다.
이 글은 ZecHub를 위한 Zcash from First Principles 시리즈의 일부입니다. 라이선스는 CC BY-SA 4.0입니다.