Шифрование превращает исходные данные в шифротекст с помощью алгоритма и ключа. Обратное преобразование позволяет получить исходное содержимое. Задача такой защиты — сделать чтение без нужного секрета практически недоступным при определённых условиях. Зашифровать можно не только переписку, но и фотографию, запись разговора или файл базы данных: для алгоритма это последовательности байтов. При этом надпись «зашифровано» ещё не отвечает на главный вопрос: у кого есть возможность увидеть исходные данные?

Как работают алгоритм и ключ: пример со сдвигом
Представим, что каждая буква сообщения заменяется буквой на три позиции дальше по алфавиту. После последней буквы счёт продолжается с первой. Это учебный вариант шифра Цезаря. Правило сдвига здесь — алгоритм, а число три — ключ. Зная правило, но не зная число, получатель ещё не знает, насколько сдвинуть буквы обратно.
Зафиксируем современный русский алфавит из 33 букв, включая Ё: АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ. При сдвиге на три позиции слово «МУЗЕЙ» превращается в «ПЦКЗМ»: М → П, У → Ц, З → К, Е → З, Й → М. Обратный сдвиг восстанавливает слово. Если убрать Ё или поменять порядок букв, результат изменится — именно поэтому в задачах про шифры сначала нужно договориться об алфавите.
Секретность этого примера очень слабая. Для выбранного алфавита существует всего 33 разных сдвига, причём один вообще оставляет текст без изменений. Все варианты легко перебрать. Простая замена букв также сохраняет повторения и особенности языка: часто встречающаяся буква не перестаёт быть частой только потому, что получила другое обозначение. Современная криптография устроена сложнее; механическое усложнение такого школьного шифра не превращает его в средство защиты файлов.
В серьёзных криптосистемах сам алгоритм обычно открыт. Это позволяет специалистам изучать его устройство и искать слабости. Секретом остаётся ключ, а безопасность зависит ещё и от параметров, реализации и условий применения. Иначе каждый человек, узнавший принцип работы программы, автоматически получал бы доступ ко всем защищённым ею сообщениям.
Пароль и ключ тоже не одно и то же. Пароль человек вводит или запоминает; криптографический ключ — данные определённого формата, с которыми работает алгоритм. Программа может получить ключ из пароля через специальное преобразование, а может использовать пароль для доступа к отдельно созданному случайному ключу. Например, в описанной Apple схеме FileVault смена пользовательского пароля меняет защиту ключей и не требует заново шифровать всё содержимое диска. Это свойство конкретного устройства системы, а не универсальное правило для каждого зашифрованного файла.

Кодирование, хеширование и подпись решают другие задачи
Необычная строка символов может выглядеть секретной, хотя никакого секрета в ней нет. Например, слово «кот», записанное в UTF-8 и затем представленное в Base64, выглядит как 0LrQvtGC. Чтобы вернуть слово, достаточно знать правила Base64 и кодировку исходных байтов. Пароль не нужен. Такое кодирование удобно для передачи двоичных данных там, где ожидается текст; само по себе оно не скрывает содержание.
Хеширование устроено иначе. Функция вычисляет по данным короткий результат — хеш, или дайджест. У SHA-256 результат всегда состоит из 256 бит, то есть 32 байтов. В привычной шестнадцатеричной записи это 64 символа. Для UTF-8 слова «кот» такая запись начинается с 77095ebd, а для «Кот» — с 7d2532b6. Здесь приведены только начала двух вычисленных хешей: изменение регистра дало другой результат, хотя его длина осталась прежней.
| Преобразование | Для чего используется | Что происходит с исходным содержимым |
|---|---|---|
| Кодирование, например Base64 | Представить байты в другом формате | Восстанавливается по известным правилам без секретного ключа |
| Шифрование | Скрыть содержимое от тех, у кого нет нужного секрета | Восстанавливается при расшифровании |
| Криптографическое хеширование | Получить дайджест для сверки и других криптографических операций | Хеш не хранит обратимо закодированную копию сообщения |
| Цифровая подпись | Проверить связь сообщения с ключом подписанта и обнаружить изменения | Сообщение может оставаться открытым для чтения |
Два разных сообщения могут иметь один и тот же хеш — это называется коллизией. У функции с фиксированным размером результата число возможных хешей ограничено, а вариантов входных сообщений намного больше. Поэтому требование к криптографической хеш-функции состоит в трудности поиска подходящих совпадений, а не в их математическом отсутствии. В 2017 году исследователи продемонстрировали два разных PDF с одинаковым SHA-1. Это конкретный результат для SHA-1, а не доказательство того, что все хеш-функции одинаково уязвимы.
У хеша нет операции расшифрования с секретным ключом. Но можно предположить, каким был вход, вычислить его хеш и сравнить результат. Поэтому хеш короткого известного слова не делает это слово неузнаваемым. Для проверки паролей применяют специальные преобразования, которые увеличивают стоимость каждой попытки; обычный быстрый хеш файла решает другую задачу.
Цифровая подпись создаётся закрытым ключом и проверяется соответствующим открытым. Она может подтвердить, что подпись согласуется с этим ключом и данным сообщением. Чтобы связать результат с определённым человеком или организацией, нужна дополнительная основа доверия — например, сертификат. Подпись не прячет текст и не устанавливает автоматически истинность написанного. А объяснение «это хеш, зашифрованный закрытым ключом» не описывает все схемы подписи: ECDSA и EdDSA работают иначе.
Хеши и подписи часто встречаются вместе. В блокчейне хеш-связи помогают проверять структуру записей, а подписи — выполнение правил авторизации транзакций. Они не означают, что все данные реестра зашифрованы. Подробный пример такого разделения разобран в отдельной статье.

Симметричное и асимметричное шифрование: зачем нужны оба
При симметричном шифровании стороны используют общий секретный ключ для шифрования и расшифрования. К этому семейству относятся AES и ChaCha20. Такая криптография подходит для обработки больших объёмов данных, но участникам сначала нужно получить общий секрет. Это не означает, что они обязаны переслать сам ключ открытым текстом: существуют отдельные протоколы его согласования.
В системе шифрования с открытым ключом роли разделены. Открытый ключ получателя позволяет подготовить для него зашифрованное сообщение. Соответствующий закрытый ключ нужен, чтобы его расшифровать. Открытая часть не обязана храниться в тайне, но важно, кому она действительно принадлежит. Если отправитель взял ключ другого человека, математически корректное шифрование будет выполнено для другого получателя.
Это не две ступени надёжности, где асимметричная система всегда лучше. У них разные возможности и затраты. В реальных протоколах их часто соединяют: механизмы с открытыми ключами помогают установить общий секрет и подтвердить участников, а симметричная схема защищает основное содержимое. В TLS 1.3 согласование ключей и шифрование передаваемых записей — отдельные части протокола. Популярная схема «сервер прислал RSA-ключ, им зашифровали все данные» не описывает его работу.
Ещё одно различие скрывается за выражением «обмен ключами». В протоколе Диффи — Хеллмана стороны обмениваются открытыми величинами и вычисляют общий секрет каждая у себя. По сети не обязательно проходит готовый секретный ключ. Само согласование также не отвечает на вопрос, с кем именно оно состоялось: привязка к участнику требует аутентификации.
Поэтому подпись, сертификат, согласование ключей и шифрование могут участвовать в одном соединении, не заменяя друг друга. Сертификат связывает открытый ключ с именем участника, согласование даёт общий секрет, а шифрование защищает передаваемое содержимое.

Что означает AES-256 и почему одного названия мало
В названии AES-256 число относится к длине ключа: 256 бит. У AES есть также варианты со 128- и 192-битными ключами, а размер обрабатываемого блока во всех трёх случаях равен 128 битам. Длина ключа, длина блока и размер файла — разные величины. Файл не обязан содержать ровно 256 бит и не делится на «ключи по 256».
Число возможных значений ключа важно, но не исчерпывает свойства системы. Случайный 256-битный ключ и строка той же длины, полученная из легко угадываемого пароля, не становятся одинаково непредсказуемыми. Преобразование может замедлить проверку догадки, но не отменяет того, что исходный пароль способен угадать другой человек. Длину ключа RSA также нельзя напрямую сравнивать с длиной ключа AES: за ними стоят разные математические задачи.
Блочному шифру нужен режим работы, который определяет обработку сообщения. На схеме ниже показан ECB: блоки преобразуются независимо. При одинаковом ключе одинаковые входные блоки дают одинаковые выходные. Из-за этого повторяющаяся структура данных может быть заметна даже без расшифрования каждого блока. В других режимах устройство обработки и требования к дополнительным параметрам отличаются. Поэтому надпись «используется AES» не описывает всю систему.
Конфиденциальность и целостность тоже различаются. Скрыть содержание сообщения — одна задача; обнаружить его изменение — другая. Существуют конструкции аутентифицированного шифрования, которые объединяют обе функции. В AEAD часть сопутствующих данных может оставаться открытой, но участвовать в проверке подлинности. Успешное получение каких-то байтов после расшифрования само по себе не доказывает, что сообщение никто не менял.
Дополнительные значения — например, начальный вектор или nonce — не следует путать с паролем. Они могут передаваться открыто, а их нужные свойства задаются конкретной схемой. Где-то существенна непредсказуемость, где-то — отсутствие повторения при одном ключе. Универсальное правило «всё случайное является секретным ключом» здесь не работает.

На диске, в соединении и в чате: кто видит открытый текст
Шифрование хранилища защищает данные в том виде, в котором они лежат на носителе. При чтении система расшифровывает нужные фрагменты для приложений. Поэтому защищённый диск и открытый в редакторе документ не противоречат друг другу: это разные этапы работы с одними данными. Возможность программы прочитать уже открытый файл регулируется также правами доступа и устройством операционной системы.
HTTPS защищает соединение браузера с сервером средствами TLS. Серверу обычно нужно получить содержимое запроса, чтобы обработать его: например, выполнить поиск по введённой фразе. То, что запрос был скрыт от наблюдателя в сети, не скрывает его от адресата. Сертификат помогает удостоверить связь с доменным именем, но не подтверждает честность каждого обещания на сайте. Зашифрованное соединение возможно и с мошенническим ресурсом.
При сквозном шифровании содержимое защищено между конечными участниками, а промежуточный сервер доставки не должен получать необходимые секреты для его чтения. На схеме ниже ключи остаются у собеседников, а посредник переносит зашифрованное сообщение. В действующем приложении к этому добавляются проверка ключей, подключение устройств, обновление состава группы и другие правила. Слово «сквозное» не отменяет эти вопросы.
Даже один сервис может использовать несколько моделей. Telegram в своей документации различает облачные чаты с клиент-серверным шифрованием и секретные чаты со сквозным. В почте защита соединения TLS и защита содержимого письма S/MIME также относятся к разным уровням. Название приложения не позволяет автоматически приписать каждому его режиму одинаковые свойства.
Содержимое и метаданные — ещё одна граница. Зашифрованное письмо не обязательно скрывает тему или список адресатов. Например, справка клиентского шифрования Gmail отдельно указывает дополнительную защиту тела и вложений, но не заголовка с темой, временем и получателями. Точное устройство зависит от выбранного режима и версии сервиса.
Наконец, получатель всё равно читает сообщение. Он может сохранить его, переслать или сфотографировать экран. Шифрование канала этому не препятствует, как не обеспечивает само по себе резервную копию, непрерывную работу сервиса или защиту уже скомпрометированного устройства. Чтобы понять смысл обещания «данные зашифрованы», полезно назвать три вещи: какие именно данные защищены, на каком участке и кто получает открытый текст.





Комментарии
Загружаем обсуждение.