ads slot

Latest Posts:

Срочно нужен инженер схемотехник! Опыт проектирования схем в Altium Designer; ТК; Подробнее здесь

КРИПТОГРАФИЧЕСКИЙ СОПРОЦЕССОР СЕМЕЙСТВА STM32F4XX


Компания STMicroelectronics разгрузила ARM-ядро своего нового семейства микроконтроллеров STM32F4xx, введя в эти контроллеры отдельный блок криптографического ускорителя для решения задач шифрования данных. Автор статьи, сотрудник ОАО «ИнфоТеКС», подробно рассматривает работу этого ускорителя.Многие производители ARM-процессоров добавляют в свои изделия специальные аппаратные блоки - криптографические ускорители, которые работают отдельно от основного ARM-ядра. Таким образом, ядро ARM может практически не участвовать в криптографических процессах, сохраняя свои ресурсы для выполнения тех задач, с которыми оно справляется наилучшим образом. К таким задачам можно отнести обслуживание обмена с периферийными устройствами, обработку данных, реализацию беспроводного обмена с другими устройствами, управляющие и другие прикладные алгоритмы.Компания STMicroelectronics, следуя мировым тенденциям, добавила в свои новейшие микроконтроллерыSTM32F415/STM32F417 с 32-разрядным ядром ARM Cortex-M4F криптографический ускоритель, проверенный на микроконтроллерах STM32F215/STM32F217 с ядром ARM Cortex-M3. Ускоритель позволяет шифровать данные по алгоритмам DES/TDES/AES, вычислять хеш-функции SHA-1/MD5/HMAC и генерировать случайные числа. Повышение максимальной тактовой частоты со 120 МГц (для STM32F2xx) до 168 МГц (для STM32F4xx) позволило повысить и производительность криптографического ускорителя.Мир все сильнее и сильнее опутывается сетью коммуникаций. Список угроз безопасности передачи данных продолжаетрасти. В него постоянно добавляются новые способы взлома, мошенничества, новые вредоносные программы и новые типы вирусов. В сегодняшнем, перегруженном коммуникациями, мире возможности для жульничества или воровства часто реализуются одним кликом мышки или одним касанием сенсорного экрана портативного компьютера. Важная персональная и конфиденциальная информация, расположенная в сети интернет, ежедневно передается через беспроводные соединения миллионами людей по всему миру. Кроме того через беспроводные соединения передается информация от большого количества датчиков телеметрических систем сбора и обработки информации, а также сигналы управления промышленными объектами и процессами и транспортными средствами.Многие производители перемещают криптографическую обработку данных в аппаратные блоки своей продукции. Ускоренная аппаратная криптографическая обработка вместо программного выполнения этих же алгоритмов позволяет разгрузить центральный процессор для выполнения алгоритмов управления и поддержки пользовательского интерфейса.
Криптография имеет дело с кодированием или шифрованием обмена данными, чтобы сделать сообщения скрытыми от всех лиц, за исключением авторизованных для декодирования или расшифровывания. С помощью криптографии реализуется ряд защищенных протоколов обмена данными: с одной стороны канала данные перед их передачей зашифровываются; на другой стороне происходит расшифровывание данных, при этом они преобразуются обратно в понятную форму. Шифрование происходит с использованием специального блока данных, который называется ключом, и длина которого зависит от используемогоалгоритма шифрования. Исходные данные, подлежащие зашифровыванию, называются открытым текстом, данные после криптографической обработки называются криптограммой или шифротекстом.В современных системах с помощью криптографии решаются четыре основные задачи:
1. Обеспечение конфиденциальности сообщений;
2. Аутентификация;
3. Обеспечение целостности данных;
4. Невозможность отказаться от авторства.
Эти задачи защиты данных реализованы в большом количестве пользовательских приложений, постоянно разворачиваемых во всем мире, включая просмотр Web-страниц, электронную коммерцию, защищенные беспроводные сети, виртуальные защищенные сети (virtual private networks, VPN) и многое другое.
Используются четыре основных вида криптографических преобразований:
1. Криптография с симметричным (или закрытым) ключом;
2. Криптография с асимметричным (или открытым) ключом;
3. Вычисление хэш-функций;
4. Генерация случайных и псевдослучайных (с заданным алгоритмом формирования последовательности) чисел.
В криптографии с симметричным ключом оба участника обмена имеют один и тот же ключ, называемый «секретным» (или закрытым), который используется как для зашифровывания, так и для расшифровывания сообщений (рис. 1).
Криптография с симметричным ключом
Рис. 1. Криптография с симметричным ключом
Этот закрытый ключ необходимо держать в секрете, чтобы предотвратить возможность расшифровать и прочитать передаваемые сообщения со стороны третьих лиц (называемых нарушителями). Термин «симметричный» применяется постольку, поскольку пользователи на обеих сторонах канала обмена данными используют один и тот же ключ. Симметричный ключ также называется парным, поскольку служит для шифрования сообщений, передаваемых между двумя пользователями. Основной проблемой в этой схеме является защищенная передача секретного ключа. Канал, с помощью которого осуществляется такая передача, называется доверенным каналом. Дополнительную защиту сообщения при использовании симметричной криптографии можно получить за счет использования имитовставки, которая вычисляется на основе исходных открытых данных по специальному алгоритму и гарантирует неизменность передаваемых данных.
СИММЕТРИЧНОГО ШИФРОВАНИЯ
В зарубежных микроконтроллерах для шифрования на симметричном ключе наиболее часто используют следующие криптографические алгоритмы:
  • Data Encryption Standard (DES)- Алгоритм шифрования DES разработан в 1970-е годы. Хотя он широко использовался все эти годы, из-за малой длины ключа сейчас он не обладает достаточной криптостойкостью и заменен другими алгоритмами шифрования;
  • Triple Data Encryption Standard (TDES)- TDES, для усиления защиты данных по сравнению с алгоритмом DES, выполняет трехкратное шифрование по алгоритму DES с тремя ключами;
  • Advanced Encryption Standard (AES)- AES является одним наиболее широко используемых современных алгоритмов шифрования данных. На данный момент алгоритм AES является стандартом шифрования данных.
В таблице 1 дана сравнительная характеристика алгоритмов шифрования DES/TDES/AES.
Таблица 1. Сравнение алгоритмов шифрования DES/TDES/AES  
Алгоритм/Размер ключаAESDESTDES
128192256641)642)1283)1924)
Размер блока, бит1286464
Время обработки одного блока, тактов HCLK1416181648
Тип шифраБлочныйБлочныйБлочный
Тип сетиПодстановочно-перестановочнаяФейстеляФейстеля
Первая публикация (стандарт)19981977
(январь 1979)
1998
(ANS X9.52)
Примечание: 1) 8 бит четности;
2) 8 бит четности. Тип ключа 1;
3) 16 бит четности. Тип ключа 2;
4) 24 бита четности. Тип ключа 3.
В статье будет рассмотрен блок CRYP, позволяющий на аппаратном уровне шифровать данные и сообщения с использованием алгоритмов DES/TDES/AES.
Криптография с асимметричным ключом использует пару ключей, находящихся в такой математической зависимости, что информацию, зашифрованную одним ключом, можно расшифровать только другим ключом. Один из этих ключей называется открытым или публичным, а второй - закрытым или секретным. Оба ключа создаются одновременно по особому алгоритму, который гарантирует, что по одному ключу крайне трудно получить другой ключ. Секретность шифрования обеспечивается исключительно надежностью хранения закрытого ключа, которая может быть обеспечена относительно простыми способами. Открытый же ключ может распространяться свободно.
Для криптографии с асимметричным ключом существует два основных применения: шифрование (рис. 2а) и аутентификация (рис. 2б).
Криптография с асимметричным ключом - шифрование
Рис. 2. Криптография с асимметричным ключом - шифрование
Зашифрованное открытым ключом сообщение передается по открытому каналу владельцу секретного ключа. Только пользователь закрытого ключа, созданного в паре с открытым, которым было зашифровано сообщение, сможет его прочитать. Аутентификация сообщений чаще всего реализуется с использованием электронной цифровой подписи (ЭЦП), которая обычно формируется на основе хэш-функции сообщения с помощью секретного ключа отправителя. Получатель, имеющий соответствующий открытый ключ отправителя, сможет проверить подпись и узнать, что сообщение является аутентичным.
Одним из типов криптографических алгоритмов, использующихся в асимметричной криптографии, являютсяфункции хэширования или хэш-функции (рис. 3). Функция хеширования применяется к данным для получения последовательности битов фиксированной длины, уникальной для каждого сообщения, или блока данных - значения хэша (hash value). Даже незначительные несанкционированные или нежелательные изменения данных изменяют значение хэш-функции.
Хэш-функция
Рис. 3. Хэш-функция
Хэширование используется для формирования электронной цифровой подписи, обеспечения целостности данных, невозможности отказа от авторства, аутентификации сообщений и других видов аутентификации.
Некоторые алгоритмы хэширования были стандартизованы и получили широкое распространение, включая следующие:
  • Message Digest Algorithm (MD5)- Хотя эта функция хэширования была широко распространена, она имеет уязвимости и не используется в критичных приложениях;
  • Secure Hash Algorithm (SHA)- SHA имеет несколько модификаций, наиболее криптостойкой считается 256-битная;
  • Hash-based Message Authentication Code (HMAC)- Основанный на хэш-функциях алгоритм аутентификации.
Рассмотренный в статье блок HASH позволяет на аппаратном уровне вычислять хэш-функции MD5 и SHA.Для аутентификации можно использовать реализованный в блоке алгоритм HMAC.
Шифрование и аутентификация могут использоваться совместно. Отправитель может вначале зашифровать сообщение открытым ключом получателя, затем подписать собственным закрытым ключом. Получатель вначале будет использовать открытый ключ отправителя для проверки подлинности сообщения, и затем собственный закрытый ключ для расшифровки сообщения.
Проверенный специальным центром сертификации открытый ключ помещается в состав специальной структуры данных (сертификата), которая кроме самого ключа содержит данные о владельце ключевой пары, об организации, выпустившей сертификат, сроке его действия и некоторые другие. Наиболее известным мировым сервисом сертификации открытых ключей является Verisign. Следует упомянуть, что сертификаты открытых ключей можно проверить с использованием третьей стороны (которая называетсяудостоверяющим центром), обеспечивающей подтверждение того, что ключ принадлежит именно пользователю, подписавшему сообщение. Глобальная инфраструктура, возникающая при использовании асимметричных ключей, называется инфраструктурой открытого ключа (Public Key Infrastructure, PKI)
Важной составной частью многих криптографических приложений является генератор (датчик) случайных чисел - ДСЧ. Случайные числа используются в таких важных криптографических задачах, как генерация ключей и вычисление гаммы для наложения на поток данных с целью их зашифровывания/расшифровывания. Для вычисления гаммы используются случайные числа, генерируемые программным способом. Хотя они не являются истинно случайными числами, но программная реализация при использовании одинаковых начальных значений (которые называются синхропосылки, или вектора инициализации - IV) позволяет формировать достаточно длинные одинаковые последовательности случайных чисел. Случайные числа, генерируемые аппаратным способом, больше приближаются к истинно случайным числам и обычно используются для генерации ключей или начальных значений для программных генераторов случайных чисел (синхропосылок).
Для аппаратной генерации случайных чисел предназначен рассмотренный в статье блок RNG.
Загрузка основного процессора системы выполнением криптографического кода с высокой интенсивностью вычислений может увести далеко от выполнения кода пользовательского приложения и значительно замедлить производительность системы на прикладных задачах. Современные встраиваемые процессоры все чаще оборудуются аппаратными ускорителями для выполнения криптографических функций, которые разгружают процессор от этих функций и позволяют больше времени уделять выполнению прикладных алгоритмов. В результате происходит оптимизация производительности системы.
Переход к более эффективным методам криптографической обработки был выполнен плавно и абсолютно прозрачно для разработчиков. В прошлом при выполнении алгоритмов защиты ядро ARM вызывало специальные функции API, и необходимые алгоритмы выполнялись непосредственно ядром ARM. В настоящее время при наличии аппаратных криптографических ускорителей ядро ARM вызывает те же самые функции криптографического API, но сами алгоритмы теперь выполняются специализированным криптографическим модулем, а не ядром ARM. Перенос криптографической обработки с ядра ARM на отдельный аппаратный модуль значительно уменьшил влияние задач защиты на выполнение других прикладных задач.
Микроконтроллеры семейства STM32F4xx компании STMicroelectronics представляют собой высокопроизводительные встраиваемые процессоры с 32-разрядным ядром ARM Cortex-M4F, сопроцессором арифметики с плавающей точкой одинарной точности FPU и богатым набором периферийных модулей. Блок-схема микроконтроллеров STM32F4xx приведена на рисунке 4, а основные характеристики - в таблице 2.
Блок-схема микроконтроллеров семейства STM32F4xx
Рис. 4. Блок-схема микроконтроллеров семейства STM32F4xx
Таблица 2. Основные характеристики микроконтроллеров семейства STM32F4xx  
Технические характеристики/НаименованиеF4x5RGF4x5VGF4x5ZGF4x7VxF4x7ZxF4x7Ix
Объем Flash памяти, кбайт1024512102451210245121024
Объем ОЗУ, кбайтСистемное192 (112+16+64)
Резервное4
Контроллер FSMC памятиНетДа
Интерфейс EthernetНетДа
ТаймерыОбщего
назначения
10
С расширенным управлением2
Базовые2
Генератор случайных чиселДа
Интерфейсы обмена даннымиSPI / I2S3/2 (полный дуплекс)
I2C3
USART/UART4/2
USB OTG FSДа
USB OTG HSДа
CAN2
Интерфейс видеокамерыНетДа
Крипто-ядроДа (только для F415/17)
Линии GPIO518211482114140
12-разрядный АЦП3
Количество каналов161624162424
12- разрядный ЦАПДа
Количество каналов2
Максимальная частота CPU, МГц168
Рабочее напряжение питания, В1,8...3,6
Рабочая температура, °CОкружающей
среды
-40...85/-40...105
Кристалла-40...125
Тип корпусаLQFP64LQFP100LQFP144LQFP100LQFP144UFBGA176
LQFP176

На рисунке 4 красной рамкой обведены блоки криптопроцессора, которые и будут подробно рассмотрены далее. К этим блокам относятся:
1. Криптографический процессор CRYP, реализующий на аппаратном уровне алгоритмы DES/TDES/AES;
2. Процессор вычисления хэш-функций HASH, позволяющий вычислять хэш-функции по алгоритмам SHA-1/MD5 и коды аутентификации сообщений (имитовставки) на HMAC основе хэш-функций;
3. Генератор (датчик) случайных чисел RNG, позволяющий на основе аналоговых генераторов шума получать 32-разрядные случайные числа.
Криптографический процессор (CRYP) расположен на 32-разрядной высокоскоростной шине AHB2 и предназначен для зашифровывания/расшифровывания данных в режимах электронного одноразового блокнота (Electronic Codebook, ECB) или зацепления по шифротексту (Cipher block chaining, CBC) для алгоритмов DES, Triple-DES и в режиме со счетчиком (Counter mode, CTR) для алгоритма AES. Для алгоритма DES длина ключа составляет 64 бита, для TDES - 64, 128 или 192 бит, для AES - 128, 192 или 256 бит. В режимах CBC и CTR используется синхропосылка или вектор инициализации (Initialization Vector, IV) длиной в четыре 32-разрядных слова.
Модуль CRYP имеет аппаратную реализацию перечисленных алгоритмов, полностью совместимую со следующими стандартами:
  • Стандарт шифрования данных DES и Triple-DES (), разработанный IBM Inc., как определено в публикации FIPS PUB 46-3 от 25 октября 1999 г. и предыдущем стандарте ANSI X9.52 от 1998г;
  • Современный стандарт шифрования данных AES, как определено в публикации FIPS PUB 197 от 26 ноября 2001г.
Алгоритмы TDES и AES являются блочными шифрами, поэтому неполные блоки входных данных перед зашифровыванием необходимо дополнять некоторыми данными (в конец последнего блока сообщения необходимо записывать некоторые данные). После расшифровывания дополнение необходимо отбрасывать. Аппаратный блок не может управлять операцией добавления/отбрасывания данных, поэтому этим должно заниматься программное обеспечение.
Модуль CRYP обеспечивает автоматический контроль потока данных с поддержкой прямого доступа к памяти (DMA) (используется два канала: один - для приема входных данных, другой - для выдачи обработанных данных) и имеет входной (IN) и выходной (OUT) буферы FIFO, глубиной восемь слов каждый, соответствующие четырем блокам DES/TDES или двум блокам AES. Логика перестановки данных обеспечивает работу с 1-, 8-, 16- или 32-разрядными данными.
В таблице 3 приведены данные по производительности криптоускорителя.
Таблица 3. Производительность криптоускорителя в Мбайт/сек*  
Алгоритм/Размер ключаAES-128AES-192AES-256DESTDES
Тип ядраCM3CM4CM3CM4CM3CM4CM3CM4CM3CM4
Аппаратная (теоретическая)137,14192,00120,00168,00106,67149,3360,0084,0020,0028,00
Аппаратная без DMA51,8972,6451,8972,6444,6562,5130,9743,3511,4316,00
Аппаратная с DMA128,00192,00120,00168,00106,67149,3360,0084,0020,0028,00
Чисто программная0,991,380,821,140,690,960,530,740,180,25
* – при тактовой частоте ядра Cortex-M3 (CM3) 120 МГц и частоте ядра Cortex-M4F (CM4) 168 МГц.

Криптографический процессор состоит из ядра, реализующего алгоритмы DES/TDES/AES буферов входных/выходных данных, регистров хранения ключей/синхропосылки, регистров состояния и регистров управления.
На рисунке 5 показана блок-схема криптографического процессора, на рисунке 6 - флаги и прерывания, а в таблице 4 - описание регистров.
Блок-схема криптографического процессора
Рис. 5. Блок-схема криптографического процессора

Прерывания и флаги криптографического процессора
Рис. 6. Прерывания и флаги криптографического процессора
Таблица 4. Краткое описание регистров криптографического процессора
ОбозначениеФункция
CRYP_DINРегистр ввода данных
IN FIFOВходной буфер размером восемь 32-разрядных слов
Swapping logicЛогика перестановки битов/байтов/полу-слов
DES/TDES/AES Processor coreКриптографическое ядро, реализующее алгоритмы шифрования
OUT FIFOВыходной буфер размером восемь 32-разрядных слов
CRYP_DOUTРегистр вывода данных
Key CRYP_K0...K3Регистры ключей (64-разрядные)
Initialization Vectors CRYP_IV0….IV1Регистры синхропосылки (вектора инициализации)
CRYP_SRРегистр состояния
CRYP_DMACRРегистр управления контроллером прямого доступа к памяти
CRYP_IMSCRРегистр установки/очистки маски прерываний
CRYP_RISРегистр состояния сырых прерываний
CRYP_MISRРегистр состояния маскированных прерываний
CRYP_CRРегистр управления

Перейдем к подробному описанию алгоритмов шифрования.
Криптографическое ядро для алгоритма DES/Triple-DES состоит из трех компонентов:
  • Блока реализации алгоритма DES (DEA);
  • Хранилища ключей. Ключ = [K1] для DES, и Ключ = [K3 K2 K1] для TDES. Ключ [K0] не используется;
  • Генератора синхропосылки (для режима CBC).
В режиме TDES выполняется следующий порядок действий:
  • Входной блок считывается DEA и зашифровывается с первым ключом, K1;
  • Выходной блок расшифровывается с использованием второго ключа, K2, и зашифровывается с использованием третьего ключа, K3.
Результирующий выходной блок используется как шифротекст/открытый текст.
Следует отметить, что выходы промежуточных ступеней DEA недоступны за пределами криптографического ядра.
В режиме TDES допустимы три различных варианта использования ключей (таблица 5).
Таблица 5. Варианты использования ключей в режиме TDES  
Три независимых ключаКлючи K1, K2 и K3 независимы. FIPS PUB 46-3 – 1999
(и ANSI X9.52 – 1998) ссылается на этот режим как на «Keying Option 1», или TDES с тремя ключами.
Два независимых ключаКлючи K1 и K2 независимы, а K3 = K1. FIPS PUB 46-3 – 1999 (и ANSI X9.52 – 1998) ссылаются на этот режим как на «Keying Option 2» или TDES с двумя ключами.
Три одинаковых ключаКлючи K1, K2 и K3 одинаковы, т.е., K1 = K2 = K3. FIPS PUB 46-3 – 1999 (и ANSI X9.52 – 1998) ссылается на третий режим как на «Keying Option 3». Этот «одноключевой» TDES эквивалентен режиму DES.
Документ FIPS PUB 46-3 - 1999 (и ANSI X9.52-1998) дает полное описание режимов обработки информации, реализованных в TDEA. Рассмотрим подробно работу DEA в каждом из этих режимов.
Алгоритмы зашифровывания и расшифровывания в режиме DES-ECB/TDES-ECB совпадают и отличаются только порядком применения ключей шифрования K1...K3 (рисунок 7 и рисунок 8).
Зашифровывание в режиме DES-ECB/TDES-ECB
Рис. 7. Зашифровывание в режиме DES-ECB/TDES-ECB

Режим расшифрования DES-ECB/TDES-ECB
Рис. 8. Режим расшифрования DES-ECB/TDES-ECB
Зашифровывание/расшифровывание происходит следующим образом:
  • Входной 64-битный блок открытого текста (P)/шифротекста (C) считывается из входного буфера IN FIFO;
  • После перестановки битов/байтов/полуслов полученный входной блок (I) обрабатывается DEA в режиме зашифрования с ключом K1/K3;
  • Блок данных с выхода DEA (O) возвращается на его вход и обрабатывается в режиме расшифровывания с ключом K2;
  • Блок данных с выхода DEA (O) возвращается на его вход и обрабатывается в режиме зашифровывания с ключом K3/K1;
  • Блок данных с выхода DEA (O) после обратной перестановки битов/байтов/полуслов образует шифротекст (C)/открытый текст (P) и пересылается в выходной буфер OUT FIFO.

ЗАШИФРОВЫВАНИЕ В РЕЖИМЕ DES-CBC/TDES-CBC
Зашифровывание в режиме DES-CBC/TDES-CBC происходит следующим образом (рисунок 9):
  • Первый 64-битный блок открытого текста (P) считывается из входного буфера IN FIFO и после перестановки, образует блок (Ps). Блок (Ps) складывается по модулю 2 с 64-разрядной синхропосылкой (IV), образуя входной блок (I= IV Е Ps) для шифрования ядром DEA;
  • Входной блок (I) обрабатывается ядром DEA в режиме зашифровывания, как это было описано выше;
  • Блок данных с выхода DEA (O) записывается на место исходной синхропосылки (IV) и после перестановки образует шифротекст (C). Новое значение синхропосылки (IV) используется для зашифрования следующего блока. Шифротекст (C) пересылается в выходной буфер OUT FIFO;
  • Блок данных с выхода DEA (O) при зашифровании второго блока записывается на место синхропосылки (IV) и используется для зашифрования третьего блока и т.д.

Зашифровывание в режиме DES-CBC/TDES-CBC
Рис. 9. Зашифровывание в режиме DES-CBC/TDES-CBC
Если сообщение содержит неполное количество блоков, то последний блок зашифровывается способом, определяемым конкретным приложением.
РАСШИФРОВЫВАНИЕ В РЕЖИМЕ DES-CBC/TDES-CBC
Расшифровывание в режиме DES-CBC/TDES-CBC происходит следующим образом (рисунок 10):
  • Первый 64-битный блок шифротекста (C) после перестановки используется непосредственно в качестве входного блока (I);
  • Входной блок (I) обрабатывается ядром DEA в режиме расшифровывания, как это было описано выше;
  • Блок обработанных данных с выхода DEA (O) после сложения по модулю 2 с начальной синхропосылкой (IV) образует блок переставленных открытых данных (Ps= IV Е O);
  • После перестановки блок исходных открытых данных (P) пересылается в выходной буфер OUT FIFO;
  • При расшифровывании второго блока в качестве синхропосылки (IV) используется переставленный блок (I) шифротекста (C) первого блока и т.д.

Расшифровывание в режиме DES-CBC/TDES-CBC
Рис. 10. Расшифровывание в режиме DES-CBC/TDES-CBC

Криптографическое ядро для алгоритма AES состоит из трех компонентов:
  • Блока реализации алгоритма AES (AEA);
  • Хранилища ключей [K3, K2, K1, K0]. Ключ = [K3, K2] для 128-битного ключа; Ключ = [K3, K2, K1] для 192-битного ключа; Ключ = [K3, K2, K1, K0] для 256-битного ключа;
  • Генератора синхропосылки (IV) для режима CBC.
Ядро AES использует ключи трех возможных размеров: 128, 192 или 256 (таблица 6).
Таблица 6. Особенности реализации алгоритма AES в зависимости от длины ключа  
АлгоритмДлина ключа, бит (Nk, слов)Размер блока, бит (Nb, слов)Количество раундов, NrВремя обработки 1 блока, тактов HCLK
AES-128128 (4)128 (4)1014
AES-192192 (6)128 (4)1216
AES-256256 (8)128 (4)1418
В режиме AES выполняется следующий порядок действий:
  • Входной 128-битный блок считывается AEA и обрабатывается с использованием ключа (K0...3).
  • В соответствии с реализованным режимом полученный выходной блок используется для вычисления шифротекста.
  • Особенностью алгоритма AES является то, что исходный ключ преобразуется в массив четырехбайтных слов [wi], где 0 ≤ i< Nb (Nr+1). Это приводит к необходимости при расшифровывании производить полную генерацию ключевой последовательности, чтобы в качестве первого раундового ключа при расшифровывании можно было использовать последний раундовый ключ, использованный при зашифровывании.
Полное описание алгоритмов, используемых ядром AES, дается в публикации FIPS PUB 197 (26 ноября 2001). Дадим краткое описание возможных режимов шифрования.
Алгоритмы зашифрования и расшифрования в режиме AES-ECB совпадают (рисунок 11 и рисунок 12) и различаются только необходимостью полной генерации раундовых ключей (которая выполняется как отдельная операция) перед выполнением операции расшифрования.
Зашифровывание в режиме AES-ECB
Рис. 11. Зашифровывание в режиме AES-ECB

Расшифровывание в режиме AES-ECB
Рис. 12. Расшифровывание в режиме AES-ECB
Зашифровывание/расшифровывание происходит следующим образом:
  • 128-разрядный блок данных открытого текста (P)/шифротекста (C) после перестановки используется в качестве входного блока (I);
  • Входной блок (I) обрабатывается AEA в режиме зашифровывания/расшифровывания. Полученный 128-битный выходной блок (O) используется после перестановки как шифротекст (C)/открытый текст (P) и пересылается в выходной буфер OUT FIFO.

ЗАШИФРОВЫВАНИЕ В РЕЖИМЕ AES-CBC
Зашифровывание в режиме AES-CBC происходит следующим образом (рисунок 13):
  • Первый 128-битный блок открытого текста (P) считывается из входного буфера IN FIFO и после перестановки образует блок (Ps). Блок (Ps) складывается по модулю 2 со 128-разрядной синхропосылкой (IV), образуя входной блок (I= IV Е Ps) для шифрования ядром AEA;
  • Входной блок (I) обрабатывается ядром AEA в режиме зашифрования, как это было описано выше;
  • Блок данных с выхода AEA (O) записывается на место исходной синхропосылки (IV) и после перестановки образует шифротекст (C). Новое значение синхропосылки (IV) используется для зашифровывания следующего блока. Шифротекст (C) пересылается в выходной буфер OUT FIFO;
  • Блок данных с выхода AEA (O) при зашифровывании второго блока записывается на место синхропосылки (IV) и используется для зашифровывания третьего блока и т.д.

Зашифровывание в режиме AES-CBC
Рис. 13. Зашифровывание в режиме AES-CBC

РАСШИФРОВЫВАНИЕ В РЕЖИМЕ AES-CBC
При расшифровывании в режиме AES-CBC, так же как при расшифровывании в режиме AES-EBC, необходимо выполнять операцию подготовки ключа, как это было описано выше.
Расшифровывание в режиме AES-CBC происходит следующим образом (рисунок 14):
  • Осуществляется подготовка ключа;
  • Первый 128-битный блок шифротекста (C) после перестановки используется непосредственно в качестве входного блока (I);
  • Входной блок (I) обрабатывается ядром AEA в режиме расшифровывания, как это было описано выше;
  • Блок обработанных данных с выхода AEA (O) после сложения по модулю 2 с начальной синхропосылкой (IV) образует блок переставленных открытых данных (Ps= IV Е O);
  • После перестановки блок исходных открытых данных (P) пересылается в выходной буфер OUT FIFO;
  • При расшифровании второго блока в качестве синхропосылки (IV) используется переставленный блок (I) шифротекста (C) первого блока и т.д.

Зашифровывание в режиме AES-CBC
Рис. 14. Зашифровывание в режиме AES-CBC
Если сообщение содержит нецелое количество блоков, то последний блок обрабатывается в соответствии с особенностями приложения.
Зашифровывание и расшифровывание в режиме AES-CTR выглядит одинаковым образом (рисунок 15 и рисунок 16).
Зашифровывание в режиме AES-CTR
Рис. 15. Зашифровывание в режиме AES-CTR

Расшифровывание в режиме AES-CTR
Рис. 16. Расшифровывание в режиме AES-CTR
В режиме AES-CTR блок AES используется как генератор потока ключей, которые для получения шифротекста складываются по модулю 2 с открытым входным текстом. При обработке каждого следующего блока значение одного из полей счетчика увеличивается на 1. Начальное значение счетчика (Initial Counter Block, ICB) выполняет ту же самую функцию, что и синхропосылка IV в режиме CBC. Для расшифровывания используется то же самое значение ICB, что и для зашифровывания.
В таблице 7 показана структура блока IV в режиме AES-CTR.
Таблица 7. Начальная структура блока синхропосылки (IV) в режиме AES-CTR  
ПолеРазмерОписание
Метка времени (Nonce)32 битаОднократно используемое значение. При каждом сеансе обмена данными необходимо устанавливать новое значение для этого поля.
Синхропосылка (initialization vector, IV)64 битаСлучайное значение. Стандартом определено, что производящий зашифровывание должен выбирать IV таким образом, чтобы в паре в данным ключом оно использовалось только один раз.
Счетчик (Counter)32 битаЦелое в формате big-endian, которое инкрементируется каждый раз после обработки очередного блока. Начальное значение должно быть равно 1.

При достаточном количестве данных во входном буфере IN FIFO (не менее двух слов для DES/TDES или четырех слов для AES), достаточном количестве места в выходном буфере OUT FIFO (не менее двух слов для DES/TDES или четырех слов для AES) и CRYP_CR.CRYPEN = 1, криптографический процессор автоматически начинает процесс зашифровывания/расшифровывания (CRYP_CR.ALGODIR).
При выполнении обработки CRYP_SR.BUSY = 1. После завершения обработки два (DES/TDES) или четыре (AES) слова записываются ядром CRYP в выходной буфер OUT FIFO, и CRYP_SR.BUSY = 0.
При обработке данных (CRYP_SR.BUSY = 1) операция записи в регистры ключа, синхропосылки или биты [9:2] регистра CRYP_CR игнорируется, и регистры не модифицируются. Это делает невозможным изменение конфигурации криптопроцессора во время обработки блока данных. Однако, при CRYP_SR.BUSY = 1 можно очистить бит CRYPEN. В таком случае завершается непрерывная обработка данных, после окончания обработки текущего блока два/четыре полученных слова записываются в выходной буфер FIFO, и только затем CRYP_SR.BUSY устанавливается в 0.
Иногда требуется свопинг контекста: из-за того, что новая высокоприоритетная задача, запущенная ОС, требует ресурсы криптопроцессора, для полного восстановления контекста необходимо выполнить следующие задачи (пример с использованием DMA):
Случай AES и DES
1. Сохранить текущую конфигурацию (биты [9:2] регистра CRYP_CR) и, если не в режиме ECB, синхропосылку. Значения ключей должны быть уже доступны в памяти. При необходимости сохранить состояние DMA (указатели на входное (IN) и выходное (OUT) сообщения, количество оставшихся для обработки байтов, и т.п.).
2. Сконфигурировать и выполнить высокоприоритетную обработку.
3. Восстановить контекст.
Случай TDES
Свопинг контекста в режиме TDES происходит аналогично выполнению этой операции в режиме AES. Но, поскольку входной FIFO может содержать до 4 необработанных блоков и время обработки блока значительно больше, в некоторых случаях может оказаться более быстрым прервать выполнения обработки, не дожидаясь, пока буфер IN FIFO опустеет.
1. Сохранить текущую конфигурацию (биты [9:2] регистра CRYP_CR) и, если не в режиме ECB, синхропосылки. Значения ключей должны быть уже доступны в памяти. При необходимости, сохранить состояние DMA (указатели на входное (IN) и выходное (OUT) сообщения, количество оставшихся для обработки байтов, и т.п.). Прочитать данные, загруженные в IN FIFO, которые не успели обработаться, и сохранять их в памяти, пока FIFO не опустеет.
2. Сконфигурировать и выполнить высокоприоритетную обработку.
3. Восстановить сохраненную конфигурацию
Имеется два независимых маскируемых источника прерываний, генерируемых CRYP. Они объединяются по ИЛИ в один вектор прерывания, который является единственным запросом на прерывание от CRYP в NVIC (контроллер вложенных векторных прерываний). Это комбинированное прерывание выставляется в случае, если возникло одно из описанных выше прерываний, и оно разрешено.
Источники прерываний можно независимо разрешать и запрещать, изменяя значение битов маски в регистре CRYP_IMSCR. Установка соответствующего бита маски в 1 разрешает прерывание.
Состояние каждого источника прерывания можно прочитать либо из регистра CRYP_RISR для статуса необработанного прерывания, либо из регистра CRYP_MISR для замаскированного прерывания.
Сигнал прерывания от выходного FIFO выставляется, когда в выходном FIFO оказывается один или более элементов данных (32-разрядных слов). Это прерывание очищается чтением данных из выходного FIFO до тех пор, пока в нем не остается ни одного (32-разрядного) слова (т.е., прерывание следует за установкой флага OFNE - выходной FIFO не пустой).
Сигнал прерывания OUTMIS от выходного FIFO разрешен даже при очистке бита разрешения работы CRYP. Соответственно, запрещение работы CRYP не приведет к принудительной установке сигнала OUTMIS в низкий уровень, если выходной FIFO не пуст.
Сигнал прерывания от входного буфера FIFO выставляется, если в нем присутствуют менее четырех слов. Он очищается в результате записи во входной буфер FIFO после того, как в нем окажется четыре или более слов.
Сигнал прерывания INMIS от входного буфера FIFO разрешен, только если разрешена работа CRYP. При запрещении работы CRYP сигнал INMIS принудительно устанавливается в 0, даже если входной FIFO пуст.
Криптографический процессор обеспечивает интерфейс взаимодействия с контроллером прямого доступа к памяти (DMA). Работа DMA определяется регистром управления контроллера DMA модуля CRYP, CRYP_DMACR. Сигналы запроса на пакетный и одиночный обмен данными не являются взаимоисключающими. Оба они могут подтверждаться одновременно. Например, если в выходном OUT FIFO доступны шесть слов, могут подтверждаться запросы на пакетный и одиночный обмен данными. После пакетной передачи четырех слов, для передачи оставшихся двух слов может использоваться только режим одиночного обмена. Это удобно в ситуациях, когда оставшееся для передачи количество слов меньше, чем заданная в конфигурации контроллера DMA длина пакета.
Каждый сигнал запроса остается активным до тех пор, пока DMA не активирует сигнал очистки запроса. После снятия сигнала очистки запроса сигнал запроса снова может стать активным в зависимости от описанных выше условий. Все сигналы запросов игнорируются, если запрещена работа CRYP или очищен бит разрешения DMA (бит CRYP_DMACR.DIEN для IN FIFO и бит CRYP_DMACR.DOEN для OUT FIFO).
(RANDOM NUMBER GENERATOR, RNG)
Модуль RNG является генератором случайных чисел, основанным на непрерывном аналоговом шуме. Модуль предоставляет базовой подсистеме 32-разрядные случайные числа при выполнении операции чтения из регистра данных RNG_DR. При проведении тестирования в рабочем диапазоне эксплуатации микроконтроллера ГСЧ более чем на 85% удовлетворяет тестам NIST SP800-22 согласно FIPS 140-2 для последовательности из 20000 бит.
Блок-схема модуля RNG
Рис. 17. Блок-схема модуля RNG
Интервал между выработкой двух последовательных случайных чисел составляет 40 периодов тактовой частоты PLL48CLK. Для сигнализации об анормальном поведении (последовательная генерация постоянного значения или повторяющейся последовательности случайных чисел) осуществляется постоянный мониторинг энтропии на выходе ГСЧ. С целью уменьшения общей потребляемой мощности модуль можно отключить.
Генератор случайных чисел реализован на базе аналоговой схемы, которая генерирует начальные значения (вектора инициализации) для загрузки в сдвиговый регистр (RNG_LFSR) со специальным образом подобранными обратными связями. На выходе RNG_LFSR образуется последовательность 32-разрядных случайных чисел.
Аналоговая схема состоит из нескольких генераторов, выходы которых для получения векторов инициализации с более равномерной энтропией соединены по схеме «ИСКЛЮЧАЮЩЕЕ ИЛИ». Регистр RNG_LFSR тактируется отдельным тактовым сигналом (PLL48CLK) с постоянным значением частоты, что обеспечивает независимость стабильности генерации случайных чисел от частоты основного сигнала синхронизации HCLK микроконтроллера. Содержимое регистра RNG_LFSR преобразуется в содержимое выходного регистра данных ГСЧ (RNG_DR) после загрузки в регистр RNG_LFSR большого количества начальных значений.
Параллельно с генерацией случайных чисел происходит мониторинг начальных значений для сдвигового регистра и значения тактовой частоты PLL48CLK. Биты состояния (в регистре RNG_SR) отображают появление анормальной последовательности начальных значений или выход значения тактовой частоты PLL48CLK за пределы допустимого диапазона. При обнаружении ошибок генерации случайных чисел вырабатывается прерывание.
Для запуска ГСЧ необходимо выполнить следующие действия:
1. Разрешить прерывания (если это необходимо), установив RNG_CR.IE = 1. Прерывания будут возникать при готовности очередного случайного числа или возникновении ошибок при его генерации.
2. Разрешить работу ГСЧ (RNG_CR.RNGEN = 1). Это активирует аналоговую часть, регистр RNG_LFSR и систему обнаружения ошибок.
3. При обработке прерывания от ГСЧ проверяется, не возникло ли ошибок (биты RNG_SR.SEIS = 0 и RNG_SR.CEIS = 0) и готово ли к выдаче случайное число (RNG_SR.DRDY = 1). Если все эти условия выполнены, то из регистра RNG_DR можно считывать очередное случайное число.
В соответствии с требованиями публикации FIPS PUB 140-2 первое случайное число, сгенерированное после инициализации ГСЧ установкой RNG_CR.RNGEN = 1, не должно использоваться. Его необходимо запомнить для сравнения со следующим сгенерированным случайным числом. Каждое следующее сгенерированное случайное число сравнивается с предыдущим. Проверка выдает ошибку, если любые два последовательно сгенерированных случайных числа оказываются одинаковыми (непрерывный контроль генератора случайных чисел).
ОШИБКА ТАКТИРОВАНИЯ (RNG_SR.CEIS = 1)
В этом случае ГСЧ не может дальше генерировать случайные числа. Необходимо проверить корректность конфигурации контроллера синхронизации и значение бита RNG_SR.CEIS. ГСЧ может работать только при RNG_SR.CECS = 0.
Ошибка тактирования не влияет на сгенерированное ранее случайное значение, и содержимое регистра RNG_DR может использоваться в качестве очередного случайного числа.
ОШИБКА НАЧАЛЬНЫХ ЗНАЧЕНИЙ
(ЭНТРОПИИ) (RNG_SR.SEIS = 1)
В случае ошибки выработки начальных значений генерация случайных чисел прерывается на время, пока RNG_SR. SECS = 1. Если в регистр RNG_DR уже записано случайное число, то его нельзя использовать, поскольку оно может не иметь достаточной энтропии. В таком случае необходимо установить RNG_SR.SEIS = 0, и переинициализировать и перезапустить ГСЧ, установив вначале RNG_CR.RNGEN = 0, RNG_CR.RNGEN = 1.
HASH-процессор, расположенный на шине AHB, представляет собой блок с аппаратной реализацией алгоритмов хеширования SHA-1 (Secure Hash Algorithm), MD5 (Message-Digest Algorithm 5) и HMAC (Keyed-Hash Message Authentication Code). Он вычисляет хэш-функцию сообщения (160 бит для SHA-1; 128 бит для MD5) для сообщений длиной до 264 - 1 бит. Алгоритм HMAC предоставляет способ подтверждения подлинности сообщений и состоит из последовательного вычисления хэш-функций SHA-1 или MD5 с использованием специального числового значения (ключа).
HASH-процессор имеет 32-битную длину входных данных и поддерживает форматы битовой строки «слово», «полуслово», «байт» и «бит» с порядком следования битов little-endian.
Автоматически переставляет входные little-endian-строки для совместимости с big-endian-стандартом вычисления SHA1 и дополняет входную битовую строку до длины, кратной 512 (16x32 бит). Обеспечивает автоматический контроль целостности потока данных с поддержкой прямого доступа к памяти (DMA). На рисунке 18 показана блок-схема хэш процессора.
Блок-схема HASH-процессора
Рис. 18. Блок-схема HASH-процессора
Сообщение или файл данных, обрабатываемый хэш-процессором, необходимо рассматривать как битовую строку. Длиной сообщения является количество битов в сообщении (пустое сообщение имеет длину 0). В стандарте FIPS PUB 180-1 используется соглашение, что нумерация битов в битовой строке возрастает слева направо, и биты могут группироваться в байты (8 бит) или слова (32 бита). Некоторые реализации используют также полуслова (16 бит) с порядком следования байтов (полуслов) big-endian. Это соглашение в основном важно при создании дополнения неполного блока до стандартного размера.
На непосредственное вычисление хеш-функции одного блока сообщения требуется:
  • 66 циклов тактовой частоты HCLK для алгоритма SHA-1;
  • 50 циклов тактовой частоты HCLK для алгоритма MD5.
Для получения значения полного времени обработки блока необходимо добавить время загрузки 16 слов блока (16 циклов тактовой частоты для 512-битного блока).
Время обработки последнего блока сообщения (или ключа в режиме HMAC) может быть более длительным, поскольку включает в себя операцию дополнения блока. Оно зависит от длины последнего блока и размера ключа (в режиме HMAC).
По сравнению со временем обработки средних блоков, оно может увеличиваться:
  • в 1...2,5 раза при вычислении хэш-функции сообщения;
  • в 2,5 раза для входного ключа в режиме HMAC;
  • в 1...2,5 раза при обработке сообщения в режиме HMAC;
  • в 2,5 раза для выходного ключа в режиме HMAC в случае короткого ключа;
  • в 3,5...5 раз для выходного ключа в режиме HMAC в случае длинного ключа.
В таблице 8 приведены значения производительности HASH-процессора для различных вариантов реализации алгоритмов.
Подготовленное для обработки сообщение контроллером прямого доступа к памяти (DMA) или центральным процессором (CPU) последовательно вводится в HASH процессор блоками по шестнадцать 32-разрядных слов (512 бит), записываемых в регистр HASH_DIN. После введения последнего блока автоматически начинается вычисление хэш-функции. Всякий раз, когда в регистр HASH_DIN записываются новые данные, его текущее содержимое передается во входной буфер IN FIFO. Регистр HASH_DIN и IN FIFO формируют буфер FIFO размером 17 слов.
Имеются следующие условия начала обработки:
  • Прямой доступ к памяти (DMA) не используется:
- При вычислении промежуточной хэш-функции в регистр HASH_DIN записывается дополнительное слово (первое слово следующего блока). После этого программа перед записью новых данных в HASH_DIN должна ожидать флаг готовности HASH-процессора (HASH_SR.DINIS = 1).
- В случае вычисления окончательной хэш-функции (введен последний блок) это производится путем установки бита HASH_STR.DCAL в 1.
  • При использовании прямого доступа к памяти (DMA):
- Содержимое регистра HASH_DIN интерпретируется автоматически после завершения передачи информации контроллером DMA.
Процесс ввода данных и вычисление частичной хэш-функции повторяется до тех пор, пока в регистр HASH_DIN не будут записаны последние биты исходного сообщения. Поскольку длина сообщения может быть любой, последнее слово, записываемое в HASH процессор, может иметь любую длину от 1 до 32 бит. Это число валидных битов последнего слова, NBLW, необходимо записать в регистр HASH_STR, чтобы перед окончательным вычислением хэш-функции было корректно проведено дополнение сообщения. Обработка последнего введенного блока запускается установкой бита HASH_STR.DCAL в 1. При этом сообщение автоматически дополняется, и вычисляется окончательная хэш-функция.
При разрешенном прямом доступе к памяти (DMA) информация поступает в хэш-процессор после передачи последнего слова данных. Дополнение и вычисление хэш-функции выполняется автоматически при установке бита HASH_STR.DCAL в 1.
Дополнение сообщения состоит в следующем:
1. В последнем слове, введенном в регистр HASH_DIN, бит с номером, задаваемым значением битового поля HASH_STR.NBLW, устанавливается в 1.
2. Все биты, следующие за заданным в поле HASH_STR.NBLW и до конца блока (размером 512 бит), устанавливаются в 0.
Для вычисления хэш-функции (SHA-1, MD5) бит HASH_CR.INIT устанавливается в 1, а бит HASH_CR.MODE устанавливается в 0. Тип алгоритма (SHA-1 или MD5) выбирается битом HASH_CR.ALGO. Обработка данных запускается установкой бита HASH_CR.INIT в 1. HASH-процессор остается занятым в течение 66 циклов тактовой частоты для алгоритма SHA-1 или 50 циклов для алгоритма MD5. Значение хеш-функции можно прочитать из регистров HASH_H0...HASH_H4 (для алгоритма MD5 содержимое регистра HASH_H4 не имеет значения).
Алгоритм HMAC используется для аутентификации сообщения, путем вычисления односторонней функции от сообщения с использованием выбранного пользователем ключа в соответствии с документом RFC 2104. Блок-схема алгоритма приведена на рисунке 19.
Блок-схема алгоритма HMAC
Рис. 19. Блок-схема алгоритма HMAC
Алгоритм состоит из двух вложенных процедур вычисления хэш-функций (1):
HMAC(сообщение) = Hash[((ключ OR добавка) XOR 0x5C) OR Hash(((ключ OR добавка) XOR 0x36) OR сообщение)] (1)
Где добавка - это последовательность нулей, необходимая для расширения размера ключа до размера блока входных данных функции хэширования (512 бит).
Чтобы вычислить HMAC, требуется четыре различных операции:
1. Хэш-процессор инициализируется установкой бита INIT в ‘1', бита MODE в ‘1'. Бит ALGO устанавливается в соответствии с требуемым алгоритмом. Бит LKEY также должен устанавливаться в этой фазе в ‘1', если будет использоваться ключ с длиной, превышающей 64 байта (в этом случае спецификация HMAC определяет, что вместо реального ключа должно использоваться значение его хэш-функции).
2. Ключ (который будет использоваться для внутренней хэш-функции) затем передается в ядро. Эта операция выполняется с использованием механизма, аналогичного механизму передачи сообщения при вычислении хэш-функции (т.е., записью в регистр HASH_DIN и, окончательно, в HASH_STR).
3. После ввода последнего слова и начала вычислений хэш-процессор обрабатывает ключ. Затем он снова приходит в состояние готовности принять текст сообщения, используя тот же самый механизм, который использовался для отправки сообщения при вычислении хэш-функции.
4. После первого раунда хэширования хэш-процессор выставляет сигнал готовности «ready», чтобы сообщить о своей готовности принять ключ для использования во внешней хэш-функции (обычно это тот же самый ключ, который используется для внутренней хэш-функции). После ввода последнего слова ключа и начала вычислений результат HMAC оказывается доступным в регистрах HASH_H0...HASH_H4.
Процесс вычисления хэш-функции/HMAC может быть прерван для выполнения другой задачи с более высоким приоритетом, с продолжением прерванного процесса после завершения высокоприоритетной задачи. Для успешного выполнения этой операции контекст прерываемой задачи должен переноситься из регистров хэш-процессора в оперативную память и затем восстанавливаться из памяти в регистры хэш-процессора. Возможны два варианта свопинга контекста:
СВОПИНГ КОНТЕКСТА С ПОМОЩЬЮ ПО
Контекст можно сохранить только в том случае, если в текущий момент не выполняется обработка блока. Т.е., необходимо дождаться состояния DINIS = 1 (последний блок обработан и входной буфер FIFO пуст) или NBW ≠ 0 (буфер FIFO не заполнен и нет обработки данных).
  • Сохранение контекста:
a) Сохранить в памяти содержимое регистров HASH_IMR, HASH_STR, HASH_CR и HASH_CSR0...HASH_CSR50;
  • Восстановление контекста:
a) Восстановить из памяти значения регистров HASH_IMR, HASH_STR и HASH_CR;
b) Инициализировать HASH-процессор, HASH_CR.INIT = 1;
c) Восстановить из памяти значения регистров HASH_CSR0...HASH_CSR50.
СВОПИНГ КОНТЕКСТА ПО DMA
В этом случае невозможно предсказать, происходит ли передача данных по DMA или происходит их обработка. Поэтому для безопасного прерывания обработки необходимо остановить передачу данных по DMA, затем дождаться сигнала готовности от HASH-процессора.
  • Прерывание обработки:
- Очистить бит DMAE, чтобы запретить интерфейс DMA;
- Дождаться, пока завершится текущая передача данных по DMA (дождаться HASH_SR.DMAES = 0). Блок может быть передан в HASH процессор как полностью, так и не полностью;
- Запретить соответствующие каналы контроллера DMA;
- Дождаться, пока HASH-процессор перейдет в состояние готовности (закончится обработка всех блоков) и HASH_SR.DINIS = 1;
  • Фазы сохранения и восстановления контекста аналогичны первому случаю.
Далее необходимо реконфигурировать контроллер DMA таким образом, чтобы он передал остаток сообщения. Теперь можно перезапустить обработку из точки, в которой она была прервана установкой бита DMAE.
Имеются два индивидуальных маскируемых источника прерываний, генерируемых HASH-процессором. Они объединены по ИЛИ в один вектор прерывания. Прерывания можно индивидуально разрешать/запрещать, устанавливая/очищая биты маски прерываний регистра HASH_IMR. Состояние отдельного источника прерывания можно прочитать из регистра HASH_SR. На рисунке 20 показана схема прерываний HASH-процессора.
Схема флагов и прерываний HASH процессора
Рис. 20. Схема флагов и прерываний HASH процессора
Данные вводятся в CRYP/HASH-процессор по 32 бита (слово) в тот момент, когда они записываются в регистр CRYP_DIN/HASH_DIN. Системная память организована в формате little-endian: независимо от используемых типов данных (бит, байт, 16-разрядное полуслово, 32-разрядное слово), младшие значащие данные занимают низшие адреса.
Для ряда вычислений необходим формат big-endian, поэтому после чтения данных из IN FIFO и перед отправкой их на обработку в CRYP/HASH-процессор выполняется операция перестановки битов, байтов или полу-слов (в зависимости от вида обрабатываемых данных). Аналогичную операцию перестановки необходимо выполнить и над выходными данными криптопроцессора перед записью в OUT FIFO. Например, для ASCII текстового потока будет выполняться операция перестановки байтов.
Вид обрабатываемых данных задается в битовом поле CRYP_CR.DATATYPE (HASH_CR.DATATYPE) регистра управления CRYP (HASH) процессора.
В таблице 9 показаны перестановки данных в зависимости от значения битового поля DATATYPE.
Значение битового поляСхема
DATATYPE = 00b. Без перестановкиa
DATATYPE = 01b. Перестановка (16-разрядных) полуслов  b
DATATYPE = 10b. Перестановка (8-разрядных) байтовc
DATATYPE = 11b. Перестановка (1-разрядных) битовd

В статье был рассмотрен один из самых простых криптопроцессоров, входящих в состав современных прикладных ARM микроконтроллеров. Данное в статье подробное описание алгоритмов работы криптопроцессоров, входящих в состав микроконтроллеров семейства STM32F4xx компании STMicroelectronics, призвано помочь разобраться с программированием прикладных задач для рассмотренных микроконтроллеров, а также глубже понять используемые криптографические алгоритмы.
1. DS8597. STM32F415xx-STM32F417xx. ARM Cortex-M4 32b MCU+FPU, 210DMIPS, up to 1MB Flash, 192+4KB RAM, crypto, USB OTG HS_FS, Ethernet, 17 TIMs, 3 ADCs, 15 comm. interfaces & came.http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/DM00035129.pdf
2. RM0090. STM32F405xx, STM32F407xx, STM32F415xx and STM32F417xx advanced ARM-based 32-bit MCUs. Reference manual.http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/DM00031020.pdf
3. Сложные алгоритмы на 32-разрядном ядре Cortex-M4F. Новые микроконтроллеры STM32F4 компании STMicroelectronics/Андрей Самоделов//Вестник Электроники. - 2012. - №1. - с. 10-16
4. Лидер по производительности среди ядер Cortex-M4 - STM32F4xx / Роман Иванов//Новости Электроники. - 2012. - №2. - с. 17-22
5. FIPS PUB 46-3. DATA ENCRYPTION STANDARD (DES). http://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdf
6. FIPS PUB 81. DES Modes of Operation. http://www.itl.nist.gov/fipspubs/fip81.htm
7. FIPS PUB 140-2. Security Requirements for Cryptographic Modules.http://csrc.nist.gov/publications/fips/fips140-2/fips1402.pdf
8. FIPS PUB 180-1. SECURE HASH STANDARD. http://www.itl.nist.gov/fipspubs/fip180-1.htm
9. FIPS PUB 180-2, 2002 august 1. SECURE HASH STANDARD. http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf
10. FIPS PUB 186-2. DIGITAL SIGNATURE STANDARD (DSS).http://csrc.nist.gov/publications/fips/archive/fips186-2/fips186-2.pdf
11. FIPS PUB 197. ADVANCED ENCRYPTION STANDARD (AES). http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf
12. IETF RFC 1321. The MD5 Message-Digest Algorithm. http://www.apps.ietf.org/rfc/rfc1321.html
13. IETF RFC 2104. HMAC: keyed-hashing for message authentication. http://www.ietf.org/rfc/rfc2104.txt
14. NIST SP800-2. Public Key Cryptography. (http://www.dtic.mil/cgi-bin/GetTRDoc?AD=ADA408338)
15. NIST SP800-22. A Statistical Test Suite for Random and Pseudorandom Number Generators for Cryptographic Applications. http://csrc.nist.gov/groups/ST/toolkit/rng/documents/SP800-22b.pdf
16. ГОСТ 28147-89. Системы обработки информации. Защита криптографическая. Алгоритм криптографического преобразования.
17. ГОСТ Р 34.10-2001. Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи.
18. ГОСТ Р 34.11-94. Информационная технология. Криптографическая защита информации. Функция хэширования.
Получение технической информации, заказ образцов, поставка - e-mail: mcu.vesti@compel.ru
Источник материала 
http://www.compeljournal.ru
Поиск IT персонала программирование веб/микроконтроллеры и т.д. Давайте решать задачи вместе! rabota@rabota-ka.ru
Rambler's Top100 HotLog Яндекс цитирования Яндекс.Метрика


©Блог Работа КА
©Поиск вакансий и сотрудников
©Сайт Работа КА
©Freelance удаленная работа IT

ОСНОВЫ КРИПТОГРАФИИ

КРИПТОГРАФИЯ С СИММЕТРИЧНЫМ КЛЮЧОМ

КРИПТОГРАФИЧЕСКИЕ АЛГОРИТМЫ

КРИПТОГРАФИЯ С АСИММЕТРИЧНЫМ КЛЮЧОМ

ФУНКЦИИ ХЭШИРОВАНИЯ (HASH FUNCTION)

ГЕНЕРАЦИЯ СЛУЧАЙНЫХ ЧИСЕЛ

ПЕРЕНОС КРИПТОГРАФИИ ОТ ПРОГРАММНОЙ К АППАРАТНОЙ РЕАЛИЗАЦИИ

МИКРОКОНТРОЛЛЕРЫ STM32F4XX

КРИПТОГРАФИЧЕСКИЙ ПРОЦЕССОР (CRYP)

ФУНКЦИОНАЛЬНОЕ ОПИСАНИЕ МОДУЛЯ CRYP

ШИФРОВАНИЕ ПО АЛГОРИТМУ DES/TDES

РЕЖИМ ЭЛЕКТРОННОГО ОДНОРАЗОВОГО БЛОКНОТА DES-ECB/TDES-ECB

РЕЖИМ С ЗАЦЕПЛЕНИЕМ ПО ШИФРОТЕКСТУ DES-CBC/TDES-CBC

ШИФРОВАНИЕ ПО АЛГОРИТМУ AES

РЕЖИМ ОДНОРАЗОВОГО ЭЛЕКТРОННОГО БЛОКНОТА AES-ECB

РЕЖИМ ЗАЦЕПЛЕНИЯ ПО ШИФРОТЕКСТУ AES-CBC

РЕЖИМ СЧЕТЧИКА AES-CTR

ФЛАГ «ЗАНЯТ» («BUSY») МОДУЛЯ CRYP

СВОПИНГ КОНТЕКСТА

ПРЕРЫВАНИЯ CRYP

ПРЕРЫВАНИЕ ОТ ВЫХОДНОГО БУФЕРА OUT FIFO - OUTMIS

ПРЕРЫВАНИЕ ОТ ВХОДНОГО БУФЕРА IN FIFO - INMIS

ИНТЕРФЕЙС ПРЯМОГО ДОСТУПА К ПАМЯТИ (DMA) CRYP

ГЕНЕРАТОР СЛУЧАЙНЫХ ЧИСЕЛ, ГСЧ

ФУНКЦИОНАЛЬНОЕ ОПИСАНИЕ ГСЧ

ПРИНЦИП РАБОТЫ ГСЧ

УПРАВЛЕНИЕ ОШИБКАМИ RNG

ХЭШ-ПРОЦЕССОР (HASH)

Таблица 8. Производительность HASH-процессора в Mбит/сек для различных вариантов реализации алгоритмов SHA-1 и MD5  
Тип производительностиMD5SHA1
CM3CM4CM3CM4
Теоретическая аппаратная116,36162,993,66131,12
Аппаратная без DMA55,2577,3551,2071,68
Аппаратная с DMA75,29105,465,0891,11
Программная8,2311523,685,15

  

ХЭШ-ФУНКЦИЯ СООБЩЕНИЯ

ДОПОЛНЕНИЕ СООБЩЕНИЯ

ПРИНЦИП РАБОТЫ HASH-ПРОЦЕССОРА

ВЫЧИСЛЕНИЕ HMAC

СВОПИНГ КОНТЕКСТА

ПРЕРЫВАНИЯ HASH-ПРОЦЕССОРА

ПРИВЕДЕНИЕ ТИПОВ ДАННЫХ

Таблица 9. Перестановка битов/байтов/полуслов  

ЗАКЛЮЧЕНИЕ

ЛИТЕРАТУРА



Share on Google Plus

Автор Expert

Я простой житель планеты земля.

Комментарии

comments powered by HyperComments

Алексей Навальный

Мухамеду Али было 74 года

ali from Mab on Vimeo . Он говорил, что хотел бы дожить до ста лет. Мохаммед Али – один из самых известных боксеров в истории мировог...

Получайте обновления на Email

Проблемы на работе?