Руслан Рахметов, Security Vision
Всё чаще в новостях мы сталкиваемся с терминами, которые вызывают вопросы: что такое криптография, криптология, криптоанализ? Что вообще означает шифрование, зачем оно применяется? Какие алгоритмы шифрования бывают, чем они отличаются, что такое симметричная и асимметричная криптография? Что такое хэш и цифровая подпись, для чего они используются? В данной статье мы постараемся дать краткие ответы на эти вопросы. Приступим!
Итак, начнем с определений:
· Криптология — это наука, изучающая методы шифрования информации. Криптология разделяется на криптоанализ и криптографию.
· Криптоанализ — это наука о методах дешифрования зашифрованной информации, т.е. взлома шифрования за счет подбора ключа шифрования или поиска уязвимостей в криптографических алгоритмах.
· Криптография — это наука о способах защиты информации с помощью различных математических преобразований. Задачами криптографии являются обеспечение целостности, конфиденциальности, подлинности (authenticity), неотказуемости (non-repudiation) информации.
· Целостность информации — это состояние информации, при котором она либо остается неизменной, либо изменения осуществляются только теми, кто имеет на это право.
· Конфиденциальность информации — это состояние информации, при котором доступ к ней имеют только те, кто обладает соответствующими правами доступа.
· Подлинность информации — это состояние информации, которое гарантирует возможность однозначно идентифицировать автора (владельца) и источник информации.
· Неотказуемость от информации — это состояние информации, которое гарантирует невозможность автора (владельца) информации отказаться от авторства и выполненных действий (например, изменения, отправки, получения) с информацией.
Как обеспечиваются конфиденциальность, целостность, подлинность и неотказуемость? Расскажем далее:
Конфиденциальность информации достигается за счет её шифрования. Шифрование —это преобразование информации с помощью криптографических алгоритмов. Исходная информация — это открытый, доступный для прочтения текст (открытый текст, plaintext). После операции шифрования он превращается в зашифрованную информацию — т.е. бессмысленный набор символов (шифротекст, ciphertext). Для его прочтения нужно провести операцию расшифрования — т.е. восстановления первоначального текста с использованием известного пользователю ключа шифрования. Если ключ шифрования пользователю (атакующему) неизвестен, то операция восстановления первоначального текста называется дешифрованием, и она достигается за счет взлома шифра с использованием методов криптоанализа.
Криптографические алгоритмы шифрования делятся на две больших группы: алгоритмы симметричного шифрования (криптосистемы с секретным ключом) и алгоритмы асимметричного шифрования (криптосистемы с открытым и закрытым ключом). Ключевая информация — это секретные ключи или пары открытых и закрытых ключей (т.е. то, что может позволит зашифровать и расшифровать информацию). Важнейшей характеристикой ключа шифрования является его длина, которая измеряется в битах.
1. Симметричное шифрование подразумевает использование одного и того же ключа и для шифрования, и для расшифрования. Такой ключ называется секретным ключом. Преимуществами симметричного шифрования являются скорость работы и меньшая длина ключа шифрования (по сравнению с алгоритмами асимметричного шифрования), а недостатки — это сложность безопасной передачи ключей в недоверенной среде (злоумышленник, перехвативший секретный ключ, сможет прочитать все сообщения, зашифрованные им) и сложность управления ключами (каждый секретный ключ приходится безопасно доставлять каждому отправителю и получателю и хранить у них). Алгоритмы симметричного шифрования делятся на потоковые (stream cipher) и блочные (block cipher):
1.1. Алгоритм симметричного потокового шифрования производит шифрование каждого символа (бита/байта) сообщения отдельно, выполняя математическую операцию XOR («исключающее ИЛИ») с ключом (ключевым потоком, гаммой). Преимуществами потокового шифрования являются его простота (что позволяет выполнять шифрование на оборудовании с невысокой вычислительной мощностью) и возможность шифровать поток сообщений в режиме реального времени, что используется для шифрования голосового и видео-трафика. Примерами потокового шифрования являются такие алгоритмы, как устаревший RC4 (он содержит уязвимости и его нельзя использовать) и более новые алгоритмы XChaCha20 и XSalsa20.
1.2. Алгоритм симметричного блочного шифрования производит шифрование блоков сообщения фиксированной длины, т.е. разбивает сообщение на части и шифрует каждую часть отдельно. Именно блочные шифры получили наибольшую популярность за счет возможности работы в различных режимах и высокой криптографической стойкости. Наиболее яркими примерами симметричных блочных шифров являются зарубежные стандарты DES (алгоритм Data Encryption Algorithm, длина ключа 56 бит, является устаревшим), 3DES (алгоритм Triple Data Encryption Algorithm, длина ключа 168 бит, является устаревшим), AES (алгоритм Rijndael, длина ключа может быть 128 или 256 бит, активно используется), а также российские стандарты ГОСТ 28147-89 и ГОСТ 34.12-2018 (алгоритмы «Магма» и «Кузнечик», длина ключа 256 бит, активно используются).
2. Асимметричное шифрование подразумевает использование двух ключей - закрытого и открытого. Они создаются одновременно, связаны друг с другом, но из одного нельзя получить другой. Закрытый ключ держится владельцем в секрете, открытый может передаваться кому угодно. Открытый ключ используется для шифрования сообщения: например, отправитель хочет зашифровать email-сообщение и использует для шифрования открытый ключ получателя, полученный из общедоступного справочника. Получатель сообщения использует свой закрытый ключ для расшифрования email-сообщения. Если он захочет ответить, то зашифрует ответ уже открытым ключом первоначального отправителя, который расшифрует ответ своим закрытым ключом. Наиболее яркими примерами алгоритмов асимметричного шифрования являются RSA и схема Эль-Гамаля (ElGamal), при использовании которых длина ключа должна составлять не менее 2048 бит. Кроме шифрования, асимметричные алгоритмы используются для цифровой подписи (рассмотрим далее) и для защищенного обмена ключами симметричного шифрования (например, в протоколе TLS для обеспечения безопасного доступа к веб-сайтам).
Целостность информации можно проверить за счет вычисления значения хэш-функции от сообщения на стороне отправителя и на стороне получателя с дальнейшей сверкой результата. Хэш-функция — это криптографическое преобразование сообщения любой длины в последовательность бит фиксированного размера. Такое преобразование называется хэшированием, а результат - хэшем, причем из хэша нельзя восстановить исходное сообщение, а даже самое незначительное изменение исходного сообщения приводит к полному изменению хэша от него. Если от разных сообщений получаются одинаковые хэши, то это значит, что хэш-функция недостаточно надежна и допускает коллизии. На практике значение хэша, например, от файла-инсталлятора ПО, публикуют на сайте разработчика, а пользователь после скачивания файла может сам вычислить хэш и сверить его значение с тем, что опубликовано на сайте - если значения совпадают, то пользователь скачал настоящий файл и он не был поврежден или подменен в процессе загрузки. Наиболее яркими примерами алгоритмов хэширования являются хэш-функции MD5 (длина хэша 128 бит, является небезопасным, возможны коллизии), SHA-1 (длина хэша 160 бит, является небезопасным, возможны коллизии), SHA-2 и SHA-3 (длина хэша в зависимости от реализации может быть от 224 до 512 бит, активно используются), а также российский стандарт ГОСТ 34.11-2018 (алгоритм «Стрибог», длина хэша 256 или 512 бит, активно используется).
Подлинность информации можно обеспечить за счет цифровой подписи отправляемого сообщения. Цифровая подпись — это хэш от сообщения, зашифрованный с использованием закрытого ключа автора сообщения (отправителя). Далее, сообщение может быть зашифровано или не зашифровано (если оно не конфиденциально и требуется обеспечить только его подлинность) и отправлено получателю вместе с цифровой подписью и открытым ключом отправителя. Открытый ключ может быть отправлен в виде сертификата цифровой подписи — т.е. набора данных, содержащих открытый ключ, информацию о его владельце (отправителе) и данные о том, какой центр сертификации (или удостоверяющий центр) выдал этот сертификат. Затем получатель с помощью открытого ключа отправителя выполняет расшифрование цифровой подписи сообщения и получает значение хэша, параллельно вычисляет хэш от полученного сообщения и затем сравнивает полученные хэши — если они совпадают, то подпись верна, сообщение подлинное и действительно написано отправителем (владельцем закрытого ключа).
Неотказуемость гарантируется тем, что закрытый ключ, которым автор подписывает хэш сообщения, должен принадлежать только автору, он не может его никому передать, а злоумышленники не могут его похитить. Дополнительно могут использоваться временные метки для сообщений, подписанных цифровой подписью, а в сертификате цифровой подписи могут быть указаны данные пользователя-владельца (ФИО, название компании и подразделения), что позволит однозначно установить авторство сообщения. В России применяется стандарт ГОСТ 34.10-2018 «Процессы формирования и проверки электронной цифровой подписи», а в российском законодательстве используется понятие «усиленная квалифицированная электронная подпись», которая в соответствии с 63-ФЗ равносильна собственноручной подписи гражданина, ей можно заверять любые официальные электронные документы.