Повечето хора са чували фразата “шифровано от край до край” в даден момент. Тя се появява в приложенията за съобщения, в политиките за поверителност и в новинарските статии. Но какво означава всъщност? Какво се случва с вашето съобщение между момента, в който натиснете “изпращане”, и момента, в който вашият приятел го прочете?
Тази статия обяснява целия процес на достъпен език. Без математика, без нужда от диплома по криптография. Ще разгледаме текстовите съобщения, прикачените файлове, гласовите и видео разговорите поотделно, тъй като всеки вид работи по малко по-различен начин.
Проблемът, който шифроването решава
Когато изпращате съобщение по интернет, това съобщение трябва да премине през няколко компютъра, преди да достигне целта си. То минава през вашия телефон, вашия рутер, мрежата на вашия интернет доставчик, сървъра, който поддържа услугата за чат, а след това обратно през интернет доставчика на вашия приятел и в неговия телефон.
Без шифроване всеки от тези компютри по пътя би могъл да прочете съобщението ви. Компанията, която управлява сървъра, би могла да прочете всичко. Хакер, който успее да прихване трафика, би могъл да прочете всичко. Вашият интернет доставчик теоретично също би могъл да прочете всичко.
Шифроването решава това, като разбърква съобщението, преди то да напусне устройството ви. Така, дори някой да го прихване по пътя, всичко, което ще види, е безсмислен шум. Само определеният получател разполага с необходимото за неговото дешифриране.
Шифроването от край до край (end-to-end encryption) означава конкретно, че разбъркването става на вашето устройство, а възстановяването на текста - на устройството на вашия приятел. Сървърът по средата и всички останали по пътя виждат единствено разбърканата версия. Те не могат да я прочетат, дори и да искат.
Текстови съобщения
XMPP използва система, наречена OMEMO, за текстови съобщения, шифровани от край до край. Ето какво се случва, когато изпращате съобщение.
Настройване на ключовете
Преди да бъдат разменени каквито и да е съобщения, всяко устройство генерира две неща: публичен ключ и частен ключ. Те са съвпадаща двойка, математически свързани помежду си.
Мислете за публичния ключ като за катинар, който раздавате свободно на всеки, който иска да ви изпрати нещо. Мислете за частния ключ като за единствения съществуващ ключ, който може да отвори този катинар. Вие пазите частния ключ на вашето устройство и никога не го споделяте с никого.
Когато започнете разговор с някого, вашето приложение изтегля неговия публичен ключ от сървъра. Неговото приложение изтегля вашия публичен ключ. Никой от вас не е трябвало да се среща лично или да уговаря парола. Размяната на ключове става автоматично.
Изпращане на съобщение
Когато напишете съобщение и натиснете “изпращане”, вашето приложение прави следното:
- Генерира съвсем нов случаен ключ, наречен сесиен ключ, предназначен само за това съобщение
- Използва този сесиен ключ, за да разбърка съобщението ви в нечетим шум
- Взема сесийния ключ и го заключва с публичния ключ на вашия приятел (неговия катинар)
- Изпраща разбърканото съобщение и заключения сесиен ключ към сървъра
Сървърът получава пакет, съдържащ две неща: нечетим масив от разбъркан текст и сесиен ключ, който е заключен с катинар, който само вашият приятел може да отвори.
Получаване на съобщение
Когато приложението на вашия приятел получи пакета:
- Използва своя частен ключ, за да отключи катинара и да извлече сесийния ключ
- Използва сесийния ключ, за да дешифрира и подреди съобщението
- Вашият оригинален текст се появява на неговия екран
Сървърът никога не е разполагал с частния ключ, така че сървърът никога не е могъл да отвори катинара. Сървърът никога не е можел да прочете съобщението. Дори хората, които управляват сървъра, не могат да четат разговорите ви.
Множество устройства
OMEMO се справя и със ситуации, при които някой използва приложението едновременно на телефон и на лаптоп. Всяко устройство има своя собствена двойка от публичен и частен ключ. Когато изпращате съобщение, вашето приложение всъщност заключва сесийния ключ по веднъж за всяко от устройствата на вашия приятел. Така съобщението пристига на всички негови устройства и всяко от тях може да отключи своето копие на сесийния ключ независимо.
Непроницаемост на минали съобщения (Forward secrecy)
OMEMO притежава и едно свойство, наречено компрометираща устойчивост напред или forward secrecy. Това означава, че дори някой по някакъв начин да се сдобие с частния ви ключ в бъдеще, той пак няма да може да се върне назад и да дешифрира старите съобщения. Всеки разговор непрекъснато генерира нови сесийни ключове, а старите се изхвърлят след употреба. Няма главен ключ, който да отключва всичко.
Прикачени файлове
Прикачените файлове работят по различен начин от текстовите съобщения поради практически причини. Голям файл не може да бъде изпратен директно през системата за съобщения на XMPP по начина, по който се изпраща кратък текст. Вместо това той се качва на сървър, а получателят го изтегля оттам.
Предизвикателството е това да се направи по такъв начин, че сървърът все пак да не може да види какво съдържа файлът.
Какво се случва, когато изпращате файл
- Вашето приложение генерира случаен ключ за шифроване на вашето устройство
- Приложението ви шифрова файла локално, преди да го качи. Резултатът е масив от нечетими данни без разпознаваема структура
- Приложението ви качва шифрования масив на сървъра. Сървърът го съхранява, но не може да го прочете
- Приложението ви изпраща специално съобщение до вашия приятел, съдържащо две неща: адреса за изтегляне на шифрования файл и ключа за шифроване
Умната част
Ключът за шифроване е прикрепен към адреса за изтегляне чрез специфична техника. Той се появява след символа # в края на URL адреса, ето така:
aesgcm://domain.tld/upload/abc123/photo.jpg#a1b2c3d4e5f6...
Частта след # в уеб адреса се нарича фрагмент. Уеб браузърите и приложенията имат правило: фрагментите никога не се изпращат на сървъра. Когато приложението на вашия приятел изтегля файла, то изпраща заявка до сървъра само за пътя преди символа #. Частта след # остава на неговото устройство.
Това означава, че сървърът, който съхранява файла, никога не получава ключа за шифроване, дори по време на изтеглянето. Ключът пътува през XMPP до устройството на вашия приятел, а шифрованият файл пътува от сървъра за съхранение до устройството на вашия приятел. Двете неща се срещат едва на устройството на приятеля ви и чак тогава файлът се дешифрира.
Какво вижда сървърът
Сървърът съхранява масив от произволно изглеждащи байтове. Той не знае дали това е снимка, документ, аудио клип или видео. Той не може да го отвори, да го прегледа или да прочете съдържанието му. Ако някой нахлуе в сървъра и открадне файловете, ще разполага просто с хард диск, пълен с шифрован шум, който не може да използва.
За всяко едно качване на файл се генерира нов случаен ключ. Няма главен ключ. Всеки файл се шифрова независимо със свой собствен уникален ключ, който съществува само в този конкретен споделен URL адрес.
Гласови разговори
Гласовите разговори в XMPP клиентите използват система, наречена DTLS-SRTP. Името е техническо, но концепцията е проста.
SRTP означава Secure Real-time Transport Protocol (Сигурен протокол за транспорт в реално време). Това е начин за шифроване на аудиото, докато то пътува между две устройства. DTLS е “ръкостискането”, което се случва в началото на разговора, за да се уговорят ключовете за шифроване.
Как се защитава гласовият разговор
Когато се обадите на някого, преди да се прехвърли каквото и да е аудио, вашите две устройства провеждат кратък автоматичен разговор, за да съгласуват ключовете за шифроване. Това се случва за части от секундата и вие никога не го забелязвате.
След като ключовете са договорени, цялото аудио се шифрова на вашето устройство, преди да бъде изпратено, и се дешифрира на устройството на вашия приятел, когато пристигне. Никой по средата, включително сървърът, не може да слуша разговора.
Ролята на TURN сървърите
В идеалния случай гласовите и видео разговорите пътуват директно между двете устройства, без изобщо да преминават през какъвто и да е сървър. Това се нарича директна връзка (peer-to-peer).
Понякога директната връзка е невъзможна поради защитни стени (firewalls), определени видове интернет връзки или поради това, че сте на различни мобилни мрежи. В такъв случай аудиото се препредава през TURN сървър.
Дори когато преминава през TURN сървър, аудиото остава шифровано. TURN сървърът е просто ретранслатор, който прехвърля шифровани пакети от едната страна към другата. Той не може да ги дешифрира. Той вижда същото, което и всеки друг по средата: разбъркани данни, които изглеждат като шум.
Какво означава това на практика
Никой не може да слуша разговорите ви. Нито хората, които управляват сървъра, нито вашият интернет доставчик, нито някой, който е успял да прихване мрежовия ви трафик. Аудиото се шифрова, преди да напусне устройството ви, и се дешифрира само на другия край.
Видео разговори
Видео разговорите работят почти идентично с гласовите разговори. Използва се същата система DTLS-SRTP и важат същите принципи.
Единствената практическа разлика е, че видеото изисква значително повече данни от аудиото. Ето защо видео разговорите са по-чувствителни към състоянието на мрежата и защо директните връзки (peer-to-peer) са още по-силно за предпочитане при видеото.
Какво се шифрова
По време на видео разговор се шифрова абсолютно всичко:
- Видео потокът от вашата камера
- Аудиото от вашия микрофон
- Споделянето на екрана, ако вашият клиент го поддържа
Всичко това се разбърква преди излизане от вашето устройство и се възстановява само на екрана на човека, на когото се обаждате.
Какво всъщност вижда сървърът
Важно е да бъдем конкретни относно това до какво сървърът, работещ с XMPP услуга, има и няма достъп, тъй като хората често приемат, че администраторът на сървъра може да чете всичко.
Какво може да види сървърът:
- Кой е свързан и кога
- Кой на кого е изпратил съобщение и в колко часа (метаданните)
- Размера на съобщенията и файловете
- Информацията за вашия профил и списъка ви с контакти
Какво не може да види сървърът:
- Съдържанието на нито едно съобщение
- Какво съдържа даден файл
- Какво се говори или показва в гласов или видео разговор
Метаданните (кой с кого е разговарял и кога) са наистина чувствителна информация и е добре да се имат предвид. Администраторът на сървъра не може да чете съобщенията ви, но може да види моделите на комуникация. Това е известно ограничение на настоящата система и е нещо, върху чието подобряване XMPP общността продължава да работи.
Защо това има значение
Има съществена разлика между услуга, която обещава да не чете съобщенията ви, и услуга, която е технически неспособна да чете съобщенията ви.
Едно обещание може да бъде нарушено. Една компания може да промени политиката си за поверителност, да бъде придобита, да получи съдебно разпореждане или да бъде хакната. Ако ключовете за дешифриране на съобщенията ви съществуват някъде на сървър, тези ключове могат да бъдат взети от някого.
При шифроването от край до край сървърът наистина не разполага с ключовете. Няма какво да бъде предадено, няма какво да изтече, няма какво да бъде придобито заедно с покупката на една компания. Шифроването не е политическо решение, то е техническа реалност.
Ето защо поддържането на собствен (self-hosted) XMPP сървър с правилно шифроване е нещо фундаментално различно от използването на комерсиална услуга за съобщения, дори и на такава, която твърди, че я е грижа за поверителността. Самата архитектура е различна.
Бързо резюме
| Какво изпращате | Как е защитено | Може ли сървърът да го прочете? |
|---|---|---|
| Текстово съобщение | OMEMO шифроване от край до край | Не |
| Прикачен файл | AES шифроване, ключът никога не докосва сървъра | Не |
| Гласов разговор | DTLS-SRTP, шифрован преди напускане на устройството | Не |
| Видео разговор | DTLS-SRTP, шифрован преди напускане на устройството | Не |
Накратко: съобщенията ви се разбъркват на вашето устройство, преди да отидат където и да е. Само човекът, с когото разговаряте, разполага с необходимото за тяхното дешифриране. Всеки по средата, включително сървърът, вижда просто шум.
Това означава шифроването от край до край на практика.
