Кільцеві підписи: як криптовалюта приховує відправника

· 5 хв читання

Кільцевий підпис дає змогу підписати від імені групи так, що будь-хто може перевірити, що підпис зроблено одним із ключів групи, але ніхто не може сказати, яким саме. У цій статті пояснено, як працюють кільцеві підписи — від статті 2001 року, яка їх запровадила, до образів ключів і CLSAG, — і показано, як Blocknet використовує кільце з 16 учасників, щоб відправник кожного платежу залишався приватним.

Що таке кільцевий підпис?

Коротка відповідь

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

Звичайний цифровий підпис пов’язує повідомлення з одним публічним ключем. Кільцевий підпис пов’язує його з набором публічних ключів, який називають кільцем. Підписанту потрібен лише його власний приватний ключ; інші учасники не дають нічого, крім публічних ключів, які вони вже опублікували. Для сторонньої людини кожен учасник кільця — однаково ймовірний підписант.

Звідки взялися кільцеві підписи?

Рон Рівест, Аді Шамір і Яель Тауман запровадили кільцеві підписи на конференції ASIACRYPT 2001 у статті під назвою «How to Leak a Secret» («Як розкрити таємницю»). Їхній приклад — член уряду, який хоче передати журналісту інформацію так, щоб довести, що вона походить з уряду, але не розкрити, від кого саме. Він підписує своїм ключем плюс публічними ключами інших членів уряду, і журналіст може перевірити підпис, не дізнавшись, хто його написав.

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

Як працює кільцевий підпис?

Сучасні схеми, які використовують у криптовалютах, будують цю петлю з хешів і ключів на еліптичних кривих. Ось ідея простими кроками для кільця з 16 публічних ключів:

  1. Почніть зі свого місця. Підписант вибирає випадкове секретне число й хешує його разом із повідомленням. Цей хеш стає викликом для наступного місця в кільці.
  2. Підробіть відповідь для кожного іншого місця. Для кожного з інших 15 учасників підписант вибирає випадкову відповідь і поєднує її з публічним ключем цього учасника та поточним викликом, щоб обчислити виклик для наступного місця.
  3. Замкніть кільце. Пройшовши все коло, ланцюжок повертається на місце самого підписанта. Лише той, хто має приватний ключ цього місця, може обчислити ту єдину відповідь, з якою ланцюжок прийде точно туди, звідки почався.

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

Як образи ключів запобігають подвійному витрачанню?

Простий кільцевий підпис має одну прогалину, якщо йдеться про гроші: якщо кожне витрачання ховається серед інших виходів, мережа не бачить, що ті самі монети витратили двічі. Зв’язувані кільцеві підписи це виправляють. Джозеф Лю, Віктор Вей і Дункан Вонг описали першу таку схему, LSAG, на конференції ACISP 2004 (ePrint 2004/027). Два підписи, створені тим самим приватним ключем, можна пов’язати один з одним, а підписант і далі ховається в кільці.

Схема CryptoNote 2013 року перетворила це на образ ключа. Для виходу з приватним ключем x і публічним ключем P гаманець обчислює I = x · Hp(P), де Hp хешує публічний ключ у точку на кривій. Підпис доводить, що I належить тому учаснику кільця, який підписав, не вказуючи, котрому. Оскільки образ ключа залежить лише від виходу, що витрачається, повторне витрачання цього виходу завжди дає той самий I. Кожна нода зберігає список уже побачених образів ключів і відхиляє будь-яку транзакцію, яка повторює один із них.

Від MLSAG до CLSAG

Криптовалютам, які також приховують суми, потрібно, щоб кільцевий підпис доводив ще один факт: що прихована сума входу відповідає тому, що витрачає транзакція. Стаття Шена Нетера 2015 року «Ring Signature Confidential Transactions for Monero» (RingCT) зробила це за допомогою MLSAG — кільцевого підпису над двома наборами ключів: одним для володіння й одним для зобов’язань щодо сум.

CLSAG від Брендона Гуделла, Саранга Нетера й Артура Блю (ePrint 2019/654) доводить ті самі два факти компактніше. Monero перейшов з MLSAG на CLSAG в оновленні жовтня 2020 року. Документація Monero повідомляє про приблизно на 20% швидшу перевірку і про те, що типова транзакція з двома входами й двома виходами зменшилася приблизно з 2,5 kB до 1,9 kB.

Що означає розмір кільця для приватності?

Коротка відповідь

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

Підставні входи — це реальні виходи з ланцюга, тож кожен із них справді міг би бути монетою, яку витрачають. Якби розмір кілець міг змінюватися, гаманець, що вибрав незвичний розмір, позначав би власні транзакції. Monero збільшив розмір кільця з 11 до 16 в оновленні серпня 2022 року, а Blocknet за правилами консенсусу використовує 16 для кожного входу.

Як Blocknet використовує кільцеві підписи

Кожен вхід Blocknet підписується за допомогою CLSAG і RingCT над кільцем рівно з 16 виходів. Правила забезпечує консенсус, тож жоден гаманець не може від них відмовитися:

Формат транзакцій не має прозорого режиму, тож кожен платіж у ланцюзі містить такі кільця. Кільцеві підписи приховують відправника; одноразові стелс-адреси приховують одержувача, а зобов’язання Педерсена з Bulletproofs приховують суму. Стаття як Blocknet зберігає платежі приватними розбирає кожен із цих шарів і те, що вони означають, коли ви комусь платите.

Що буде далі з оновленням Faraday

Blocknet планує мережеве оновлення Faraday, активація якого запланована приблизно на 2027-02-16 за даними blocknetcrypto.com. Словами сайту: «Сьогодні витрачання ховається серед 16 виходів. Після Faraday воно ховатиметься серед усіх виходів у ланцюзі». Faraday також принесе нові докази витрачання, які сайт описує як «створені так, щоб квантовий комп’ютер не міг підробити витрачання». Розробка, тестування й перевірка на стійкість до атак тривають, а дати заплановані, а не остаточні.

Отримайте BNT, щоб надсилати приватно

Простий спосіб отримати монети, які використовують ці кільця, — намайнити їх. Майнер seine безкоштовний, з відкритим кодом і сам підлаштовується під ваш комп’ютер, а bntpool.com — його пул за замовчуванням, тож майнити можна почати за кілька хвилин. Посібник з майнінгу описує налаштування, а майнити можна прямо на свою адресу або ім’я Blocknet ID.

Поширені запитання

Чим кільцевий підпис відрізняється від групового?

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

Що таке образ ключа в кільцевому підписі?

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

Що таке CLSAG?

CLSAG — це схема зв'язуваного кільцевого підпису, описана Брендоном Гуделлом, Сарангом Нетером і Артуром Блю у 2019 році. Вона доводить, що підписант володіє одним виходом у кільці і що суми збалансовані, а образ ключа запобігає подвійному витрачанню. Monero впровадив її в жовтні 2020 року, а Blocknet підписує кожен вхід за допомогою CLSAG і RingCT.

Який розмір кільця використовує Blocknet?

Blocknet використовує кільце рівно з 16 учасників для кожного входу: справжній вихід плюс 15 підставних, кожен із яких є реальним виходом, що вже є в ланцюзі. Консенсус відхиляє будь-який інший розмір. Оскільки кожен вхід має однаковий розмір кільця, розмір ніколи не може виділити транзакцію, а справжній вихід стоїть у випадковій позиції в кільці.

Чи приховують кільцеві підписи суму платежу?

Ні. Кільцевий підпис приховує, який вихід здійснив оплату. Суми приховує окремий шар: зобов'язання Педерсена, які фіксують число, не показуючи його, і докази діапазону Bulletproofs, які доводять, що кожна сума коректна. Blocknet використовує все це разом у кожній транзакції, а також одноразові стелс-адреси, які приховують одержувача.