23. Криптоускорители
23.1. Отличительные особенности
- Инструкция шифрования данных по стандарту DES
- Модуль шифрования по стандарту AES
- Инструкция DES
- шифрация и дешифрация
- одноцикловая инструкция
- шифрация/дешифрация 8-байтного блока за 16 циклов синхронизации
- Модуль AES
- шифрация и дешифрация
- поддержка 128-битных ключей
- поддержка XOR режима загрузки данных в память состояния
- шифрация/дешифрация 16-байтного блока за 375 циклов синхронизации
23.2. Обзор
AES и DES - два наиболее распространенных стандарта шифрования. В микроконтроллерах XMEGA они поддерживаются на уровне модуля AES и инструкции DES.
Стандарт DES поддерживается инструкцией DES ядра AVR XMEGA. Перед выполнением инструкции в регистровый файл необходимо поместить 8-байтный блок ключа и 8-байтный блок данных. После этого, для выполнения шифрации или дешифрации блока данных инструкцию DES нужно выполнить 16 раз.
Модуль AES предназначен для шифрации и дешифрации 128-битных блоков данных с использованием 128-битного ключа. Перед запуском шифрации/дешифрации в модуль необходимо загрузить ключ и данные. Вся процедура шифрации/дешифрации длится 375 циклов синхронизации УВВ, после чего данные могут быть считаны.
23.3. Инструкция DES
Инструкция DES является одноцикловой. Для выполнения шифрации или дешифрации 64-битного (8-байтного) блока данных её необходимо выполнить 16 раз.
Блок ключа и блок данных помещается в регистровый файл перед запуском шифрации/дешифрации. 64-битный блок данных (PLAINTEXT или CIPHERTEXT) помещается в регистры R0-R7, причем младший бит данных помещается в младший бит регистра R0, а старший бит данных - в старший бит регистра R7. 64-битный ключ (вместе с битами паритета) хранится в регистрах R8-R15, причем младший бит ключа в младшем бите R8, а старший бит ключа - в старшем бите R15.
Рисунок 23.1. Использование регистрового файла в ходе шифрации/дешифрации инструкцией DES
Выполнение инструкции DES приводит к исполнению одного цикла алгоритма DES. Для корректной шифрации/дешифрации CIPHERTEXT или PLAINTEXT необходимо выполнить 16 циклов DES. Промежуточные результаты после выполнения каждой инструкции DES сберегаются в регистровом файле (R0-R15). После выполнения 16 циклов, ключ помещается в R8-R16, а зашифрованные/дешифрованные данные CIPHERTEXT/PLAINTEXT - в R0-R7. От операнда инструкции (K) зависит, какой цикл выполняется, а от флага полупереноса (H) в регистре статуса ЦПУ - тип выполняемой операции: шифрация или дешифрация. Если флаг полупереноса равен единице, выполняется дешифрация, а если нулю - шифрация.
Более подробно о работе инструкции DES см. в руководстве по набору инструкций AVR.
23.4. Модуль AES
Модуль AES выполняет шифрацию и дешифрацию в соответствии со стандартом AES (FIPS-197). 128-битный блок ключа и 128-битный блок данных (PLAINTEXT или CIPHERTEXT) должны быть загружены в память ключа и память состояния модуля AES. Это достигается выполнением поочередной записи в регистр ключа и регистр состояния 16 байт.
Программно можно выбрать, что должен выполнить модуль: шифрацию или дешифрацию. Также возможно разрешить режим XOR, в котором ко всем новым данным, помещенным в ключ состояния, и текущим данным в памяти состояния применяется операция исключающего ИЛИ.
Операция шифрации/дешифрации в модуле AES выполняется 375 циклов, после чего данные CIPHERTEXT/PLAINTEXT могут быть считаны из памяти состояния.
Для настройки и использования модуля рекомендуется придерживаться следующей процедуры:
- Разрешение прерываний модуля AES (опционально).
- Выбор направления AES: шифрация или дешифрация.
- Загрузка блока ключа в память ключа модуля AES.
- Загрузка блока данных в память состояния модуля AES.
- Запуск шифрации/дешифрации.
При необходимости шифрации или дешифрации более чем одного блока данных, данную процедуру необходимо выполнить требуемое число раз, начиная с пункта 3.
По завершении процедуры шифрации/дешифрации, устанавливается флаг AES и генерируется опциональное прерывание.
23.4.1. Память ключа и память состояния
Память ключа и память состояния модуля AES - две области памяти с организацией 16 x 8 бит, доступ к которым возможен через регистр ключа (KEY) и регистр состояния (STATE), соответственно.
Для чтения и записи у каждой области памяти имеется два 4-битных указателя адреса. Исходное значение указателей нулевое. После выполнения операции чтения или записи регистра состояния или регистра ключа, происходит автоматическое инкрементирование соответствующего указателя. В результате выполнения доступа (чтение или запись) к регистру управления (CTRL) происходит обнуление всех указателей. К обнулению указателя также приводит его переполнение, когда число выполненных операций чтения или записи превышает 16. Указатели адреса для программы недоступны. При выполнении операции записи в режиме XOR происходит инкрементирование обоих указателей чтения и записи.
Доступ к регистру ключа и регистру состояния возможен только, когда процесс шифрации/дешифрации не выполняется.
Рисунок 23.2. Память состояния с указателями и регистром
В памяти состояния отражается состояние модуля AES в процессе шифрации/дешифрации. Исходным значением для состояния являются исходные данные (т.е. PLAINTEXT в режиме шифрации и CIPHERTEXT в режиме дешифрации). Последним значением состояния являются зашифрованные/дешифрованные данные.
Рисунок 23.3. Память ключа с указателями и регистром
Модулем AES используются следующие определения ключа:
- В режиме шифрации, ключ - это ключ, оговоренный стандартом AES.
- В режиме дешифрации, ключ - это последний подключ расширенного ключа, оговоренный стандартом AES.
В режиме дешифрации, перед выполнением операции модулем AES должна быть программно выполнена процедура расширения ключа. Она необходима для генерации последнего подключа, который в дальнейшем загружается через регистр ключа. Альтернативно, эту процедуру можно выполнить аппаратно в модуле AES. Для этого, нужно обработать фиктивный блок данных в режиме шифрации с использованием того же ключа. По окончании процедуры шифрации, последний подключ может быть считан из памяти ключа, что собственно и требуется от процедуры расширения ключа. В таблице 23.1 демонстрируются результаты чтения ключа в различных режимах (шифрация или дешифрация) и состояниях модуля AES.
Таблица 23.1. Результат чтения памяти ключа на различных этапах
Шифрация |
Дешифрация |
перед обработкой данных |
после обработки данных |
перед обработкой данных |
после обработки данных |
Тот же ключ, что и был загружен |
Последний подключ, синтезированный из загруженного ключа |
Тот же ключ, что и был загружен |
Исходный ключ, синтезированный из последнего загруженного подключа |
23.4.2. Поддержка DMA
Модуль AES поддерживает возможность запуска DMA-передачи по завершении процедуры шифрации/дешифрации. Более подробно о запуске DMA-передачи см. в 5.4 "Запуск передачи".
|