Криптографический микроконтроллер CEC1702 от Microchip
В статье рассматривается специализированный микроконтроллер CEC1702, базирующийся на известном ядре ARM Cortex M4F. Микроконтроллер оснащен полнофункциональными аппаратными криптографическими решениями. Микроконтроллер CEC1702 позволяет реализовать шифрование/дешифрование, аутентификацию с открытыми и закрытыми ключами, а также содержит узлы, позволяющие использовать его как микроконтроллер общего назначения.
Словарь
EC - встроенный контроллер
KSI - входы блока сканирования клавиатуры
KSO - выходные линии блока сканирования клавиатуры
PCR - блок управления питанием, тактированием и сбросом
PRM-PWM - блок управления электродвигателем
RC_ID - модуль измерения емкости
Введение
Едва ли стоит говорить об актуальности проблемы защиты данных в современных приложениях - об этой проблеме наслышаны даже неспециалисты. Угрозы похищения ПО и любой другой интеллектуальной собственности растут, пожалуй, еще быстрее, чем коммуникационные возможности и решения, в т. ч. М2М и интернет вещей. В настоящее время трудно найти микроконтроллеры без интегрированных аппаратных криптоускортелей. Компания Microchip разработала и производит специализированный 32-бит микроконтроллер CEC1702 с полнофункциональными аппаратными криптографическими решениями.
Микроконтроллер (МК) позволяет реализовать шифрование/дешифрование, аутентификацию с открытыми и закрытыми ключами. Безопасная загрузка обеспечивается с помощью аппаратно формируемых корней доверия. МК CEC1702 может дополнить МК приложений, значительно усилив меры по защите данных в системе, а в ряде случаев и заменить его. МК CEC1702 можно использовать для проверки подлинности ПО и обновления ПО, а также для аутентификации критически важных команд, сообщений и защиты данных с помощью шифрования. МК совместим со стандартом ACPI. Структурная схема микроконтроллера CEC1702 приведена на рисунке 1. МК производится в 84-выводном корпусе WFBGA.
Ядро
Поскольку микроконтроллер базируется на хорошо известном 32-бит ядре ARM Cortex M4F, мы не будем подробно описывать его, но лишь в двух словах перечислим основные параметры:
тактовая частота ядра в МК CEC1702: 48 МГц;
интегрирован модуль операций с числами с плавающей запятой (FPU);
интегрирован модуль защиты памяти MPU;
контроллер прерываний имеет 8 уровней приоритета и обеспечивает обработку до 240 векторных прерываний;
интерфейс с МК;
○ шина команд: ICode;
○ шина данных: DCode;
○ системная шина;
адресное пространство: 4 Гбайт;
предусмотрен режим "прозрачный" через интерфейс JTAG или 2-проводной последовательный интерфейс SWD.
Память
Объем встроенной памяти ОЗУ составляет 480 Кбайт. Память разбита на два блока - блок команд емкостью 416 Кбайт и блок для хранения данных объемом 64 Кбайт. Корректное выполнение программы происходит в любом случае - когда данные записываются в программный блок, и когда программный код записывается в блок данных. Однако максимальная производительность достигается в случае, когда оба блока используются строго по назначению. Запись программного кода в ОЗУ, на взгляд автора, не самое лучшее решение, т. к. память этого типа подвержена сбоям. Упомянем еще ОЗУ емкостью 128 байт, питание которого резервируется батарейным питанием VBAT.
ПЗУ объемом 64 Кбайт размещается в самом начале адресного пространства. В нем содержится код загрузчика, который начинает выполняться сразу после операции сброса МК. В ПЗУ также содержится набор функций API, используемых в операциях криптографии. Криптографические API используют отдельное криптоОЗУ.
Память eFuse имеет объем 4 Кбит, состоит из четырех блоков по 1 Кбит каждый и обеспечивает доступ к ПЗУ. Программируется eFuse по 1 биту; при этом значение бита, установленного в 1, в дальнейшем изменить невозможно. Память eFuse содержит открытые ключи, ключи X и Y для аутентификации, параметры для отладки и другие подобные сведения. Память eFuse частично программируется Microchip.
В адресном пространстве используется псевдоним ОЗУ (Alias RAM) блока хранения данных. Эта область, занимающая в адресном пространстве 64 Кбайт, начинается с адреса 20000000h. Доступ к ОЗУ данных можно получить и через эту область, но запрос будет выполняться значительно дольше. Область псевдонимов ОЗУ введена для выполнения битовых операций ядром Cortex M4F.
Аналогичное назначение имеет и область бит-диапазонов ОЗУ (RAM bit-band region), но в ней каждый бит представлен 32-разрядным словом, все старшие биты которого имеют нулевое значение. Следовательно, эта область занимает 2 Мбайт адресного пространства (64 Кбайт × 32 = 2 Мбайт). Эта область используется для атомарных операций с одним битом (atomicupdates); во время выполнения этой операции операнд становится недоступным для модификации с помощью другой команды или устройства.
Точно такое же назначение и области бит-диапазонов регистров (theregister bit-band region), но в данном случае каждый бит в области регистрового пространства отражается как байт в области псевдонимов бит-диапазона регистров. Все регистры контроллеров и портов ввода/вывода доступны через область бит-диапазонов регистров.
Питание, тактирование, сброс
Управление питанием, тактированием и сбросом осуществляет блок PCR. Напряжение питания МК составляет 1,8-3,3 или 3,3 В в зависимости от доменов. Шина питания 1,2 В формируется встроенным регулятором напряжения. Кроме того, предусмотрено резервное батарейное питание VBAT. МК CEC1702 оптимизирован для режима низкого потребления, но предусмотрены дополнительные программные опции для перевода в режим сна отдельных модулей МК.
Интерфейс блока PCR осуществляет связь с другими узлами МК через специальный интерфейс; управляющие сигналы состоят из следующих трех команд.
SLEEP_ENABLE формируется блоком PCR и переводит адресуемый узел в режим сна;
CLOCK_REQUIRED формируется отдельными узлами, тактируемыми из одного источника. По этому сигналу прекращается тактирование домена;
команда RESET_ENABLE определяет сброс модуля МК после его перехода в режим сна.
Помимо уменьшения энергопотребления отдельных блоков имеется возможность перевести весь МК в один из двух режимов пониженного энергопотребления;
сон (LIGHT SLEEP);
глубокий сон (HEAVY SLEEP).
В режиме сна активным остается осциллятор тактовой частоты 32 кГц. Выход из режимов пониженного энергопотребления осуществляется по прерываниям или событиям. В активном режиме используются следующие источники частоты:
внешний источник с номинальной частотой 32,768 кГц;
встроенный осциллятор 32,768 кГц;
внешний кварцевый осциллятор 32,768 кГц;
осциллятор 32 МГц;
ФАПЧ 48 МГц.
В МК имеются пять доменов тактирования:
32 КГц - тактируются низкочастотные внутренние блоки;
48 МГц - основная частота;
96 МГц - используется криптографическими модулями; источник частоты - тот же модуль ФАПЧ, который формирует основную частоту;
100 кГц - тактирование ШИМ;
EC_CLK - частота тактирования процессора задается в управляющих регистрах процессора.
Сброс МК может быть вызван рядом событий. Перечислим их.
RESET_VBAT. Сигнал сброса формируется при напряжении батареи VBAT1,25 В.
RESET_VTR. Сигнал сброса удерживается, пока напряжение питания ядра VTR не достигнет номинального уровня 3,3 В.
RESET_SYS. Системный сброс формируется при внешнем сигнале сброса, при RESET_VTR и по сигналу сторожевого таймера.
WDTEvent формируется по сигналу сторожевого таймера.
RESET_SYS_nWDT. Сигнал формируется при RESET_VTR и по внешнему сигналу сброса для сброса регистров домена VTR.
RESET_EC. Формируется при RESET_SYS для сброса процессора.
RESET_BLOCK_N. Сигнал сброса отдельных блоков МК. Используется в режимах пониженного энергопотребления.
Таймеры
В состав МК входят следующие таймеры:
сторожевой таймер;
часы реального времени;
таймер дней недели;
стандартный/основной таймер;
16-бит таймер/счетчик;
таймер захвата/сравнения;
таймер гибернации;
RTOS-таймер.
Поскольку сторожевой таймер и часы реального времени - стандартные модули, которые ничем не отличаются от аналогичных модулей других МК, на них мы останавливаться не будем. Таймер дней недели формирует временные интервалы длительностью от 30 мкс до 8 лет. Регистры таймера тактируется частотой 48 МГц, а счетчики - частотой 32 кГц. Источниками напряжения питания таймера служат VTR и VBAT, режимы пониженного энергопотребления не предусмотрены. В состав таймера входят три счетчика: 15-бит делитель частоты, тактируемый частотой 32,768 кГц и формирующий временные интервалы длительностью до 1 с; 28-бит счетчик для отсчета дней недели и 9-бит счетчик, который может работать в режиме однократного или периодического счета.
Стандартный или основой таймер может конфигурироваться как 16- или 32-бит таймер и используется для формирования временных интервалов с помощью ПО. Таймер не предназначен для работы с внешними компонентами и не связан с внешними выводами МК. Таймер подключен к шине напряжения питания VTR, а источником частоты для него служит основная частота 48 МГц.
В состав модуля 16-бит таймера/счетчика входят четыре идентичных таймера. Источником частоты для них служит основная частота 48 МГц, которая изменяется с помощью встроенных в таймер предварительных делителей частоты. Таймер подключен к шине напряжения VTR. В качестве входных сигналов могут также использоваться внешние источники. В этом случае предусмотрен входной фильтр для устранения помех. Внешний входной сигнал распознается лишь в случае, когда его уровень не меняется в течение четырех тактовых импульсов. Выходные сигналы таймера можно вывести через внешние выводы. Таймеры можно перевести в режим пониженного энергопотребления.
Структурная схема управления таймером показана на рисунке 2.
Возможны четыре режима работы: таймера; событий; однократного счета; измерений.
Режим таймера служит для формирования периодических прерываний и временных интервалов для управления встроенными или внешними устройствами. В этом режиме таймер запускается или останавливается по сигналу внешних устройств. Режим событий используется для подсчета событий, происходящих вне таймера. Например, таймер можно запрограммировать на подсчет числа переполнений предыдущего таймера или на число фронтов импульсов на внешнем выводе. Подсчет событий начинается после установки бита ENABLE в управляющем регистре и продолжается, пока этот бит не будет сброшен.
Режим однократного счета используется для формирования одного прерывания. Начала отсчета происходит по установке бита ENABLE в управляющем регистре или по переполнению предыдущего таймера. Режим измерения предназначен для измерения ширины импульсы или периода внешних сигналов. В этом режиме отсчет всегда начинается с нулевого состояния счетчика таймера. Точность измерений зависит от тактовой частоты таймера: чем выше частота, тем выше точность.
В состав 32-бит таймера захвата/сравнения входят шесть 32-бит регистров захвата и два 32-бит регистра сравнения. Каждый регистр захвата записывает состояние таймера при появлении на соответствующем внешнем выводе запрограммированного (переднего или заднего) фронта импульса. При этом фронт импульса должен длиться не менее трех тактовых импульсов; в противном случае входной фильтр не пропускает сигнал.
Структурная схема таймера захвата/сравнения показана на рисунке 3.
Прерывания могут формироваться всякий раз, когда в регистр захвата записывается новое значение таймера, т. е. происходит захват. Кроме того, прерывания могут формироваться при равенстве значений счетчика таймера и регистров сравнений. Таймер подключается к шине питания VTR и тактируется главной частотой 48 МГц. С помощью предварительного делителя частоту тактирования можно уменьшить до 325 кГц (деление на 128).
32-бит RTOS-таймер с низким энергопотреблением тактируется частотой 32 кГц и остается активным в режимах с низким энергопотреблением. Таким образом, можно переводить процессор в режим малого потребления, а выход из него осуществлять через заданный промежуток времени по сигналу RTOS-таймера.
Таймер гибернации формирует сигнал пробуждения для встроенного контроллера EC, когда тот находится в режиме гибернации. В состав таймера входит 16-бит счетчик с обратным направлением счета. Таймер, тактируемый частотой 32 кГц, подключен к шине питания VTR. Благодаря предварительному делителю частоты минимальное приращение времени изменяется в пределах 30,5 мкс...0,125 с. Соответственно, полная шкала меняется в пределах 2 с...136,5 мин.
Управление внешними устройствами
Управление внешними устройствами реализуется с помощью блоков ШИМ, PRM-PWM, BLINKING/BREATHING ШИМ и TACH. Блок ШИМ, например, может использоваться для управления 4-проводным бесщеточным двигателем постоянного тока или другими подобными механизмами, а также для управления освещением. На каждом из четырех выходов 16-бит ШИМ формируется импульсная последовательность частотой 0,1 Гц...24 МГц. Блок тактируется частотами 100 кГц и 48 МГц. Частота 100 кГц используется для формирования сигналов ШИМ 15-30 кГц. Питание модуля осуществляется от шины VTR.
Блок PRM-PWM вычисляет скорость вращения электродвигателя и реализует алгоритм управления электродвигателем с обратной связью по скорости по сигналам, полученным от блока TACH. Этот блок предназначен для обработки импульсных сигналов тахометра, управляемого блоком ШИМ электродвигателя. Диапазон измерения скорости составляет 100-30000 об/мин. Для вычисления скорости предусмотрены два режима.
В режиме 0 счетчик подсчитывает число импульсов тахометра, которые поступают на его вход. Показания счетчика периодически с известным интервалом времени считываются процессором, после чего определяется средняя скорость вращения. В режиме 1 блок тактируется частотой 100 кГц для измерения запрограммированного числа импульсов тахометра. После определения заданного числа импульсов тахометра показание счетчика считывается, и он восстанавливает прежнее значение. Другими словами, в первом случае подсчитывается пройденный путь за заданное время, а во втором случае определяется время, за которое был пройден заданный путь.
Блок BLINKING/BREATHING ШИМ применяется для управления светодиодами в режиме мерцания путем изменения яркости свечения. Такой способ является альтернативой импульсного управления, при котором информация об изменении состоянии объекта индицируется с помощью изменения частоты мигания светодиода. Блок состоит из двух идентичных каналов 8-разрядных ШИМ; каждый канал настраивается независимо. Период мерцания составляет 60 мс...1 мин. Возможно формирование разных функциональных зависимостей изменения яркости светодиода в функции времени.
Интерфейсы и клавиатура
В состав МК входят стандартные интерфейсы:
шесть каналов I2C;
SPI;
Quad SPI;
два канала UART.
Поскольку эти интерфейсы подробно описаны в технической литературе и хорошо изучены, мы не будем останавливаться на них, но скажем несколько слов о блоке сканирования клавиатуры. В максимальной конфигурации этот блок имеет 18 выходов KSO и восемь входов KSI. Если матрица клавиатуры имеет меньший размер, соответствующие выводы МК можно конфигурировать для использования в других целях. Если сканирование клавиатуры не используется, блок автоматически переходит в режим пониженного энергопотребления. Прерывания формируются при изменении состояния любого из входов KSI. Блок, тактируемый частотой 48 МГц, подключен к шине питания VTR. Структурная схема блока показана на рисунке 4.
Аналоговая периферия
В МК CEC1702 интегрирован 10-бит АЦП последовательного приближения. Он тактируется частотой 16 МГц и подключен к шинам питания VTR и VTR_ Analog. Возможно формирование до 16 входных каналов. Время преобразования составляет 1,125 мкс. Диапазон входных сигналов составляет от 0 В до напряжения опорного источника. Можно задать как периодический, так и однократный режим опроса.
Оригинальной особенностью МК является модуль измерения емкости RC_ID с помощью определения постоянной времени заряда и разряда конденсатора. Структурная схема модуля показана на рисунке 5.
Модуль тактируется частотой 48 МГц и подключается к шине питания VTR, но напряжение VTR должно быть 3,3 В. При меньшем напряжении модуль работает некорректно.
На рисунке 6 иллюстрируется процесс измерения.
Перед его началом модуль находится в состоянии сброса. Следующим этапом является запуск модуля, запись установок в регистры управления. Затем с помощью встроенного источника тока начинается процесс разрядки конденсатора. При этом внутреннее пороговое устройство фиксирует момент, когда конденсатор разрядится до уровня 2,2 В. Во избежание ложного срабатывания на выходе порогового устройства установлен фильтр. Время разряда конденсатора до уровня 2,2 В определяется с помощью 16-бит счетчика с частотой тактирования 48 МГц.
Затем начинается этап заряда конденсатора, когда встроенный источник тока отключается и фиксируется время заряда до уровня 2,2 В. По результатам двух измерений определяется постоянная времени. Новое измерение может начаться только после сброса модуля. Заметим, что для получения приемлемой точности измерения желательно, чтобы минимальное число импульсов, зафиксированное счетчиком блока на этапе заряда и разряда, было не менее нескольких десятков импульсов.
Криптография
Аппаратные модули криптографии реализуют следующий функционал:
аутентификация с использованием алгоритмов открытого ключа;
проверка целостности данных с помощью алгоритмов SHA;
конфиденциальность с использованием шифрования AES;
энтропия с помощью генератора случайных чисел.
МК CEC1702 через интерфейс SPI загружает программу из внешней флэш-памяти во встроенное ОЗУ команд. После загрузки проверяется подлинность программы или ее осуществляется ее расшифровка. Аутентификация программного кода происходит с помощью стандартного протокола электронной подписи ECDSA. Для аутентификации используются открытые и закрытые ключи в блоке памяти eFuse и внешней флэш-памяти.
В МК применяются две программные утилиты:
CEC1702 Efuse Generator Tool;
CEC1702 SPI Image Generator Utility.
Если аутентификация разрешена, утилита SPIImageGenerator вычисляет и проверяет цифровую подпись. Если аутентификация выключена, утилита SPIImageGenerator шифрует файл во флэш-памяти. Заголовок ключа с открытым ключом присоединяется к зашифрованному файлу.
Утилита Efuse Generator Tool используется для создания открытых и закрытых ключей. Ключи записываются в память eFuse и выходной файл, защищенный паролем, который устанавливает пользователь при вводе параметров. Созданные ключи также применяются в утилите Efuse GeneratorTool. Подробное описание криптографических процедур см. в [2]. В этом же источнике описан программатор CEC1702 Clickerboard, который применяется для программирования флэш-памяти и памяти eFuse.