
Серія: Zcash from First Principles . Стаття 0 . Якір Аудиторія: абсолютні новачки. Не потрібні знання з криптографії, блокчейну чи математики. Що ви зрозумієте після прочитання: коректну ментальну модель того, як Zcash приховує хто кому заплатив і яку суму, водночас дозволяючи всьому світу перевірити, що жодні гроші не були створені з повітря чи витрачені двічі.
Кожна наступна стаття в цій серії наближає вас до однієї з частин механізму, з яким ви зараз познайомитеся. Тож якщо якесь слово тут здається розпливчастим, чудово. Це означає, що ми ще повернемося до нього й пояснимо все як слід.
Уявіть, що виписку з вашого банківського рахунку прибили цвяхами до стіни на міській площі. Назавжди. Будь-хто (ваш орендодавець, роботодавець, незнайомець, майбутній роботодавець, уряд) міг би прочитати кожну оплату оренди, кожен медичний рахунок, кожну пожертву, кожну каву й точно простежити, кому ви надсилали гроші і хто надсилав їх вам.
Це не антиутопічна гіпотеза. Приблизно так і працює Bitcoin.
Bitcoin часто називають "анонімним", але це не так. Він псевдонімний: вашого імені немає в реєстрі, але кожна транзакція, сума й зв’язок між адресами є публічними й зберігаються назавжди. Ціла галузь "chain analysis" існує саме для того, щоб зняти цю тонку завісу псевдонімності й прив’язати адреси до реальних людей. Щойно одну з ваших адрес пов’язують із вами, уся ваша фінансова історія починає розмотуватися.
Zcash було створено, щоб відповісти на оманливо складне запитання:
Чи можемо ми мати гроші, які є повністю приватними, приховуючи відправника, отримувача і суму, але при цьому дозволяючи будь-кому перевірити, що правила були дотримані?
Ці дві цілі суперечать одна одній. Публічний реєстр можна перевірити тому, що всі його бачать. Приватність означає, що ніхто нічого не бачить. То як суспільство може перевірити щось, на що йому не дозволено дивитися?
Розв’язання цього парадоксу — і є вся історія цієї серії. Почнімо.
Передусім варто розвіяти поширену хибну думку: Zcash — це не "приватна монета". Це монета, яка пропонує приватність як опцію. Насправді вона починалася як форк Bitcoin і має дві паралельні системи в одному блокчейні.
| Прозорий світ | Захищений світ | |
|---|---|---|
| Приватність | Публічний, як і Bitcoin | Приватний |
| Адреси починаються з | t... | z... або u... |
| Відправник / отримувач / сума | Видимі для всіх | Приховані від усіх |
| Базова технологія | Публічний реєстр у стилі Bitcoin | Криптографічні commitments + zero-knowledge proofs |
Гроші можуть навіть перетинати межу між ними: переміщення коштів у захищений світ називається shielding, а повернення їх назад — deshielding.
Прозорий світ — це "Bitcoin, який ви вже приблизно розумієте". Саме захищений світ містить усю цю прекрасну криптографію, і саме ним займається ця серія.

Ось єдина ментальна картинка, яку варто пронести через решту статті. Ми постійно до неї повертатимемося.
Уявіть одну величезну публічну дошку оголошень, яку постійно бачать усі люди на Землі.
Отримання грошей означає, що хтось прикріплює до дошки запечатаний непрозорий конверт. Усередині конверта — скільки в ньому грошей і секрет, який може прочитати лише отримувач, бо конверт замкнений на особистий ключ цього отримувача. Увесь світ бачить, що конверт з’явився. Але ніхто, окрім власника, не бачить, що всередині.
Дошка лише зростає. Конверти ніколи не зривають і не стирають. Нові прикріплюють зверху — назавжди.
Витрачання грошей означає, що ви заходите за ширму й доводите: "Я володію одним із невитрачених конвертів на цій дошці, і я маю право його відкрити", після чого кидаєте у публічний кошик "витраченого" унікальний токен анулювання та прикріплюєте нові конверти для тих, кому платите.
Цей маленький ритуал (кинути токен анулювання, прикріпити нові конверти, усе з-за ширми) і є платіж у Zcash. Усе інше — деталі.
Тепер дамо цим реквізитам їхні справжні назви.
Ці п’ять термінів — увесь словник захищеного Zcash. Вивчайте їх як історію, а не як глосарій — так вони краще запам’ятаються.
| У цій історії | Реальний термін у Zcash | Що це насправді |
|---|---|---|
| Вміст конверта (сума + власник + секрет) | Note | Приватна "монета": одиниця вартості, що належить комусь |
| Запечатаний непрозорий конверт на дошці | Note commitment | Криптографічна печатка, що доводить існування конверта, приховуючи його вміст |
| Сама дошка оголошень | Note commitment tree | Структура з дозаписом, що містить усі note, коли-небудь створені |
| Токен анулювання в кошику "витраченого" | Nullifier | Унікальний маркер, що означає: "ця note уже витрачена" |
| "Магія" за ширмою | Zero-knowledge proof | Доказ того, що вся витрата є валідною, без розкриття будь-яких деталей |
Якщо ви не запам’ятаєте з цієї статті нічого більше, запам’ятайте цю таблицю. Усе, що далі, — це лише чому кожна частина повинна мати саме таку форму.
Це та частина, яку більшість пояснень пропускає, хоча саме вона відрізняє "я вивчив кілька слів" від "я розумію конструкцію". Кожен із цих п’яти елементів існує, щоб розв’язати одну конкретну проблему.
Звичайний конверт можна розпарити й відкрити. Криптографічний note commitment — ні. Уявіть його як магічно запечатаний, повністю непрозорий конверт із двома суперсилами:
Як одна печатка може робити і те, і інше одночасно? Це реальне запитання, і на нього є відповідь. Саме про це буде Стаття 3 (commitments). А поки просто прийміть цей конверт як магію і рухаймося далі.
Коли ви витрачаєте note, ви публікуєте її nullifier, той самий "токен анулювання". Цей токен обчислюється з самої note та вашого секретного ключа. Такий рецепт одночасно дає три властивості, і кожна з них важлива:
Ця третя властивість — серце приватності Zcash, і вона заслуговує на окремий розділ нижче.
Усе відбувається за ширмою, а потім ви передаєте світу zero-knowledge proof — своєрідний сертифікат, який неможливо підробити. Він мовчки засвідчує все це одразу:
Диво в тому, що доказ не розкриває нічого з цього. Ні суму, ні адреси, ні те, який саме це був конверт. Він лише переконує вас, що кожне з наведених вище тверджень є істинним. Як це взагалі можливо — тема Статті 5 (zero-knowledge proofs), кульмінації всієї серії.
Note народжується, живе на дошці й зрештою помирає, і, що критично важливо, її народження та її смерть для будь-кого, хто спостерігає, виглядають не пов’язаними між собою.

Подивімося, як Alice платить Bob, позначивши кожен публічний і приватний крок.

Зверніть увагу на асиметрію, завдяки якій і працює приватність:
Як Bob взагалі дізнається, що йому заплатили? Його note зашифрована для його ключа. Він безперервно сканує дошку, і лише його конверти відкриваються для нього — наче у вас є єдиний ключ, що підходить до певного набору замків. Механізм, який стоїть за цим, — це viewing keys, тема наступних статей.
| Факт про платіж | Видимий для публіки? |
|---|---|
| Те, що відбулася якась захищена транзакція | Так |
| Те, що вона дотрималася всіх правил (без підробки, без подвійної витрати) | Так (через proof) |
| Хто відправив гроші | Приховано |
| Хто їх отримав | Приховано |
| Яка сума була відправлена | Приховано |
| Яка саме попередня note була витрачена | Приховано |
У цьому й полягає розв’язання парадоксу з розділу 1. Публіка перевіряє правила, а не вміст. Перевірюваність і приватність перестають конфліктувати, бо zero-knowledge proof дозволяє перевірити перше, не торкаючись другого.
Якщо ви зрозумієте цю одну ідею, то зрозумієте, чому Zcash є приватним. Читайте повільно.
Тож сторонній спостерігач бачить потік конвертів, що з’являються, і потік токенів анулювання, що з’являються, але не може зіставити їх між собою. Він не може сказати: "токен анулювання, який з’явився сьогодні, відповідає конверту, прикріпленому торік у березні". Цей зв’язок існує лише у секретному знанні власника note, а zero-knowledge proof підтверджує, що цей зв’язок валідний, не розкриваючи його.
Саме на цьому зламаному зв’язку й паразитують компанії, що займаються chain analysis у Bitcoin, і саме його Zcash навмисно розриває.
Перевірте свою інтуїцію: Якби nullifier обчислювався лише з note (без участі секретного ключа), яка з трьох властивостей із розділу 5 зламалася б і чому це непомітно зруйнувало б приватність? (Відповідь наприкінці.)
Це ментальна модель, а не специфікація. Щоб зробити текст дружнім до новачків, ми непомітно спростили кілька реальних речей: у Zcash було кілька варіантів захищеного дизайну (Sprout, потім Sapling, а тепер Orchard); реальні транзакції можуть витрачати й створювати кілька note одночасно; "дошка" технічно є конкретним видом дерева, а не буквально дошкою з кнопками; а баланс вартості забезпечується ще й додатковим криптографічним обліком. Жодна з цих деталей не змінює історії, яку ви щойно вивчили; вони лише уточнюють її. Ми поступово повернемо точність, стаття за статтею, і щоразу чітко позначатимемо, коли саме це робимо.
Хороший освітній матеріал викликає довіру тим, що чесно говорить, що саме він опустив. Цей розділ — така обіцянка.
Кожне "ми ще повернемося до цього" вище — це окрема нитка. Ось де кожну з них буде завершено:

| Незавершене питання з цієї статті | Де воно розкривається |
|---|---|
| Як запечатаний конверт може одночасно приховувати вміст і бути незламним для підробки? | Стаття 3: commitments |
| Звідки беруться ключі та секретні рецепти? | Статті 1 і 2: поля та криві |
| Що саме таке "дошка"? | Стаття 4: дерева Меркла |
| Як можна щось довести, нічого не розкриваючи? | Стаття 5: zero-knowledge proofs |
| Як усі п’ять частин поєднуються в реальному Zcash? | Стаття 6: shielded protocol |
Тепер у вас є мапа. Усе інше в цій серії її заповнює.
| Термін | Просте значення |
|---|---|
| Note | Приватна одиниця вартості, еквівалент монети або купюри в Zcash |
| Note commitment | Криптографічна печатка, яка доводить існування note, не розкриваючи її |
| Note commitment tree | Публічний реєстр із дозаписом усіх note commitments |
| Nullifier | Унікальний маркер "витрачено", який публікується під час використання note й запобігає подвійним витратам |
| Zero-knowledge proof | Доказ того, що твердження істинне, без розкриття чогось, окрім самої його істинності |
| Shielding / deshielding | Переміщення коштів у / з приватного захищеного світу |
| Viewing Key | Ключ, який дозволяє власнику виявляти й читати note, адресовані йому |
Чи Zcash завжди приватний?
Ні. Приватність стосується захищеного світу (адреси z.../u...). Прозорі (t...) транзакції є публічними, як у Bitcoin.
Якщо все приховано, що заважає комусь друкувати безкоштовні гроші? Zero-knowledge proof. Він математично змушує кожен вихід транзакції бути забезпеченим реальними, ще не витраченими входами, водночас зберігаючи суми в таємниці.
Чи можна витратити ту саму note двічі? Ні. Під час витрати note публікується її nullifier; друга спроба опублікувала б ідентичний nullifier, який уже є в кошику "витраченого", тому мережа її відхиляє.
Чи можуть сторонні пов’язати відправника з отримувачем? Ні. Commitment (народження note) і nullifier (смерть note) не може зіставити ніхто без секретного знання її власника.
Якби nullifier обчислювався лише з note, без секретного ключа, тоді його міг би обчислити будь-хто, а отже, зламалася б властивість №1 (лише власник може витрачати). Гірше того, nullifier тепер можна було б вивести безпосередньо з публічної інформації про note, що дозволило б спостерігачам пов’язати nullifier назад із його commitment, зламавши властивість №3 і непомітно розплутавши приватність усієї системи. Саме секретний ключ робить токен анулювання одночасно виключно вашим і таким, що не піддається зв’язуванню.
Стаття 1 . Скінченні поля: дивна й прекрасна числова система, у якій арифметика "зациклюється", і причина, чому кожен елемент криптографії в цій серії живе саме там. Ми почнемо, як завжди, з інтуїції — жодних формул, доки вони не будуть справді потрібні.
Частина серії Zcash from First Principles для ZecHub. Ліцензія CC BY-SA 4.0.