Під капотом

Як перевірити слово людини,
не вірячи ні їй, ні нам?

Оля дякує Тарасу. Через рік Тарас показує цю подяку в кав'ярні, на сайті чи в закритому клубі — і там мають переконатися, що вона справжня. Без дзвінка Олі, без нашого сервера, без блокчейну. Ось як це зроблено. Дещо можна спробувати руками просто тут.

1Підпис: слово, яке не можна підмінити

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

Спробуйте справжня криптографія, просто в браузері
Підпис Олі…
…

Змініть будь-що в тексті — підпис перестане сходитися. Поверніть як було — знову ✓.

2Журнал ключа: історія, яку не переписати

Підпис доводить «це підписав цей ключ». Але ключі міняються, губляться, крадуться. Тому до кожної людини прив'язаний журнал ключа: від народження, через кожну зміну ключа, до позначок про видані подяки. Кожен запис несе відбиток попереднього — як ланцюг, де кожна ланка тримає наступну.

Спробуйте змініть будь-який запис
…

Ідентифікатор людини теж не видає ніхто — ні ми, ні держава, ні Google. Він виводиться з першого запису журналу і тому сам себе засвідчує. Це протокол KERI: відкритий, його розвиває спільнота WebOfTrust, а специфікацію стандартизує Trust over IP.

3Наступний ключ — у конверті

Найкраща ідея KERI. Уже при народженні журнал фіксує не тільки поточний ключ, а й відбиток наступного. Сам наступний ключ ніде не лежить — він виводиться з 12 слів, які людина зберігає окремо.

Ключ №1на телефоні · підписує
Ключ №2у журналі — лише відбиток
Усе спокійно.

Злодій має ключ №1, але не має ключа №2: його відбиток уже в журналі, і підробити його неможливо. Власник з 12 слів переходить на №2 — і з цієї миті все, що підписує ключ №1, недійсне. Крадіжка ключа перестає бути крадіжкою особи.

4Подяка носить свій доказ із собою

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

Подяки за день лягають у журнал однією позначкою — коренем дерева Меркла. Тому він не роздувається: 2000 подяк — 12 записів, а одна подяка з усім потрібним для перевірки важить близько 4 КБ.

5А якщо показати різним людям різне?

Підписи не рятують від одного трюку: вести два журнали і показувати Тарасу один, а кав'ярні інший. Для цього в KERI є свідки і спостерігачі — вони тримають копії журналів і звіряють їх.

Спостерігач DzenQ приймає лише події, підписані самою людиною, і відкидає розгалужені журнали. Підробити запис він не може; найгірше, що може, — бути недоступним. Окремі свідки — наступний крок.

6Чому тут не потрібен блокчейн

Блокчейн розв'язує подвійну трату: щоб одну монету не віддали двом. Для цього весь світ мусить знати єдиний порядок усіх платежів. Подяку ж не витрачають — Тарасу байдуже, кому ще Оля дякувала сьогодні. Тож досить порядку в журналі однієї людини, і веде його вона сама. Звідси: без комісій, без майнерів, без публічного реєстру того, хто кому дякував. А захист не слабший, ніж у блокчейні: ті самі підписи й ланцюги відбитків, тож підробити запис чи тихо переписати історію так само неможливо.

7Як перевіряють на вході

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

  1. Двері показують одноразовий код.
  2. Застосунок Тараса питає його згоди й підписує цей код разом із сертифікатом і подяками, на яких він тримається.
  3. Двері перевіряють усе самі: підписи, журнали, кому адресовано, правило сертифіката, термін.
  4. «Дійсний ✓» — і код згорає. Скопійований доказ удруге не спрацює.

Застосунку Тараса вірити не треба: змінений застосунок обдурить лише власника. Вирішують двері. Для сайтів це звичайний OpenID Connect — «Увійти з DzenQ» підключається будь-якою стандартною бібліотекою.

8Що бачимо ми

Бачимо

  • публічні журнали ключів — щоб їх можна було перевірити
  • що лист прийшов до когось — як листоноша

Не бачимо

  • зміст подяк — листи зашифровані для отримувача
  • приватних ключів і 12 слів — ніколи

І вирішувати, що справжнє, ми не можемо: це робить математика на пристрої того, хто перевіряє.

9Чесно про межі

Криптографію ми не вигадували.

KERI та ACDC — відкриті специфікації. Ядро DzenQ на Rust — той самий код підписує й перевіряє на телефоні, комп'ютері, у браузері й на дверях. Наша частина — покласти цю серйозну техніку в найпростіше, що є між людьми: у «дякую». І зробити так, щоб воно пережило навіть нас.