Основные понятия криптографии и шифрования, реализация на С++

Вы наверняка слышали такое выражение - ключ шифрования 128 бит. Это значит что длинна ключа 128 бит (двоичная система счисления). 128 бит это 16 двоичных байт. По меркам языка С++ 16 байт это 4 переменные типа int. Что такое ключ шифрования. Например у нас есть исходное сообщение (просто текст) которое нужно зашифровать. И есть алгоритм шифрования. Алгоритм шифрования применяет ключ для зашифровки исходного сообщения, и для расшифровки. Шифрование данных происходит с помощью алгоритмов, которые преобразуют исходные данные в нечитабельный формат с использованием ключа шифрования.

Совершенно абстрактный пример алгоритма шифрования - у нас есть ключ 128 бит. У нас есть исходное сообщение -длинна 256 бит (исходный текст 256 символов длинной). Мы разбиваем исходное сообщение на 2 блока по 128 бит. На каждый блок накладываем ключ. Ключ длинна 128 бит, блок сообщения 128 бит. На один символ исходного сообщения накладывается одно значение из ключа. В зависимости от алгоритма шифрования по разному накладывается ключ на исходное сообщение. Так же при помощи этого ключа можно расшифровать зашифрованное сообщение.

При передаче данных важны два аспекта:

  1. Асимметричное шифрование: Использует пару ключей (публичный и приватный). Публичный ключ используется для шифрования, а приватный — для расшифровки. Перехватить публичный ключ не опасно, так как только владелец приватного ключа может расшифровать данные.
  2. Симметричное шифрование: Использует один и тот же ключ для шифрования и расшифровки. Если ключ перехвачен, данные могут быть расшифрованы. Поэтому безопасность передачи ключа критически важна.

Для симметричного алгоритма есть один ключ для шифрования и расшифровки, а для ассиметричного два - один публичные для шифровки, другой приватный для расшифровки.

Для защиты ключей часто используются дополнительные методы, такие как обмен ключами по защищенным каналам.

Напрмер, ключ шифрования длиной 128 бит используется в симметричных алгоритмах шифрования, таких как AES (Advanced Encryption Standard). Процесс шифрования данных включает несколько этапов:

  1. Генерация ключа: Создается случайный 128-битный ключ, который будет использоваться для шифрования и расшифровки данных.
  2. Разделение данных: Исходные данные разбиваются на блоки фиксированной длины (обычно 128 бит).
  3. Шифрование: Каждый блок данных обрабатывается с использованием алгоритма шифрования и ключа, что приводит к зашифрованному выводу.
  4. Комбинация блоков: Полученные зашифрованные блоки объединяются для формирования итогового шифрованного сообщения.

Исходные данные разбиваются на блоки размером 128 бит в соответствии с размерами блока шифрования, установленного в алгоритме AES. Хотя длина ключа также составляет 128 бит, размер блока и длина ключа — это разные параметры. Размер блока определяет, сколько данных обрабатывается за один раз, и фиксированный размер 128 бит выбран для обеспечения высокой скорости шифрования и эффективности обработки данных.

Вот некоторые популярные алгоритмы шифрования:

Кроме алгоритмов шифрования в криптографии есть шифры. На базе шифров создают алгоритмы шифрования.

Список известных шифров:

Алгоритмы шифрования — это математические процедуры, используемые для преобразования данных в нечитабельный вид с помощью ключа. Они обеспечивают конфиденциальность и целостность информации.

Шифры — это конкретные методы шифрования. Например, шифр Цезаря использует фиксированный сдвиг букв, в то время как шифр Виженера применяет ключевую фразу для сдвига. Алгоритмы шифрования определяют, как шифры работают и какую степень безопасности они обеспечивают.

Рассмотрим как происходит установка соединения по протоколу HTTPS. Это тот же протокол HTTP передачи веб-страниц (гипертекста HTTP) но только secure - приставка буква "S" обозначает "безопасный".

В процессе обмена ключами в HTTPS:

  1. Сервер отправляет свой публичный ключ клиенту вместе с сертификатом, который подтверждает его подлинность.
  2. Клиент использует этот публичный ключ для шифрования временного симметричного ключа, который он генерирует.
  3. Зашифрованный симметричный ключ отправляется серверу.
  4. Сервер расшифровывает этот ключ с помощью своего приватного ключа, который остается секретным.
  5. После этого клиент и сервер используют симметричный ключ для шифрования и расшифровки данных в течение сеанса.

То есть как вы понимаете в протоколе HTTPS используется ловкий способ - сервер отправляет публичный ключ клиенту, клиент шифрует свой симметричный ключ при помощи этого публичного ключа и отправляет серверу, сервер расшифровывает симметричный ключ от клиента при помощи своего приватного ключа, дальше используя симметричный ключ полученный от клиента сервер начинает обмен данными с клиентом.