Повечето хора са чували фразата “криптирано от край до край” в даден момент. Тя се появява в приложенията за съобщения, в политиките за поверителност и в новинарските статии. Но какво означава всъщност? Какво се случва с вашето съобщение между момента, в който натиснете “изпращане”, и момента, в който вашият приятел го прочете?
Тази статия обяснява целия процес на достъпен език. Без математика, без нужда от диплома по криптография. Ще разгледаме текстовите съобщения, прикачените файлове, гласовите и видео разговорите поотделно, тъй като всеки вид работи по малко по-различен начин.
Проблемът, който криптирането решава
Когато изпращате съобщение по интернет, това съобщение трябва да премине през няколко компютъра, преди да достигне целта си. То минава през вашия телефон, вашия рутер, мрежата на вашия интернет доставчик, сървъра, който поддържа услугата за чат, а след това обратно през интернет доставчика на вашия приятел и в неговия телефон.
Без криптиране всеки от тези компютри по пътя би могъл да прочете съобщението ви. Компанията, която управлява сървъра, би могла да прочете всичко. Хакер, който успее да прихване трафика, би могъл да прочете всичко. Вашият интернет доставчик теоретично също би могъл да прочете всичко.
Криптирането решава това, като разбърква съобщението, преди то да напусне устройството ви. Така, дори някой да го прихване по пътя, всичко, което ще види, е безсмислен шум. Само определеният получател разполага с необходимото за неговото декриптиране.
Криптирането от край до край (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, криптиране преди напускане на устройството | Не |
Накратко: съобщенията ви се разбъркват на вашето устройство, преди да отидат където и да е. Само човекът, с когото разговаряте, разполага с необходимото за тяхното декриптиране. Всеки по средата, включително сървърът, вижда просто шум.
Това означава криптирането от край до край на практика.
