
Серия: Zcash с первых принципов . Статья 0 . Якорь Для кого: для абсолютных новичков. Не требуется знаний криптографии, блокчейна или математики. Что вы поймёте после прочтения: корректную ментальную модель того, как Zcash скрывает кто кому заплатил и сколько, при этом позволяя всему миру проверять, что никакие деньги не были созданы из воздуха и не были потрачены дважды.
Каждая следующая статья этой серии приближает один из элементов механизма, с которым вы сейчас познакомитесь. Поэтому если какое-то слово здесь кажется расплывчатым, отлично. Это обещание, что мы вернёмся к нему и разберём его как следует.
Представьте, что ваша банковская выписка прибита к стене на городской площади. Навсегда. Любой человек (ваш арендодатель, работодатель, незнакомец, будущий работодатель, государство) мог бы прочитать каждый платёж за аренду, каждый медицинский счёт, каждое пожертвование, каждый кофе и точно проследить, кому вы отправляли деньги и кто отправлял деньги вам.
Это не антиутопическая гипотеза. Примерно так и работает Bitcoin.
Bitcoin часто называют «анонимным», но это не так. Он псевдонимен: вашего имени нет в реестре, но каждая транзакция, сумма и связь между адресами публичны и постоянны. Целая индустрия «chain analysis» существует именно для того, чтобы снять этот тонкий слой псевдонимности и привязать адреса к реальным людям. Стоит связать с вами хотя бы один из ваших адресов — и вся ваша финансовая история начинает раскручиваться.
Zcash был создан как ответ на deceptively hard вопрос:
Можно ли создать деньги, которые полностью приватны, скрывают отправителя, получателя и сумму, но при этом позволяют любому убедиться, что правила соблюдены?
Эти две цели противоречат друг другу. Публичный реестр поддаётся проверке потому что все его видят. Приватность означает, что никто его не видит. Так как же общественность может проверить то, на что ей не позволено смотреть?
Разрешение этого парадокса — и есть вся история этой серии. Начнём.
Прежде всего развеем распространённое заблуждение: Zcash — это не «приватная монета». Это монета, которая предлагает приватность как опцию. Изначально она появилась как форк Bitcoin и несёт в себе две параллельные системы на одном и том же блокчейне.
| Прозрачный мир | Shielded-мир | |
|---|---|---|
| Приватность | Публично, как в Bitcoin | Приватно |
| Адреса начинаются с | t... | z... or u... |
| Отправитель / получатель / сумма | Видны всем | Скрыты от всех |
| Базовая технология | Публичный реестр в стиле Bitcoin | Криптографические commitments + доказательства с нулевым разглашением |
Деньги могут даже пересекать границу между ними: перемещение средств внутрь shielded-мира называется shielding, а вывод обратно — deshielding.
Прозрачный мир — это «Bitcoin, который вы уже более-менее понимаете». Именно shielded-мир содержит всю красивую криптографию, и только этот мир интересует нас в данной серии.

Вот единственный мысленный образ, который стоит пронести через всю остальную статью. Мы будем постоянно к нему возвращаться.
Представьте одну огромную публичную доску объявлений, которую в любой момент может видеть каждый человек на Земле.
Получение денег означает, что кто-то прикалывает к доске запечатанный непрозрачный конверт. Внутри конверта находится сколько денег в нём лежит и секрет, который может прочитать только получатель, потому что конверт закрыт на личный ключ этого получателя. Весь мир видит, что появился конверт. Никто, кроме владельца, не видит, что внутри.
Доска только растёт. Конверты никогда не снимают и не стирают. Новые прикалываются поверх, навсегда.
Трата денег означает, что вы заходите за занавес, доказываете: «Я владею одним из непотраченных конвертов на этой доске, и я имею право его открыть», затем опускаете уникальный жетон аннулирования в публичную корзину «потрачено» и прикалываете новые конверты для тех, кому вы платите.
Этот маленький ритуал (прикрепить жетон аннулирования, прикрепить новые конверты, всё это — из-за занавеса) и есть платёж в Zcash. Всё остальное — детали.
Теперь дадим этим объектам их настоящие имена.
Эти пять терминов составляют весь словарь shielded-Zcash. Учите их как историю, а не как глоссарий, и тогда они запомнятся.
| В истории | Настоящий термин Zcash | Что это на самом деле |
|---|---|---|
| Содержимое конверта (сумма + владелец + секрет) | Note | Приватная «монета»: единица ценности, принадлежащая кому-то |
| Запечатанный непрозрачный конверт на доске | Note commitment | Криптографическая печать, доказывающая существование конверта и скрывающая его содержимое |
| Сама доска объявлений | Note commitment tree | Аппенд-онли запись всех когда-либо созданных notes |
| Жетон аннулирования в корзине «потрачено» | 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, тема для более позднего разбора.
| Факт о платеже | Видно публике? |
|---|---|
| То, что произошла какая-то shielded-транзакция | Да |
| То, что она соблюдает все правила (без подделки и двойной траты) | Да (через доказательство) |
| Кто отправил деньги | Скрыто |
| Кто получил их | Скрыто |
| Сколько было отправлено | Скрыто |
| Какая именно предыдущая note была потрачена | Скрыто |
Это и есть разрешение парадокса из Раздела 1. Публика проверяет правила, а не содержимое. Верификация и приватность перестают конфликтовать, потому что zero-knowledge proof позволяет проверить первое, не касаясь второго.
Если вы поймёте эту одну идею, вы поймёте, почему Zcash приватен. Читайте медленно.
Поэтому внешний наблюдатель видит поток появляющихся конвертов и поток появляющихся жетонов аннулирования, но не может сопоставить их между собой. Он не может сказать: «жетон аннулирования, появившийся сегодня, соответствует конверту, приколотому в прошлом марте». Эта связь существует только внутри секретного знания владельца note, а zero-knowledge proof подтверждает, что связь корректна, не раскрывая её.
Именно на этой разорванной связи паразитируют компании chain analysis в Bitcoin, и именно её Zcash намеренно разрывает.
Проверьте свою интуицию: если бы Nullifiers вычислялись только из самой note (без участия секретного ключа), какое из трёх свойств из Раздела 5 нарушилось бы и почему это незаметно уничтожило бы приватность? (Ответ в конце.)
Это ментальная модель, а не спецификация. Чтобы текст был дружелюбен к новичкам, мы незаметно упростили несколько реальных моментов: у Zcash было несколько shielded-дизайнов (Sprout, затем Sapling, теперь Orchard); реальные транзакции могут одновременно тратить и создавать несколько notes; «доска» технически представляет собой особый вид дерева, а не буквальную доску с кнопками; а баланс ценности обеспечивается ещё и дополнительным криптографическим учётом. Ни одна из этих деталей не меняет историю, которую вы только что узнали; они лишь уточняют её. Мы будем постепенно возвращать точность — по одной статье за раз — и каждый раз чётко отмечать, когда это происходит.
Хороший образовательный материал заслуживает доверие тем, что прямо говорит, что именно он опустил. Этот раздел — такое обещание.
Каждое «мы к этому вернёмся» выше — это отдельная нить. Вот где каждая из них будет завязана:

| Незакрытый вопрос из этой статьи | Где он разбирается |
|---|---|
| Как запечатанный конверт может одновременно скрывать содержимое и быть неподделываемым? | Статья 3: commitments |
| Откуда берутся ключи и секретные рецепты? | Статьи 1 и 2: поля и кривые |
| Что именно представляет собой «доска»? | Статья 4: деревья Меркла |
| Как можно что-то доказать, ничего не раскрывая? | Статья 5: zero-knowledge proofs |
| Как все пять частей соединяются в реальном Zcash? | Статья 6: shielded-протокол |
Теперь у вас есть карта. Остальная серия заполнит её деталями.
| Термин | Значение простыми словами |
|---|---|
| Note | Приватная единица ценности, эквивалент монеты или купюры в Zcash |
| Note commitment | Криптографическая печать, доказывающая существование note без её раскрытия |
| Note commitment tree | Аппенд-онли публичная запись всех Note commitments |
| Nullifier | Уникальный маркер «потрачено», публикуемый при использовании note и предотвращающий двойную трату |
| Zero-knowledge proof | Доказательство истинности утверждения без раскрытия чего-либо, кроме самого факта его истинности |
| Shielding / deshielding | Перемещение средств в приватный shielded-мир / из него |
| Viewing Key | Ключ, который позволяет владельцу обнаруживать и читать notes, адресованные ему |
Всегда ли Zcash приватен?
Нет. Приватность относится к shielded-миру (z.../u... addresses). Прозрачные (t...) транзакции публичны, как в Bitcoin.
Если всё скрыто, что мешает кому-то печатать бесплатные деньги? Zero-knowledge proof. Оно математически заставляет выходы каждой транзакции быть обеспеченными реальными, непотраченными входами, при этом сохраняя суммы в секрете.
Можно ли потратить одну и ту же note дважды? Нет. Трата note публикует её Nullifier; вторая попытка опубликовала бы тот же самый Nullifier, который уже находится в корзине «потрачено», поэтому сеть её отвергнет.
Могут ли посторонние связать отправителя с получателем? Нет. Commitment (рождение note) и Nullifier (смерть note) не могут быть сопоставлены никем без секретного знания владельца.
Если бы Nullifier вычислялся только из самой note, без секретного ключа, то вычислить его мог бы кто угодно, а значит, сломалось бы свойство №1 (тратить может только владелец). Более того, Nullifier теперь можно было бы выводить напрямую из публичной информации о note, а это позволило бы наблюдателям связывать Nullifier с его commitment, ломая свойство №3 и незаметно разрушая приватность всей системы. Секретный ключ — это то, что делает жетон аннулирования одновременно исключительно вашим и несвязываемым.
Статья 1 . Конечные поля: странная и прекрасная числовая система, в которой арифметика «замыкается по кругу», и причина, почему каждый элемент криптографии в этой серии живёт именно там. Мы начнём, как и всегда, с интуиции, без формул, пока они не будут действительно заслужены.
Часть серии Zcash с первых принципов для ZecHub. Лицензия CC BY-SA 4.0.