Впровадження оригіналу фото в контракт та анатомія «самодоказуваного» PDF в застосунку для підпису договорів
Продовження про Pakto: як фотографія перетворюється на запечатаний доказ усередині самого PDF — з водяним знаком, випаленим у пікселі, ланцюгом хешів під апаратним підписом і повним оригіналом, зашитим у файл, який кожен перевіряє офлайн, без сервера й без автора.
Про статтю
Спершу — чесна межа, бо саме її люблять перевіряти в коментарях. Питання «а це фото справжнє чи його підсунули з рутованого телефона?» — не те, на яке я відповідаю криптографічно: без довіреного апаратного каналу камери жодна програма на це чесно не відповість. Питання, на яке Pakto відповідає повністю: це фото, прив'язане до цього договору, часу й підписантів, після підписання не змінювалося — і весь оригінал доказу лежить усередині одного PDF, який перевіряється без мене.
Ще до PDF кадр несе в собі доказ: водяний знак (PAKTO, час у UTC) випалюється прямо в пікселі, рахується SHA-256 саме цих байтів і окремий відбиток пристрою й сесії, а перед спуском працює liveness-евристика — чесно кажучи, фільтр вартості проти дешевої атаки «піднести чужий екран», а не криптодоказ реальності зйомки.
Ядро статті — самодостатній PDF. Фото видно на сторінці разом із його SHA-256, а в кінець файлу дописується прихований блок START_TMARK_JSON…END_TMARK_JSON із повним оригіналом: поля договору, обидва публічні ключі, обидва підписи, усі хеші й самі фотографії в base64. Один файл одночасно є людиночитаним документом і машинним контейнером доказу — нічого не треба встановлювати, і він перевіряється офлайн без сервера, без автора й без вихідних вкладень. Блок дописано в хвіст (а не через штатний PDF-attachment) заради стійкості до переекспорту, а криптографічним якорем є зміст і хеші фото, а не байти PDF, — тому файл можна перегенерувати будь-коли, а будь-яка зміна вкладеного фото ламає підпис.
Наприкінці — чому саме PDF, а не QR (фото фізично не влазить у ~5 КБ/с оптичного каналу) і чому оригінал мусить доїхати до підписанта до підпису, а не після: сторона Б підписує рівно те, що бачила на власні очі. Окремо описаний односторонній режим фіксації факту без другої сторони — і ще раз чесно окреслені межі: liveness не є гарантією, а рутований пристрій лишається поза моделлю загроз.