Blind Signature, або сліпий підпис, — криптографічна процедура: заявник приховує повідомлення від підписувача, отримує підпис прихованої форми, а потім знімає приховування. Залишається придатний підпис початкового повідомлення. Девід Чаум застосував цю ідею до електронної готівки. У коректному протоколі підписувач не може зіставити пізніший токен із його видачею за обміном даними під час підписання. Час, сума та мережева адреса при цьому автоматично не зникають.
За звичайного підтвердження емітент може записати номер ваучера разом з одержувачем. Коли магазин поверне ваучер, записи легко пов’язати. Чаум пояснював сліпий підпис конвертом із копіювальним папером: печатка зовні переноситься на аркуш усередині, номера якого емітент не бачить. Вийнятий аркуш має чинне підтвердження. Це наочна аналогія, а не безпечна інструкція з папером і печаткою. Справжній протокол використовує числа й математику, щоб забезпечити таке розділення між комп’ютерами. [7] [1]
Анна хоче цифровий ваучер на 100 sats. Sats — дрібні одиниці Bitcoin. Гаманець — застосунок для зберігання цих ваучерів і розрахунків ними — генерує непередбачуване секретне значення, яке відрізнятиме ваучер, і математично приховує його іншим випадковим значенням. Це називають засліпленням. Емітент отримує приховане повідомлення, а не початковий секрет. Гаманець зберігає дані, потрібні для подальшого зняття приховування. Перейменування файла чи вилучення імені недостатньо: засліплення має відповідати чітким криптографічним вимогам. Для наочності тут використано один ваучер; справжній гаманець може складати потрібну суму з кількох ваучерів різних номіналів. [8] [2]
Сліпий підпис не означає безкоштовного підписання будь-чого будь-кому. Емітент може спочатку перевірити платіж Анни або списати відповідний залишок. Він знає запитану суму 100 sats, але не мусить знати прихований номер ваучера. Ключ підпису — це секретне числове значення, за допомогою якого програма емітента створює підписи. Суму можна прив’язати до окремого ключа підпису для цього номіналу; зміна цифри у файлі не створить дорожчий ваучер. Емітент підписує приховані дані й повертає результат. Так відокремлюються право Анни отримати ваучер і спосіб розпізнати саме цей ваучер згодом. [7] [8]
Анні не потрібно розкривати початковий секрет емітенту. Гаманець сам прибирає випадкове приховування з отриманого результату. Цей крок називають unblinding. Правильно побудована процедура залишає чинне підтвердження початкового повідомлення, не передаючи гаманцю приватного ключа підпису емітента. Користувач бачить нову суму, а математична обгортка створюється й знімається у фоновому режимі. Такий цифровий документ часто називають токеном. Це не окремий біткоїн у блокчейні (спільному реєстрі біткоїн-транзакцій), а вимога до його емітента. [2] [8]
Перевірка з’ясовує, чи відповідає підтвердження повідомленню та правильному ключу емітента. Для сліпих підписів на основі криптосистеми RSA достатньо публічного ключа; інші конструкції можуть потребувати додаткового доказу або участі емітента. Це не доводить, що ваучер ще не витрачений, що його ніхто не скопіював або що емітент має достатні резерви. Це три окремі питання. Як справжній, але вже використаний квиток не дає другого входу, так і криптографічно чинний документ може бути непридатним для наступної оплати. [2] [10]
Анна надсилає ваучер Петрові. Оскільки це дані, вона може зберегти ідентичну копію. Сліпий підпис не видаляє файлів із її пристрою. У звичайній онлайн-системі гаманець одержувача тому подає токен емітенту, який перевіряє справжність токена й з’ясовує, чи не витрачено токен із тим самим секретом раніше. Прийнявши токен, він позначає його використаним і може видати Петрові новий токен за тією самою процедурою сліпого підписання. Нового секрету Петра Анна не знає. Система відхилить повторну спробу витратити стару копію. Використання тих самих коштів повторно називають double spend, або подвійною витратою; запобігання їй — інша складова платіжної системи. [9] [8]
Захист потрібен і у зворотному напрямку: клієнт не повинен із дозволених підписань отримувати додаткові чинні документи з новими секретами. Це властивість непідроблюваності. Для сліпих підписів окремо досліджують one-more unforgeability: чи здатен нападник після певної кількості взаємодій отримати ще одну нову чинну пару повідомлення та підпису понад дозволену кількість? Копіювання тієї самої пари — попередня проблема. Криптографія також не замінює серверних перевірок права, сум і дозволеної структури токена. Разом ці перевірки можуть запобігати несанкціонованій емісії. [2] [3]
Емітент може знати, коли Анна отримала токени та на яку суму. Під час погашення він може бачити час, суму або мережеву адресу одержувача. Це метадані — супровідні відомості про платіжний документ. Серед небагатьох користувачів незвична сума чи негайний подальший платіж полегшують встановлення зв’язку. Важливі й спільні перевірені ключі: ключ лише для однієї людини міг би її позначати. Сліпота протоколу захищає конкретний зв’язок між підписом і видачею, а не всі супровідні відомості. Вона не відновить скомпрометований гаманець і не змусить емітента виконати зобов’язання. [7] [2]
Ідея Чаума лежить в основі електронної готівки, історично пов’язаної з DigiCash. У Bitcoin її використовують Cashu та Fedimint, а зв’язки з Lightning Network (мережа для швидких біткоїн-платежів) полегшують внесення та виведення коштів. Їхні конструкції, однак, не є RSA. Базовий Cashu перевіряє токен секретним ключем емітента; NUT-12 додає доказ для перевірки підпису публічними даними, але не доказ того, що токен невитрачений. Fedimint розподіляє керування між групою операторів. В обох випадках користувач має вимогу до емітента й залежить від зберігання ним коштів та його доступності. GNU Taler, наприклад, поєднує приватність покупця з простежуваністю доходів продавця. [5] [6] [10] [4]
Спрощену схему описують кілька рівнянь. Повідомлення безпечно кодують числом m; публічний ключ містить n та e, приватну частину позначають d. Заявник обирає випадкове r з мультиплікативним оберненим r⁻¹ за модулем n і надсилає m′ = m·r^e mod n. Mod n означає обчислення з остачами від ділення на n. Підписувач повертає s′ = (m′)^d mod n, а заявник отримує s = s′·r⁻¹ mod n. Перевірка дає s^e mod n = m. Множник r⁻¹ знімає приховування. Ці співвідношення пояснюють механізм, але не є готовою безпечною програмою. RFC 9474 також визначає підготовку повідомлення, схему RSA-PSS із безпечним кодуванням, перевірки вхідних даних і розділення ключів підпису. Важливі випадковість і правильний варіант протоколу. [2] [3]
Для повної картини прочитайте також David Chaum, Chaumian eCash, DigiCash, Cashu, Fedimint, Приватність у Bitcoin. На цю статтю також посилаються DigiCash, Chaumian eCash, Reusable Proofs of Work, Fedimint.