Симметричное шифрование
Симметричное шифрование (симметричная криптосистема) — это метод криптографической защиты информации, при котором один и тот же ключ используется как для шифрования (преобразования открытого текста в шифрованный, или шифротекст), так и для расшифрования (обратного преобразования). Поскольку ключ является общим для отправителя и получателя, основная задача при использовании симметричного шифрования — обеспечить безопасную передачу этого общего ключа между сторонами.
Симметричное шифрование противопоставляется асимметричному шифрованию (криптосистемам с открытым ключом), где используются два разных, но математически связанных ключа: открытый (для шифрования) и закрытый (для расшифрования). Исторически симметричные шифры появились задолго до асимметричных и остаются основой для защиты данных во многих современных протоколах и системах, как правило, в комбинации с асимметричными методами для безопасного распределения сеансовых ключей.
История
Первые известные примеры симметричного шифрования относятся к глубокой древности. Одним из самых ранних и простых является шифр Цезаря, использовавшийся, по преданию, Гаем Юлием Цезарем для переписки. В основе такого шифра лежит сдвиг букв алфавита на фиксированное число позиций — сам сдвиг и являлся ключом.
На протяжении столетий развивались различные мануальные шифры, такие как шифр Виженера (многоалфавитная замена, где ключом служит повторяющееся слово) и шифровальные диски Альберти. Все они, однако, основывались на симметричном принципе и были уязвимы для криптоанализа (особенно частотного) по мере его развития.
Переломным моментом стало создание электромеханических устройств, таких как роторные шифровальные машины XX века, самым известным примером которых является немецкая «Энигма». Несмотря на усложнение процедур шифрования, ключи для «Энигмы» были симметричными (например, начальные позиции роторов). Работа союзников по взлому «Энигмы» под руководством Алана Тьюринга продемонстрировала как мощь, так и уязвимости симметричных систем при неправильном управлении ключами и повторении сеансовых настроек.
С началом цифровой эры в 1970-х годах были формализованы и стандартизированы первые блочные симметричные шифры, работающие с данными в двоичном виде. В 1977 году был опубликован DES (Data Encryption Standard) — алгоритм, ставший стандартом шифрования в США на многие годы. DES использовал ключ длиной 56 бит, что на момент создания было достаточно, но к концу XX века стало возможным взломать полным перебором (лбрутфорс) за разумное время.
Это привело к разработке и проведению конкурса Национальным институтом стандартов и технологий США (NIST), победителем которого в 2001 году стал алгоритм Rijndael, принятый как стандарт AES (Advanced Encryption Standard). AES использует ключи длиной 128, 192 или 256 бит и является основным современным симметричным алгоритмом на сегодняшний день.
Классификация симметричных шифров
Симметричные криптосистемы делятся на два основных типа в зависимости от способа обработки данных: поточные шифры и блочные шифры.
Поточные шифры
Поточный шифр шифрует каждый символ (бит) открытого текста по отдельности, последовательно. Для этого он генерирует гамму — псевдослучайную последовательность ключевого материала, обычно одинаковой длины с сообщением. Шифротекст получается путём наложения гаммы на открытый текст (чаще всего с помощью операции XOR (исключающее ИЛИ)). Для расшифровки на стороне получателя генерируется та же самая гамма с использованием того же ключа и начального вектора.
- Примеры: шифр Вернама (единственный теоретически абсолютно стойкий шифр, но требующий длинного, действительно случайного и одноразового ключа-гаммы), RC4 (долгое время использовался в SSL/TLS и WEP, ныне считается ненадёжным из-за уязвимостей), ChaCha20 (современный, высокопроизводительный и безопасный поточный шифр).
- Особенности: высокая скорость обработки, работа в режиме реального времени без необходимости ожидания полного блока данных. Основная проблема — необходимость уникального начального вектора для каждого использования одного и того же ключа, иначе повторы гаммы могут быть атакованы.
Блочные шифры
Блочный шифр делит открытый текст на фиксированные блоки (например, 64 или 128 бит) и по определённой математической процедуре преобразует каждый блок в блок шифротекста соответствующего размера. Ключ используется на применение определённых раундовых преобразований, включающих перестановки (P-блоки) и подстановки (S-блоки). Для шифрования произвольной длины данных применяются режимы шифрования, которые организуют работу блочного шифра для последовательности блоков.
- Основные блочные шифры: AES (Rijndael) — современный стандарт; Blowfish, Twofish, Serpent (финалисты конкурса AES); отечественный ГОСТ 28147-89 (блочный шифр с длиной блока 64 бит и ключом 256 бит) и его более современная версия (с блоками 128 бит).
- Режимы шифрования блочных шифров:
- ECB (Electronic Codebook) — простейший, но небезопасный режим, где каждый блок шифруется одинаково одинаковым ключом. Не рекомендуется к применению, так как не скрывает повторяющиеся блоки и позволяет выявлять паттерны в данных.
- CBC (Cipher Block Chaining) — каждый блок шифротекста зависит от всех предыдущих открытых текстов (через операцию XOR с предыдущим шифротекстом). Требует начальный вектор (IV).
- CTR (Counter) — поточный режим, превращающий блочный шифр в поточный. Шифруется счётчик, затем его гамма накладывается на блоки открытого текста. Может работать параллельно.
- GCM (Galois/Counter Mode) — комбинирует режим CTR с проверкой целостности (аутентичное шифрование). Шифрует и вычисляет аутентификационный код (MAC) для данных, что позволяет выявить любое изменение шифротекста.
- CFB (Cipher Feedback) и OFB (Output Feedback) — более старые поточные режимы, менее производительные, чем CTR.
Устройство и принцип работы (на примере блочного шифра)
На примере современного стандарта AES (Rijndael) можно показать типичную структуру блочного симметричного шифра.
- Размеры: AES использует блок данных размером 128 бит (16 байт). Размер ключа может быть 128, 192 или 256 бит. Количество раундов (циклов обработки) зависит от длины ключа: 10 (128), 12 (192) или 14 (256).
- Раунды: Каждый раунд (кроме последнего) состоит из четырёх операций, выполняемых над состоянием — двумерным массивом байтов размером 4×4:
- SubBytes (SubBytes): нелинейная замена каждого байта его значением из фиксированной таблицы (S-блока). Это обеспечивает путанность (confusion) — делает связь между ключом и шифротекстом сложной для криптоанализа.
- ShiftRows (ShiftRows): циклический сдвиг строк состояния. Обеспечивает перемешивание (diffusion) внутри блока.
- MixColumns: умножение каждого столбца состояния на специальную матрицу. Усиливает лавинный эффект — изменение одного бита открытого текста или ключа влияет на множество битов шифротекста.
- AddRoundKey: сложение (XOR) состояния с раундовым ключом, получаемым из основного ключа с помощью алгоритма расширения ключа.
- Расширение ключа: Из основного (мастер-ключа) по определённому алгоритму порождаются все раундовые ключи — по одному на каждый раунд плюс начальный раунд.
Процесс расшифровки — это обратные операции, выполняемые в обратном порядке: сначала AddRoundKey, затем обратный MixColumns, обратный ShiftRows и обратный SubBytes.
Применение
Симметричное шифрование повсеместно используется в современных криптографических системах и протоколах благодаря высокой скорости работы и относительной простоте реализации.
- Шифрование данных в покое (Data at Rest):
- Шифрование жёстких дисков и файловых систем (BitLocker, LUKS, VeraCrypt, FileVault). Используются алгоритмы AES (CBC или XTS режимы).
- Шифрование баз данных и архивов данных.
- Шифрование документов и сообщений в мессенджерах при хранении на устройстве.
- Шифрование трафика (Data in Transit):
- Базовым компонентом почти всех современных сетевых протоколов является установление сеанса с использованием асимметричной криптографии, после чего данные передаются с помощью симметричного шифрования (обычно шифры AES или ChaCha20) с гораздо более высокой производительностью. Прионы: TLS/SSL для HTTPS (защита браузерного трафика), SSH (удалённое администрирование), IPsec (VPN), WireGuard (VPN, основан на ChaCha20).
- Мессенджеры:
- Протоколы сквозного шифрования (end-to-end encryption), такие как Signal Protocol и его производные, используют симметричное шифрование (часто AES или ChaCha20) для защиты самого содержимого сообщений, хотя их структура и протоколы используют асимметричные методы для установления общего ключа.
- Финансовые системы:
- Чипы банковских карт и протоколы EMV, шифрование PIN-кодов и операций (в том числе устаревающие 3DES).
- Протоколы защиты данных в банковских и финансовых приложениях и серверах.
- Использование симметричных шифров для генерации и проверки кодов аутентификации сообщений (MAC), например, HMAC-SHA256, который применяется для проверки целостности данных и удостоверения их подлинности (доказательства знания ключа).
- Системы OTP (одноразовые пароли), генерируемые на основе временного счётчика и общего секретного ключа (например, протоколы TOTP, HOTP).
Ключевые проблемы и ограничения
Несмотря на надёжность при правильной реализации, симметричное шифрование имеет несколько фундаментальных проблем:
- Проблема распределения ключей: Самый существенный недостаток. Отправитель и получатель должны иметь идентичный секретный ключ и безопасно обменяться им до начала передачи шифрованного сообщения. В открытых каналах (Интернет) это часто решается с помощью асимметричного шифрования, которое используется для защиты передачи симметричного ключа. Однако если асимметричный ключ скомпрометирован, симметричный ключ тоже может быть раскрыт.
- Управление ключами: В больших системах количество необходимых парных симметричных ключей растёт квадратично (n², где n — количество участников системы). Это усложняет их генерацию, хранение, распространение и замену.
- Повторное использование ключа: Повторное использование одного и того же ключа для нескольких сообщений без соответствующего начального вектора или в режиме гаммы ведёт к катастрофической потере безопасности. В режиме ECB повторяющиеся блоки открытого текста выдают визуальные паттерны на равнозначных данных, что делает возможным частичное чтение данных даже при свете одинаковых блоков.
- Отсутствие неотказуемости (non-repudiation): В симметричном шифровании оба участника знают один и тот же ключ, поэтому ни один из них не может доказать третьей стороне, что конкретное сообщение было отправлено именно другим участником. Это ограничение требует дополнительных механизмов (внешних протоколов) для юридической значимости.
Современные алгоритмы и перспективы
На сегодняшний день основными и наиболее широко применяемыми симметричными алгоритмами являются AES-256 (блочный шифр) и ChaCha20 (поточный шифр). Большинство современных программных и аппаратных реализаций (включая инструкции AES-NI в процессорах x86) выполняют AES очень быстро — на уровне нескольких гигабит в секунду.
С развитием квантовых вычислений существует потенциальная угроза для симметричного шифрования. В отличие от асимметричных схем, квантовый компьютер (при помощи алгоритма Гровера) может в теории ускорить полный перебор ключа симметричного шифра лишь квадратичным образом (например, для 128-битного ключа потребуется выполнить ~2^64 операций, а не ~2^128). Поэтому для защиты от квантовых атак рекомендуется использовать симметричные алгоритмы с ключом не менее 256 бит (AES-256, ChaCha256). При этом симметричное шифрование считается устойчивым к квантовым взломам в гораздо большей степени, чем асимметричное шифрование, для которого разработка постквантовых схем является актуальной задачей.
Источники
- Шнайер Б. «Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си».
- Столлингс В. «Криптография и сетевая безопасность: принципы и практика».
- National Institute of Standards and Technology (NIST). FIPS PUB 197 (Advanced Encryption Standard).
- Романец Ю. В., Тимофеев П. А., Шаньгин В. Ф. «Защита информации в компьютерных системах и сетях».
- RFC 8439 (ChaCha20 and Poly1305 for IETF Protocols).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →