Як це працює

Як Crocodile залишає ваші розмови вашими

Огляд архітектури й протоколу простими словами. Кожен розділ починається з ідеї; відкрийте «Під капотом», щоб побачити технічні подробиці.

Розділ 1

Чотири типи учасників

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

Ваш застосунок

Зберігає ваші ключі, шифрує все, що ви надсилаєте, і розшифровує те, що отримуєте. Ваша історія повідомлень живе тут і більше ніде.

Знає: Усе, що ви надсилаєте й отримуєте: це ваше.

Хост

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

Знає: IP-адреси учасників і хто говорить, але ніколи — що саме.

Координаційні сервери

Комутатори, які підтримують волонтери: зберігають профілі й простори, кажуть, хто онлайн, і обирають хостів. Вони об’єднуються в одну мережу.

Знає: Профілі, членство й хто онлайн, але ніколи — що сказано.

Каталог

Телефонна книга координаційних серверів, щоб нові застосунки знали, з чого почати. Про людей він не знає нічого.

Знає: Лише список серверів.

Розділ 2

Ваш обліковий запис — це ключ, а не пароль

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

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

Під капотом
  • Із 32-байтового зерна виходять ключ підпису Ed25519 і ключ шифрування X25519. Ідентифікатор — це перші 26 символів base32(SHA-256(відкритий ключ підпису)).
  • Кожен пристрій публікує підписаний запис пристрою з набором попередніх ключів (X25519 + ML-KEM-768), який змінюється щотижня. Старі секрети попередніх ключів видаляються після пільгового періоду.
  • Номери безпеки дають змогу двом людям порівняти ключі іншим каналом, як і в інших захищених месенджерах.
  • Локальні дані (особистість, попередні ключі, історія) зберігаються зашифрованими ключем, який захищає сховище ключів операційної системи.

Розділ 3

Пошук найшвидшого сервера

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

Перш ніж щось відбудеться, сервер доводить, хто він, а застосунок і сервер узгоджують ключі для цього з’єднання. Відтоді навіть метадані, якими вони обмінюються, зашифровані поверх HTTPS, тож це безпечно працює і на домашньому сервері.

Під капотом
  • Каталог містить кожен сервер, підписаний цим самим сервером, з прихованою адресою. Застосунки перевіряють підпис, перш ніж скористатися записом.
  • Підписане привітання сервера містить свіжу пропозицію гібридного обміну ключами (X25519 + ML-KEM-768). Застосунок звіряє її з ключем із каталогу, відповідає й підписує стенограму. Кожен наступний кадр зашифрований AES-256-GCM і доповнений.
  • Сервери також відповідають на STUN на двох портах, тож застосунки дізнаються свою публічну адресу й тип NAT, не питаючи Google чи Cloudflare.

Розділ 4

Сервери, які не можуть брехати про вас

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

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

Під капотом
  • Записи: профіль, запечатаний список друзів, простір, запрошення, учасник, пристрій і нотатка. У кожного є автор, який може його записувати; перевірка (підпис, повноваження, версія «перемагає останній запис») однакова на серверах і клієнтах.
  • Списки друзів зашифровані лише для пристроїв власника, а запити в друзі подорожують як запечатані нотатки без імені відправника, тож сервери не дізнаються, хто з ким дружить.
  • Кожен запис належить першим кільком серверам на кільці узгодженого хешування для його шарду. Власники реплікують записи, наздоганяють пропущене за курсорами послідовності й передають записи, коли сервери приєднуються чи виходять.

Розділ 5

Друг — хост, резервний чекає

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

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

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

Під капотом
  • Хост запускає у своєму застосунку невеликий SFU (selective forwarding unit). Кожен учасник відкриває до нього одне з’єднання WebRTC з однією висхідною аудіодоріжкою, п’ятьма низхідними слотами для мовців і каналом даних.
  • Слоти для мовців розподіляються за заголовком рівня звуку RFC 6464 («last-N»), з переписаними номерами послідовності, щоб кожен слот лишався одним безперервним потоком.
  • Пропозиції та відповіді підписуються ключами особистості разом із сесією, епохою, обома ідентифікаторами й відбитком DTLS, тож координаційний сервер не може вклинитися посередині.
  • Кожна зміна хоста збільшує номер епохи; застарілі пропозиції ігноруються. Учасники, які не можуть дістатися хоста, повідомляють про це, і щойно половина погоджується, хостом стає резервний.

Розділ 6

Шифрування шарами

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

Одне повідомлення, чотири шари

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

Готовий до квантових комп’ютерів

Ключі обмінюються гібридно: X25519, перевіреним класичним методом, і ML-KEM-768, новим постквантовим стандартом. Зловмисникові довелося б зламати обидва. Це важливо, бо хтось може вже сьогодні записати зашифрований трафік і чекати, доки квантовий комп’ютер його розшифрує.

Ключі, що рухаються вперед

Ключ кожного учасника обертається, як храповик: після кожного повідомлення його замінює наступний у ланцюжку, що йде лише вперед, а старий видаляється. Той, хто викраде ключ сьогодні, не прочитає вчорашніх повідомлень. Кожні 30 хвилин і щоразу, коли хтось виходить, усі починають новий ланцюжок із нових випадкових ключів, тож викрадений ключ теж швидко стає непотрібним.

Голос, кадр за кадром

Ваш голос шифрується маленькими кадрами, приблизно п’ятдесят на секунду, одразу після мікрофона й до того, як потрапить у мережу. Кадр, який не вдається зашифрувати, відкидається і ніколи не йде відкритим. Голос має сталий бітрейт, тож розмір пакетів не видає, що ви кажете.

Під капотом
  • Парні секрети (розподіл ключів відправника, синхронізація історії, зв’язування пристроїв, канали із серверами) поєднують X25519 і ML-KEM-768 (FIPS 203) через HKDF-SHA256.
  • Ключі відправника мають два ланцюжки HKDF: текстовий просувається після кожного повідомлення, аудіо — кожні 30 секунд. Ключі замінюються кожні 30 хвилин і коли хтось виходить, і надсилаються лише на пристрої, членство яких застосунок сам перевірив за підписаними записами.
  • Голос: воркер Encoded Transform шифрує кожен кадр Opus алгоритмом AES-256-GCM з автентифікованим хвостовиком у стилі SFrame (ідентифікатор ключа, покоління, лічильник).
  • Текст: підписаний автором (Ed25519), доповнений за методом Padmé і зашифрований текстовим ланцюжком.
  • Запечатані скриньки для пристрою використовують його поточний попередній ключ і підписані відправником, тож навіть повідомлення для пристроїв офлайн мають пряму секретність.

Розділ 7

Коли пряме з’єднання неможливе

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

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

Під капотом
  • Ретранслятор — це стандартний TURN (RFC 5766) на UDP-порту координаційного сервера з короткочасними обліковими даними. Сервери обмежують кількість людей, які можуть ним користуватися.
  • Під час під’єднання застосунок перевіряє свою мережу на двох портах STUN, класифікує її як відкриту, обмежену (симетричний NAT) чи заблоковану й пропонує ретранслятор, коли потрібно.
  • Кожне з’єднання записує чотири кроки (пропозиція, відповідь, мережевий шлях, зашифрований канал), тож коли щось ламається, застосунок може сказати де.

Розділ 8

Повідомлення, які знайдуть дорогу

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

  1. Чекає у вас

    Повідомлення потрапляє до вихідних вашого застосунку й показує маленький годинник.

  2. Друг виходить онлайн

    Щойно ви обоє онлайн, ваш застосунок передає його, запечатане для пристрою друга.

  3. Підтверджено

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

  4. Або поштова скринька

    За бажанням сервер зберігає особисті повідомлення до 7 днів, запечатані для кожного пристрою, щоб він не міг їх прочитати, і видаляє їх після доставки.

Розділ 9

Додавання комп’ютера

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

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

Глосарій

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

Наскрізне шифрування
Ключі мають лише відправник і отримувачі. Усе, що передає повідомлення між ними, зокрема сервери, бачить лише перемішані дані.
Peer-to-peer
Застосунки з’єднуються один з одним напряму, а не через центральний сервер.
Постквантова криптографія
Шифрування, створене, щоб витримати майбутні квантові комп’ютери, які могли б зламати методи, що їх сьогодні використовує більша частина інтернету. ML-KEM — стандарт, опублікований NIST у 2024 році.
Пряма секретність
Викрадення ключа сьогодні не відкриває старих повідомлень, бо ключі, якими їх шифрували, видалено.
Безпека після компрометації
Після викрадення ключа нові випадкові ключі незабаром знову відрізають зловмисника. У Crocodile це стається протягом 30 хвилин або одразу, коли хтось виходить.
Цифровий підпис
Математична печатка, зроблена приватним ключем. Будь-хто може перевірити її відкритим ключем, і ніхто без приватного ключа не може її підробити.
NAT, STUN і TURN
Домашні роутери ховають комп’ютери за однією публічною адресою (NAT). STUN допомагає застосункам дізнатися свою публічну адресу, щоб з’єднатися напряму; TURN ретранслює трафік, коли це неможливо.
SFU
Selective forwarding unit пересилає звук кожного мовця кожному слухачеві, не змішуючи й не декодуючи його. У Crocodile він працює в застосунку хоста.
Метадані
Дані про розмову, а не її вміст: хто з ким говорить, коли й скільки. Crocodile повністю шифрує вміст і зменшує метадані, але частину з них сервери все ще бачать.

Прочитати повний документ про архітектуру (англійською)