Использование микросхем специальной памяти для обеспечения защиты ПЛИС FPGA от копирования
Введение
Большинство семейств СБИС программируемой логики с архитектурой FPGA (Field of Programmable Gate Arrays) выпускаются по технологии статического ОЗУ и требуют конфигурирования после включения питания (для этого служат специализированные внешние ПЗУ). При этом проекты, реализованные на FPGA, уязвимы для копирования, поскольку конфигурационный поток данных может быть перехвачен и использован недобросовестными людьми для несанкционированного повторения проекта. Некоторые семейства FPGA могут использовать кодированный конфигурационный поток для защиты проектов от копирования. Но для этого нужна дополнительная операция программирования декодирующего ключа в энергонезависимую память FPGA, как правило, с использованием дополнительного оборудования. К тому же микросхемы, поддерживающие кодированную конфигурацию, довольно дороги. Большинство семейств FPGA не имеет возможности использования кодированного конфигурационного потока. Для таких семейств эффективным средством защиты проектов от копирования является использование микросхем специальной памяти.
Реализация
Концепция IFF требует специальной дополнительной микросхемы, в которой реализован хэшалгоритм. На рис. 1 представлена реализация IFF с использованием микросхемы специальной памяти DS28E01.
Микросхема DS28E01 фирмы Dallas Semiconductor (в настоящее время данным брендом владеет фирма Maxim Integrated Products, Inc.) содержит 1024 бит EEPROM и специальный блок для аппаратного определения хэшпоследовательности в соответствии с алгоритмом SHA1 (Secure Hash Algorithm, стандарт ISO/IEC 101183). Хэшпоследовательность представляет собой 160битный аутентификационный код (Message Authentication Code, MAC). Модуль SHA1 в микросхеме DS28E01 аппаратно вычисляет MAC для массива случайных чисел, cгенерированного специальным модулем в FPGA и записанного в область данных EEPROM. Для вычисления MAC применяется 64битный ключ, заранее сохраненный в секретной области EEPROM микросхемы DS28E01.
В качестве дополнительной защиты проекта может использоваться проверка уникального для каждой микросхемы DS28E01 идентификационного номера.
В микросхеме DS28E01[1] реализован однопроводной интерфейс 1Wire, поэтому для подключения ее к FPGA нужна всего одна линия ввода/вывода. В соответствии со спецификацией 1Wire эта линия ввода/вывода FPGA должна быть двунаправленной, и ее выходной каскад должен представлять собой буфер с открытым стоком. Для обеспечения уровня логической единицы линия подтягивается внешним резистором к напряжению питания соответствующего банка ввода/вывода.
Компания Altera предлагает пример разработки (Reference Design), в котором используется концепция IFF для защиты проектов в FPGA семейства Cyclone III от несанкционированного копирования (проект CIII_ Design_Security_Enabler). На рис. 2 представлена блоксхема этого примера разработки.
В этом примере пользовательский проект представляет собой обычный 8разрядный двоичный счетчик с входом разрешения. Применяя данный пример разработки в качестве шаблона, пользователь может заменить этот счетчик своим проектом.
В FPGA кроме пользовательского проекта располагается блок аутентификации, реализующий проверку IFF (SHA1 IFF Engine). Структура этого блока представлена на рис. 3.
Блок аутентификации состоит из трех модулей:
- RNG_8bits.vhd 8разрядный генератор случайных чисел;
- small_micro_32.vhd модуль, вычисляющий MAC сгенерированного массива случайных чисел в соответствии с алгоритмом SHA1 и сравнивающий его с MAC, считанным из микросхемы специальной памяти DS28E01;
- One_Wire.vhd модуль, реализующий однопроводной интерфейс между FPGA и микросхемой DS28E01.
Блок имеет следующие порты ввода/вывода:
- Clock_In входной тактовый сигнал;
- Resetn_In входной асинхронный сигнал сброса/перезапуска;
- One_Wire двунаправленный сигнал для обмена данными по однопроводному интерфейсу с микросхемой DS28E01;
- Enable выходной сигнал, который разрешает или запрещает работу пользовательского проекта.
Пользователь может задавать следующие параметры:
- SECRET_KEY секретный ключ для вычисления MAC массива случайных чисел. Этот ключ должен совпадать с тем, который записан в микросхему DS28E01.
- SYSCLOCK частота входного тактового сигнала Clock_In (задается в Гц). Этот параметр используется для обеспечения временных требований стандарта 1Wire. Максимальное значение SYSCLOCK 100 МГц.
Блок аутентификации занимает примерно 800 логических элементов и один блок встроенного ОЗУ M9K в микросхеме семейства Cyclone III. По методике, описанной в данной статье, пользователь может разработать свой собственный, более компактный блок аутентификации (например, можно использовать компактное процессорное ядро для программной реализации как алгоритма SHA1, так и протокола 1Wire).
После включения питания микросхема FPGA конфигурируется потоком данных, содержащим проект пользователя и блок аутентификации. После завершения конфигурирования SHA1 IFF Engine запрещает работу пользовательского проекта и начинает процесс аутентификации:
- генерирует массив случайных чисел, сохраняет его в памяти FPGA и по однопроводному интерфейсу записывает его в область данных EEPROM микросхемы DS28E01;
- считывает уникальный идентификационный номер из микросхемы специальной памяти;
- выдает команду микросхеме специальной памяти на вычисление MAC для сохраненного в EEPROM DS28E01 массива случайных чисел;
- считывает МАС из микросхемы DS28E01 и вычисляет свой MAC для сохраненного в памяти FPGA массива случайных чисел.
Работа пользовательского проекта разрешается только в том случае, если считанный из микросхемы DS28E01 и рассчитанный блоком SHA1 IFF Engine коды совпадают.
На рис. 4 показан алгоритм работы блока проверки при реализации концепции IFF.
После разрешения работы пользовательского проекта блок SHA1 IFF Engine выключается для снижения потребляемой микросхемой FPGA мощности. Пользователь может повторно запустить блок аутентификации, организовав управление по входу Reset c помощью внешних цепей или управляющего автомата.
Как уже упоминалось, для расчета хэшпоследовательности в микросхеме DS28E01 используется ключ, заранее записанный в секретную область памяти. Для записи секретного ключа в DS28E01 в описываемом примере разработки компании Altera имеется специально предназначенный для этого проект CIII_Design_Security_Load. Этот проект аналогичен уже рассмотренному CIII_Design_Security_Enabler, за исключением того, что блок SHA1 IFF Engine после завершения конфигурирования FPGA записывает секретный ключ в микросхему DS28E01. Алгоритм работы проекта CIII_Design_Security_Load показан на рис. 5.
Проект CIII_Design_Security_Load рекомендуется для программирования небольших партий микросхем DS28E01.
Для обеспечения массового производства можно заказать у фирмыпроизводителя партию микросхем DS28E01 с запрограммированнымна на фабрике секретным ключом.