Перейти к содержанию

    

Привязка своего IP-ядра к ПЛИС Altera

Привет всем. Появилась задача защиты своего IP-ядра при продаже. Лучший вариант - продавать синтезированный Квартусом файл, но нужно что бы его можно было использовать только один раз для конкретного чипа. Прочитал, что ПЛИС Alter-ы имеют уникальный идентификатор, его можно использовать... заказчик ядра передает мне идентификатор микросхемы, я подставляю его в исходники, синтезирую и передаю результат заказчику. Вот только непонятно, как читать этот идентификатор? Нашел, что есть специальная корка, но возможно ли ее интегрировать в свое ядро и нормальный ли это подход?

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Прочитал, что ПЛИС Alter-ы имеют уникальный идентификатор, его можно использовать

Где прочитал? Что за ПЛИС?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что-то вроде вот этого, наверное: Altera Unique Chip ID IP Core.

Смотря как реализовано будет, а то ведь есть варианты, как взломать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
... но возможно ли ее интегрировать в свое ядро и нормальный ли это подход?

В свое ядро интегрировать ее, конечно, можно - как и любой lpm-модуль.

 

А вот что касается "нормальности" подхода, то тут много вопросов.

А что делать заказчику, если у него микросхема, для которой Вы сделали постсинтетический нетлист, вышла из строя? Отправлять Вам новый Unique ID другой микросхемы?

А как Вы будете это контролировать (т.е. действительно ли у заказчика микросхема вышла из строя, или он просто мухлюет и хочет получить второй экземпляр бесплатно)?

А если у заказчика серия в 100500 экземпляров устройства? Вы готовы перекомпилировать своя IP-ядро для каждого экземпляра устройства заказчика?

И прочая, прочая...

 

Производители IP-ядер (в т.ч. Altera) делают по-другому. Если излагать упрощенно, приближая к Вашему случаю - они предоставляют заказчику два файла:

1)зашифрованные исходник (ну или зашифрованный edif/vqm нетлист);

2)лицензионный файл, который позволяет этот зашифрованный файл использовать.

Причем зашифровать файл и сделать лицензионный файл можно так, чтобы компиляция была возможна только для выбранных семейств ПЛИС (одного или нескольких), и только на одном компьютере.

Но при этом у заказчика технически нет ограничений на тираж изделий, в которых используются микросхемы, для которых разрешена компиляция.

 

За подробностями - в личку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А если у заказчика серия в 100500 экземпляров устройства? Вы готовы перекомпилировать своя IP-ядро для каждого экземпляра устройства заказчика?

И прочая, прочая...

Не проблема, такое можно автоматизировать скриптами через командную строку, в квартусе это просто делается, и собирать множество параллельно. Можно сократить число прошивок, если одна будет прошивка рассчитана сразу на 10-100 различных ID :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Не проблема, такое можно автоматизировать скриптами через командную строку, в квартусе это просто делается, и собирать множество параллельно. Можно сократить число прошивок, если одна будет прошивка рассчитана сразу на 10-100 различных ID :)

Можно и зайца научить курить (с) :) Но зачем?

Еще раз отмечу - вопрос это более административный, чем технический.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А что делать заказчику, если у него микросхема, для которой Вы сделали постсинтетический нетлист, вышла из строя? Отправлять Вам новый Unique ID другой микросхемы?

А как Вы будете это контролировать (т.е. действительно ли у заказчика микросхема вышла из строя, или он просто мухлюет и хочет получить второй экземпляр бесплатно)?

 

Если заказчик на этапе интеграции корки и теоретически может что-то сломать/сжечь, то можно отдать корку с таймером или урезанным функционалом. Когда всё отлажено, оттестировано и зашито в релизные версии, то вышедшие из строя микросхемы это исключительно проблемы заказчика.

 

А если у заказчика серия в 100500 экземпляров устройства? Вы готовы перекомпилировать своя IP-ядро для каждого экземпляра устройства заказчика?

 

Если это SRAM-based ПЛИС и конфигурация хранится во внешней флешке (90% случаев), то hmac(fpga_id) можно хранить на ней. В этом случае битстрим будет всегда один и тот же.

Разработчик IP-корки запросто может нагенерировать ваши 100500 хэшей по 100500 id-шника. Заказчику остаётся только запрограммировать на флеш битстрим + рядом положить соответствующий fpga-ке hmac(fpga_id). Hmac привёл для примера. В любом случае хэш можно усложнить/упростить на усмотрение разработчика.

Изменено пользователем Inanity

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Коллеги, постарайтесь взглянуть на проблему шире.

Как заказчик будет получать список своих Unique ID в условиях серийного производства?

Нужно будет на каждом экземпляре смонтированного устройства запустить специальный проект (допустим, его предоставит разработчик IP-ядра), который будет возвращать ID использованной в этом экземпляре микросхемы.

Это требует времени. Затем, пока разработчик ядра генерирует прошивки или хэши, все эти платы надо как-то хранить. И еще проблема - придется либо как-то маркировать каждый экземпляр, либо для каждого экземпляра повторять процедуру чтения ID после получения от разработчика кучи прошивок/хэшей - чтобы восстановить, какому именно файлу прошивки (или хэшу) какой экземпляр устройства соответствует. Все это усложняет производственый процесс и увеличивает накладные расходы.

 

И заметьте, я не утверждал, что подход ТС не годится. Я говорил, что такой подход вызывает много вопросов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Коллеги, постарайтесь взглянуть на проблему шире.

Как заказчик будет получать список своих Unique ID в условиях серийного производства?

 

В случае работы с оценочной версией - можно организовать передачу UID вручную, сколь угодно сложным способом. Для серийного изделия привязка какого-то одного внутреннего ядра к UID всей ПЛИС - довольно порочная практика.

 

Да, в случае мелкой серии процесс активации ядра может напоминать процедуру загрузки лицензионного файла. Т.е. используется универсальный битстрим, который в составе готового изделия формирует код-запрос, на который разработчик высылает код-ответ. Этот ответ загружается в ПЛИС и активирует ядро. Уникальность кода-запроса, а также удобство ввода и хранения ответа - на разработчике ядра. Для мелкосерийных устройств это вполне годится.

 

Ну а в случае больших партий проще договориться о поставке ядра без этого ограничения, чем городить огород и усложнять работу с устройством.

 

Кстати, интересный вопрос до кучи - что делать, если в устройстве будет использоваться более одного IP, авторы которого захотят привязываться к UID ПЛИС? Каждый IP-корщик внедрит в свой нетлист единственный UID-компонент, и в результате конечная прошивка не соберется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извините, что целый день отсутствовал, работа... Интересный разговор начался...

Сразу конечно стоило оговорить: продукт мелкосерийный, с высокой добавленной стоимостью... Так что передача UID и синтез с ним - не проблема. Вопрос, который я подразумевал, но открыто не задал - что делать, если таких ядер несколько и каждое будет использовать Altera Unique Chip ID IP Core, что делать?

Доступа ко всему проекту нет... Неужели все так и передают - сколько хочешь, столько и копируй?

Неужели никто подобными вещами не озадачивался?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Кстати, интересный вопрос до кучи - что делать, если в устройстве будет использоваться более одного IP, авторы которого захотят привязываться к UID ПЛИС? Каждый IP-корщик внедрит в свой нетлист единственный UID-компонент, и в результате конечная прошивка не соберется.

 

Действительно проблема, не подумал. UID, собственно, задумывался как защита всего дизайна от копирования, а не его частей. Скажем так, это способ защиты ip-core работает, но не масштабируется.

 

Сразу конечно стоило оговорить: продукт мелкосерийный, с высокой добавленной стоимостью... Так что передача UID и синтез с ним - не проблема. Вопрос, который я подразумевал, но открыто не задал - что делать, если таких ядер несколько и каждое будет использовать Altera Unique Chip ID IP Core, что делать?

 

Можно без UID. Есть способ защиты от копирования на основе внешней сrypto-memory. Если кратко, то в ip-ядре хранится ключ K и генератор случайных чисел (ГСЧ), во внешней сrypto-memory тоже хранится этот ключ К (который нельзя считать, только перезаписать). После включения питания ГСЧ выдаёт случайное число, которое отправляет во внешнюю сrypto-memory, она делает с этим числом некоторое преобразование, используя ключ К и отправляет результат обратно в ПЛИС, в ip-core. IP-core тоже выполняет аналогичное преобразование, но уже на своей стороне с тем же ключом и числом. Если результаты от сrypto-memory и ip-core совпадают, то аутентификация успешна. Подробнее есть документ xilinx: https://www.xilinx.com/support/documentatio...tes/xapp780.pdf

От себя скажу, что в документе описывается сrypto-memory с SHA-1. Этот хэш на сегодняшний день не считается безопасным, необходимо применять сrypto-memory на основе SHA-2 или SHA-3. Данный подход тоже отнюдь не изящно масштабируется, т.к. под каждую ip-core нужна будет своя сrypto-memory (хотя их спокойно можно посадить на одну шину i2c или 1-wire в зависимости от сrypto-memory). Ещё есть риск накосячить с реализацией ГСЧ на ПЛИС.

Изменено пользователем Inanity

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"Есть способ защиты от копирования на основе внешней сrypto-memory."

Я упоминал, что доступа к всему проекту нету... К сожалению...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
"Есть способ защиты от копирования на основе внешней сrypto-memory."

Я упоминал, что доступа к всему проекту нету... К сожалению...

 

Насчет внешней крипто-памяти я не стал писать, но именно ее имел ввиду, говоря о корявости работы с UID ПЛИС.

 

Тут нужен не доступ ко всему проекту, а возможность потребовать от заказчика несколько (1 - 2) внешних портов на ПЛИС + возможность поставить снаружи свой чип. Если проект работает на готовой плате - это маловероятно. Если плата проектируется - реально. К этим пинам подключается специализированная память - EEPROM с криптоядром. При условии корректной реализации от пользователя потребуется однажды выполнить активацию устройства и все. Перехват обмена с внешним чипом никак не поможет отключить защиту (опять-таки - _при_условии_корректной_реализации_).

Далее порты ядра с указанными констрейнами пробрасываются наружу и все остальное уже никак не зависит от внешнего проекта. Таких защитных чипов в системе может быть несколько.

 

Также хочу добавить, что при большом желании разработчика внешнего проекта, скорее всего, любой тип защиты внутреннего IP-ядра возможно так или иначе снять. Вопрос только в величине желания.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Неужели все так и передают - сколько хочешь, столько и копируй?

Неужели никто подобными вещами не озадачивался?

В очередной раз занудно повторю - это вопрос более административный, чем технический.

У буржуев этот вопрос регулируется лицензионным соглашением. Если кто-то уличен в нарушении этого соглашения - извольте судиться.

При этом, понятное дело, правовые механизмы, работающие "там", будут эффективны в наших реалиях.

А что касается вариантов лицензирования IP-ядер, то они бывают разные - с роялти (когда пользователь платит автору отчисления с каждого экземпляра) и без оного. В первом случае автор либо верит пользователю на слово, либо продает ему дополнительные "секретные" залоченные ПЛИСки, в которых прошита критически важная часть IP-ядра.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Административно - понятно. Технически значит никак. Спасибо всем...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация