1. Вступ

Konstruct — месенджер з наскрізним шифруванням, побудований на Signal Protocol і зорієнтований на приватність. Ця політика пояснює, які саме дані ми збираємо, навіщо, і чого ми не збираємо. Konstruct із самого початку спроєктовано так, щоб даних про вас у нас було якомога менше.

Основний принцип: ми збираємо абсолютний мінімум даних, потрібний для маршрутизації зашифрованих повідомлень. Вміст ваших повідомлень зашифровано наскрізним шифруванням — наші сервери не можуть його прочитати, і ми не намагаємося.

2. Які дані ми збираємо

2.1 Ідентифікатор облікового запису

Konstruct не вимагає номера телефону, адреси електронної пошти, пароля чи справжнього імені.

Для створення облікового запису та використання Konstruct не потрібна жодна інформація, що дозволяє вас ідентифікувати.

2.2 Набір криптографічних ключів

Щоб працював обмін ключами Signal Protocol, ваш пристрій генерує й завантажує на сервер такі публічні ключі. Відповідні приватні ключі ніколи не залишають пристрій і зберігаються в захищеному сховищі ключів платформи (iOS Keychain, Android Keystore).

Ключ Тип Зберігається на сервері Призначення
Identity Public Key X25519 (довгостроковий) Так, постійно Автентифікує ваш пристрій; використовується в хендшейку X3DH
Signed PreKey X25519 (середньостроковий) Так, періодично ротується Використовується в узгодженні ключів X3DH
Одноразові передключі (OTPK) X25519 (ефемерний) Так, до використання Витрачаються по одному на сесію заради досконалої прямої секретності
Приватні ключі — Ніколи Усі приватні ключі залишаються лише на вашому пристрої

Сервер відстежує, скільки одноразових передключів лишилося, і просить пристрій поповнити запас, коли їх стає мало. Після того як OTPK використано для встановлення сесії, його безповоротно видаляють з сервера.

2.3 Черга невідправлених повідомлень

Коли ви надсилаєте повідомлення, воно шифрується на вашому пристрої до передавання. Сервер тримає зашифроване повідомлення в поштовій скриньці отримувача. Він не видаляє повідомлення через те, що пристрій повідомив про отримання: скриньки чистяться лише за строком зберігання — у кожної є межа обсягу, і все старше приблизно 7 днів видаляється. Тому вже доставлене повідомлення може лишатися на нашому сервері — зашифрованим і нечитним для нас — до приблизно 7 днів.

Що зберігається в поштовій скриньці (до спливу строку):

Якщо ваш пристрій офлайн, повідомлення чекають у поштовій скриньці до наступного підключення. Повідомлення, не забране приблизно за 7 днів, видаляється непрочитаним.

Стелс — захист відправника (sealed sender): завжди ввімкнений для відповідного користувацького трафіку (повідомлення, квитанції, сигналінг дзвінків тощо; кілька службових шляхів виключено за задумом). Ваш пристрій прибирає User ID відправника з конверта й запечатує підписаний сертифікат відправника на ключ ідентичності отримувача — дізнатися, хто написав, може лише отримувач, сервер не може. Разом із запечатаними відправленнями можуть іти анонімні токени Privacy Pass для захисту від спаму; серверна перевірка токенів ще розгортається. Захист відправника не приховує від мережевого рівня ні час надсилання, ні розмір, ні вашу IP-адресу.

2.4 Зв’язки з контактами

Коли ви додаєте контакт (за QR-кодом або посиланням-запрошенням), сервер зберігає запис про цей зв’язок, щоб визначати маршрутизацію повідомлень і підписку на потік. Це дає змогу Konstruct повідомляти вам, що знайомий контакт з’явився в мережі, і підписувати вас на потік його повідомлень. Запис затемнено: обидві сторони зберігаються як ключований хеш (HMAC-SHA256) від ідентифікатора облікового запису, а не самі ідентифікатори, тому витік бази не дає читабельного соціального графа. Варто сказати точно, чого це вартує: ключ належить серверу, тож захист тут від витоку, а не від нас.

2.5 Токени push-сповіщень

На iOS, щоб доставляти сповіщення про повідомлення в реальному часі, коли застосунок у фоні (на Android push-сервісів немає — застосунок тримає власне з’єднання):

2.6 Автентифікація сесії

2.7 Аудіо- та відеодзвінки

Аудіо- та відеодзвінки захищені наскрізним шифруванням. Встановлення дзвінка — опис сесії WebRTC (SDP) і кандидати зв’язності ICE — передається тим самим наскрізно зашифрованим шляхом, що й листування, тому наші сервери не можуть його прочитати. Звук і відео дзвінка використовують DTLS-SRTP із WebRTC; оскільки ключі шифрування медіа обмінюються й автентифікуються всередині цього наскрізно зашифрованого сигналінгу, медіа зашифровано наскрізно між двома пристроями — ні наші сервери, ні ретранслятори, якими ми користуємося, не можуть його розшифрувати. Наш сервер знає, чи починається дзвінок як аудіо- чи як відеодзвінок, — щоб телефон отримувача показав дзвінок потрібного виду; увімкнення й вимкнення камери під час дзвінка йому не передається. Ретранслятор може відрізнити відео від голосу за обсягом зашифрованого трафіку, який пересилає.

Щоб з’єднати дзвінок, пристрої обмінюються кандидатними мережевими адресами (стандартний ICE з WebRTC) у пошуках прямого шляху. Коли пряме з’єднання неможливе, зашифроване медіа ретранслюється через TURN-сервер: ретранслятор пересилає лише зашифроване медіа, яке не може прочитати, але бачить мережеві адреси учасників. Ці метадані з’єднання потрібні для маршрутизації дзвінка й не пов’язуються з вмістом повідомлень. На iOS вхідні дзвінки будять застосунок через токен PushKit VoIP із розділу 2.5; сам push не містить вмісту дзвінка. На Android дзвінок надходить власним з’єднанням застосунку, без push. TURN-сервер працює в Нідерландах.

2.8 Медіавкладення

Коли ви надсилаєте фото, відео, файл або голосове повідомлення, вкладення стискається й шифрується на вашому пристрої (AES-256-GCM на свіжому ключі для кожного файлу) до завантаження. Ключ розшифрування їде лише всередині наскрізно зашифрованого повідомлення отримувачу — він ніколи не передається медіасерверу й не зберігається в нього. Сервер зберігає лише непрозорий зашифрований блоб із випадковим media ID і не може прочитати його вміст.

Зашифровані медіаоб’єкти автоматично видаляються приблизно через 7 днів після завантаження (незалежно від того, завантажили їх чи ні); пристрій отримувача забирає й розшифровує їх у цьому вікні. Ми не зберігаємо медіа у відкритому вигляді; про кожен об’єкт сервер знає лише сам зашифрований блоб, його ідентифікатор, клас розміру після доповнення, хеш шифротексту та час завантаження і видалення.

2.9 Чого ми НЕ збираємо

Наведене нижче явно не збирається й не зберігається:

2.10 IP-адреси та метадані з’єднання

Підключення до будь-якого онлайн-сервісу відкриває вашу IP-адресу його серверам на мережевому рівні — це неминуче, і Konstruct не виняток. Проте ми не записуємо вашу сиру IP-адресу до наших баз даних. Для обмежень під час реєстрації пристроїв і завдань proof-of-work ми використовуємо лише односторонній хеш із сіллю від адреси. Щоб обмежувати частоту надсилання повідомлень і запитів ключів, сервер ненадовго тримає саму адресу (для IPv6 — її мережу /64) у лічильнику в оперативній пам’яті, який спливає приблизно за хвилину. Відповідності «IP — обліковий запис» ми не зберігаємо.

Ми не використовуємо вашу адресу та її хеш-мітку, щоб будувати поведінкові профілі, пов’язувати їх із вмістом ваших повідомлень чи передавати для реклами. Але хеш із сіллю знижує розкриття, а не анонімізує досконало — простір адрес IPv4 невеликий, і сторона, що володіє секретною сіллю, все ще може перевіряти кандидатів. Він прибирає сиру адресу з усього, що ми зберігаємо; це не гарантія, що мережеве походження з’єднання ніколи не буде визначене нашою інфраструктурою.

Якщо ви хочете взагалі прибрати свою мережеву адресу зі шляху, увімкніть захист від блокувань у налаштуваннях (Censorship protection) або скористайтеся VPN чи Tor — хоча точка, що термінує ваше з’єднання, усе одно бачить його видиму адресу джерела.

3. Захист від аналізу трафіку

Konstruct застосовує доповнення і, на iOS, випадковий джитер часу надсилання, щоб мережевому спостерігачеві — і нашому серверу — було складніше зрозуміти, що ви надсилаєте, за розміром або точним часом. Повідомлення доповнюються до порцій фіксованого розміру. Вкладення (фото, відео, голосові, файли, фото профілю) доповнюються до класів розміру: сервер зберігає діапазон розміру, а не точний розмір файлу — файл збільшується не більше ніж на 12 %, зазвичай приблизно на 3 % (найменші файли доповнюються до 4 КБ), — і не отримує тип файлу. Ці заходи ввімкнені за замовчуванням і не потребують налаштування.

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

Окремо, захист від блокувань (Censorship protection) — це шар обфускації на мережевому рівні, який допомагає вашому з’єднанню зливатися зі звичайним HTTPS-трафіком, коли прямий TLS блокують. Це механізм обходу цензури, а не приховування метаданих: сам по собі він не заважає спостерігачеві, який уже бачить ваше з’єднання, виводити час і розмір повідомлень.

4. Захист від спаму: Proof of Work

Щоб запобігати спаму без номера телефону чи пошти, Konstruct вимагає від вашого пристрою виконати невеликі обчислення Proof of Work під час реєстрації, а також під час надсилання, якщо перевищено ліміт частоти. Це обчислення на стороні клієнта: для чесного використання його ціна нехтовно мала, а масовий спам стає обчислювально дорогим. Жодні персональні дані при цьому не задіяні.

5. Як ми використовуємо ваші дані

Дані Призначення
User ID Автентифікація вашого пристрою та маршрутизація повідомлень
Набір публічних ключів Уможливлення обміну ключами наскрізного шифрування Signal Protocol
Черга невідправлених повідомлень Зберігання зашифрованих повідомлень до доставки
Зв’язки з контактами Маршрутизація повідомлень і підписки на потоки
Токен APNs Доставка фонових push-сповіщень
Токен PushKit VoIP Пробудження застосунку під час вхідних запрошень на дзвінок
Токен сесії Автентифікація gRPC-з’єднання

Ми не використовуємо зібрані дані для реклами, профілювання, аналітики чи будь-яких цілей поза роботою сервісу обміну повідомленнями.

6. Зберігання даних і безпека

6.1 Інфраструктура

6.2 Шифрування

6.3 Що зберігається на вашому пристрої

Ваш пристрій зберігає повну історію повідомлень локально в сховищі, захищеному операційною системою (захист даних iOS; на Android — ізольоване сховище застосунку, ключі — в Android Keystore). Сюди входять:

Ці дані під вашим контролем. Видалення застосунку безповоротно стирає всі локальні дані.

6.4 Строки зберігання

Тип даних Зберігання
Невідправлені повідомлення Видаляються за строком зберігання: ліміт обсягу скриньки та не довше ~7 днів — а не під час доставки
Медіавкладення (зашифровані) Автовидалення приблизно через 7 днів після завантаження (за віком об’єкта, незалежно від завантаження отримувачем)
Одноразові передключі Видаляються із сервера після використання
Токени сесій Токен доступу — 24 години, токен оновлення — 90 днів; відкликаються під час виходу або видалення облікового запису
Токен APNs Зберігається до видалення облікового запису або оновлення токена
Токен PushKit VoIP Зберігається до видалення облікового запису або оновлення токена
Хеш імені користувача та User ID Зберігаються до видалення облікового запису
Signed PreKey Замінюється під час ротації, старий ключ видаляється
Зв’язки з контактами Наразі не видаляються ні під час видалення контакту, ні під час видалення облікового запису (знеособлені записи, див. 8.3)

7. Передавання даних і треті сторони

Ми не продаємо й не здаємо в оренду ваші дані та не передаємо їх для реклами, профілювання чи будь-яких цілей, не пов’язаних із роботою сервісу. Для самої роботи потрібні постачальники, перелічені нижче; кожен отримує мінімум, необхідний для свого завдання, і жоден не отримує вмісту повідомлень.

7.1 Постачальники інфраструктури

7.2 Дотримання законодавства

Ми можемо бути зобов’язані розкрити дані за дійсним законним приписом компетентного органу. Проте:

8. Ваші права

8.1 Анонімне використання

Ви можете користуватися Konstruct, не повідомляючи жодної інформації, що дозволяє вас ідентифікувати. Ваш User ID — випадковий UUID, який видає сервер; у ньому не закодовано нічого про вас.

8.2 Доступ до ваших даних

Ви можете будь-коли запросити копію будь-яких метаданих, пов’язаних із вашим обліковим записом, написавши нам за адресою нижче.

8.3 Видалення облікового запису

Ви можете видалити обліковий запис у налаштуваннях застосунку (Settings). Під час видалення:

Повідомлення, раніше доставлені отримувачам, зберігаються лише локально на їхніх пристроях і після доставки перебувають поза нашим контролем.

8.4 Ім’я користувача

Ви можете додати, змінити або видалити ім’я користувача будь-коли в налаштуваннях облікового запису.

9. Мінімальний вік

Konstruct призначений для користувачів віком від 16 років, що відповідає віковому рейтингу 16+ в App Store. Він не адресований і не призначений особам молодше 16 років, і ми свідомо не збираємо дані про таких осіб. Оскільки Konstruct зберігає лише мінімальні маршрутні метадані, описані вище, і не зберігає вмісту повідомлень, дані, пов’язані з будь-яким обліковим записом, обмежені самим задумом. Якщо ви вважаєте, що Konstruct користується хтось молодший за 16 років, зв’яжіться з нами (розділ 12), і ми вживемо заходів.

10. Хто відповідає за ваші дані

Konstruct — незалежний проєкт, а не компанія. Контролер даних за GDPR — Максим Єлісеєв, супровідник проєкту; адресу вказано в розділі 12. Konstruct недостатньо великий, щоб вимагати Data Protection Officer, і такого не призначено: запити за розділом 8 надходять на ту саму адресу, і відповідає на них та сама особа. Якщо це зміниться — з’явиться юридична особа або відповідальність перейде до когось іншого, — зміниться й цей розділ, а про зміну ми повідомимо так, як описано в розділі 11.

11. Зміни до цієї політики

Ми повідомимо користувачів про суттєві зміни через:

Продовження використання Konstruct після змін означає прийняття оновленої політики.

12. Контакти

З питань приватності, запитів на доступ до даних та будь-яких сумнівів:

Коротко

Не потрібні ні номер телефону, ні пошта Наскрізне шифрування (Signal Protocol)
Повністю анонімне використання підтримується Повідомлення зберігаються лише зашифрованими й видаляються за строком (до ~7 днів)
Ні трекінгу, ні аналітичних SDK Обфускація трафіку вбудована
Приватні ключі ніколи не залишають пристрій Лише мінімальні метадані
Жодного продажу даних третім сторонам Юрисдикція GDPR (ЄС: сервер у Нідерландах, копії в Німеччині)