Безпека і шифрування
Приватність у WallyMates — не один перемикач у налаштуваннях, а кілька незалежних рівнів захисту, кожен для своєї загрози: перехоплення на сервері, крадіжка телефону, MITM-атака під час дзвінка, синхронізація з веб-версією.
Наскрізне шифрування один на один — Static X3DH
Особисті чати шифруються власною реалізацією Static X3DH (потрійний Diffie-Hellman обмін на основі ідентифікаційного ключа, підписаного pre-key і ефемерного ключа — спрощена, «SESAME-lite» схема багатопристрійних сесій за мотивами підходу Signal) з AES-256-GCM. Ключ шифрування виводиться окремо для кожної пари пристроїв — без ланцюга Double Ratchet і без одноразових pre-key, простіша модель, ніж класичний Signal-протокол, але сервер так само ніколи не бачить вміст і не отримує жодного з ключів.
- Приватний ключ лишається на пристрої — Довгостроковий ідентифікаційний ключ генерується локально і зберігається в захищеному апаратному сховищі (Android Keystore) — витягти його програмно неможливо навіть з root-доступом.
- Сервер не бачить вміст — Через сервер проходить лише зашифрований блок даних — розшифрувати конкретне повідомлення може тільки той пристрій, для якого воно зашифроване.
- Окремий ключ для кожної пари пристроїв — Ключ виводиться незалежно для кожної пари «ваш пристрій ↔ пристрій співрозмовника» — компрометація одного пристрою не розкриває листування з усіх інших пристроїв одразу.
- Синхронізація між власними пристроями — Надіслане повідомлення додатково шифрується окремо для кожного з ваших інших пристроїв (Android, Windows, веб) — так воно з’являється в історії скрізь, де ви увійшли, без передачі ключів через сервер у відкритому вигляді.
- Секретні чати — Окремий режим листування з таймером самознищення повідомлень — після спливання часу повідомлення видаляється з обох пристроїв назавжди.
Наскрізне шифрування в групах — Sender Key
Групове листування не можна ефективно шифрувати так само, як один-на-один — довелося б окремо шифрувати кожне повідомлення для кожного учасника. Замість цього WallyMates використовує схему Sender Key (v5): кожен учасник генерує власний ключ AES-256 для конкретної групи і поширює його іншим учасникам, зашифрувавши персонально через той самий наскрізно зашифрований канал, що й звичайні особисті повідомлення, — сервер бачить лише зашифровані блоки, не сам ключ. Самі повідомлення в групі після цього шифруються швидким AES-256-GCM цим спільним ключем — без повторного узгодження ключа на кожне повідомлення. Протокол бітово сумісний між Android і Windows — одна й та сама схема поширення й шифрування ключів на обох платформах.
Перевірка дзвінків — захист від MITM
Голос і відео в дзвінку захищені окремо (див. розділ «Дзвінки»), але лишається питання: як пересвідчитись, що дзвоните саме тій людині, а не комусь, хто підмінив з’єднання? Під час дзвінка застосунок показує «відбиток дзвінка» — послідовність з 96 емодзі, обчислену з довгострокових ідентифікаційних ключів обох співрозмовників. Якщо порівняти цю послідовність уголос і вона збігається — підміна виключена: зловмиснику знадобився б приватний ключ співрозмовника, якого немає навіть у сервера. Це та сама ідея, що «код безпеки» в Signal чи WhatsApp, і алгоритм ідентичний на Android і Windows.
Синхронізація з веб-версією
Веб-мессенджер (web.worldmates.club) — окремий випадок: щоб показати історію листування в браузері, повідомлення додатково перешифровуються ключем Web Sync (AES-128) і зберігаються в базі даних у зашифрованому вигляді. Це свідомий компроміс: без нього веб-версія просто не змогла б показувати історію чатів.
Локальне сховище
- Зашифрована база даних — Локальна база на пристрої (кеш повідомлень, чернетки, вкладення) захищена SQLCipher — AES-256-шифрування «на диску», окремо від E2EE самого листування.
- EncryptedSharedPreferences — Сесія користувача та ключі доступу до API зберігаються в системному захищеному сховищі Android, а не у звичайних налаштуваннях застосунку.
- Перевірка цілісності застосунку — При запуску застосунок звіряє власний цифровий підпис (SHA-256 сертифіката) — модифікована чи підроблена збірка APK просто відмовиться працювати.
Захист акаунта
- Двофакторна автентифікація — Додатковий код при вході з нового пристрою — навіть якщо пароль скомпрометовано, увійти в акаунт без другого фактора не вийде.
- Біометричний вхід — Розблокування застосунку за відбитком пальця або обличчям, без введення пароля щоразу.
- Керування сесіями — Список усіх пристроїв, де виконано вхід, з можливістю миттєво завершити будь-яку сесію віддалено.
- Резервна копія ключів — Опційний зашифрований бекап ключів шифрування — дозволяє відновити доступ до листування при втраті пристрою, без передачі самих ключів на сервер у відкритому вигляді.