Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Защита данных FPGA
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Страницы: 1, 2, 3, 4, 5
prom
Интересуют книги/статьи и т.п. по обеспечению защиты прошивки ПЛИС. Буду очень признателен также за дополнительные комментарии. Насколько слышал краем уха для защиты используется дополнительный CPLD. Я в этих вопросах новичок, так что просьба ногами не пинать blush.gif

Заранее спасибо
Maksim
Обычно в FPGA и CPLD зашивают полином (очень длинный), а внутри FPGA потоки от этих полинов сравниваются. Но этот метод "колется" очень хорошо при малом основании полинома.
Сейчас есть более интересные решения Actel выпустила ПЛИС с внутренней FLASH. Это позволяет например при каждом включении ПЛИС (если её поставить вместо CPLD) писать напрмиер счётчик во флэш, а FPGA будет сообшаться только скажем номер, из которого по известному закону она внутри будет вырабатывать константу которую будет загонять в полином.
т.е. если при каждом включении питания смотреть обмен между ними, то он будет всегда разный.
Но в принципе лучше поставить маленький микркоонтроллер который тоже умеет шить свою память, и который и будет фиксировать каждый раз включение выключения схемы.
prom
Странно, что все настолько не продумано. Ведь при разработке некоторых устройств затрачиваются безумные деньги. При этом, насколько я понял, любой маломальски опытный ПЛИСовец с легкостью может сдуть и декомпилировать прошивку?!

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

Вопрос к корифеям, работающим в компаниях - как вы защищаете IP в ваших разработках? Неужели никак?
makc
Цитата(prom @ Feb 2 2005, 10:16)
Неужели ни одна из компаний не заморачивалась по сабжу? Первое, что приходит в голову - внутри ПЛИС прописывается серийный номер, к которому привязывается все остальное. Ну вариантов может быть много...
*


Ну почему же ничего не сделано. Есть Actel ProASIC, у которых можно поставить бит защиты от чтения прошивки и все. После этого конфигурацию ПЛИС "сдуть" не получится. У них эта технология называется FlashLock.

А для ксайлинкса и альтеры можно придумать следующее решение: конфигурация прогружается в ПЛИС, причем чтение конфигурации аппаратно запрещено (соответсвующими управляющими данными в прошивке), а при выключении питания конфигурация ПЛИС поддерживается с помощью небольшой батарейки, которая осуществляет питание в отсутствии основного питания устройства. ПЛИС в режиме ожидания потребляет совсем немного, так что батарейки должно хватить на несколько лет, а ведь можно поставить аккумулятор, который будет заряжаться во время работы устройства.
Serega Doc
Цитата(makc @ Feb 2 2005, 10:24)
А для ксайлинкса и альтеры можно придумать следующее решение: конфигурация прогружается в ПЛИС, причем чтение конфигурации аппаратно запрещено (соответсвующими управляющими данными в прошивке), а при выключении питания конфигурация ПЛИС поддерживается с помощью небольшой батарейки, которая осуществляет питание в отсутствии основного питания устройства. ПЛИС в режиме ожидания потребляет совсем немного, так что батарейки должно хватить на несколько лет, а ведь можно поставить аккумулятор, который будет заряжаться во время работы устройства.
*


А аккумулятор в BIOS тоже должен садится через несколько лет а я встречал потерю настроек даже на новых материнских платах.

Что произойдет если всетаки батарейка сядет и прошивка сотрется?
Как востанавливать устройство? Вести к производителю? Это не решение проблемы. Об этом должны заботится компании производители FPGA.

Скажите а что за технология у ALTERA - LogicLock?

Спасибо smile.gif
vetal
Все что я могу сказать прзащиту срам фпга, это то, что она отсутствует как таковая. И единственный способ защиты у них (как указывалось выше)- это батарейка. А хоть раз в жизни произойдет такая ситуация, когда эта конфигурация сбросится. И что делать в этом случае?
Конфигурацию этих типов плис сможет снять любой, путем чтения потока.
Так что нужно переходить на не срам, или плисины с интегрированным шифрованием потока.
Hilter
У Xilinx в новых сериях (начиная с Virtex II Pro помоему) защита основавается на шифровании прошивки (Triple DES) , ключ для расшифровки хранится в самой ПЛИС. при прошивке сама плис декодирует поток. Ключ считать нельзя. Таким образом даже если снять образ флеши или промки с прошивкой - в другую ПЛИС без ключа ее не зашьеш и не декомпилируеш smile.gif. Минус технологии в необходимости внешней батарейки для потдержания памяти ключа.
Uuftc
Цитата(Hilter @ Feb 2 2005, 10:46)
У Xilinx в новых сериях (начиная с Virtex II Pro помоему)
*

С Virtex II есть такая фича
Andy-P
FPGA + (CPLD с битом защиты и полиномом), вполне достаточно, чтобы отбить охоту у желающих скопировать. twak.gif

Окончательно вопрос решается:

1. StratixII – во внешней памяти хранится криптованная прошивка. При загрузке в FPGA она декриптуется ключом (128 бит, если не ошибаюсь), который в свою очередь непосредственно прошивается во внутреннюю флэш FPGA. Ключ, разумеется, считать нельзя. Конечно, StratixII - для серьезных проектов

2. Попроще – MAXII (от 240 до 2210 LCELL, внутренняя флэш с битом секретности)

Как-то я задавал такой вопрос на семинаре. Суть ответа примерно такова: не актуально!
Igor_S
Цитата(Serega Doc @ Feb 2 2005, 10:42)
Скажите а что за технология у ALTERA - LogicLock?

Спасибо  smile.gif
*


Eto ne w temu - LogicLock pozwoljaet "zamorozitj" otrabotannyj fragment proekta w FPGA, i ne menjatj ego trassirowku pri wseh posledujushih kompiljacijah proekta
Serega Doc
Цитата(Andy-P @ Feb 2 2005, 11:36)
Попроще – MAXII (от 240 до 2210 LCELL, внутренняя флэш с битом секретности)
*


А кто подскажет пределы стоимости MAX II
Vitus
Ко всему вышесказанному стоит добавить одну немалоавжную вещь (которую между прочим рекомендует Зайлинкс) - делать на печатной плате или непомредственно на ИМС содержащей битстрим надпись типа "все права на копирование битстрима принадлежат...". Не такой уж и глупый совет между прочим поскольку реинжениринг по битстриму вещь весьма затруднительная если вообще возможная а использовать чужой битстрим в чистом виде в коммерческих целях даже у нас не станут (тем более если он заCOPYRIGHTен)
yes
кстати с полиномом совет весьма вредный -
есть так называемая рекурентная процедура Берликемпа-Месси (вроде так), да и вообще можно самому догадаться (пусть менее элегантным способом), которая восстанавливает полином длинны N по потоку 2N. с линейными вычислительными затратами (то есть удлиннение полинома не приводит к усложнению декодирования)

по-хорошему - надо ставить какие-то готовые элементы (которые криптографически проверены)
минималистический - что-то типа Keloq
посерьезнее DES с каким-то генератором (хотя может это тоже плохо - нужно дать криптографам на анализ, если секретность - серьезная проблема)
Maksim
Цитата(yes @ Feb 9 2005, 18:09)
кстати с полиномом совет весьма вредный -
есть так называемая рекурентная процедура Берликемпа-Месси (вроде так), да и вообще можно самому догадаться (пусть менее элегантным способом), которая восстанавливает полином длинны N по потоку 2N. с линейными вычислительными затратами (то есть удлиннение полинома не приводит к усложнению декодирования)

по-хорошему - надо ставить какие-то готовые элементы (которые криптографически проверены)
минималистический - что-то типа Keloq
посерьезнее DES с каким-то генератором (хотя может это тоже плохо - нужно дать криптографам на анализ, если секретность - серьезная проблема)
*


А кто вам даст эти 2N? - если N~300 и сранение идёт по нескольким битам(которыми обмениваются микроконтроллер и FPGA), то как вы собираетесь востановить основание полинома? главное чтобы микрокнтроллер имел на каждое влючение питание новое значение на входе полинома, например,счётчик.
Wyvern
Есть один способ, правда он не относится к проблеме защиты данных, а скорее, к борьбе с неплательщиками и пиратами smile.gif
Известно, что у ПЛИС фирмы Xilinx имеют так называемую шину с тремя состояниями(глобальную).
Далее:
Цитата
Неправильное функционирование общей шины, когда несколько источников с разными уровнями подключаются к шине, может вывести ПЛИС из строя. САПР ПЛИС тщательно проверяет, чтобы спроектированная общая шина функционировала правильно. Поэтому не рекомендуется ручное редактирование файла прошивки, так как случайная ошибка в коде может привести к неправильной работе общей шины и порче ПЛИС.

Так вот -если уж монтировать внешнюю микросхему для защиты кода(IMHO лучшее решение это не CPLD. а дешевый МК с битом защиты, на него мнооого функций можно еще привесить smile.gif ) то ничто не мешает поставить и счетчик запусков(времени работы и проч.) который, после запроса пароля-ключа и неправильного ответа, просто сожжет ПЛИС, загрузив , предварительно отредактированный вручную "неправильный" кусочек кода smile3046.gif
Особенно полезно при продаже не готовых изделий, а чистых программ и ядер... wink.gif

Ник
acex2
Цитата(Maksim @ Feb 10 2005, 12:06)
Цитата(yes @ Feb 9 2005, 18:09)
кстати с полиномом совет весьма вредный -
есть так называемая рекурентная процедура Берликемпа-Месси (вроде так), да и вообще можно самому догадаться (пусть менее элегантным способом), которая восстанавливает полином длинны N по потоку 2N. с линейными вычислительными затратами (то есть удлиннение полинома не приводит к усложнению декодирования)

по-хорошему - надо ставить какие-то готовые элементы (которые криптографически проверены)
минималистический - что-то типа Keloq
посерьезнее DES с каким-то генератором (хотя может это тоже плохо - нужно дать криптографам на анализ, если секретность - серьезная проблема)
*


А кто вам даст эти 2N? - если N~300 и сранение идёт по нескольким битам(которыми обмениваются микроконтроллер и FPGA), то как вы собираетесь востановить основание полинома? главное чтобы микрокнтроллер имел на каждое влючение питание новое значение на входе полинома, например,счётчик.
*



Алгоритм Берлекэмпа-Месси использует 2*N, а не 2^N бит, поэтому для восстановления полинома с длиной 300 бит необходимо всего лишь 600 бит последовательности. Что касается идеи с обновлением значения полинома с каждым новым включением, то не стоит забывать, что последовательность генерируется обоими устройствами: FPGA и МК в данном случае. А вот как вы собираетесь обновлять начальное значение полинома в FPGA с каждым включением, не совсем понятно. Разве что прошивку патчить каждый раз или добавлять фазу загрузки начального значения в FPGA после включения. Но это неэффективно, да и не нужно. Потому что для криптографически-стойкого алгоритма генерации ПСП единственный способ ее повторить, это записать ее в память и потом повторять каждый раз при включении устройства, что физически невозможно - каждую секунду на частоте 1 Мгц будет генерироваться 1 млн. новых бит.

Что касается полиномов, то тут необходимо использовать нелинейные генераторы, например каскад Голлмана или схему Stop-and-Go. Вариант из алгоритма A5 с увеличенными длинами полиномов тоже подойдет. Все они легко реализуются в железе и взломать их практически невозможно при большой разрядности используемых полиномов - проще будет CPLD "расковырять" под микроскопом.
Harbour
Я использую полином как ключ к простому алгоритму (обычно rc4), которым шифруется тестовый запрос. Для проверки подлинности делаем посылку типа запрос-ответ. Правда придется раскошелится, например для rc4, на 258 байт.
acex2
Цитата(Harbour @ Feb 21 2005, 12:13)
Я использую полином как ключ к простому алгоритму (обычно rc4), которым шифруется тестовый запрос. Для проверки подлинности делаем посылку типа запрос-ответ. Правда придется раскошелится, например для rc4, на 258 байт.
*


А можно поподробнее, А то я себе что-то слабо представляют как это все работает в связке FPGA+uC. Кто генерирует тестовый запрос? На основании какой случайности этот запрос формируется? Как часто вы его посылаете?
Maksim
Цитата(acex2 @ Feb 21 2005, 14:07)
Цитата(Maksim @ Feb 10 2005, 12:06)
Цитата(yes @ Feb 9 2005, 18:09)
кстати с полиномом совет весьма вредный -
есть так называемая рекурентная процедура Берликемпа-Месси (вроде так), да и вообще можно самому догадаться (пусть менее элегантным способом), которая восстанавливает полином длинны N по потоку 2N. с линейными вычислительными затратами (то есть удлиннение полинома не приводит к усложнению декодирования)

по-хорошему - надо ставить какие-то готовые элементы (которые криптографически проверены)
минималистический - что-то типа Keloq
посерьезнее DES с каким-то генератором (хотя может это тоже плохо - нужно дать криптографам на анализ, если секретность - серьезная проблема)
*


А кто вам даст эти 2N? - если N~300 и сранение идёт по нескольким битам(которыми обмениваются микроконтроллер и FPGA), то как вы собираетесь востановить основание полинома? главное чтобы микрокнтроллер имел на каждое влючение питание новое значение на входе полинома, например,счётчик.
*



Алгоритм Берлекэмпа-Месси использует 2*N, а не 2^N бит, поэтому для восстановления полинома с длиной 300 бит необходимо всего лишь 600 бит последовательности. Что касается идеи с обновлением значения полинома с каждым новым включением, то не стоит забывать, что последовательность генерируется обоими устройствами: FPGA и МК в данном случае. А вот как вы собираетесь обновлять начальное значение полинома в FPGA с каждым включением, не совсем понятно. Разве что прошивку патчить каждый раз или добавлять фазу загрузки начального значения в FPGA после включения. Но это неэффективно, да и не нужно. Потому что для криптографически-стойкого алгоритма генерации ПСП единственный способ ее повторить, это записать ее в память и потом повторять каждый раз при включении устройства, что физически невозможно - каждую секунду на частоте 1 Мгц будет генерироваться 1 млн. новых бит.

Что касается полиномов, то тут необходимо использовать нелинейные генераторы, например каскад Голлмана или схему Stop-and-Go. Вариант из алгоритма A5 с увеличенными длинами полиномов тоже подойдет. Все они легко реализуются в железе и взломать их практически невозможно при большой разрядности используемых полиномов - проще будет CPLD "расковырять" под микроскопом.
*


Берётся два полинома - предположим, длинный и короткий.
Начальное заполнение полиномов берём от датчика случайных чисел.
На вход длинного полниома заводим выход короткого.
Микроконтроллер при включении питания сообщает в FPGA номер
первого включения N=1(). FPGA полученный номер складывает с какой-то
секретной константой и результат на вход короткого полнинома и прокрутить его
M-тактов (M должно быть больше основания полинома (М=20, крутим 25-30 тактов и т.д.)).
Потом крутим короткий полином и результат подаём на вход длинного полинома,
и тоже прокручиваем энное количество тактов.Микроконтроллер тоже самое проделывает у
себя внутри, после чего результат сообщает в FPGA (в явном виде, с переставленными
битами и т.д.). После каждого включения питания при такой системе выдаваемые ответы
микроконтроллером будут "стоять" не рядом(имеет ввиду следующее значение полинома),а
сбиваться случайным образом за счёт короткого полинома.
Но это так что первое пришло в голову, а лучше я согласен - если есть место
то зашить туда шифратор с ключом и сообщать FPGA секретную константу для запуска, котороая
будет шифроваться гамированием, например (синхропосылка+зашифрованная константа).
eugene
Конечно прошу прощения, но я так и не понял, почему же в FPGA в качестве мества для хранения конфигурации производители избрали SRAM а не FLASH sad.gif Хотя кажется так просто.... Да и с шифрованием напрягаться не надо было бы... Просто и для меня это вопрос достаточно актуальный. Заказчики требуют переходить c CPLD на FPGA именно из соображений "упрятать" внутрь процессор. А тут такие напряги с "открытостью" прошивки
Maksim
Цитата(eugene @ Feb 22 2005, 00:13)
Конечно прошу прощения, но я так и не понял, почему же в FPGA в качестве мества для хранения конфигурации производители избрали SRAM а не FLASH sad.gif Хотя кажется так просто.... Да и с шифрованием напрягаться не надо было бы... Просто и для меня это вопрос достаточно актуальный. Заказчики требуют переходить c CPLD на FPGA именно из соображений "упрятать" внутрь процессор. А тут такие напряги с "открытостью" прошивки
*

Технологические трудности. Посмотрите Actel ведь у них нет таких больших кристаллов как у Xilinx, Altera, а это уже о чём-то говорит. Может кто более сведущий в технологии обяснить более подробно.
acex2
Цитата(Maksim @ Feb 21 2005, 17:57)
Берётся два полинома - предположим, длинный и короткий.
Начальное заполнение полиномов берём от датчика случайных чисел.
На вход длинного полниома заводим выход короткого.
Микроконтроллер при включении питания сообщает в FPGA номер
первого включения N=1(). FPGA полученный номер складывает с какой-то
секретной константой и результат на вход короткого полнинома и прокрутить его
M-тактов (M должно быть больше основания полинома (М=20, крутим 25-30 тактов и т.д.)).
Потом крутим короткий полином и результат подаём на вход длинного полинома, и тоже прокручиваем энное количество тактов.Микроконтроллер тоже самое проделывает у себя внутри, после чего результат сообщает в FPGA (в явном виде, с переставленными битами и т.д.). После каждого включения питания при такой системе выдаваемые ответы микроконтроллером будут "стоять" не рядом(имеет ввиду следующее значение полинома),а сбиваться случайным образом за счёт короткого полинома.
Но это так что первое пришло в голову, а лучше я согласен - если есть место то зашить туда шифратор с ключом и сообщать FPGA секретную константу для запуска, котороая будет шифроваться гамированием, например (синхропосылка+зашифрованная константа).


А чем не устраивают два синхронных нелинейных генератора на LFSR: один в CPLD, другой в FPGA? CPLD шлет выходную последовательность в FPGA по одной линии , в FPGA стоит простой XOR (с триггером на выходе во избежании глитчей) от двух последовательностей. Как только последовательности не совпали - происходит Reset (общий, или какого-нибудь локального автомата для скрытности). В итоге имеем простейшую схему внутри FPGA на нескольких SRL16 + пару LUT для проверки и организации нелинейности + только один дополнительный внешний пин.

Что касается посылок с шифрованием, то тут придется потрудиться над созданием генератора случайных чисел именно в FPGA, который после каждого ресета смог бы генерировать новое случайное число. Иначе можно будет один раз записать посылку от внешнего микроконтроллера со всеми "синхропосылками и гаммами" и затем просто ее тупо повторять при каждом перезапуске. И пусть там хоть 256-битный AES внутри FPGA - не поможет.
Maksim
[quote=acex2,Feb 22 2005, 01:28]
А чем не устраивают два синхронных нелинейных генератора на LFSR: один в CPLD, другой в FPGA? CPLD шлет выходную последовательность в FPGA по одной линии , в FPGA стоит простой XOR (с триггером на выходе во избежании глитчей) от двух последовательностей. Как только последовательности не совпали - происходит Reset (общий, или какого-нибудь локального автомата для скрытности). В итоге имеем простейшую схему внутри FPGA на нескольких SRL16 + пару LUT для проверки и организации нелинейности + только один дополнительный внешний пин.
[/quote]
А за счёт чего нелинейность smile.gif Чего-то я не понял

Что касается посылок с шифрованием, то тут придется потрудиться над созданием генератора случайных чисел именно в FPGA, который после каждого ресета смог бы генерировать новое случайное число. Иначе можно будет один раз записать посылку от внешнего микроконтроллера со всеми "синхропосылками и гаммами" и затем просто ее тупо повторять при каждом перезапуске. И пусть там хоть 256-битный AES внутри FPGA - не поможет.
*

[/quote]
С шифрованием есть конечно проблемы.
acex2
Цитата(Maksim @ Feb 21 2005, 20:27)
А за счёт чего нелинейность smile.gif Чего-то я не понял


Я же писал чуть выше - LFSR лишь конструктивный блок. Для внесения нелинейности берется несколько LFSR и соединяются по нелинейной схеме. Самих схем очень много - они широко используются в потоковых криптосистемах. Я тут не поленился и нарисовал схему Stop-and-Go и упрощенный каскад Голлмана с 3-мя LFSR. Длины LFSR стоит выбирать разные и достаточно большие. Стандартное правило: сумма длин двух наименьших LFSR можно условно рассматривать с точки зрения brute-force взлома, как длину ключа в обычной блочной криптосистеме.
Harbour
Цитата(acex2 @ Feb 21 2005, 19:42)
Цитата(Harbour @ Feb 21 2005, 12:13)
Я использую полином как ключ к простому алгоритму (обычно rc4), которым шифруется тестовый запрос. Для проверки подлинности делаем посылку типа запрос-ответ. Правда придется раскошелится, например для rc4, на 258 байт.
*


А можно поподробнее, А то я себе что-то слабо представляют как это все работает в связке FPGA+uC. Кто генерирует тестовый запрос? На основании какой случайности этот запрос формируется? Как часто вы его посылаете?
*


Народ отклонился от темы, мое IMHO :

1. В простом случае SRAM-based FPGA защитить (кроме имеющих внутренниий ключ Stratix-II и им подобные) невозможно, т.к. тупо можно повторить битовый поток конфигурации. Посему имеет смысл ставить мелкую CPLD/FPGA или uC с битами защиты, в которых реализуется _часть_ основной логики.
2. Flash-based FPGA защищать смысла не имеет - остается уповать на крепость бита защиты.
3. Другое дело - когда необходимо защитить свои изделия от попыток "некорректного" применения - то бишь необходимо гарантировать работу своих изделий только со своими - вот тут есть небольшой простор, о чем собственно, и был мой пост. Пока сделал просто :
- взял atmega8515, реализовал в нем 2 64-битные M-последовательности и rc4, одна M1 используется как отсчетная, вторая M2 используется как псевдо-ГСЧ
- все это ставится в двух девайсах, которые связаны какой-нить линкой
- периодически девайсы выбирают из M2 какой-нить "случайный" кусок, из M1 кусок и его индекс (тоже "случайный"), из куска M1 делаем rc4 ключ, шифруем этим ключом кусок M2 и посылаем той стороне индекс от M1 и данный зашифрованный кусок - та сторона сравнивает и делает соответствующие выводы

При небольшом усилии можно конечно все слегка наворотить - но мое изделие такой крутой защиты не требует (плата в розницу стоит порядка $100)

P.S. "Случайный" взято в кавычки так как генератор ентропии, который сделан в avr - весьма простенький - собирает там инфу внутри cpu, и т.д.
acex2
Цитата(Harbour @ Feb 22 2005, 03:55)
1. В простом случае SRAM-based FPGA защитить (кроме имеющих внутренниий ключ Stratix-II и им подобные) невозможно, т.к. тупо можно повторить битовый поток конфигурации. Посему имеет смысл ставить мелкую CPLD/FPGA или uC с битами защиты, в которых реализуется _часть_ основной логики.


Основную логику в FPGA практически всегда приходится "вылизывать", сражаясь за каждый мегагерц. И вынесение части логики во внешний CPLD, а уж тем более uC, этому ну никак не помогает. Поэтому остается только _вспомогательная_ логика.

Как я уже писал выше, с моей точки зрения, два нелинейных генератора - один в FPGA, другой в CPLD, отлично работают для защиты дизайна FPGA от копирования, абсолютно не влияют на скорость работы основного дизайна, легко интегрируются в любой дизайн и не имеют видимых недостатков, кроме дополнительной стоимости CPLD.
Maksim
Цитата(acex2 @ Feb 22 2005, 03:35)
Цитата(Maksim @ Feb 21 2005, 20:27)
А за счёт чего нелинейность smile.gif Чего-то я не понял


Я же писал чуть выше - LFSR лишь конструктивный блок. Для внесения нелинейности берется несколько LFSR и соединяются по нелинейной схеме. Самих схем очень много - они широко используются в потоковых криптосистемах. Я тут не поленился и нарисовал схему Stop-and-Go и упрощенный каскад Голлмана с 3-мя LFSR. Длины LFSR стоит выбирать разные и достаточно большие. Стандартное правило: сумма длин двух наименьших LFSR можно условно рассматривать с точки зрения brute-force взлома, как длину ключа в обычной блочной криптосистеме.
*



Теперь понятно.
Как говорится теже яйца только в профиль laugh.gif a14.gif
Андрей Харитонов
я думаю так
если ценность вашей FPGA прошивки сравнима со стоимостью нового истребителя то не поможет ничего, т.к. все ваши дополнительные навешанные компоненты легко прочтуться даже с битами защиты специализирующимися на этом фирмами (чтение закрытого проца 1-5 тысяч $, закрытой CPLD 1-10 тысяч $). В этом случае можно говорить только о степени затруднения копирования проекта - поставить пару редко используемых в разработках процессоров разных производителей втом числе например наш КР1878ВЕ1, парочку CPLD опять таки разных производителей, наплевать на мучения покупателя товара по истечении гарантийного срока и поставить батарейку, на проци водрузить шифрованный обмен, в CPLD можно вынести жизненно важные куски схемы - и все равно стоимость истребителя перевесит (не поможет и батарейка). А уж если в копировании заинтересована американская сторона, да еще и вся элементная база у вас американская - вообще труба (у них на всех процах и плисах закладки стоят - че хочешь сделают и прошивку сдерут и из строя выведут, только что танцевать плисину не заставят, а на серьезном софте компиляторы в прошивку доп информацию с зашифрованным исходным кодом включают, так что и проблем с декомпиляцией особо не будет).

если же ценность в копировании вашей разработки << стоимости истребителя, то практически любое начинание в желании защитить битстрим на 99.9% даст желаемый результат, даже если сделать это не очень профессионально. Это будет зависеть от произведения (число ваших конкурентов и готовых ими стать) * (из них имеющих опыт в реверс инжиниринге) * (планируемая выгода)
makc
Цитата(Андрей Харитонов @ Mar 31 2005, 04:44)
А уж если в копировании заинтересована американская сторона, да еще и вся элементная база у вас американская - вообще труба (у них на всех процах и плисах закладки стоят - че хочешь сделают и прошивку сдерут и из строя выведут, только что танцевать плисину не заставят, а на серьезном софте компиляторы в прошивку доп информацию с зашифрованным исходным кодом включают, так что и проблем с декомпиляцией особо не будет).
*


А можно узнать, откуда вышеприведенная информация? Ссылочку?
acex2
Цитата(makc @ Mar 31 2005, 02:48)
Цитата(Андрей Харитонов @ Mar 31 2005, 04:44)
А уж если в копировании заинтересована американская сторона, да еще и вся элементная база у вас американская - вообще труба (у них на всех процах и плисах закладки стоят - че хочешь сделают и прошивку сдерут и из строя выведут, только что танцевать плисину не заставят, а на серьезном софте компиляторы в прошивку доп информацию с зашифрованным исходным кодом включают, так что и проблем с декомпиляцией особо не будет).
*


А можно узнать, откуда вышеприведенная информация? Ссылочку?
*



Это, похоже, из разряда детских страшилок. Хотя, кто его знает - может Винда такая большая, потому что идет с зашифрованным исходным кодом? smile.gif
makc
Цитата(acex2 @ Mar 31 2005, 10:31)
Цитата(makc @ Mar 31 2005, 02:48)
Цитата(Андрей Харитонов @ Mar 31 2005, 04:44)
А уж если в копировании заинтересована американская сторона, да еще и вся элементная база у вас американская - вообще труба (у них на всех процах и плисах закладки стоят - че хочешь сделают и прошивку сдерут и из строя выведут, только что танцевать плисину не заставят, а на серьезном софте компиляторы в прошивку доп информацию с зашифрованным исходным кодом включают, так что и проблем с декомпиляцией особо не будет).
*


А можно узнать, откуда вышеприведенная информация? Ссылочку?
*



Это, похоже, из разряда детских страшилок. Хотя, кто его знает - может Винда такая большая, потому что идет с зашифрованным исходным кодом? smile.gif
*



Страшилки страшилками, но тот факт, что в винде довольно много недокументированных возможностей наталкивает на мысль, что что-то подобное может случиться и с железом. А потому хотелось бы обладать информацией о подобных закладках. Ведь на самом деле производителю ничего не стоит запихать что-нибудь вредоносное в бутлоадер процессора и т.д. Но только мне пока информация о подобных движениях со стороны производителей железа не попадалась...
myq
Предлагается такой вариант реализации:

Во внешней FLASH хранится зашифрованная прошивка. CPLD - расшифровывает прошивку и посылает ее в FPGA. Секретный ключ шифрования хранится в защищенной прошивке CPLD.
Поскольку в CPLD ресурсов не так много, то полноценное шифрование (типа ГОСТ 28147-89) реализовать не удастся. Можно сократить число раундов, или использовать более простое поточное шифрование.

Одна контора таким образом защитила прошивку, которая составляет гостайну.
NeoN
... на стыке CPLD-FPGA ставится логический анализатор, который благополучно запоминает декодированную прошивку в процессе конфигурирования FPGA. Детский сад smile.gif
ИМХО, единственное верное средство "антистыринга" - перенос части функций в CPLD либо FLASH based FPGA. Штучки типа "генератор ПСП в CPLD и сравнивалка в FPGA, не совпало - reprog" потенциально не надежны из-за возможных сбоев по клокам и рассинхронизации генераторов.
fake
Цитата(myq @ Mar 31 2005, 12:31)
Во внешней FLASH хранится зашифрованная прошивка. CPLD - расшифровывает прошивку и посылает ее в FPGA. Секретный ключ  шифрования хранится в защищенной прошивке CPLD.
Поскольку в CPLD ресурсов не так много, то полноценное шифрование (типа ГОСТ 28147-89) реализовать не удастся. Можно сократить число раундов, или использовать более простое поточное шифрование.


А что мешает использовать новые Virtex-ы, шифруя прошивку DES-ом предусмотренным в ISE методом ?
makc
Цитата(fake @ Mar 31 2005, 13:59)
Цитата(myq @ Mar 31 2005, 12:31)
Во внешней FLASH хранится зашифрованная прошивка. CPLD - расшифровывает прошивку и посылает ее в FPGA. Секретный ключ  шифрования хранится в защищенной прошивке CPLD.
Поскольку в CPLD ресурсов не так много, то полноценное шифрование (типа ГОСТ 28147-89) реализовать не удастся. Можно сократить число раундов, или использовать более простое поточное шифрование.


А что мешает использовать новые Virtex-ы, шифруя прошивку DES-ом предусмотренным в ISE методом ?
*



А если используется Spartan 2,3 или вообще не Xilinx? К тому же DES - это явно не самый современный алгоритм для защиты данных и совершенно неизвестно, как он там реализован.
acex2
Цитата(fake @ Mar 31 2005, 07:59)
Цитата(myq @ Mar 31 2005, 12:31)
Во внешней FLASH хранится зашифрованная прошивка. CPLD - расшифровывает прошивку и посылает ее в FPGA. Секретный ключ  шифрования хранится в защищенной прошивке CPLD.
Поскольку в CPLD ресурсов не так много, то полноценное шифрование (типа ГОСТ 28147-89) реализовать не удастся. Можно сократить число раундов, или использовать более простое поточное шифрование.


А что мешает использовать новые Virtex-ы, шифруя прошивку DES-ом предусмотренным в ISE методом ?
*



Похоже, не доверяет у нас народ устройствам с батарейками. Даже несмотря на заявленный срок работы в 10+ лет.
bbg
Цитата(makc @ Mar 31 2005, 14:21)
К тому же DES - это явно не самый современный алгоритм для защиты данных и совершенно неизвестно, как он там реализован.


Там вроде 3DES..
acex2
Цитата(makc @ Mar 31 2005, 08:21)
А если используется Spartan 2,3 или вообще не Xilinx? К тому же DES - это явно не самый современный алгоритм для защиты данных и совершенно неизвестно, как он там реализован.
*


В Virtex2 используется 3DES, а не DES. А в Virtex4 AES.
yes
2 mvq - лажа какая-то с гостайной

что мешает в этой схеме подключится к конфигурационным входам FPGA (я не первый, кто это заметил, просто дальше хочу вставить "мораль")

вот после таких разработках и возникают байки про закладки - ведь по сути разработчик такой системы сделал закладку (умышленно или нет - это уж компетентные органы разберуться smile.gif )
myq
2yes
ну еще начнем с того, что они не продают свое изделие всем подряд. там завязки с ФСБ, речь не об этом.

(+ 2NeoN)Как ни крути, подключившись к конфигурационным ногам можно ВСЕГДА СЛИТЬ ЛЮБУЮ ПРОШИВКУ, совершенно неважно, что и чем шифруешь.

2acex2
2bbg
2fake
- какая разница, что там DES или AES. А где по вашему секретный ключ:
1) в САПРЕ и в ПЛИСе аппааратно зашит и не меняется
2) передается вместе с прошивкой smile.gif))
Ну и чего это за защита тогда??? *****, а не защита.

p.s.
тогда уж к слову.
использование CPLD тоже не гарантирует секретность прошивки (прошивки CPLD).
acex2
Цитата(myq @ Mar 31 2005, 09:22)
2yes
ну еще начнем с того, что они не продают свое изделие всем подряд. там завязки с ФСБ, речь не об этом.


Ну и зачем тогда вообще нужно было ставить защиту если там все так "подвязано"? Срубить лишние бабки, упомянув ключевое слово "шифрование"?

Цитата(myq @ Mar 31 2005, 09:22)
2acex2
2bbg
2fake
- какая разница, что там DES или AES. А где по вашему секретный ключ:
1) в САПРЕ и в ПЛИСе аппааратно зашит и не меняется
2) передается вместе с прошивкой smile.gif))
Ну и чего это за защита тогда??? *****, а не защита.


Ключи легко меняются, так как хранятся во внутренней RAM - для этого и нужна внешняя батарейка, чтобы они не пропали при отсутствии питания платы. Считать обратно из этой RAM ключи нельзя - только записать новые. Bit-файл прошивки шифруется после синтеза/разводки и записывается во внешнее EEPROM/Flash. При включении питания грузится в зашифрованном виде в FPGA и там расшифровывается. Какие здесь слабые места?
myq
Цитата(acex2 @ Mar 31 2005, 12:57)
Ключи легко меняются, так как хранятся во внутренней RAM - для этого и нужна внешняя батарейка, чтобы они не пропали при отсутствии питания платы. Считать обратно из этой RAM ключи нельзя - только записать новые. Bit-файл прошивки шифруется после синтеза/разводки и записывается во внешнее EEPROM/Flash. При включении питания грузится в зашифрованном виде в FPGA и там расшифровывается. Какие здесь слабые места?
*


Те, о ком я упомянул, сделали это на Altere, а не на Xilinx-e.

К тому же у меня вопрос - как fpga расшифрует прошивку, если прошивки в ней еще никакой нет? (с xilinx знаком в большей степени теоретически, а отличие от altera)
_Sam_
Осложнить жизнь жаждущим вашу прошивку можно, используя ПЛИС и флэш в BGA корпусах.

Во-первых весьма затруднительно добраться до дорожек по которым ваша прошивка поступает в ПЛИС, а во вторых часть вашей разводки тоже будет спрятана.
acex2
2myq:

Расшифровка прошивки реализована аппаратно в блоке программирования самой FPGA. Все что ей нужно, это ключ для расшифровки, который вы записываете в специальную внутреннюю RAM при производстве вашей платы.

2_Sam_:

Так как алгоритм программирования известен, то прошивка из Flash легко снимается через JTAG, обычно выведенный на платах с FPGA (тем более в BGA корпусах).
Андрей Харитонов
ну можете начать с www.semiresearch.com, www.microcode.ru немножко усилий и сами найдете еще десятки контор. Некоторые занимаются поджариванием, облучением, растворением в кислоте, микроскопированием и прочим рукоблудием, некоторые коммерческим использованием закладок в процессорах (Flash Pic Reader например для всеми любимых американских пиков ). если поусердствуйте, то найдете и способы чтения некоторых процев в домашних условиях.
по поводу секретиков винды начните знакомство с программ encase, ilook, ftk для начала, когда начнете вспоминать про детские страшилки, полазте по сайтам вирусописателей - там секретиков еще больше ну и т.д.
а про необъяснимые отключения связи в целых регионах в разгар некоторых наших военных компаний тоже не слышали? ладно пусть это будут детские страшилки, вспомните про них когда нибудь. Может вам страшилок myq подкинет - он тут громкие названия из трех букв пишет smile.gif
а вообще Neon прав - одна дружественная myqу контора могла бы еще более усилить защиту проекта, выкинув дорогую CPLD и прилепив на FPGAшку более дешевую бумажку с надписью "гостайна" и еще три магические буквы.
а продавать только в контору это конечно хорошо, сразу Калугин вспоминается smile.gif
acex2
Вот и я говорю - страшилки! Причем детские. Потому что вместо ссылок по поводу "у них на всех процах и плисах закладки стоят - че хочешь сделают и прошивку сдерут и из строя выведут, только что танцевать плисину не заставят, а на серьезном софте компиляторы в прошивку доп информацию с зашифрованным исходным кодом включают, так что и проблем с декомпиляцией особо не будет" только общие фразы и "притянутые за уши" программы для анализа логов, кукисов и удаленных файлов. Что касается semiresearch.com и др., то если бы они использовали заведомо установленные производителями чипов закладки, то не требовали бы несколько копий чипа для взлома.
Андрей Харитонов
в обсуждении мелькал еще один способ:
3) конфигурация прогружается в ПЛИС, причем битстрим защищен от считывания, а при выключении питания конфигурация ПЛИС поддерживается с помощью аккумулятора
Достоинства:
- сильная защита данных
Недостатки:
- всякие геморрои с возможной потерей прошивки в процессе эксплуатации изделия
Андрей Харитонов
пока ответ писал, все сообщения в теме за последние дни слетели. udofin уже об этом глюке отписался. у кого-нибудь в кэше страничка последняя по теме на сохранилась?
3.14
Я просто не понял почму содержимое FPGA при этом нельзя через JTAG прочитать?
acex2
Цитата(3.14 @ Apr 4 2005, 16:33)
Я просто не понял почму содержимое FPGA при этом нельзя через JTAG прочитать?
*


А вы поставьте FPGA в BGA корпусе и TDO на разъем не выводите wink.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.