Як я зробив взаємний підпис договорів між двома телефонами без сервера, без інтернету і без центру сертифікації
Технічний розбір ядра Pakto: як двоє телефонів взаємно підписують договір повністю офлайн — без сервера, без інтернету й без центру сертифікації, коли єдиний канал зв'язку між пристроями — це екран і камера.
Про статтю
Уся сучасна інфраструктура електронного підпису тримається на припущенні, якого ми зазвичай не помічаємо: у момент підписання є зв'язок. Я поставив інше питання — а що, якщо мережі немає в принципі? Двоє людей стоять поруч із телефонами і мають підписати документ так, щоб через рік третя сторона могла перевірити обидва підписи й переконатися, що кожен ключ живе у справжньому апаратному модулі. Єдиний канал зв'язку між пристроями — екран і камера.
Перша проблема — циклічна залежність: фінальний документ містить особу й підпис другої сторони, яких ще не існує в момент, коли підписує перша. Розв'язую її двоетапним геш-якорем: перша сторона фіксує зміст ще до того, як відома друга (h₁), а особа другої прив'язується згодом як детермінована функція від першого якоря (h₂) — не руйнуючи перший підпис. Практичний виграш: обмін згортається з трьох раундів до двох QR-переходів, а зчеплення підписів (у повідомленні Б лежать і ключ, і підпис А) робить підпис Б невіддільним від конкретного підпису А. Цю нероз'ємність я зводжу до EUF-CMA-стійкості схеми підпису.
Друга проблема — довіра до ключа без центру сертифікації. Замість сертифікатного ланцюга — транспортована апаратна атестація: ключ ECDSA P-256 генерується всередині Secure Enclave / StrongBox і ніколи його не покидає, а повний токен атестації їде оптичним каналом через безрейтовий (fountain) код; у підписаний якір входить лише його геш із контекстним префіксом. У статті також формально доводяться ін'єктивність канонічного кодування та стійкість до підміни полів після підписання, і розбираються практичні пастки — HIGH-S підписи Apple, строгий DER, перевірка точки на кривій, паритет двох незалежних реалізацій.
Наприкінці — чесні межі: без CA довіра не зникає, а переноситься на кореневий сертифікат виробника заліза; атестація підтверджує пристрій, а не людину; поза моделлю загроз лишаються примус і malware з повним контролем над рутованим пристроєм; зовнішнього аудиту ще не було. Паралельно готується препринт для ePrint (IACR) із повним формальним аналізом трьох властивостей.