Як перевірити слово людини,
не вірячи ні їй, ні нам?
Оля дякує Тарасу. Через рік Тарас показує цю подяку в кав'ярні, на сайті чи в закритому клубі — і там мають переконатися, що вона справжня. Без дзвінка Олі, без нашого сервера, без блокчейну. Ось як це зроблено. Дещо можна спробувати руками просто тут.
1Підпис: слово, яке не можна підмінити
У кожного в DzenQ є пара ключів. Приватний живе тільки на його телефоні й ставить підпис. Публічний знає кожен — і ним цей підпис перевіряє. Змінити в підписаному тексті хоч букву — і перевірка не пройде.
…Змініть будь-що в тексті — підпис перестане сходитися. Поверніть як було — знову ✓.
2Журнал ключа: історія, яку не переписати
Підпис доводить «це підписав цей ключ». Але ключі міняються, губляться, крадуться. Тому до кожної людини прив'язаний журнал ключа: від народження, через кожну зміну ключа, до позначок про видані подяки. Кожен запис несе відбиток попереднього — як ланцюг, де кожна ланка тримає наступну.
Ідентифікатор людини теж не видає ніхто — ні ми, ні держава, ні Google. Він виводиться з першого запису журналу і тому сам себе засвідчує. Це протокол KERI: відкритий, його розвиває спільнота WebOfTrust, а специфікацію стандартизує Trust over IP.
3Наступний ключ — у конверті
Найкраща ідея KERI. Уже при народженні журнал фіксує не тільки поточний ключ, а й відбиток наступного. Сам наступний ключ ніде не лежить — він виводиться з 12 слів, які людина зберігає окремо.
Злодій має ключ №1, але не має ключа №2: його відбиток уже в журналі, і підробити його неможливо. Власник з 12 слів переходить на №2 — і з цієї миті все, що підписує ключ №1, недійсне. Крадіжка ключа перестає бути крадіжкою особи.
4Подяка носить свій доказ із собою
Подяка — це документ (ACDC), чий ідентифікатор — відбиток його ж вмісту. До нього додаються підписи й журнал ключа Олі. Цього досить, щоб будь-хто перевірив подяку сам: на своєму телефоні, через рік, навіть без інтернету.
Подяки за день лягають у журнал однією позначкою — коренем дерева Меркла. Тому він не роздувається: 2000 подяк — 12 записів, а одна подяка з усім потрібним для перевірки важить близько 4 КБ.
5А якщо показати різним людям різне?
Підписи не рятують від одного трюку: вести два журнали і показувати Тарасу один, а кав'ярні інший. Для цього в KERI є свідки і спостерігачі — вони тримають копії журналів і звіряють їх.
Спостерігач DzenQ приймає лише події, підписані самою людиною, і відкидає розгалужені журнали. Підробити запис він не може; найгірше, що може, — бути недоступним. Окремі свідки — наступний крок.
6Чому тут не потрібен блокчейн
Блокчейн розв'язує подвійну трату: щоб одну монету не віддали двом. Для цього весь світ мусить знати єдиний порядок усіх платежів. Подяку ж не витрачають — Тарасу байдуже, кому ще Оля дякувала сьогодні. Тож досить порядку в журналі однієї людини, і веде його вона сама. Звідси: без комісій, без майнерів, без публічного реєстру того, хто кому дякував. А захист не слабший, ніж у блокчейні: ті самі підписи й ланцюги відбитків, тож підробити запис чи тихо переписати історію так само неможливо.
7Як перевіряють на вході
Подяка може ще й щось давати. Кав'ярня, клуб чи просто друг видає сертифікат на ___: на каву, на вхід, на зустріч. Він дістається тим, хто має від видавця потрібні подяки, або названим людям. Пред'являють його біля дверей — так у DzenQ називається будь-яке місце, що перевіряє: каса, сайт, бот.
- Двері показують одноразовий код.
- Застосунок Тараса питає його згоди й підписує цей код разом із сертифікатом і подяками, на яких він тримається.
- Двері перевіряють усе самі: підписи, журнали, кому адресовано, правило сертифіката, термін.
- «Дійсний ✓» — і код згорає. Скопійований доказ удруге не спрацює.
Застосунку Тараса вірити не треба: змінений застосунок обдурить лише власника. Вирішують двері. Для сайтів це звичайний OpenID Connect — «Увійти з DzenQ» підключається будь-якою стандартною бібліотекою.
8Що бачимо ми
Бачимо
- публічні журнали ключів — щоб їх можна було перевірити
- що лист прийшов до когось — як листоноша
Не бачимо
- зміст подяк — листи зашифровані для отримувача
- приватних ключів і 12 слів — ніколи
І вирішувати, що справжнє, ми не можемо: це робить математика на пристрої того, хто перевіряє.
9Чесно про межі
- Двері бачать подяки, що дають сертифікат: від кого й за що. Вибіркове розкриття — у планах.
- Спостерігача поки тримаємо ми; окремих свідків немає.
- Як і з будь-яким входом за QR-кодом, шахрайський сайт може показати справжній код чужих дверей: людина підтвердить — і увійде шахрай. Тому перед підписом телефон показує, які саме двері просять вхід.
Криптографію ми не вигадували.
KERI та ACDC — відкриті специфікації. Ядро DzenQ на Rust — той самий код підписує й перевіряє на телефоні, комп'ютері, у браузері й на дверях. Наша частина — покласти цю серйозну техніку в найпростіше, що є між людьми: у «дякую». І зробити так, щоб воно пережило навіть нас.