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-128 | 128 бит | 128 бит | 10 |
| AES-192 | 192 бита | 128 бит | 12 |
| AES-256 | 256 бит | 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, на вход и на выход.
Источники
- 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 стандарту не соответствуют
- 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; все счётчики под одним ключом должны быть различны, и не только в пределах одного сообщения
- 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-битных данных
- 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
Нашли ошибку?
Смотрите также
- Шифрование флеш-памятиПрошивка во внешней памяти в зашифрованном виде: XTS-AES, ключи в чипе
- Криптографическая хеш-функция (SHA)Функция, сжимающая сообщение в дайджест, к которому нельзя подобрать другое сообщение
- Аппаратный генератор случайных чиселБлок микроконтроллера, который выдаёт случайные числа на основе физического шума
- Безопасная загрузкаЗапуск только подписанной прошивки: подпись, ключи в OTP, откат версий
- TLSШифрованный канал поверх TCP: рукопожатие, сертификаты, буферы и время на МК
- STM32L0Cortex-M0+, до 32 МГц, малое потребление: L010, L0x1, L0x2 с USB, L0x3 с ЖКИ — линейки и распиновки
- STM32L1Cortex-M3, до 32 МГц, малое потребление: L100, L151, L152 и L162 с ЖКИ и AES — линейки и распиновки