Создание защищенных пользовательских приложений на базе СнК SmartFusion2 компании Microsemi.
Часть 9. Технология SPPS. Утилита управления заданиями Job Manager

PDF версия
Данная публикация завершает цикл статей, посвященных разработке защищенных приложений на базе СнК SmartFusion2 и ПЛИС IGLOO2 компании Microsemi. В статье описывается утилита Job Manager, позволяющая создавать задания по программированию микросхем в условиях контрактного производства. Задания используют аппаратные модули криптографической защиты информации (АМЗ) для обеспечения доверенного программирования микросхем в недоверенном окружении (технология SPPS), а также защиту от несанкционированного программирования микросхем контрактными производителями (overbuilding protection).

Утилита Job Manager является частью экосистемы технологии доверенного программирования в недоверенной среде (Secured Production Programming Solution, SPPS), в которую входят Libero SoC, Job Manager и FlashPro Express, а также серверы пользовательского АМЗ (User HSM server, U‑HSM server) и заводского АМЗ (Manufacturer HSM server, M‑HSM server). Экосистема SPPS изображена на рис. 1.

Экосистема SPPS

Рис. 1. Экосистема SPPS

В статье описано использование утилиты Job Manager для организации процесса производства, как описано в Руководстве [2] и предыдущих статьях цикла [7, 8].

Утилита Job Manager изначально предназначена для использования инженером по эксплуатации (Operation Engineer, OE), который отвечает за организацию процесса производства и безопасность.

Текущая версия Job Manager основана на интерфейсе Tcl, вызов функций которого происходит в режиме командной строки. Утилита Job Manager поддерживает создание:

  • заданий на программирование (Programming Job) для стандартного цикла производственного программирования (далее используется термин «non-HSM-режим производства»);
  • заданий на программирование (Programming Job) для защищенного цикла производственного программирования (далее используется термин «режим производства на базе АМЗ (HSM)»);
  • файлов двоичных образов (bitstream) различных форматов (STAPL, DAT, SPI и т. д.) для использования инструментарием для программирования сторонних производителей (non-HSM-режим производства).

Задания на программирование (Programming Job), созданные Job Manager, позволяют программировать микросхемы с использованием FlashPro Express (Руководство [4]) или в режиме лабораторного программирования (In House Programming, IHP).

Генерация образа для программирования микросхем (Programming bitstream), поддерживаемая Job Manager, основывается на информации о проекте, импортированном из Libero SoC. Данные для энергонезависимой памяти (eNVM) и политики безопасности могут быть модифицированы в проекте Job Manager, который позволяет обновлять такие области, как образ прошивки (firmware) для процессора Cortex-M3 и политики безопасности.

Утилита Job Manager помогает создавать программирующие образы (programming bitstream) за пределами среды разработки Libero SoC, избавляя инженера по обслуживанию (OE) от необходимости изучения Libero SoC, получения лицензий на Libero SoC и адресной миграции в новые версии Libero SoC.

 

Процесс производства, основанный на использовании АМЗ

Основанный на АМЗ процесс производства (HSM-based manu-facturing process) использует поддерживаемые программируемыми микросхемами протоколы безопасности. Дополнительную информацию можно найти в документе [2] и предыдущих статьях цикла [7, 8].

Пользовательский АМЗ (U‑HSM) разрешает генерировать и затем применять различные ключи шифрования (encryption key) и ключи доступа (pass key). Криптографические операции с этими ключами выполняются в доверенной области (security boundaries) внутри АМЗ (HSM Module).

Основанный на АМЗ процесс производства (HSM-based Manufac-turing Flow) поддерживает следующие операции:

  1. Импорт, генерацию и использование ключей под защитой пользовательского АМЗ (U‑HSM) и заводского АМЗ (M‑HSM).
  2. Внедрение в микросхему первичного ключа защиты с применением протокола кода авторизации (Authorization Code protocol).
  3. Защищенную передачу данных между пользовательским АМЗ (U‑HSM) и заводским АМЗ (M‑HSM).
  4. Защиту от несанкционированного производства (Overbuild protection).
  5. Аутентификацию микросхемы.
  6. Верификации с помощью пользовательского АМЗ (U‑HSM), подписанного криптографическим способом сертификата соответствия (certificate of conformance, CoC) для запрограммированного в микросхему проекта.
  7. Верификации с помощью пользовательского АМЗ (U‑HSM) сертификатов завершения задачи (programming job end certificate).
  8. Программирование в микросхему главного образа (Master programming job) и образа обновления (Upgrade programming job).
  9. Обновление энергонезависимой памяти (eNVM).
  10. Обновление содержимого клиентских разделов энергонезависимой памяти (eNVM client selection).
  11. Перезапись политик безопасности (Security overwrite).

 

Процесс производства без использования АМЗ

Поддерживаемый утилитой Job Manager процесс производства без использования АМЗ (non-HSM Manufacturing Flow) позволяет генерировать файл двоичного образа (bitstream file) и задание на программирование (programming job) за пределами инструментария среды разработки Libero SoC. Для процесса производства без помощи АМЗ (non-HSM Manufacturing Flow) утилита Job Manager поддерживает следующие операции:

  1. Начальную загрузку ключей посредством образов, защищенных на ключе KLK (KLK-protected bitstream).
  2. Генерацию образов обновления (update bitstream), зашифрованных на ключах (UEK1/UEK2/UEK3).
  3. Обновление энергонезависимой памяти (eNVM).
  4. Обновление содержимого клиентских разделов энергонезависимой памяти (eNVM client selection).
  5. Перезапись значений ключей.
  6. Перезапись политик безопасности (Security overwrite).

 

Требования к серверу АМЗ

В основанном на АМЗ процессе производства (HSM-based Manufacturing Flow) утилита Job Manager конфигурируется для работы с пользовательским АМЗ (U‑HSM) для генерации задачи программирования на базе АМЗ (HSM Programming Job) и задач программирования на базе АМЗ (HSM Programming Jobs), необходимых для исполнения заводским АМЗ (M‑HSM).

Дополнительную информацию о серверах АМЗ (HSM server) можно получить из Руководства [2] и предыдущих статей цикла [7, 8]. Подробные сведения о развертывании серверов АМЗ (HSM Server) содержатся в документах [5, 6].

 

Конфигурирование параметров АМЗ

Для применения утилиты Job Manager в процессе производства, основанном на АМЗ (HSM flow), необходимо установить параметры пользовательского АМЗ (U‑HSM), которые хранятся в файле определений пользовательского уровня (user level DEF file) и автоматически загружаются для любого нового или существующего проекта утилиты Job Manager.

Конфигурационные данные для пользовательского АМЗ (U‑HSM configuration data) определяют:

  • IP-адрес сервера пользовательского АМЗ (U‑HSM server);
  • уникальный идентификатор пользовательского АМЗ (U‑HSM UUID), присвоенный компанией Microsemi;
  • уникальный идентификатор мастер-ключа пользовательского АМЗ (U‑HSM Master Key UUID);
  • расположение по умолчанию хранилища наборов ключей — keyset repository (Руководство по Libero SoC [3]);
  • уникальный идентификатор заводского АМЗ (M‑HSM UUID), присвоенный компанией Microsemi.

Для конфигурирования АМЗ (HSM) используется команда set_hsm_params языка Tcl [1].

 

Файл набора ключей

Файл набора ключей (keyset file) используется только в технологии HSM flow. Он содержит ключи, сгенерированные пользовательским АМЗ (U‑HSM) и зашифрованные на мастер-ключе (Master Key) того же АМЗ (U‑HSM). Новые файлы можно создать случайным образом с помощью АМЗ (HSM) на основе существующих файлов наборов ключей (keyset file) или импортировать из открытых значений, содержащихся в обычном текстовом файле. Файлы наборов ключей (keyset file) располагаются в хранилище наборов ключей (keyset repository), и к ним можно назначить совместный доступ из различных проектов утилиты Job Manager. Хранилище конфигурируется с помощью параметров АМЗ (HSM parameter), как описано в Руководстве [4].

Файлы наборов ключей (keyset file) содержат следующие ключи:

  • Ключ квитанции (Ticket Key), на котором зашифрованы все ключи в файле набора ключей (keyset file):
    • ключ квитанции (Ticket Key) защищен на мастер-ключе АМЗ (HSM Master Key);
    • файл набора ключей (keyset file) содержит уникальный идентификатор мастер-ключа АМЗ (HSM Master Key UUID) для идентификации происхождения файла.
  • Ключи шифрования (Encryption keys): UEK1, UEK2, UEK3.
  • Ключи доступа (Pass keys): UPK1, UPK2, DPK.
  • Базовые ключи (Base keys) для управления уникальными для микросхемы (per-device key) значениями ключей UEK1/UEK2/UEK3/UPK1/UPK2/DPK.

Дополнительную информацию об управлении ключами в технологии SPPS можно получить из документа [2] и предыдущих статей цикла [7, 8].

Файл набора ключей (keyset file) генерируется за пределами проекта утилиты Job Manager и связывается с созданием нового элемента данных для программирования (Programming Data), как описано в Руководстве [5].

Команда create_keyset языка Tcl [1] предусмотрена для управления файлами наборов ключей (keyset file).

 

Данные для программирования

Новый элемент данных для программирования (Programming Data) создается на основе информации из проекта, импортированного из Libero SoC в файл контейнера JDC (Job Data Container). Подробности об экспорте контейнеров (JDC Export) из проектов Libero SoC можно найти в документе [3].

Данные для программирования (Programming Data) содержат всю информацию, необходимую для генерации двоичного образа (bitstream) как для режима HSM flow, так и для режима non-HSM flow. Двоичный образ (bitstream), который инициализируется для режима non-HSM flow, может быть экспортирован непосредственно из данных для программирования (Programming Data) в файл образа (bitstream file) в выбранном пользователем формате.

В рамках информации для программирования (Programming Data) пользователем могут быть сделаны следующие модификации данных проекта:

  • С помощью образа (image), загруженного из внешних файлов данных, можно обновить один или более клиентов энергонезависимой памяти (eNVM client).
  • Настройки защиты проекта (Design security) могут быть перезаписаны посредством внешнего файла менеджера политик безопасности (Security Policy Manager, SPM), импортированного из Libero SoC.
  • В режиме non-HSM flow можно изменить открытые значения ключей шифрования (encryption key) и ключей доступа (pass keys). В режиме HSM flow все значения ключей используются из защищенного АМЗ файла набора ключей (HSM-protected keyset file).

Проект утилиты Job Manager может иметь один или несколько элементов данных для программирования (Programming Data) для поддержки программирования нескольких микросхем Microsemi, расположенных на одной и той же плате и соединенных в JTAG-цепочку.

Рассмотрим процесс создания и модификации данных в элементе данных для программирования (Programming Data entry).

 

Создание данных для программирования из файла контейнера

Новый элемент данных для программирования (Programming Data) создается командой new_prog_data языка Tcl [1]. Его можно сформировать в рамках существующего или нового проекта утилиты Job Manager.

При создании нового элемента данных для программирования (Programming Data entry) данные проекта копируются из внешнего файла контейнера (JDC file) в текущий проект. После этого шага внешний файл контейнера (JDC file) больше не используется.

В режиме АМЗ (HSM flow) генерация ключей и управление ключами осуществляется с помощью пользовательского АМЗ (U‑HSM). Поэтому в таком режиме новые данные для программирования (Programming Data) должны быть связаны с файлом набора ключей (keyset file), созданным, как описано в разделе «Файл набора ключей (Keyset File)». Все криптографические операции, связанные с защищенными ключами, выполняются внутри АМЗ (HSM). Например, главный образ прошивки (Master bitstream) генерируется посредством пользовательского АМЗ (U‑HSM) и программируется с применением протокола кода авторизации (Authorization Code protocol), реализуемого заводским АМЗ (M‑HSM).

 

Обновление энергонезависимой памяти

Это необязательный шаг, который разрешает пользователю модифицировать один или несколько клиентов энергонезависимой памяти (eNVM client), расположенных в проекте, загруженном в данные для программирования (Programing Data). Модель применения подробно разобрана в документе [2] и предыдущих статьях цикла [7, 8].

Для того чтобы добавить информацию для обновления клиента (client update), загруженный в элемент данных для программирования (Programming Data) проект должен иметь компоненты энергонезависимой памяти (eNVM component), которые уже содержат необходимые клиенты энерго-независимой памяти (eNVM client). Размер данных для обновления (update data) должен быть равен или меньше размера клиента (см. описание команды set_envm_update языка Tcl в [1]).

Обновление существующего клиента энергонезависимой памяти (eNVM client update) можно удалить, используя команду remove_envm_update языка Tcl [1].

 

Перезапись ключа в режиме non-HSM Flow

Данная функция применима в режиме non-HSM flow и позволяет пользователю модифицировать открытые значения ключей (plain text key value) для ключей, поступивших из Libero SoC, в виде части настроек защиты проекта. Новые значения для ключей UEK1/UEK2/UEK3/UPK1/UPK2/DPK могут быть установлены с помощью команды set_key языка Tcl [1]. Перезаписанные ключи можно восстановить командой remove_key языка Tcl [1].

 

Перезапись настроек безопасности

При перезаписи настроек безопасности (Security overwrite) игнорируются настройки безопасности, импортированные в элемент данных для программирования (Programming Data), импортированные из Libero SoC (через файл контейнера JDC), а используются настройки, импортированные из файла менеджера политик безопасности (SPM file) с диска ПК. После импорта внешний файл менеджера политик безопасности (SPM) утилитой Job Manager больше не используется.

Перезапись настроек защиты (Security overwrite) доступна как в режиме HSM flow, так и в режиме non-HSM flow. В обоих случаях политики безопасности (security policy) берутся из перезаписываемых данных, а значения ключей (key value) подчиняются следующим правилам:

  • HSM flow:
    • значения ключей всегда берутся из файла набора ключей (keyset file).
  • Non-HSM flow:
    • значения ключей берутся из новых настроек безопасности (security settings) перезаписываемой политики безопасности (security overwrite);
    • для ключей, перезаписываемых командой set_key (см. «Перезапись ключа» (Key Overwrite), используется новое значение ключа (key overwrite value).

Подробности можно найти в описании команд set_security_overwrite и remove_security_overwrite языка Tcl в [1].

 

Инициализация двоичного образа

Инициализация двоичного образа (Bitstream initialization) позволяет настраивать параметры генерации двоичного образа (bitstream) для использования при экспорте:

  • задачи (job export) в режиме HSM flow;
  • задачи (job export) в режиме non-HSM flow;
  • программирующего двоичного образа (programming bitstream) в режиме non-HSM flow.

Двоичный образ (bitstream) может быть инициализирован для работы в режиме программирования как HSM flow, так и non-HSM flow. Детали модели использования образов (bitstream) для обоих режимов доступны в документе [2].

Данные для программирования (Programming Data) имеют один или более элементов двоичного образа (bitstream), которые можно использовать в одном и том же или разных заданиях на программирование (programing job).

Инициализация двоичного образа (Bitstream initialization) осуществляется командой init_bitstream языка Tcl [1].

 

Режим HSM flow

Рассмотрим инициализацию и применение двоичных образов программирования микросхем (programming bitstream) для различных ситуаций в режиме HSM flow. Поскольку в этом режиме все ключи защищены с помощью АМЗ (HSM), то двоичные образы (bitstreams) для всех описанных далее случаев должны генерироваться с помощью пользовательского АМЗ (U‑HSM).

Главный двоичный образ

Главный двоичный образ (Master bitstream) в режиме HSM flow создается для программирования в недоверенном окружении начальных настроек безопасности (initial security) и всех других выбранных пользователем функций микросхемы. Загрузка ключа защиты (Secure key) происходит с использованием поддерживаемого микросхемой протокола кода авторизации (Authorization Code protocol), как описано в документе [2] и в предыдущих статьях цикла [7, 8].

Главный двоичный образ (Master bitstream) может быть сгенерирован для значений ключей UEK1/UPK1/UEK2/UPK2/UEK3/DPK, относящихся ко всему проекту (project keys) или индивидуально для каждой микросхемы (per-device keys).

Ключи проекта (Project keys) вставляются в двоичный образ (bitstream) из файла набора ключей (keyset file) при его генерации.

Уникальные для микросхемы ключи (per-device keys) генерируются и внедряются в образ для программирования (programming bitstream) заводским АМЗ (M‑HSM) при программировании микросхемы. Уникальные для микросхемы значения ключей (per-device key value) конструируются из соответствующих базовых ключей (base keys) из файла набора ключей (keyset file) и серийного номера микросхемы (DSN). Уникальный для микросхемы протокол (per-device protocol) и типы ключей задаются в параметрах команды init_bitstream языка Tcl [1].

Главный двоичный образ (Master bitstream) программирует настройки безопасности, импортированные в данные для программирования (Programming Data) из среды разработки Libero SoC, и соответственно переписывает любые настройки из файла менеджера политик безопасности (SPM).

Важное замечание! Исходя из политики безопасности, после загрузки первичного ключа (initial key) операции программирования, такие как стирание (ERASE) и проверка программирования (VERIFY), для реализации требуют наличия АМЗ (HSM), который мог бы разблокировать защиту микросхемы.

Предупреждение! Настройки безопасности (security settings), запрограммированные в микросхему, можно изменить только после выполнения операции стирания (ERASE). Операция стирания (ERASE) не убирает содержимое энергонезависимой памяти (eNVM). Энергонезависимая память (eNVM) становится полностью доступной после стирания настроек безопасности (security settings).

Образ обновления с ключами UEK1/UEK2/UEK3

Такой тип двоичного образа (bitstream) используется для программирования массива ПЛИС (FPGA Fabric) и/или энергонезависимой памяти (eNVM). С помощью этого типа файла невозможно перепрограммировать компоненты защиты микросхемы. Данный двоичный образ (bitstream) может быть использован в тех случаях, когда у микросхемы уже запрограммированы настройки безопасности. Особенности программирования для различных комбинаций типов ключей и блокировок приведены в таблице.

Таблица. Особенности программирования при различных типах ключей UEK1/UEK2/UEK3 и блокировки

Типы ключей/блокировка

Особенности программирования

UEK1/UEK2/UEK3-ключи
проекта (project keys),
защита не заблокирована

В этом случае все микросхемы проекта имеют одни и те же значения ключей UEK1, UEK2 или UEK3, и программирование целевой микросхемы возможно без проверки соответствия значений FlashLock/UPK1.
Утилита Job Manager может сгенерировать файл автономного программирования (standalone programming) или задачу программирования для режима non-HSM, для которой не требуется участия заводского АМЗ (M-HSM) в процессе программирования.

UEK1/UEK2/UEK3-ключи
проекта (project keys),
защита заблокирована

Если функция программирования у целевого устройства заблокирована, то, поскольку открытые значения ключа блокировки (lock key) нельзя использовать в недоверенном окружении, заводской АМЗ (M-HSM) должен выполнить защищенную разблокировку микросхемы.
Этот тип двоичного образа (bitstream) можно применять для режима HSM programming job.
Разблокирование UPK1 выполняется доверенным образом по протоколу OTPK.
Дополнительную информацию можно найти в документе [2] или предыдущих статьях цикла [7, 8].

UEK1/UEK2/UEK3-ключи
микросхемы (per-device keys),
защита не заблокирована,
серийный номер (DSN)
известен

Если ключи UEK1, UEK2 или UEK3 являются уникальными для микросхемы (per-device keys), целевые функции не заблокированы и известен серийный номер (DSN) целевой микросхемы, то пользователь имеет возможность сгенерировать специфичный для микросхемы (per-device) двоичный образ (bitstream), который в процессе программирования микросхем не требует наличия заводского
АМЗ (M-HSM). Такой двоичный образ (bitstream) может быть экспортирован в виде автономного файла образа (standalone bitstream file) или задачи программирования (programming job) в режиме non-HSM flow.
В любом случае серийный номер микросхемы (DSN) должен быть добавлен в команду export_bitstream языка Tcl [1] в процессе генерации файла двоичного образа (bitstream file)
или в команду add_microsemi_device языка Tcl [1], которая добавляет целевые микросхемы в цепочку внутри задания на программирование (programming job).

UEK1/UEK2/UEK3-ключи
 микросхемы (per-device keys),
остальные случаи

Для всех других случаев, относящихся к ситуации с уникальными для микросхемы (per-device) значениями ключей UEK1/UEK2/UEK3, необходимо использовать заводской АМЗ (M-HSM) и задачу программирования HSM programming job. Если функции целевой микросхемы заблокированы уникальным для микросхемы (per-device) ключом UPK1, то выполняется доверенная разблокировка ключа UPK1 посредством протокола OTPK. Дополнительную информацию можно найти в документе [2] и предыдущих статьях цикла [7, 8].

 

Режим non-HSM flow

В режиме non-HSM flow файл набора ключей (keyset file) не используется. Все значения ключей берутся из настроек защиты проекта (design security setting) Libero SoC. Имеется два механизма перезаписи заданных пользователем ключей защиты проекта (UPK1, UPK2, UEK1, UEK2, UEK3 и DPK):

  1. Перезапись политики безопасности (Security Overwrite). Настройки безопасности (security setting) и набор значений ключей заменяют оригинальные настройки из Libero SoC.
  2. Перезапись ключей (Key Overwrite). Набор значений ключей заменяет как настройки из Libero SoC, так и настройки перезаписи политики безопасности (Security Overwrite).

Перейдем к рассмотрению типов двоичного образа (bitstream) для режима non-HSM flow, которые можно сгенерировать для промышленного программирования в недоверенном окружении.

Доверенный двоичный образ

С помощью этого типа двоичного образа (bitstream) программируют массив ПЛИС (FPGA Fabric) и/или энергонезависимую память (eNVM). Двоичный образ (bitstream) полностью зашифровывается на ключе шифрования KLK.

Главный двоичный образ

Главный двоичный образ (Master Bitstream) аналогичен доверенному образу (Trusted Facility), но программирует также и настройки защиты микросхемы. После программирования пользовательских настроек безопасности все заводские режимы ключей компании Microsemi, в том числе режимы ключей KLK, DFK, KFP и KFPE, становятся отключенными по умолчанию.

Примечание. На основании политики безопасности при программировании ключей шифрования UEK1 или UEK2 будет происходить и программирование ключей доступа UPK1 или UPK2 соответственно, и блокирование сегмента защиты (security segment). В результате операции стирания (ERASE) и проверки программирования (VERIFY) для сгенерированных файлов образов (bitstream files) или задач программирования (programming jobs) будут содержать открытые значения ключей UPK1/UPK2. Это необходимо, чтобы разблокировать сегменты защиты (security segments) для выполнения операции программирования в режиме non-HSM flow (в режиме HSM flow используются зашифрованные одноразовые пароли доступа).

Образ обновления с ключами UEK1/UEK2/UEK3

С помощью этого типа двоичного образа (bitstream) можно перепрограммировать массив ПЛИС (FPGA fabric) и/или энергонезависимую память микросхемы (eNVM). Если программирование целевой микросхемы защищено посредством FlashLock/UPK1, то в режиме non-HSM flow в файл двоичного образа (bitstream file)/задачу программирования (programming job) будет включено открытое значение ключа доступа UPK1.

 

Экспорт файла двоичного образа

Экспорт файла двоичного образа (programming bitstream file) доступен только в режиме non-HSM flow. Экспорт выполняется командой export_bitstream_file языка Tcl [1] и может осуществляться в любой из поддерживаемых типов файла для программирования микросхемы (programming file). Задание дополнительного параметра DSN (серийный номер микросхемы) применимо лишь в ситуациях, описанных в разделе «Режим non-HSM flow». Экспортируемый файл двоичного образа (bitstream file) создается в заданном пользователем месте файловой системы.

 

Задача программирования

Задание на программирование (programming Job) представляет собой набор данных, используемых программирующими системами при программировании микросхемы как в режиме HSM flow, так и в режиме non-HSM flow. Текущая экосистема SPPS поддерживает задания для программирования с помощью утилиты FlashPro Express и программирования в лабораторных условиях (IHP).

Утилита FlashPro Express может выполнять задания на программирование как в режиме HSM flow, так и в режиме non-HSM flow (подробности в документе [2]), а технология IHP поддерживает задания только для режима HSM flow. Внешний вид диалогового окна утилиты FlashPro Express показан на рис. 2.

Главное диалоговое окно утилиты FlashPro Express

Рис. 2. Главное диалоговое окно утилиты FlashPro Express

Задача программирования (programming job) содержит следующие данные:

  • Тип задания (Job type): FlashPro Express или IHP.
  • Источник задания (Job origin).
  • Двоичные образы (bitstream) для различных операций программирования (PROGRAM, ERASE и VERIFY).
  • Информацию для настройки оборудования — для задач типа FlashPro Express job:
    • тип аппаратного интерфейса (JTAG в данной версии утилиты Job Manager);
    • данные о конфигурации.
  • Типы микросхем для выполнения задания (Job devices), включая базовую информацию о микросхемах.
  • Данные об АМЗ (только для режима HSM flow):
    • уникальный идентификатор заводского АМЗ (M‑HSM UUID);
    • уникальный идентификатор пользовательского АМЗ (U‑HSM UUID);
    • зашифрованные квитанции задач (Job Tickets), авторизующие операции программирования и защиту от несанкционированного производства (overbuild protection) под управлением заводского АМЗ (M‑HSM);
    • зашифрованные ключи и данные для протоколов защиты, необходимые для протоколов АМЗ (HSM).

 

Задания на программирование для режима HSM flow

Задание на программирование (Programming Job) может быть настроено для выполнения в недоверенном окружении (untrusted environment). В таком случае заводской АМЗ (M‑HSM) защищает криптографический ключевой материал и другие чувствительные данные, необходимые для протоколов защиты микросхемы в процессе производства.

Данные для АМЗ (HSM) добавляются к задаче программирования (Programming Job) с инструкциями для АМЗ (HSM Tasks). Подробности изложены далее в разделе «Задачи для АМЗ (HSM Tasks)». Элемент данных для программирования (Programming Data) создается в проекте утилиты Job Manager с помощью команды new_prog_job языка Tcl [1].

 

Создание задания на программирование для FlashPro Express

После создания задания на программирование для FlashPro Express (FlashPro Express Programming Job) пользователь задает тип настройки оборудования: цепочка JTAG (JTAG Chain) — поддерживаемый в текущей версии Job Manager.

Конфигурирование цепочки JTAG

В цепочку JTAG (JTAG chain) могут быть добавлены следующие типы микросхем:

  • микросхемы Microsemi, предназначенные для программирования;
  • микросхемы Microsemi, пропускаемые при программировании;
  • микросхемы сторонних производителей, пропускаемые при программировании.

Каждая микросхема имеет заданное пользователем имя, которое является уникальным в цепочке JTAG (JTAG chain).

Микросхемы компании Microsemi могут быть запрограммированы с помощью двоичного образа (bitstream), сгенерированного элементом данных для программирования (Programming Data), или посредством существующих файлов образа (programming bitstream) в формате STAPL, загруженных с диска.

Добавление микросхем Microsemi для программирования созданным двоичным образом

Если микросхемы Microsemi программируются двоичным образом (bitstream), сгенерированным из данных для программирования (Programming Data), то этот двоичный образ (bitstream) должен быть задан в параметрах Programming Data и bitstream name команды add_microsemi_prog_device языка Tcl [1].

Параметр DSN (серийный номер микросхемы) используется в режиме HSM flow для создания специфичных для микросхемы файлов при программировании обновлений (раздел «Образ обновления с ключами UEK1/UEK2/UEK3 (UEK1/UEK2/UEK3 Update Bitstream)»). Реальная генерация образа (bitstream) происходит при экспорте задачи программирования (programming job), как описано в разделе «Экспорт инструкций для АМЗ (HSM Task Export)».

Добавление микросхем Microsemi для программирования из существующего файла двоичного образа

Микросхемы Microsemi можно программировать, используя существующий файл двоичного образа (bitstream file), сгенерированный за пределами утилиты Job Manager.

Для этого нужно применить команду add_microsemi_prog_device языка Tcl [1], указать на целевой файл двоичного образа (bitstream file) на диске, задать путь к файлу в параметре bitstream_file.

Добавление пропускаемых микросхем Microsemi

Пропускаемые микросхемы Microsemi можно добавить, задав наименование микросхемы или указав на файл программирования микросхемы.

Дополнительную информацию можно получить из описания команды add_microsemi_bypass_device языка Tcl [1].

Добавление пропускаемых микросхем производства не Microsemi

Микросхемы производства не Microsemi можно добавить в цепочку JTAG командой add_non_microsemi_bypass_device языка Tcl [1].

Параметры пропускаемых микросхем JTAG цепочки могут быть заданы указанием на принимаемый командой файл BSDL или явным указанием параметра. Дополнительную информацию можно получить из описания команды add_non_microsemi_bypass_device языка Tcl [1].

 

Экспорт задания на программирование для режима non-HSM flow

Задание на программирование для режима non-HSM flow (non-HSM Programming Job) экспортируется из утилиты Job Manager командой export_prog_job языка Tcl [1]. Все двоичные образы (bitstream), генерируемые из элементов данных для программирования (Programming Data), создаются в процессе выполнения команды.

 

Задачи для АМЗ

Задачи для АМЗ (HSM task) в режиме HSM flow обеспечивают гибкость при организации процесса производства. Для защиты от несанкционированного производства (overbuild protection) возможно одновременное использование нескольких контрактных производителей (Contract Manufacturer), или общий объем производства может быть разделен на несколько небольших частей. Например, после создания задания на программирование (Programming Job) инженер по эксплуатации (OE) может сформировать и экспортировать задачу для АМЗ (HSM Task) для каждого используемого контрактного производителя.

Задачи для АМЗ (HSM Tasks) добавляют данные АМЗ (HSM data) в задание на программирование (Programming Job). Для каждой задачи для АМЗ (HSM Task) пользователь создает квитанции задания (Job Ticket) и определяет операции программирования для каждой квитанции (ticket). При создании квитанции (ticket) в нее добавляется информация для защиты от несанкционированного производства (overbuild protection) и другие сведения, специфичные для используемых протоколов.

Дополнительную информацию о модели использования АМЗ (HSM) и описание последовательности действий можно найти в документе [2] и предыдущих статьях цикла [7, 8].

Квитанции заданий Job Ticket

Квитанции задач для АМЗ (HSM Task Ticket), которые в данном контексте называются «квитанции заданий» (Job Ticket), предназначены для осуществления политик безопасности на стороне контрактного производителя и шифрования чувствительной информации, используемой для реализации протоколов защиты микросхемы.

Квитанции заданий (Job Ticket) создаются для конкретных типов микросхем в рамках заданий на программирование (Programming Job). Каждый тип микросхем может иметь одну или несколько квитанций (ticket). Квитанции заданий (Job Ticket) формируются для каждой задаваемой пользователем операции программирования.

Новая квитанция задания (Job Ticket) создается командой new_hsmtask_ticket языка Tcl [1]. Параметр max_device используется для ограничения количества микросхем, для которых будут выполняться операции программирования.

Запрос задания

Запрос задания Job Request экспортируется из проекта утилиты Job Manager после создания всех квитанций (ticket) в рамках задач для АМЗ (HSM Task). Запрос задания Job Request затем передается утилите FlashPro Express или для IHP и обрабатывается их пользовательскими АМЗ (M‑HSM). Запрос задания Job Request можно выполнить командой hsmtask_m_request языка Tcl [1].

Ответ на запрос задания

Ответ на запрос задания Job Reply возвращает информацию для генерации квитанции (ticket), созданную FlashPro Express/IHP. Эта информация криптографическим образом привязана к физическим экземплярам заводского и пользовательского АМЗ (M‑HSM/U‑HSM), участвующим в обработке запроса задания Job Request. После выполнения операции квитирования протокола установки связи задание HSM Job, экспортируемое из задачи HSM Task, может использоваться только модулями АМЗ (HSM), участвовавшими в протоколе квитирования. Это предотвращает дублирование задач для АМЗ (HSM Task) на стороне контрактного производителя.

Ответ Job Reply генерируется FlashPro Express или в рамках IHP и может быть импортирован в необходимую задачу для пользовательского АМЗ (U‑HSM Task) командой hsmtask_m_reply языка Tcl [1].

Экспорт задачи для АМЗ

Задача для АМЗ (HSM Task, в данном контексте используется термин HSM Job) может быть экспортирована командой export_hsmtask языка Tcl [1]. Эта команда выполняет часть операции экспорта, производимой в рамках экспорта задания (job export) для режима non-HSM, и добавляет специфичную для конкретного АМЗ (HSM) информацию в контейнер экспорта задания (job export container). Добавляемые данные состоят из квитанций заданий (Job Ticket), ключей шифрования (encryption key), данных для реализации протоколов и другой специфичной для АМЗ (HSM) информации. Задание для АМЗ (HSM job) может быть экспортировано только после импорта ответа Job Reply.

Отчет о состоянии задания

Отчет о состоянии задания (Job Status) может быть сгенерирован утилитой FlashPro Express или в рамках IHP в процессе выполнения задания, или после его завершения. Пример диалогового окна утилиты FlashPro Express после завершения задания показан на рис. 3.

Диалоговое окно FlashPro Express после завершения задания на программирование

Рис. 3. Диалоговое окно FlashPro Express после завершения задания на программирование

После генерации файл отчета Job Status отправляется пользователю.

Задание HSM Programing Job, выполняемое на стороне контрактного производителя, может завершаться после программирования всех микросхем или быть прервано в любое время.

Утилита Job Manager использует отчет Job Status для того, чтобы:

  • проверить статус завершения задачи, который является защищенным криптографическими методами доказательством того, что задание завершено (end job) и действия по программированию, управляемые ее квитанциями (ticket), не могут больше выполняться;
  • отобразить количества микросхем, обработанных в рамках каждой квитанции (ticket);
  • убедиться путем верификации сертификата соответствия (CoC), что в каждую микросхему запрограммирован корректный образ (bitstream).

 

Экспорт каталога SPI

Утилиту Job Manager можно применить для создания каталога SPI (SPI directory), который используется микросхемами SmartFusion2/IGLOO2 в процессе автоматического обновления и программного восстановления. Каталог SPI содержит информацию о «золотом» образе (golden bitstream) и образе обновления (update bitstream), размещаемых пользователем в SPI flash-памяти.

Каталог SPI создается командой export_spi_directory языка Tcl [1]. Для него не требуется наличие проекта Job Manager.

 

Определение терминов

Сокращение

Расшифровка

Перевод

HSM

Hardware
Security Module

Аппаратный модуль (криптографической)
защиты (информации), АМЗ

U-HSM

User HSM

Пользовательский АМЗ

M-HSM

Manufacturing HSM

Заводской АМЗ

OE

Operation Engineer

Инженер по эксплуатации

DSN

Device Serial Number

Серийный номер микросхемы

IHP

In House Programming

Программирование в лабораторных условиях

JDC

Job Data Container file

Файл контейнера данных для задачи программирования

SPM

Security Policy Manager

Менеджер политик безопасности

Номер версии для «золотого» образа (golden bitstream) и образа обновления (update bitstream) можно ввести вручную или обеспечить с помощью предварительно сгенерированных SPI-файлов. Кроме того, пользователь должен указать адреса для обоих образов в окончательной flash-памяти.

Дополнительную информацию об использовании SPI-каталога (SPI flash directory) можно получить из Руководства [3].

 

Заключение

На этом завершен цикл статей, посвященных созданию защищенных пользовательских приложений на основе микросхем SmartFusion2/IGLOO2 корпорации Microsemi. В статьях проанализированы вопросы создания в массиве ПЛИС защищенного контура, состоящего из функциональных IP-ядер, способы организации его взаимодействия с микроконтроллерной подсистемой SmartFusion2 с помощью контроллеров обмена данными (FIC) и распространения прерываний (FIIC) между подсистемами. Кроме того, рассмотрена технология защищенного программирования в заводских условиях (SPPS), позволяющая обеспечить доверенное программирование микросхем в недоверенных условиях и обеспечивающая защиту от несанкционированного программирования микросхем (overbuilding protection).

Автор надеется, что материалы статей будут полезны как проектировщикам систем на базе СнК SmartFusion2 и ПЛИС IGLOO2, так и разработчикам собственных кристаллов.

Литература
  1. Programming Job Manager User Guide v11.8
  2. Secure Production Programming Solution (SPPS) For Libero SoC v11.8 SP1. User Guide
  3. Libero SoC for Enhanced Constraint Flow v11.8 SP1. Release User’s Guide
  4. FlashPro Express for Libero SoC v11.8. User’s Guide.
  5. User HSM Installation and Setup User Guide v11.8. 
  6. Manufacturer HSM Installation and Setup User Guide v11.8. 
  7. Самоделов  А. Создание защищенных пользовательских приложений на базе SmartFusion2 SoC FPGA компании Microsemi. Часть 7. Доверенное программирование микросхем в недоверенном окружении. Общие положения // Компоненты и технологии. 2018. № 2.
  8. Самоделов  А. Создание защищенных пользовательских приложений на базе SmartFusion2 SoC FPGA компании Microsemi. Часть 8. Технология SPPS. Протоколы и аппаратное обеспечение // Компоненты и технологии. 2018. № 3.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *