Easyelectronics.ru

Электроника для всех
Текущее время: 23 янв 2018, 05:24

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: защита открытой прошивки от копирования
СообщениеДобавлено: 04 дек 2017, 10:18 
Заглядывает иногда

Зарегистрирован: 27 ноя 2012, 16:13
Сообщения: 30
всем привет, есть задача защитить прошивку от бесконтрольного копирования, но нет возможности прошивать шифрованный загрузчик самому в каждое устройство,
вот у мк есть уникальный ID, приходит в голову при первом запуске отправлять этот ID на удалённый сервер, получать ответ, зашифрованный закрытым ключом и сверять его с тем, что зашифровал сам, диалоговый код в общем, если ответ верный, во флэше что-то сохраняется и дальше спокойно работает,
подскажите, каким способом можно этот алгоритм реализовать в прошивке, чтобы его нельзя было обойти простой вставкой nop в нужном месте бинарника, ну или где почитать об этом,
понятно, что 100%-я защита тут невозможна, но по крайней мере усложнить копание в бинарнике, в виндовых программах же подобное делается,
заранее спасибо ответившим


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: защита открытой прошивки от копирования
СообщениеДобавлено: 04 дек 2017, 10:37 
Старожил

Зарегистрирован: 30 апр 2010, 22:56
Сообщения: 1541
Откуда: Киев
просто в прошивке хранить открытый ключ и зашифрованный ID. При старте расшифровывать и проверять.
ломается естественно подменой ключа, поэтому проверять контрольные суммы бинарника (желательно не в одном месте) и использовать этот ключ в других операциях (например, работа с сервером)
или зашифровать часть прошивки ключем, в который входит ID чипа. при старте расшифровывать и запускать из памяти


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: защита открытой прошивки от копирования
СообщениеДобавлено: 04 дек 2017, 11:14 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2013, 16:07
Сообщения: 496
Откуда: Германия
zvukovik писал(а):
понятно, что 100%-я защита тут невозможна, но по крайней мере усложнить копание в бинарнике, в виндовых программах же подобное делается,


Это путь вечной борьбы. Сила защиты будет строго обратно пропорциональна ценности прошивки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: защита открытой прошивки от копирования
СообщениеДобавлено: 13 дек 2017, 16:01 
Заглядывает иногда

Зарегистрирован: 15 окт 2017, 22:24
Сообщения: 180
zvukovik писал(а):
всем привет, есть задача защитить прошивку от бесконтрольного копирования, но нет возможности прошивать шифрованный загрузчик самому в каждое устройство,

Загрузчику (или апдейтеру в прошивке) не обязательно быть шифрованным. Но он должен уметь шифрование и быть разборчивым в том кому доверяет. На публичной криптографии можно попытаться проскочить, но есть нюансы.

Цитата:
вот у мк есть уникальный ID, приходит в голову при первом запуске отправлять этот ID на удалённый сервер, получать ответ, зашифрованный закрытым ключом и сверять его с тем, что зашифровал сам, диалоговый код в общем,

Ему даже диалоговым в смысле интерактива быть не обязательно. Просто "персональный апдейт". В том плане что получить апдейт "для этого устройства" можно и через час, и через два дня, и даже голубиной почтой а не сервером. И подойдет только к этому девайсу и не более того.

Можно как-то так. Публичное крипто - в терминах CryptoBox API из библы tweetnacl, он мелкий и засовывается в микроконтроллер по типу младших cortex M на раз:
1) В загрузчике (или прошивке), ловящих апдейт вписывается trusted public key "хозяина устройств". Ваш, разумеется, от него у ВАС должен быть приватная половинка. Если вы не сами пропишете загрузчик, есть шанс что trusted key заменят, но вы это заметите.
2) Делаем из DeviceID --> {DevPubkey, DevPrivkey}. Желательно не совсем тривиально и набрать достаточно уникальных особенностей. Если будет мало, атакующий реконструирует DevPrivkey сделав брутфорс всех DeviceID, глядя какой из них дает такой же DevPubkey как он поймал. Дальше он может расшифровать апдейт или что там ему угодно.
3) В общем случае вы хотите "запрос от устройства" содержащий как минимум DevPubkey. Еще nonce, но это см мануал по апи, если интересно.
4) шифруете на своей стороне апдейт используя {trusted privkey,DevPubkey}. В упомянутом апи делается так.
5) Девайс расшифровывает на своей стороне, используя {trusted pubkey, DevPrivkey}. Заметьте, девайс знает только публичную часть вашего ключа и свою приватную (и не обязан сообщать свой приватный ключ наружу). Это по сути Diffie Hellman, только на эллиптике и ключи заранее распиханы. При том так откровенно на виду атакующего только публичные половинки, на них одних атакующий далеко не уедет.

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

Наивные атаки типа потуг сменить trusted public key на свой приведут к тому что апдейт не расшифруется, по этому поводу надлежит юзера послать - "wrong update". По какой причине wrong вообще пофиг, мусор это или не от того девайса или что там еще - decrypt error случится в любом случае.

Цитата:
подскажите, каким способом можно этот алгоритм реализовать в прошивке, чтобы его нельзя было обойти простой вставкой nop в нужном месте бинарника, ну или где почитать об этом,

Крипто с публичными ключами, например. RSA вы конечно в микроконтроль не впихнете, а вот мелкую аккуратную эллиптику из tweetnacl - реально упаковать. В cortex M3 заняло 3.5 кило примерно. Такое даже в бутлоадер засунуть можно. Но шить начальный бутлоадер и лочить камень все-таки следует самому. Иначе атакующий сможет много дурных диверсий и полностью это не зарубите. Потому что атакующий сможет видеть своим кодом все что видит ваш код. Включая все ключи, состояния алгоритмов и расшифрованные данные. И тут уж извините, если атакующий не дурак то свое получит.

Если совсем на дурака, можно challenge-responce сделать. Фирмварь дает challenge, "сервер" должен дать правильный responce на это - "активация". А без него кина не будет. Когда получили желаемое, прописать что-то в EEPROM или что там у вас. Но если атакующий будет такую фирмварь шить сам, он же может и отпатчить лишнее. Можно сделать это начинание сложным, но на это придется много времени убить, выписывая прошивку в стиле "много сюрпризов". И даже так ломабельно.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB