Что такое криптография и зачем она нужна для обеспечения безопасности информации? Это главный вопрос, который мы разберём сегодня.
Как говорили многие выдающиеся учёные, лучшее объяснение — то, которое понятно даже ребёнку. Поэтому попробуем простыми словами разобрать основы шифрования и принципы, на которых строится современная защита данных.
Внимание для специалистов: в тексте используются упрощения и неточности, чтобы сохранить доступность материала. Автор с благодарностью примет замечания и дополнения в комментариях :)
Перед началом стоит задуматься: когда вы отправляете кому-то сообщение — личное, рабочее или секретное — насколько вы доверяете мессенджеру, через который это делаете?
Виды шифрований
Как можно скрыть информацию? Шифр Цезаря, Виженера, Бэкона или сциатлы давно ушли в прошлое. Современная криптография опирается на три основных подхода:
- Симметричное шифрование
- Асимметричное шифрование
- Zero-Knowledge Proofs (Криптография с нулевым разглашением)
Далее подробно остановимся на первых двух, но начнём с базовых принципов, на которых строится любой хороший шифр.
Принципы надёжного шифра
Математик Клод Шеннон выделил два ключевых свойства хорошего шифра: диффузию и конфузию.
Диффузия
Диффузия устраняет закономерности исходного текста, делая невозможным анализ частоты символов. Один символ открытого текста влияет на большое количество символов зашифрованного текста и наоборот. Это можно сравнить с каплей чернил в стакане воды: после перемешивания невозможно определить, где именно она упала — всё пространство равномерно окрашено.
Без диффузии шифры достаточно легко взломать. Представим, что мы заменяем каждую букву каким-то другим символом (A→Q, B→W и т.д.). Для большого текста распределение частот букв сохранится: самая частая буква «E» в английском остается самой частой и в шифротексте. Слово «THE», встречающееся часто, превратится в некую триаду, которая тоже будет часто повторяться. Именно этим и пользовались криптоаналитики — изучали гистограмму частот и по ней восстанавливали соответствия. Так ломались классические подстановочные шифры.
Конфузия
Конфузия делает взаимосвязь между ключом, открытым и зашифрованным текстом максимально запутанной. Если при изменении всего одного бита в ключе несколько или даже все биты в зашифрованном тексте тоже меняются — значит, конфузия работает как надо. Это можно сравнить с перемешанной колодой карт. Представьте, что вы перетасовали колоду карт, и теперь каждая карта лежит в новом месте. Если бы кто-то наблюдал за процессом, но не следил за всеми движениями — он не смог бы восстановить исходный порядок колоды.
Совместно с диффузией конфузия обеспечивает устойчивость шифра к криптоанализу: закономерности размываются, а зависимости — маскируются.
Элементарные операции шифрования
Практически все современные алгоритмы шифрования строятся на нескольких простых, но мощных операциях:
- XOR (sum mod 2, исключающее «или») — основа конфузии. Позволяет объединить данные и ключ так, что результат выглядит случайным.
- Сложение по модулю 2^n (sum mod 2^n) — при сложении с переполнением результат зависит не только от конкретных битов, но и от переноса между ними — это добавляет нелинейности, а значит, усиливает конфузию.
- Циклический сдвиг (ROL, ROR) — циклический сдвиг битов влево и вправо, основа диффузии, основной инструмент диффузии. Они «размазывают» влияние одного бита по разным позициям в слове. Например, если один бит изменился в начале, после нескольких сдвигов он уже влияет на совершенно другое место в последовательности.
- Разделение и объединение (SPLIT, UNION) — позволяют обрабатывать разные части данных отдельно и снова объединять их, усиливая взаимное влияние.
На этих простых операциях строятся даже самые сложные современные шифры. Они как ноты в музыке: сами по себе просты, но в правильной комбинации создают настоящие симфонии защиты данных.
Симметричное шифрование
В симметричной криптографии один и тот же ключ используется для шифрования и расшифровки. Тот, кто владеет этим ключом, может и скрыть информацию, и восстановить её.
Наиболее известные симметричные алгоритмы: AES, Магма, Кузнечик, DES, 3DES, RC4. Они делятся на два типа: блочные и поточные.
Блочные шифры
Блочные шифры обрабатывают данные порциями фиксированного размера (например, по 128 бит). Чтобы зашифровать поток данных, используется режим шифрования — способ последовательного применения алгоритма к множеству блоков.
Режим шифрования — это своего рода «архитектура дома», построенного из одинаковых «кирпичей» алгоритма. От него зависит не только надёжность, но и удобство работы с большими массивами данных.
Наиболее известные режимы:
1. CBC (Cipher Block Chaining) — каждый новый блок зависит от предыдущего, создавая цепочку, где ошибка в одном месте может повлиять на всё сообщение;
2. CFB (Cipher Feedback) — позволяет обрабатывать данные как поток, превращая блочный шифр в поточный;
3. CTR (Counter Mode) — использует счётчик для генерации последовательности, что делает его быстрым и удобным для параллельной обработки;
4. ECB (Electronic Codebook) — самый простой режим, где каждый блок шифруется независимо. Но он же и самый уязвимый, потому что одинаковые блоки на входе дают одинаковые блоки на выходе. На картинке с зашифрованным пингвином в интернете можно увидеть, что это далеко не лучший выбор;
5. GCM (Galois/Counter Mode) — один из самых популярных современных режимов, обеспечивающий не только шифрование, но и аутентификацию (проверку целостности данных);
6. OFB (Output Feedback) — похож на CFB, но генерирует собственный поток данных, который не зависит напрямую от исходного текста.
Поточные шифры
Поточные шифры шифруют данные побитно — «на лету». Они основаны на гаммировании: к исходным данным по операции XOR добавляется псевдослучайная последовательность (гамма), генерируемая из ключа.
Различают два типа поточных шифров:
- Синхронные — гамма генерируется независимо у отправителя и получателя, но должна совпадать.
- Самосинхронизирующиеся — каждый следующий бит гаммы зависит от нескольких предыдущих зашифрованных символов. Это позволяет восстановить синхронизацию даже при потере части данных.
Алгоритм AES
Каждый раунд AES можно представить как мини-кухню для байтов. Сначала каждый байт “a” проходит через таблицу “b” подстановок, затем строки сдвигаются влево — как пассажиры, пересевшие на новые места в автобусе, чтобы изменить порядок. Далее колонки перемешиваются, и все закрывается секретным ключом — операцией XOR. После такого «коктейля» данные становятся настолько неузнаваемыми, что даже самый любопытный хакер не отличит ноль от единицы.
Асимметричное шифрование
Асимметричная криптография решает главную проблему симметричной — как безопасно обменяться ключом через открытый канал.
Здесь используются два ключа:
- Публичный (открытый) — можно передавать кому угодно;
- Приватный (закрытый) — хранится только у владельца.
Они математически связаны, но вычислить один из другого практически невозможно. Принцип основан на односторонних функциях — их легко выполнить в одном направлении, но чрезвычайно сложно обратить.
Как это работает
Представьте замок с двумя ключами: один ключ (публичный) может запереть замок, но не открыть, другой (приватный) может открыть, но не запереть. Если кто-то захочет отправить вам сообщение, он будет использовать ваш публичный ключ для шифрования. Расшифровать сможет только владелец приватного ключа. В обратную сторону — приватный ключ используется для цифровой подписи, а публичный — для её проверки. Так обеспечиваются конфиденциальность и аутентичность сообщений.
Основные алгоритмы
- RSA — основан на сложности разложения больших чисел на множители.
- Диффи–Хеллман — первый протокол безопасного обмена ключами.
- ECC (Elliptic Curve Cryptography) — использует эллиптические кривые, обеспечивает тот же уровень защиты при меньшей длине ключа.
- NTRU — один из кандидатов в постквантовые алгоритмы, устойчивый к квантовым атакам.
Пример: RSA в нескольких шагах
RSA – это способ шифрования, который основан на одной интересной идее: очень легко перемножить два больших простых числа, но очень сложно потом по результату обратно найти эти два числа.
На этом построен весь алгоритм:
1. Сначала выбираем два простых числа p и q, причем они не должны быть одинаковыми.
2. Умножаем их и получаем число N = p * q. Оно будет использоваться и в открытом, и в закрытом ключе.
3. Вычисляем значение функции Эйлера: φ(N) = (p - 1) * (q - 1). Это нужно для выбора ключей.
4. Теперь выбираем число e — открытую экспоненту. Оно должно быть меньше φ(N) и не иметь с ним общих делителей (кроме 1).
5. Дальше находим число d — это закрытая экспонента, то есть секретная часть ключа. Она выбирается так, чтобы выполнялось условие: d * e mod φ(N) = 1 (это значит, что d и e — как бы «обратные» друг другу по модулю φ(N)).
6. В результате у нас получается: открытый ключ: (e, N) — его можно показывать всем; закрытый ключ: (d, N) — его нужно держать в секрете.
Угроза квантовых компьютеров
Квантовые компьютеры работают по иным законам, чем классические. Если классический думает последовательно: ноль, потом один, потом снова ноль, то квантовый может быть и нулем, и единицей одновременно. Из-за этого некоторые задачи, которые для обычных машин занимают миллиарды лет, квантовый компьютер может решить за часы.
Проблема в том, что именно на таких «трудных» задачах и держится наша криптография. Например, RSA защищает данные потому, что разложить огромное число на множители сейчас практически невозможно. Но если появится мощный квантовый компьютер, он справится с этим за считанные минуты. Это всё благодаря алгоритму Шора, который умеет находить те самые множители, от которых зависит безопасность RSA и эллиптических кривых.
Мир уже готовится к постквантовой криптографии — новым алгоритмам, устойчивым к квантовым вычислениям. И лучше сменить замки заранее, чем однажды обнаружить, что дверь уже открыта.