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

 
 
6 страниц V  < 1 2 3 4 5 > »   
Reply to this topicStart new topic
> stm32F10x- защита от чтения , использование flash как eeprom и собственный бутлоадер, нюансы реализации.
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 Текстовая версия Сейчас: 6th July 2025 - 16:46
Рейтинг@Mail.ru


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