Руслан Рахметов, Security Vision
Как мы уже говорили в одной из предыдущих статей, шифрование используется для защиты конфиденциальности информации за счет её преобразования с помощью криптографических алгоритмов (симметричных и асимметричных), а для защиты целостности и подлинности используются хэширование и цифровая подпись сообщения. В этой статье рассмотрим практическое применение алгоритмов симметричного и асимметричного шифрования на различных примерах.
Первое практическое применение шифрования датируется 6 веком до нашей эры - в Ветхом Завете для сокрытия некоторых имён и географических наименований использовался первый в мире шифр Атбаш, который по современной классификации является шифром простой замены и частным случаем шифра подстановки. В таком шифре каждой букве исходного текста соответствует одна буква шифротекста - в частности, в шифре Атбаш первая буква алфавита заменяется последней буквой (А -> Я), вторая - предпоследней (Б -> Ю) и т.д. Шифр Цезаря появился приблизительно в 100 году до нашей эры и использовался Гаем Юлием Цезарем для секретной переписки - в этом подстановочном шифре каждая буква открытого текста смещалась на фиксированное число позиций влево или вправо в алфавите для получения итогового шифротекста (например, на 3 позиции вправо: А -> Г, Б -> Д и т.д.). Эволюцией шифра Цезаря в 15 веке нашей эры стал шифр Виженера, в котором использовались различные значения сдвига символов, ключевое слово и таблица алфавитов (квадрат Виженера). Кроме шифра подстановки в древности использовались и перестановочные шифры, в которых буквы открытого текста меняются местами - например, в древней Греции в 5 веке до нашей эры использовалось первое в мире шифровальное устройство Скитала, представлявшее из себя деревянный брусок заранее условленного диаметра и намотанную на него ленту пергамента, на которой писался исходный текст вдоль бруска, а для сокрытия (шифрования) сообщения достаточно было размотать ленту.
Пройдя путь от исключительно военного и государственного применения, криптография стала доступна и обычным людям: в 1991 году американский программист Филипп Циммерман разработал программу Pretty Good Privacy (PGP), в которой использовалась асимметричная криптография для шифрования и подписи защищаемых данных (накопителей, файлов и сообщений электронной почты). Исходный код этой программы был опубликован в книге издательства Массачусетского технологического института (MIT), несмотря на протесты правительства США, которое запрещало экспорт отдельных видов криптографических систем, приравнивая их к вооружению. В 1996 году разработчиками браузера Netscape Navigator был создан протокол SSL версии 3.0, который является прародителем современных протоколов TLS для защиты передаваемой информации через интернет. В дальнейшем различные средства шифрования с применением алгоритмов симметричного и асимметричного шифрования непрерывно совершенствовались, и сегодня пользователи регулярно сталкиваются с прикладным применением криптографии для защиты сетевых коммуникаций и хранящихся данных, переписки в электронной почте и в мессенджерах.
1. Применение алгоритмов симметричного и асимметричного шифрования для защиты сетевого трафика.
В настоящий момент более 95% всего интернет-трафика зашифровано, при этом уже по итогам 2023 года протокол TLS последней версии 1.3 преобладал среди всего зашифрованного трафика. Протокол TLS 1.3 (Transport Layer Security, безопасность транспортного уровня) используется для шифрования передаваемых по сети данных, для аутентификации сервера и клиента, для контроля целостности и подлинности передаваемых данных. В рамках шифрования трафика используются сразу и симметричные, и асимметричные алгоритмы: симметричное шифрование работает быстрее, но требует безопасной передачи секретного ключа, для чего используется уже асимметричное шифрование - открытый ключ сервера содержится в публично доступном сертификате, который подписывается одним из доверенных удостоверяющих центров (далее - УЦ). Если требуется двухсторонняя аутентификация, то сертификат выдаётся также и клиенту, который подключается к сайту. Сертификат может быть выдан на определенный домен или на группу субдоменов (Wildcard-сертификат), а поля сертификата должны соответствовать стандарту X.509 и включать в себя данные об издателе сертификата (какой УЦ его выдал), срок действия (которые непрерывно уменьшаются), открытый ключ и алгоритм, использовавшийся для его создания (напомним, что асимметричное шифрование подразумевает использование двух ключей - открытого и закрытого, который держится владельцем в секрете). Кроме того, сертификат (точнее, хэш-сумма от сертификата) стандарта X.509 должен быть обязательно подписан выдавшим его УЦ - список доверенных УЦ хранится в операционной системе и в некоторых браузерах (например, Mozilla Firefox поддерживает собственный список доверенных УЦ, не зависящий от ОС). Задачей сертификата является не только передача клиенту открытого ключа сервера, но и проверка того, что адрес защищенного сайта соответствует тому, что указано в адресной строке браузера для противодействия атакам спуфинга DNS, в которых атакующие могут заменить ответ DNS-сервера и отобразить пользователю содержимое сайта, который располагается на контролируемом ими домене и используется, например, для кражи учетных данных. Именно поэтому важно всегда использовать HTTPS-соединения, проверять адрес сайта в адресной строке браузера и внимательно относится к предупреждениям браузера о недоверенном/недействительном сертификате для сайта, а также по возможности использовать защищенные аналоги DNS, такие как DNS-over-HTTPS (DoH), DNS-over-TLS (DoT), DNS-over-QUIC (DoQ), DNSSEC, DNSCrypt.
Итак, в протоколе TLS используется гибридная схема шифрования: асимметричные алгоритмы применяются для установки первоначального защищенного соединения и для шифрования передаваемого ключа симметричного шифрования, который затем используется для защиты трафика. Основными компонентами протокола TLS 1.3 являются:
1) Функция хэширования. В более старых протоколах TLS (1.2, 1.1) использовался алгоритм HMAC (Hash-based Message Authentication Code, код аутентификации с хэш-функцией, или выработка имитовставки на основе хэша) для проверки целостности и подлинности зашифрованных сообщений. В протоколе TLS версии 1.3 используется HKDF (HMAC-based Key Derivation Function, функция формирования ключа на основе HMAC) для создания сеансовых (сессионных) ключей симметричного шифрования, которые вырабатываются из общих секретных данных, полученных из протокола Диффи-Хеллмана на эллиптических кривых (ECDH, Elliptic-curve Diffie–Hellman) во время процедуры начала защищенного обмена (называется Handshake, рукопожатие). Кроме выработки сеансовых ключей, хэш-функция в TLS 1.3 используется для вычисления хэша от всех сообщений в рамках Handshake-этапа (Transcript Hash, хэш стенограммы), а также при создании подписи сертификатов - от текстовой формы сертификата вычисляется хэш-сумма и затем она подписывается. В настоящий момент используются хэш-функции SHA256 и SHA384, которые считаются свободными от коллизий.
2) Цифровая подпись. Сертификат сервера (и клиента в случае взаимной аутентификации - mutual TLS, mTLS) должен быть подписан цифровой подписью, вычисленной по алгоритмам ECDSA (Elliptic Curve Digital Signature Algorithm, цифровая подпись на эллиптических кривых) или EdDSA (Edwards-curve Digital Signature Algorithm, цифровая подпись на эллиптических кривых Эдвардса). Кроме того, хэш стенограммы (Transcript Hash) Handshake-этапа подписывается цифровой подписью сервера для контроля подлинности устанавливаемого соединения.
3) Алгоритм шифрования. В протоколе TLS 1.3 используется аутентифицированное шифрование с присоединёнными данными (Authenticated Encryption with Associated Data, AEAD), в котором сообщение шифруется и аутентифицируется. Для этого используются блочные шифры, работающие в определенных режимах, например, AES-GCM (симметричное шифрование AES в режиме Galois/Counter Mode, счётчик с аутентификацией Галуа), либо ChaCha20-Poly1305 (алгоритм симметричного потокового шифрования ChaCha20 с функцией Poly1305 для выработки кода аутентификации сообщения). В современных инфраструктурах выбирается тот алгоритм, который лучше подходит для используемых устройств - например, аппаратная поддержка AES есть во многих современных десктопных и серверных процессорах, а алгоритм ChaCha20 хорошо зарекомендовал себя для портативных устройств с низким энергопотреблением.
Список используемых сайтом алгоритмов симметричного и асимметричного шифрования (шифронаборов, Cipher Suites) можно посмотреть через «инструменты разработчика» (в браузерах на основе Chromium) или в свойствах соединения рядом с адресной строкой (в браузере Mozilla Firefox), а также с помощью снифферов сетевого трафика. Кроме того, на специальных ресурсах можно проверить список поддерживаемых сайтом шифронаборов и версий TLS-протокола. Например, шифронабор TLS_AES_128_GCM_SHA256 указывает, что сайт использует алгоритм AES с длиной ключа 128 бит в режиме GCM и хэш-функцию SHA256, а шифронабор TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 говорит об использовании сайтом алгоритма выработки эфемерных (временных) ключей с использованием протокола Диффи-Хеллмана на эллиптических кривых, цифровой подписи сертификата сайта с использованием эллиптических кривых, алгоритма симметричного потокового шифрования ChaCha20 с функцией Poly1305 для выработки кода аутентификации сообщения и хэш-функции SHA256. Список возможных шифронаборов регламентирован и перечислен в реестре IANA, а визуализацию TLS-соединения можно посмотреть на различных ресурсах.
2. Применение шифрования для защиты хранящихся данных.
Для защиты файлов, разделов и дисков целиком также используются средства шифрования. Например, для шифрования дисков и файлов можно использовать программы BestCrypt, PGP Whole Disk Encryption (PGPdisk), Veracrypt. Принцип работы таких решений прост: программы используют алгоритмы симметричного блочного шифрования (например, AES, Serpent, Twofish, Camellia) с ключом шифрования, доступ к которому защищается пользовательским паролем. Существуют и встроенные в различные ОС решения: BitLocker для Windows, LUKS (Linux Unified Key Setup) для Linux, FileVault для macOS - данные решения поддерживают хранение ключей шифрования дисков в выделенных аппаратных модулях (TPM-чип для BitLocker и LUKS, T2 Security Chip или сопроцессор Secure Enclave для FileVault). Особенностью BitLocker для Windows некорпоративных версий, например, Windows Home 10/11, является то, что ключ восстановления BitLocker по умолчанию сохраняется в облаке Microsoft, а в корпоративных версиях можно ограничиться сохранением ключа восстановления локально (в виде распечатки или в файле на флешке). Во всех случаях использования TPM следует устанавливать дополнительный стойкий пароль для разблокировки доступа к зашифрованному диску (режим TPM+PIN), а также обеспечивать безопасное хранение ключей восстановления BitLocker и LUKS.
3. Применение шифрования для защиты переписки в электронной почте и в мессенджерах.
Для защиты переписки следует защищать и канал коммуникаций, и сами сообщения от доступа третьих лиц.
3.1. Для защиты почтового трафика можно использовать основанные на TLS протоколы семейства Implicit TLS (SMTPS, IMAPS, POP3S, описаны в RFC 8314) или протокол STARTTLS (Explicit TLS или Opportunistic TLS, описан в RFC 3207, он подвержен атаке STRIPTLS на используемое оппортунистическое шифрование). Более современным способом защиты почтового трафика при передаче будет использование механизмов MTA-STS (Mail Transport Agent Strict Transport Security, описан в RFC 8461) и TLS-RPT (SMTP TLS Reporting, описан в RFC 8460), которые обеспечивают соответственно принудительное использование TLS (версий 1.2 и 1.3) для защиты почтового SMTP-трафика и обмен отчетами об ошибках установки зашифрованного соединения между почтовыми серверами. Для проверки поддерживаемых почтовым сервером протоколов шифрования можно воспользоваться специальными сервисами. Корпоративные системы совместной работы, как правило, используют TLS-протокол для защиты трафика по умолчанию, а популярные мессенджеры применяют различные протоколы для защиты соединений - например, Telegram использует собственный криптографический протокол MTProto для защиты сообщений между клиентами и серверами, а WhatsApp использует протокол XMPP (Extensible Messaging and Presence Protocol) с TLS, описанный в RFC 7590.
3.2. Кроме шифрования трафика почты и мессенджеров, важно защищать сами сообщения от доступа третьих лиц на серверах, обрабатывающих корреспонденцию (почтовые серверы и серверы мессенджеров, на которых хранятся сообщения до момента их доставки получателю, если у него временно нет интернета, например). Для защиты содержимого сообщений от доступа посторонних применяется технология сквозного шифрования (end-to-end encryption, E2EE), при которой сообщение могут прочитать только получатели и отправитель, но не владелец сервера или тот, кто сумел вклиниться в канал коммуникаций и перехватить сообщения. Например, в корпоративной среде для защиты сообщений электронной почты используются технологии PGP и S/MIME (Secure/Multipurpose Internet Mail Extensions), которые, по аналогии с TLS, используют гибридную схему шифрования: асимметричные алгоритмы применяются для шифрования передаваемого ключа симметричного шифрования, который используется для быстрого шифрования сообщений и передаваемых файлов. Если получателей зашифрованного симметричным алгоритмом сообщения несколько, то секретный ключ шифруется для каждого получателя в отдельности, используя их открытые ключи.
Некоторые популярные мессенджеры (WhatsApp, Signal, Session, Element, Telegram в режиме «секретного чата») также применяют технологию сквозного шифрования, а если пользователь подключает дополнительное устройство (например, открывает веб-сессию мессенджера на ПК), то основное устройство (смартфон) устанавливает прямое зашифрованное соединение с ПК и дублирует туда расшифрованную на смартфоне информацию, что не нарушает принцип E2EE - сообщения расшифровываются только на одном устройстве, которое надежно хранит ключи шифрования и не передаёт их никуда более. Различные классические интернет-мессенджеры, такие как Jabber и Pidgin, используют плагин OTR (Off-the-Record Messaging, переписка «не под запис»), который обеспечивает шифрование сообщений и аутентификацию участников переписки. Еще один протокол, Tox, также активно используется для обеспечения сквозного E2EE-шифрования сообщений и видеосвязи.