реклама на сайте
подробности

 
 
> stm32F10x- защита от чтения , использование flash как eeprom и собственный бутлоадер, нюансы реализации.
Serj78
сообщение Apr 16 2013, 15:14
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 966
Регистрация: 27-05-06
Из: СПб
Пользователь №: 17 499



Прошу помощи у коллег кто сталкивался с подобным противоречием..

Если ставить бит защиты от считывания- то он автоматически блокирует запись в память. ( Например чтобы не закатали через бутлоадер утилитку по считыванию памяти, такова идея защиты разработчиков ST)
Блокирует из любого источника или только со стороны бутлоадера?
Кажется на первый взгляд из любого, т.к через SWD также нельзя записать ничего.
При этом также ничего нельзя писать в память из приложения, те эмуляция eeprom для хранения настроек не возможна.. Или это не так?


Если мы хотим сделать собственный бутлоадер, то как нам закрыть доступ из встроенного?
и если мы отключили в программе swd то к swd нельзя ли подключиться до инициализации портов, и делать через него что-то ? (например читать память..)

Go to the top of the page
 
+Quote Post
6 страниц V  < 1 2 3 4 5 > »   
Start new topic
Ответов (30 - 44)
Aner
сообщение Apr 18 2013, 19:24
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463



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

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

За последние лет 10 не припомню случая, чтобы кто-то вскрыл мою криптованную программу. Хотя знаю, что это задача решаемая, но недешево. Поскольку есть детерминанта определяемая ограниченностью кода, состоящим из команд и данных, стартового адреса, размерами и длинами регистров и тп. Как тут советовали перестановочный метод, можно применять, но он больше подходит к читаемым текстам, инструкциям, а не к загружаемому коду программы. Использовать пустые коды, циклы, многие коды будут запускаться и работать, только делать фигню... и тп - ну---у совсем несерьёзно для ARM.
Go to the top of the page
 
+Quote Post
k000858
сообщение Apr 19 2013, 03:05
Сообщение #32


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Всем привет. почитал тему, сейчас как раз занимаюсь написанием загрузчика, который по езернет будет обновлять прошивку. Если я все верно понимаю, выглядеть это будет так:
1) загрузчик стартует первым из 0x08000000
2) загрузчик снимает защиту с области памяти, необходимой для прошивки, стирает необходимые страницы флэш
3) принимает новый код, дешифровывая его на лету и записывая во флэш по кусочкам по 512 байт
4) после заливки последнего кусочка закрывает флэш установкой битов защиты.
с этим вроде все понятно, но есть вопросики:
1) изначально область загрузчика должна быть закрыта битами защиты, что бы его не могли считать средствами отладки и левой прогой во флэш. как называются эти биты в stm32f4 и можно ли их устанавливать не на всю флэш а на определенные области?
2) при снятии защиты с области памяти основной прошивки, не сотрется ли вся флэш, включая загрузчик?
3) stm32f4 умеет декриптить AES, DES алгоритмами, думаю их и заюзать. какой алгоритм лучше заюзать?
4) ну допустим контроллер я научу расшифровывать, вопрос чем и как (имеет ввиду на пк) предварительно зашифровать прошивку ?

Сообщение отредактировал k000858 - Apr 19 2013, 03:10
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Apr 19 2013, 05:31
Сообщение #33


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(aoreh @ Apr 18 2013, 13:35) *
а зачем сложно подписывать, если программа зашифрована? расшифровать и зашифровать свое ведь и так никто не сможет (в разумное время/деньги)? а загрузчик должен работать только с шифрованными данными ну и какой-нибудь црц, что бы убедиться, что распаковано верно.


Подпись дает бОльшую гарантию, чем CRC. А так как и она и шифрование основаны на одном и том же коде - то накладные расходы минимальны

Цитата(Aner @ Apr 18 2013, 23:24) *
За последние лет 10 не припомню случая, чтобы кто-то вскрыл мою криптованную программу.

Неуловимый Джо? wink.gif

Цитата
Хотя знаю, что это задача решаемая, но недешево. Поскольку есть детерминанта определяемая ограниченностью кода...

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

Другое дело, что часто за эти деньги дешевле написать программу с нуля и получить поддерживаемый код на ЯВУ, а не дизасм...


Цитата(k000858 @ Apr 19 2013, 07:05) *
1) изначально область загрузчика должна быть закрыта битами защиты, что бы его не могли считать средствами отладки и левой прогой во флэш. как называются эти биты в stm32f4 и можно ли их устанавливать не на всю флэш а на определенные области?
2) при снятии защиты с области памяти основной прошивки, не сотрется ли вся флэш, включая загрузчик?

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

Детали стоит почитать в Flash programming manual для вашей модели процессора.

Цитата
3) stm32f4 умеет декриптить AES, DES алгоритмами, думаю их и заюзать. какой алгоритм лучше заюзать?

aes более новый и по идее более защищенный, чем DES. Возможно и более тормозной...

Цитата
4) ну допустим контроллер я научу расшифровывать, вопрос чем и как (имеет ввиду на пк) предварительно зашифровать прошивку ?

Напишешь программу для ПК. На каком-нить питоне скажем в стандартной библиотеке есть алгоритмы шифрования. Для С/С++ надо поискать библиотеку - их полно
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 19 2013, 08:16
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(Aner @ Apr 18 2013, 23:24) *
Использовать пустые коды, циклы, многие коды будут запускаться и работать, только делать фигню... и тп - ну---у совсем несерьёзно для ARM.


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

У меня другой вопрос, неужели ваши прошивки действительно столь ценны, что их надо защищать такими силами? В приборе кроме прошивки есть еще куча всего, да туже 4 слойную плату под БГА корпуса фиг так просто скопируешь, а потом надо еще найти кучу микросхем, номиналы, и так далее... я не утверждаю, но мне кажется это параноя, по моему легче повторить прибор, чем его копировать, ведь это дает еще возможность модификаций и поддержки....
Go to the top of the page
 
+Quote Post
aoreh
сообщение Apr 19 2013, 13:44
Сообщение #35


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 16-06-11
Пользователь №: 65 731



Цитата(Непомнящий Евгений @ Apr 19 2013, 08:31) *
Подпись дает бОльшую гарантию, чем CRC.

гараинтию чего? того, что код закриптован именно вами? sm.gif
Цитата(Непомнящий Евгений @ Apr 19 2013, 08:31) *
А так как и она и шифрование основаны на одном и том же коде - то накладные расходы минимальны

минимальны, но и смысл в них сомнительный
или вы думаете, что ключ к коду сломали, а подпись не получится?

Сообщение отредактировал aoreh - Apr 19 2013, 13:45
Go to the top of the page
 
+Quote Post
Aner
сообщение Apr 19 2013, 14:06
Сообщение #36


Гуру
******

Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463



QUOTE (k000858 @ Apr 19 2013, 06:05) *
Всем привет. почитал тему, сейчас как раз занимаюсь написанием загрузчика, который по езернет будет обновлять прошивку. Если я все верно понимаю, выглядеть это будет так:
1) загрузчик стартует первым из 0x08000000
...
4) ну допустим контроллер я научу расшифровывать, вопрос чем и как (имеет ввиду на пк) предварительно зашифровать прошивку ?

С Ethernet есть свои особенности. В сотой серии это 107. В этой теме про сотые спрашивали. Есть несколько разных сценариев для старта загрузчика, например если есть битовый свободный порт, можно его опрашивать и стартовать. Подумайте над вариантом, если произошел сбой в процессе загрузки, в любом месте, или не совпала контрольная сумма, и тп то как откатиться назад к предыдущей прошивке. Кусочки можно и поменьше делать от 256 до 32.

Думаю, что не все понятно как писать абдейт под Ethernet. Например желательна внешняя память, поскольку в загрузчике иметь дубль TCP/IP стека под 40...60K как то избыточно и много для загрузчика. Затем абдейт можно делат как по UDP, так и по TCP, так и по HTTP. Лучший алгоритм крипт/декрипт-овки, это проверенный вам. Можно и другие использовать не только AES, DES. Программу загрузчика когда пишите, обычно на C/C++, тогда и крипт/декрипт пишите, да и по-тестить можете. Если пользовать уровень HTTP, то по мне - на Java, будет универсальнее.
Go to the top of the page
 
+Quote Post
Serj78
сообщение Apr 19 2013, 14:26
Сообщение #37


Знающий
****

Группа: Свой
Сообщений: 966
Регистрация: 27-05-06
Из: СПб
Пользователь №: 17 499



Цитата(Aner @ Apr 18 2013, 23:24) *
В этих процах этот бит не совсем бит защиты памяти, скорее защита от доступа отладочных средств. Это позволяет под защитой, своим загрузчиком, получить новую программу и записать ее в память программы и стартануть. Эта запись во флеш возможна как изнутри, так и снаружи посредстовм своей программы которая внутри проца под защитой.

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


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

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

Цитата(Golikov A. @ Apr 19 2013, 12:16) *
У меня другой вопрос, неужели ваши прошивки действительно столь ценны, что их надо защищать такими силами? В приборе кроме прошивки есть еще куча всего, да туже 4 слойную плату под БГА корпуса фиг так просто скопируешь, а потом надо еще найти кучу микросхем, номиналы, и так далее... я


Есть много вещей где схемотехника очень проста, все сигналы цифровые..
А потом, все равно все компоненты устанавливаются снаружи платы а не внутри sm.gif
Go to the top of the page
 
+Quote Post
Aner
сообщение Apr 19 2013, 14:32
Сообщение #38


Гуру
******

Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463



Цитата(Golikov A. @ Apr 19 2013, 11:16)
я имел ввиду что если переставлять не по байтно а по словам, то вы не нарушите коды команд, смените их последовательность. А если переставлять с правильным выравниванием то можно делать так что командам будут подпихиваться не верные аргументы, это все создаст запускаемые коды, но работающие не правильно...
только это и имел ввиду...

это заблуждение, познакомтесь сперва с ARM-ами.
... запускаемые коды, но работающие не правильно... могут выжечь порт, сделать неработающем устройство. Зачем это нужно?

Цитата(Golikov A. @ Apr 19 2013, 11:16)
У меня другой вопрос, неужели ваши прошивки действительно столь ценны, что их надо защищать такими силами? В приборе кроме прошивки есть еще куча всего, да туже 4 слойную плату под БГА корпуса фиг так просто скопируешь, а потом надо еще найти кучу микросхем, номиналы, и так далее... я не утверждаю, но мне кажется это параноя, по моему легче повторить прибор, чем его копировать, ведь это дает еще возможность модификаций и поддержки....

[CENSORED] Прошивку закрывают от конкурентов примерно на "время жизни продкута" на рынке от полугода до пару-тройки лет.
Силы не такие уж чтобы и большие, но зато даром получить открытый код не просто. Да еще, ... и дизассемблирование кода ARMа может мало что дать, тут еще нужно понимать какой стиль в написании программы использовался. 4-8 слойку под БГА корпуса без особых проблем, под рентген, коих много на тест контроле сборочного пр-ва. Вы еще не знаете что китайцы творят! Копируют чипы брендов и улучшают параметры.
Повторить прибор можно, конкуренты так и делают с некоторым опозданием и затратами, изучая програмный код конкурента. Мир тут пёстр, каждому своё.

Сообщение отредактировал IgorKossak - Apr 19 2013, 17:43
Go to the top of the page
 
+Quote Post
k000858
сообщение Apr 19 2013, 14:34
Сообщение #39


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Цитата(Aner @ Apr 19 2013, 18:06) *
С Ethernet есть свои особенности. В сотой серии это 107. В этой теме про сотые спрашивали. Есть несколько разных сценариев для старта загрузчика, например если есть битовый свободный порт, можно его опрашивать и стартовать. Подумайте над вариантом, если произошел сбой в процессе загрузки, в любом месте, или не совпала контрольная сумма, и тп то как откатиться назад к предыдущей прошивке. Кусочки можно и поменьше делать от 256 до 32.
Думаю, что не все понятно как писать абдейт под Ethernet. Например желательна внешняя память, поскольку в загрузчике иметь дубль TCP/IP стека под 40...60K как то избыточно и много для загрузчика. Затем абдейт можно делат как по UDP, так и по TCP, так и по HTTP. Лучший алгоритм крипт/декрипт-овки, это проверенный вам. Можно и другие использовать не только AES, DES. Программу загрузчика когда пишите, обычно на C/C++, тогда и крипт/декрипт пишите, да и по-тестить можете. Если пользовать уровень HTTP, то по мне - на Java, будет универсальнее.

загрузчик у меня уже написан, все работает, прошивку принимает по TFTP, вопросы остались только по битам защиты и криптованию
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Apr 19 2013, 14:36
Сообщение #40


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(aoreh @ Apr 19 2013, 17:44) *
гараинтию чего? того, что код закриптован именно вами? sm.gif

ага
После дешифровки надо как-то убедиться, что получен осмысленный результат. Шансы на то, что случайно совпадет CRC больше, чем подпись.

Цитата
или вы думаете, что ключ к коду сломали, а подпись не получится?

Нет, я так не думаю. Хотя ключи там другие, и если ключ именно ломали (а не дизасемблировали выдранный из проца загрузчик), то придется ломать еще раз sm.gif
Go to the top of the page
 
+Quote Post
PoReX
сообщение Apr 19 2013, 14:43
Сообщение #41


Частый гость
**

Группа: Свой
Сообщений: 112
Регистрация: 1-05-09
Из: Ростов-на-Дону
Пользователь №: 48 518



Цитата(Aner @ Apr 19 2013, 18:06) *
Подумайте над вариантом, если произошел сбой в процессе загрузки, в любом месте, или не совпала контрольная сумма, и тп то как откатиться назад к предыдущей прошивке.

Например, у нас для таких целей будет сервер, висящий в интернете, т.к. устройства могут находиться даже в другой стране. Получается если bootloader узрел в прошивке неладное, то конектится к серверу и тянет нужную прошивку.
Цитата(Aner @ Apr 19 2013, 18:06) *
Думаю, что не все понятно как писать абдейт под Ethernet. Например желательна внешняя память, поскольку в загрузчике иметь дубль TCP/IP стека под 40...60K как то избыточно и много для загрузчика.

Что у вас за стеки такие? У меня bootloader с uip стеком весит 17кБ и при этом умеет отзываться по UDP, перепрошиваться по TCP, получать IP по DHCP и получать IP сервера по его имени от DNS.


--------------------
«У современных мобильных телефонов такая же вычислительная мощь, что и у компьютеров NASA в 60-е годы. И в то время этого хватало, чтобы запустить человека в космос, а сегодня — только чтобы запускать птиц в свиней.»
Go to the top of the page
 
+Quote Post
Aner
сообщение Apr 19 2013, 14:44
Сообщение #42


Гуру
******

Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463



QUOTE (k000858 @ Apr 19 2013, 17:34) *
загрузчик у меня уже написан, все работает, прошивку принимает по TFTP, вопросы остались только по битам защиты и криптованию

Как читали ранее это главное, если загрузчик писан вами.
Go to the top of the page
 
+Quote Post
Serj78
сообщение Apr 19 2013, 15:04
Сообщение #43


Знающий
****

Группа: Свой
Сообщений: 966
Регистрация: 27-05-06
Из: СПб
Пользователь №: 17 499



Цитата(Aner @ Apr 18 2013, 23:24) *
В этих процах этот бит не совсем бит защиты памяти, скорее защита от доступа отладочных средств. Это позволяет под защитой, своим загрузчиком, получить новую программу и записать ее в память программы и стартануть. Эта запись во флеш возможна как изнутри, так и снаружи посредстовм своей программы которая внутри проца под защитой.

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



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

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



Цитата(Golikov A. @ Apr 19 2013, 12:16) *
У меня другой вопрос, неужели ваши прошивки действительно столь ценны, что их надо защищать такими силами? В приборе кроме прошивки есть еще куча всего, да туже 4 слойную плату под БГА корпуса фиг так просто скопируешь, а потом надо еще найти кучу микросхем, номиналы, и так далее... я



Есть много вещей где схемотехника очень проста, все сигналы цифровые..
А потом, все равно все компоненты устанавливаются снаружи платы а не внутри sm.gif
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 19 2013, 15:18
Сообщение #44


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(Aner @ Apr 19 2013, 18:32) *
[CENSORED]. Прошивку закрывают от конкурентов примерно на "время жизни продкута" на рынке от полугода до пару-тройки лет.
Силы не такие уж чтобы и большие, но зато даром получить открытый код не просто. Да еще, ... и дизассемблирование кода ARMа может мало что дать, тут еще нужно понимать какой стиль в написании программы использовался. 4-8 слойку под БГА корпуса без особых проблем, под рентген, коих много на тест контроле сборочного пр-ва. Вы еще не знаете что китайцы творят! Копируют чипы брендов и улучшают параметры.
Повторить прибор можно, конкуренты так и делают с некоторым опозданием и затратами, изучая програмный код конкурента. Мир тут пёстр, каждому своё.


[CENSORED]
Для общего развития: если устройство при попытке получить прошивку физически уничтожается (сгорает), мне кажется это наилучший из вариантов защиты. Я вот делал ренген 6 слойной под БГА, а вы?...

Сообщение отредактировал IgorKossak - Apr 19 2013, 17:41
Go to the top of the page
 
+Quote Post
Aner
сообщение Apr 19 2013, 15:20
Сообщение #45


Гуру
******

Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463



QUOTE (k000858 @ Apr 19 2013, 17:34) *
загрузчик у меня уже написан, все работает, прошивку принимает по TFTP, вопросы остались только по битам защиты и криптованию

... по TFTP я не подписался, из-за отсутствия проверок, низкой надежности. Он же совсем маленький, ну ...для AVR может и подойдет,
ресурсов мало, но не для ARM.
Go to the top of the page
 
+Quote Post

6 страниц V  < 1 2 3 4 5 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 03:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.0149 секунд с 7
ELECTRONIX ©2004-2016