В Интернете мы используем общественные точки доступа, кабели, сайты.
Данные в открытых каналах, таких как физический провод, не зашифрованы и могут быть доступны всем, кто имеет доступ к той же линии или роутеру.
Чтобы защитить общение и работу в сети от перехвата чувствительных данных, появилось программное шифрование.
Программным оно называется потому, что для криптографических задач не используются специальные «железные» компоненты. Достаточно процессора вашего гаджета и общепринятых протоколов шифрования.
Защищенные каналы используют клиент-серверное или сквозное (“клиент-клиент”) шифрование. В обоих случаях цель - сделать данные недоступными при компрометации в пути.
Эти методы криптографии сильно отличаются друг от друга. Знать об отличиях полезно при выборе решения для защиты конфиденциальной информации в Интернете.
Клиент-серверное шифрование подразумевает, что ключи для расшифровки трафика есть у пользователя и у сервера. Как при подключении к интернет-банку или почтовому ящику через HTTPS/IMAP.
Срок действия ключей определяется SSL-сертификатом сайта. Как правило, это 1 год.
Обслуживающий этот сайт или приложение сервер (например, банка) видит передаваемые данные в открытом виде, потому что хранит у себя ключ от SSL-сертификата. Но другие посредники передачи трафика (например, интернет-провайдер) видят его зашифрованным. Им доступны метаданные подключения, такие как IP-адреса участников, продолжительность сессии, информация о запрашиваемых DNS и многое другое, но само содержимое вашего канала недоступно.
Уязвимая часть клиент-серверного шифрования в том, что безопасность критически зависит от сервера.
Если файл ключа SSL-сертификата на сервере будет скомпрометирован, то злоумышленник сможет перехватывать трафик и расшифровывать его. Кроме того, при использовании такого шифрования, вы автоматически проявляете доверие к серверу и провайдеру, который его обслуживает.
Даже не имея доступ к серверному ключу, пакостник имеет возможность представиться нужным сайтом или пользователем. Например, подменив в вашей домашней сети Wi-Fi сервер, который обслуживает определенный мессенджер или ваш онлайн-кошелек.
Да, SSL-сертификат изменится и качественно сделанное приложение заметит изменение. Или не заметит 🤔
В случае успеха злоумышленник имеет много путей сделать так, чтобы вы были уверены в подлинности корреспондента, общаясь не с ним.
Чтобы сервер не выступал критически уязвимым компонентом безопасности, появилось сквозное шифрование, оно же “клиент-клиент”, “end-to-end encryption”, “e2ee”.
При этой схеме ключи шифрования генерируются между самими пользователями сети.
Ключи могут быть новыми для каждого диалога и истекать по завершении сеанса связи.
Сервер не имеет доступа к ключам. Поэтому он не сможет получить трафик между пользователями в открытом виде. По этой же причине для злоумышленника почти нет смысла подменять сервер, потому что ключи ваших собеседников сменятся потребуется явно подтвердить, что они доверенные.
При входе с другого устройства даже с верным паролем или СМС-кодом, восстановить содержимое диалогов не получится, не имея подготовленной самостоятельно заранее резервной копии ключей сквозного шифрования.
Иногда end-to-end шифрование может даже создавать неудобства, зато оно гарантирует, что вашим собеседником не притворяется чужой человек и ваш диалог конфиденциален.
Едва ли оно потребуется для мемов с котиками. Но для специализированного ПО, работающих в среде низкого доверия (Интернет) наличие end-to-end шифрования часто критично. Это не только мессенджеры, но и, например, умные системы управления всякими штуками, финансовый сектор.
Сквозное шифрование - ключ показатель защищенности мессенджеров и облачных хранилищ. Обращайте на него внимание, когда вам рекомендуют новое приложение, заявленное как безопасное.Именно на это нужно обращать внимание в первую очередь, когда вам рекомендуют новое приложение, заявленное как безопасное.
Уточните, работает ли сквозное для всех диалогов, для передачи и хранения файлов, не имеет ли софт непрозрачных механизмов копирования ключей на сервер? В полной мере дать такую прозрачность может только ПО на открытом исходном коде. Если код проприетарный, нужно доверять компании-разработчику.