Перейти к содержанию

AES (Advanced Encryption Standard)

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

Обновлено Редакция GAW

AES (Advanced Encryption Standard) — стандартный блочный шифр NIST, описанный в FIPS 197. По стандарту это три представителя семейства шифров Rijndael — AES-128, AES-192 и AES-256: все они шифруют данные блоками по 128 бит, а число в названии — длина ключа в битах.

Ключ и раунды (FIPS 197)

ВариантКлючБлокРаундов Nr
AES-128128 бит128 бит10
AES-192192 бита128 бит12
AES-256256 бит128 бит14

Каждый раунд — фиксированная последовательность преобразований 16-байтного «состояния». Из ключа процедура KeyExpansion получает Nr + 1 раундовых ключей. Другие сочетания длины ключа и блока, которые допускает Rijndael, стандарту AES не соответствуют.

Режимы

Один блок — это 16 байт. Длинное сообщение шифруют в одном из режимов NIST SP 800-38A:

  • ECB — каждый блок независимо; одинаковые блоки всегда дают одинаковый шифротекст, и NIST предупреждает: если это нежелательно, ECB не применяют;
  • CBC — блок перед шифрованием складывается по XOR с предыдущим шифроблоком, первый — с вектором инициализации; вектор не обязан быть секретным, но должен быть непредсказуемым;
  • CTR — шифруются блоки-счётчики, результат складывается с данными по XOR; все счётчики под одним ключом должны быть различны, в том числе между сообщениями.

Аппаратный AES в микроконтроллерах

У STM32L0 с ускорителем (RM0377, разд. 15) — FIPS 197, ключ 128 бит, режимы ECB, CBC и CTR, 213 тактов на блок, только 32-битные обращения и два канала DMA. Аналогичный блок описан для STM32L162 (RM0038, гл. 23). На основе AES работает и шифрование флеш-памяти ESP32, а ключи и векторы инициализации берут из генератора случайных чисел.

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

Частые вопросы

Чем AES-128 отличается от AES-256?

Только длиной ключа и числом раундов: 128 бит и 10 раундов против 256 бит и 14 раундов, есть и промежуточный AES-192 с 12 раундами. Блок у всех трёх один — 128 бит (FIPS 197). Аппаратные ускорители поддерживают не все длины: AES в STM32L0 работает только с 128-битным ключом.

Что такое режимы ECB, CBC и CTR?

Способы шифровать сообщение длиннее одного 128-битного блока. ECB шифрует каждый блок независимо, и одинаковые блоки дают одинаковый шифротекст. CBC перед шифрованием смешивает блок с предыдущим шифроблоком, начиная с вектора инициализации. CTR шифрует счётчик и складывает результат с данными по XOR, превращая блочный шифр в потоковый. Аппаратный AES STM32L0 поддерживает все три.

Сколько времени шифрует аппаратный AES STM32L0?

По RM0377 — 213 тактов на 128-битный блок. При тактовой частоте 32 МГц это около 6,7 мкс на 16 байт, примерно 2,4 МБ/с без учёта загрузки данных (наш расчёт). Данные подают 32-битными словами, удобно — через два канала DMA, на вход и на выход.

Источники

  1. NIST. FIPS 197-upd1: Advanced Encryption Standard (AES), published November 26, 2001, updated May 9, 2023 — стандарт задаёт три представителя семейства Rijndael — AES-128, AES-192 и AES-256; все преобразуют данные блоками по 128 бит, число в названии — длина ключа в битах; раунд — последовательность преобразований состояния, повторяемая Nr раз; Nr = 10, 12 и 14 для AES-128, AES-192 и AES-256; из ключа получают Nr + 1 раундовых ключей по четыре слова (KeyExpansion); табл. 3 — сочетания длины ключа Nk, размера блока Nb и числа раундов Nr; другие конфигурации Rijndael стандарту не соответствуют
  2. NIST. Dworkin M. SP 800-38A: Recommendation for Block Cipher Modes of Operation — Methods and Techniques, December 2001 — разд. 6.1: ECB — при данном ключе каждому блоку открытого текста соответствует фиксированный блок шифротекста, блоки шифруются независимо; одинаковые блоки всегда дают одинаковый шифротекст, и если это нежелательно, ECB применять нельзя; разд. 6.2: CBC — блок открытого текста перед шифрованием складывается по XOR с предыдущим блоком шифротекста, первый — с вектором инициализации IV; IV не обязан быть секретным, но должен быть непредсказуемым; разд. 6.5: CTR — шифруются блоки-счётчики, результат складывается с открытым текстом по XOR; все счётчики под одним ключом должны быть различны, и не только в пределах одного сообщения
  3. STMicroelectronics. RM0377: Ultra-low-power STM32L0x1 advanced Arm-based 32-bit MCUs. Reference manual, Rev 10 — разд. 15.1–15.2: аппаратный ускоритель AES полностью соответствует FIPS 197 (ноябрь 2001); режимы ECB, CBC и CTR, ключ 128 бит; 32-битная периферия AHB, только 32-битные одиночные обращения; DMA одиночными передачами, два канала — для входных и выходных данных; блок 128 бит, 213 тактов на блок; встроенное формирование раундовых ключей с этапом получения ключа для расшифровки ECB и CBC; 128-битные регистры ключа и вектора инициализации (в CTR — начальное значение 32-битного счётчика); перестановка данных для 1-, 8-, 16- и 32-битных данных
  4. STMicroelectronics. RM0038: STM32L100xx, STM32L151xx, STM32L152xx and STM32L162xx advanced Arm-based 32-bit MCUs. Reference manual, Rev 18 — гл. 23 Advanced encryption standard hardware accelerator (AES), разд. 23.2 — основные возможности аппаратного AES в STM32L162

Нашли ошибку?