Що таке докази з нульовим розголошенням (zero-knowledge proofs)?

Доказ з нульовим розголошенням (zero-knowledge proof) — це спосіб довести певний факт, не розкриваючи сам факт чи будь-яку додаткову інформацію про нього.

«Нульове знання» означає, що верифікатор дізнається нуль нових даних окрім того, що твердження є правдивим.

Класичний приклад: уявіть, що ви хочете довести другу, що знаєте пароль від замка, але не хочете показувати сам пароль. Ви можете просто відімкнути замок у його присутності — друг переконається в правдивості вашого твердження, але не отримає пароль.

Інший приклад: Уявіть, що ви в кімнаті з іншою людиною, якій зав’язали очі. На столі лежать дві кульки — одна біла, інша чорна. Ваше завдання — довести цій людині (верифікатору), що кульки різного кольору, не називаючи, який саме колір має кожна з них.

Ви пропонуєте верифікатору сховати обидві кульки під стіл, а потім навмання дістати одну й показати її вам. Ви бачите її, після чого кульку знову ховають. У наступному раунді верифікатор або показує ту саму кульку, або іншу. Якщо ви точно знаєте, яка кулька була раніше, то зможете визначити, чи відбулася заміна — але лише тому, що кульки різні за кольором.

Однак така демонстрація не є неспростовним доказом: верифікатор може припустити, що ви просто вгадали. Щоб зменшити ймовірність випадкового вгадування, експеримент повторюють багато разів. З кожною новою ітерацією довіра до правдивості ваших слів зростає. Наприклад, після п’яти повторень імовірність випадкового успіху становить 1 до 32, після десяти — 1 до 1024, а після двадцяти — приблизно 1 до мільйона.

Чим більше повторень, тим вищий рівень переконливості, хоча абсолютну впевненість все одно гарантувати неможливо.

Отже, доказ з нульовим розголошенням — це протокол між двома сторонами, доказуючим і перевіряючим, який складається з певних кроків (інтеракцій) або одного повідомлення, що дозволяє переконатися у правдивості факту без розкриття секретів.

Як працюють докази з нульовим розголошенням?

Принцип роботи ZKP можна звести до схеми «виклик — відповідь». Доказуючий має деякий секрет (наприклад, пароль або приватний ключ), існування якого треба підтвердити. Верифікатор надсилає доказуючому виклик (число або інший параметр), на який той повинен правильно відповісти, використовуючи знання секрету. Якщо відповідь вірна, верифікатор отримує переконання, що у доказуючого є секретна інформація, адже без неї відповісти правильно було б неможливо.

У класичних інтерактивних ZKP такі виклики-відповіді повторюються багато разів з різними випадковими даними, що знижує імовірність вгадуванн. У сучасних реалізаціях ZKP часто використовують математичні перетворення, щоб зробити доказ неінтерактивним — тобто звести все до однієї взаємодії: доказуючий обчислює криптографічний доказ і передає верифікатору, який його перевіряє.

Щоб протокол із нульовим розголошенням працював коректно, він має задовольняти трьом ключовим критеріям:

  • Нульове розголошення: верифікатор не отримує жодних знань про сам секрет або деталі твердження, окрім факту його істинності. (У прикладі з кульками друг так і не дізнався, яка кулька якого кольору — лише переконався, що кольори різні).
  • Коректність (обґрунтованість): якщо твердження хибне, жоден недобросовісний доказуючий не зможе переконати верифікатора у протилежному. Система не повинна приймати неправильний доказ.
  • Повнота: якщо твердження істинне і обидві сторони діють чесно, протокол завжди підтвердить це твердження. Інакше кажучи, маючи справжній секрет, чесний доказуючий зможе пройти перевірку.

На практиці побудова ZKP-доказів базується на складній математиці (теорія чисел, поліноми, хеш-функції тощо). Проте результатом є невеликий блок даних — криптографічний доказ, який можна швидко перевірити спеціальним алгоритмом. Цей доказ переконливо свідчить про істинність заданої умови, але не розкриває жодних подробиць.

Основні види ZKP: zk-SNARK та zk-STARK

Zero-knowledge proofs — це загальна концепція, реалізована у різних формах. В криптоіндустрії найбільш відомі дві катергорії протоколів: zk-SNARKs та zk-STARKs. Обидва варіанти дозволяють досягти однакової мети (довести щось без розголошення), але різняться алгоритмами та характеристиками. Розглянемо їх:

zk-SNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)

У перекладі — «стислий неінтерактивний аргумент знання з нульовим розголошенням». Стислий означає, що доказ має дуже малий розмір і перевіряється за лічені мілісекунди. Неінтерактивний означає, що достатньо одного обміну повідомленнями (без багаторазових викликів).

Для генерації SNARK-доказів використовуються складні алгоритми на еліптичних кривих і, як правило, потрібна довірена установка параметрів — так звана «церемонія». В ході такої ініціалізації створюється спільний секрет (набір чисел-коефіцієнтів); пізніше цей секрет має бути знищений. Якщо зловмисник дістане доступ до секрета, він зможе генерувати фейкові докази, тому довірену установку проводять дуже ретельно і одноразово.

Новіші протоколи (наприклад, PLONK) дозволяють зробити універсальну установку або обходяться без неї в деяких випадках, але історично необхідність довіряти початковій церемонії була однією з головних слабкостей zk-SNARK. Натомість перевагою SNARK є малі доказові дані та швидка перевірка, що робить його зручним для блокчейнів з обмеженим простором і ресурсами (наприклад, для верифікації на смартконтракт).

Окрім Zcash, Zk-SNARK є основою протоколів масштабування (Polygon zkEVM, zkSync Era, Mina) та рішень для ідентифікації і авторизації.

zk-STARK (Zero-Knowledge Scalable Transparent Argument of Knowledge)

У перекладі — «масштабований прозорий аргумент знання з нульовим розголошенням». Ключові відмінності вже в назві: «прозорий» означає, що STARK не потребує довіреної установки — всі параметри генеруються відкрито, з публічного джерела випадковості. Крім того, STARK орієнтований на масштабованість: він краще підходить для великих обчислень, оскільки час генерування і перевірки зростає квазі-лінійно (повільніше, ніж у SNARK, для дуже великих обсягів даних).

В обмін на це zk-STARK генерує більші докази — їхній розмір в байтах може бути у декілька разів більшим, ніж у SNARK-аналогів, що збільшує витрати на зберігання та передачу таких доказів.

STARK будується на хеш-функціях і елементарних операціях, що зумовлює стійкість до квантових атак (на відміну від SNARK, що покладається на еліптичні криві).

Технологію zk-STARK розробила ізраїльська компанія StarkWare, яка створила рішення масштабування StarkEx та StarkNet на основі STARK-доказів. Ці рішення вже використовуються для масштабування Ethereum (наприклад, у децентралізованій біржі dYdX) і підтримуються інвесторами на кшталт Віталіка Бутеріна та фонду Sequoia.

Загалом, zk-STARK вважається наступним кроком еволюції ZKP, що усуває деякі недоліки SNARK, зокрема, довірену установку і потенційну вразливість до квантових комп’ютерів.

Приклади застосування ZKP у блокчейні

Приватні транзакції. Першим відомим застосуванням доказів з нульовим розголошенням стала конфіденційність у криптовалютах.

Проект Zcash у 2016 році впровадив zk-SNARK для створення екранованих транзакцій — коли відправник і одержувач можуть переказати кошти так, що сума і адреси приховані від сторонніх спостерігачів, хоча мережа підтверджує валідність операції.

Zcash має два режими адрес — відкриті та приватні. Якщо користувач надсилає з приватної адреси, то доказ на zk-SNARK забезпечує правильність транзакції без розкриття деталей. Цей підхід дає набагато вищий рівень анонімності, ніж у біткоїні чи ефірі, і тому Zcash належить до т.зв. «монет приватності».

Інша реалізація — протокол Aztec Network на Ethereum, який діє як L2-рішення для конфіденційних платежів. Aztec використовує zk-SNARK та власну мову програмування Noir для шифрування користувацьких транзакцій: перед тим як дані потрапляють у блокчейн, вони шифруються на пристрої користувача, але при цьому мережа отримує криптодоказ їх коректності.

Таким чином, на Ethereum стають можливими приватні перекази і DeFi-операції — наприклад, існує сервіс Aztec Connect, який дозволяв підключатися до таких протоколів як Uniswap або Aave і виконувати дії (свопи, депозити) без розголошення адрес та сум. У 2023 році команда Aztec зосередилася на розробці нової версії мережі (Noir Network) для приватних смартконтрактів.

Окрім цих проєктів, елементи ZKP застосовуються і в інших криптовалютах для підвищення конфіденційності — зокрема, у Monero використовуються Bulletproofs (стислі докази діапазонів) для приховування сум транзакцій.

Масштабування Ethereum (zk-Rollups). Докази з нульовим розголошенням вирішують не лише питання приватності, а й проблему низької пропускної здатності блокчейнів. Найпоширеніший кейс — це zk-Rollups, або рішення другого рівня на основі доказів з нульовим розголошенням.

zk-ролап «згортає» сотні або тисячі транзакцій поза основним ланцюгом, а на L1-блокчейн (наприклад, Ethereum) відправляє лише мікроскопічний криптографічний доказ їх валідності. Це різко скорочує навантаження на базову мережу і дозволяє досягти набагато більшої швидкості та дешевизни транзакцій.

Перші покоління zk-ролапів були спеціалізованими — наприклад, Loopring був орієнтований на обмін токенів, zkSync Lite — на платежі.

Згодом з’явилися універсальні рішення zkEVM (zero-knowledge Ethereum Virtual Machine): вони підтримують повну сумісність зі смартконтрактами Ethereum, тобто дозволяють розгорнути будь-який існуючий децентралізований додаток на другому рівні без змін.

Над такими проектами працюють одразу кілька команд — зокрема, Polygon zkEVM, zkSync Era (від Matter Labs) та Scroll запустили свої мережі у 2023 році. Ці рішення використовують поєднання SNARK і STARK технологій.

Інший приклад — StarkNet від StarkWare, який використовує мову Cairo і STARK-докази. Очікується, що zk-rollups значно підвищать масштабованість Ethereum, зберігаючи при цьому високий рівень безпеки основного ланцюга. Самі Ethereum-розробники планують інтегрувати ZKP в основу протоколу: у дорожній карті ETH2.0 описано етап «The Verge», де за допомогою zk-SNARK планується оптимізувати розмір і перевірку історії блокчейну.

Ідентифікація та безпека даних. За межами криптовалют докази з нульовим розголошенням відкривають можливості для цифрової ідентифікації та захисту чутливих даних.

Приміром, банк ING розробив протокол Zero-Knowledge Range Proof, який дозволяє довести, що дохід клієнта потрапляє в певний діапазон (необхідний для отримання кредиту) без розкриття точної суми зарплати. Інший приклад — проєкт Iden3 і протокол Polygon ID, що дають змогу підтвердити свій вік або громадянство через ZKP: користувач отримує криптографічне підтвердження від офіційної установи і може надати його, доводячи факт (наприклад «мені є 18 років») без передачі сканів документів чи персональних даних.

Таким чином, ZKP можуть значно підвищити безпеку KYC/AML-процедур, доступ до веб-сайтів, голосування і багато інших сфер, де зараз доводиться передавати свої приватні дані стороннім організаціям.

Порівняння з іншими підходами до конфіденційності і масштабування

Технології на кшталт CoinJoin та Mimblewimble мають на меті ускладнити відстеження транзакцій, але роблять це інакше, ніж докази з нульовим розголошенням.

CoinJoin — методі, що передбачає об’єднання кількох незалежних переказів від різних користувачів в одну велику транзакцію. В результаті спостерігачеві важко визначити, яка вхідна адреса відповідає якій вихідній — траса заплутується. CoinJoin використовують, наприклад, у гаманцях Wasabi або Samourai для підвищення анонімності біткоїна.

CoinJoin не дає криптографічної гарантії приватності — якщо одна зі сторін розкриє інформацію або якщо аналізатор має додаткові дані, зв’язки можна частково відновити. До того ж, помітна «змішана» транзакція сама по собі привертає увагу дослідників блокчейну.

Mimblewimble — це протокол, впроваджений у монетах як Grin і Beam, який кардинально змінює структуру блокчейну для досягнення приватності.

По-перше, Mimblewimble агрегує та «обрізає» транзакції: в межах одного блоку всі перекази зливаються, а проміжні виходи видаляються. Спостерігач бачить лише сукупні вхідні та вихідні дані блоку, без деталізації, хто кому що відправив.

По-друге, там застосовується криптографія Confidential Transactions — суми виходів шифруються так, що їх не можна побачити, але можна довести збіг балансу входів/виходів. Таким чином, Mimblewimble дає приховані суми і приховані адреси (адрес як таких немає — використовуються тимчасові одноразові ключі для кожної транзакції).

Це ускладнює аналіз мережі, але досягається ціною сумісності: Mimblewimble-система несумісна зі смартконтрактами, не підтримує відкритих адрес чи балансів. Верифікація відбувається в межах протоколу консенсусу (майнінгу) і не дозволяє зробити довільне доведення окремого факту, як це можливо з ZKP.

І CoinJoin, і Mimblewimble зрештою покладаються на «приховування в натовпі» — ефективність цих методів тим вища, чим більше користувачів і транзакцій змішуються. Натомість ZKP забезпечує строгий рівень конфіденційності навіть для однієї транзакції: ніхто, окрім учасників, не дізнається суму чи інші дані, бо замість них публікується лише математичний доказ.

Optimistic-ролапи та zk-ролапи мають на меті розвантажити основний ланцюг, перемістивши обчислення на другий рівень. Втім, принципи їх роботи різні.

Optimistic Rollup діє за припущенням, що всі виконані поза мережею транзакції валідні. Пакет таких транзакцій публікується на L1 без доказу; після цього триває спеціальний «період спростувань» (наприклад, 7 днів), протягом якого будь-хто може перевірити дані і пред’явити fraud-proof у разі виявлення помилки або шахрайства. Якщо обман викрито, недійсні операції відкидаються, а винуватець карається (економічно). Такий механізм вимагає наявності достатньої кількості моніторів, зацікавлених у чесності мережі.

Перевага оптимістичного підходу — відносна простота і швидкість на етапі виконання (немає затрат на обчислення доказів). Недолік — це якраз затримка перед фіналізацією: користувачі повинні чекати завершення періоду, перш ніж, скажімо, вивести активи назад на L1. До того ж, економія ресурсів може зійти нанівець, якщо транзакції все ж доведеться перевіряти (в разі частих спроб шахрайства).

zk-rollup вирішує ці проблеми радикально: замість довіри і спростувань, він одразу генерує криптографічний доказ коректності для кожного пакету транзакцій. Спеціальний смартконтракт на L1 перевіряє цей доказ і тим самим гарантує, що всі включені операції дійсно виконані правильно. Ніяких «періодів оскарження» не потрібно — дані фіналізуються практично миттєво. К

zk-rollup має безпекову перевагу: валідність транзакцій не залежить від добросовісності учасників, її забезпечує математика. Основний недолік раніше полягав у складності реалізації такого ролапу.

Якщо оптимістичні рішення (Arbitrum, Optimism) технологічно близькі до Ethereum, то для ZK доводилося створювати нові криптопримітиви і писати транзакції у вигляді поліноміальних або логічних схем — це обмежувало функціональність перших zk-ролапів. Однак за останні роки з’явилися інструменти, що спростили розробку: універсальні докази (PLONK, STARK) та мови програмування для ZKP (Circom, Noir, Cairo).

Переваги ZKP

  • Конфіденційність даних. ZKP дозволяють користувачам зберігати приватність навіть у публічному середовищі блокчейну. Чутлива інформація (особисті дані, суми транзакцій тощо) не розкривається всім учасникам мережі, але при цьому її достовірність підтверджується. Це підвищує приватність у криптовалютах і будь-яких відкритих мережах.
  • Підвищена безпека та нові можливості автентифікації. Завдяки нульовому розголошенню можна замінити застарілі або небезпечні способи перевірки (паролі, ручну верифікацію документів) на криптографічні протоколи. Це знижує ризики витоку даних і атак на користувачів. У світі блокчейну ZKP уже застосовуються для децентралізованої ідентифікації (DID) та перевірки прав без розкриття — що сприяє безпеці і сумісності з вимогами регуляторів.
  • Масштабованість і ефективність. Завдяки наданню інформації у вигляді стислих доказів, ZKP дозволяють значно зменшити обсяг даних, що зберігаються і передаються в блокчейні. Це веде до зростання пропускної здатності і зниження комісій, адже мережі перевіряють лише доказ замість кожної транзакції. Складні обчислення можна виконати поза ланцюгом, а на ланцюг винести лише «доказ правильного результату».

Виклики ZKP

  • Високі вимоги до ресурсів. Генерування zero-knowledge доказів — складне завдання. Воно потребує значних потужностей CPU/GPU і часу, особливо для великих обсягів даних. Хоча перевірка доказу швидка, побудова його може бути «вузьким місцем». Наприклад, у Zcash створення однієї транзакції з zk-SNARK спочатку займало десятки секунд. Нові алгоритми оптимізують це, проте ZKP все ще вимогливі до апаратури.
  • Складність розробки і аудитів. Ця технологія базується на складній математиці і новаторському коді. Менше розробників розбираються в ZKP, що збільшує ризик помилок. Недолік у протоколі може мати фатальні наслідки — аж до компрометації всієї системи. Проекти на базі ZKP потребують ретельного аудиту та тестування, що ускладнює і уповільнює розвиток технології.
  • Довірена установка і централізація. Деякі різновиди ZKP (особливо zk-SNARK старого типу) вимагають проведення trusted setup — одноразової генерації та розподілу секретних параметрів. Якщо ця процедура була нечесною або секретний «токсичний» елемент не було знищено, існує шанс зловживання (підробки доказів). Більшість сучасних протоколів уже уникають довіреної установки (наприклад, zk-STARK, Bulletproofs) або проводять її з участю сотень незалежних учасників, але користувачам слід бути поінформованими про цей аспект.
  • Вразливість до квантових обчислень. Більшість нинішніх ZKP побудовані на криптографії еліптичних кривих і дискретного логарифму. Ці задачі добре захищені від зламу класичними комп’ютерами, але квантовий комп’ютер достатньої потужності міг би їх вирішити. Таким чином, колись у майбутньому протоколи типу zk-SNARK можуть стати небезпечними. Алгоритми zk-STARK та деякі інші вважаються квантово-стійкими, однак повної впевненості немає.

Читайте ForkLog UA в соціальних мережах

Знайшли помилку в тексті? Виділіть її та натисніть CTRL+ENTER

Матеріали за темою

Ми використовуємо файли cookie для покращення якості роботи.

Користуючись сайтом, ви погоджуєтесь з Політикою приватності.

OK