0Pricing
Cryptology Academy · Урок

Основы блочных шифров и дополнение

Разберитесь в размере блока, дополнении PKCS7 и структуре шифра

«Основы блочных шифров и дополнение» — бесплатный урок Cryptology Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cryptology Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cryptology Academy содержит 4 уроков всего.

Добро пожаловать

Блочные шифры шифруют блоки фиксированного размера. Когда открытый текст не заполняет блок полностью, требуется дополнение. На этом уроке вы освоите структуру блочных шифров, схемы дополнения и причины их важности.

Повторение размера блока

AES использует блоки размером 128 бит (16 байт). DES использовал блоки размером 64 бита (8 байт). Если открытый текст содержит ровно 16 байт, это один блок. Для 17 байт требуются два блока.

Зачем требуется дополнение

Если открытый текст содержит 20 байт, второй блок содержит только 4 байта. Шифру нужен полный блок размером 16 байт. Оставшиеся 12 байт дополняются детерминированной обратимой схемой.

Дополнение PKCS#7

PKCS#7 дополняет данные N байтами, каждый из которых имеет значение N: - Требуется 3 байта → добавить: 03 03 03 - Требуется 12 байт → добавить: 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C - Требуется 0 байт → добавить полный блок из 16 байт: 10×16

Всегда добавляйте один полный блок

Если открытый текст содержит ровно 16 байт, PKCS#7 добавляет ещё один полный блок 0x10×16. Благодаря этому получатель всегда знает, где заканчивается дополнение: значение последнего байта указывает, сколько байт нужно удалить.

PKCS#7 в Python

def pkcs7_pad(data: bytes, block_size: int = 16) -> bytes: n = block_size - (len(data) % block_size) return data + bytes([n] * n) def pkcs7_unpad(data: bytes) -> bytes: n = data[-1] return data[:-n]

Атаки с использованием оракула дополнения

Если сервер раскрывает, является ли дополнение корректным после расшифрования (через сообщение об ошибке или время выполнения), атакующий может расшифровать шифротекст побайтно, не зная ключа. В 2010 году это нарушило безопасность ASP.NET ViewState.

Дополнение нулевыми байтами и ANSI X.923

Дополнение нулевыми байтами: дополнение байтами 0x00 (неоднозначно — исходные данные могли заканчиваться нулевыми байтами). ANSI X.923: дополнение нулевыми байтами, последний байт = количество байт. ISO 7816-4: первый байт дополнения = 0x80, остальные = 0x00. PKCS#7 однозначен и предпочтителен.

Побитовый режим дополнения (CTS)

Заимствование шифротекста (CTS) полностью устраняет необходимость в дополнении: оно переставляет последние два блока, чтобы обработать входные данные неполного блока. Используется в шифровании дисков (Kerberos и некоторые реализации AES).

Влияние размера блока на безопасность

Для блоков размером 64 бита (DES, 3DES, Blowfish): коллизия типа «дней рождения» возникает после 2^32 блоков (около 32 GB). Браузеры отключили 3DES в TLS после атаки SWEET32, продемонстрировавшей эту проблему в 2016 году. Для блоков AES размером 128 бит требуется 2^64 блоков — на практике это безопасно.

Режимы без дополнения

AES-CTR и AES-GCM не требуют дополнения: они используют блочный шифр как генератор потока ключа и выполняют операцию XOR над входными данными произвольной длины. Граница блока является внутренней деталью реализации.

Краткая проверка

Какое дополнение добавляется к сообщению длиной 13 байт при использовании PKCS#7 с блоками размером 16 байт?

Итоги

Вы освоили дополнение для блочных шифров! Далее мы сравним режимы ECB и CBC — начиная со знаменитой атаки с пингвином в режиме ECB.

Часто задаваемые вопросы

Урок «Основы блочных шифров и дополнение» бесплатный?

Да — полный текст урока «Основы блочных шифров и дополнение» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cryptology Academy, подпишись на CoddyKit PRO. Курс Cryptology Academy содержит 4 уроков всего.

Чему я научусь в уроке «Основы блочных шифров и дополнение»?

Разберитесь в размере блока, дополнении PKCS7 и структуре шифра Ты практикуешь Cryptology Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cryptology Academy?

Предыдущий опыт не требуется. Cryptology Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Основы блочных шифров и дополнение»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cryptology Academy?

Да. Каждый урок Cryptology Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы блочных шифров и дополнение
  2. ECB и CBC: закономерности и векторы инициализации
  3. Режим CTR и поведение потокового шифра
  4. GCM и аутентифицированное шифрование
← Назад к Cryptology Academy