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

 
 
> Защита секция кода во FLASH в ATmega, Как защититься от несанкционированного выполнения кода
Дон Амброзио
сообщение Feb 11 2008, 17:42
Сообщение #1


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



А кто как защищает код в MCU от несанкционированного выполнения в результате случайного перехода из одной точки программы в другую от воздействия помехонесущего электромагнитного поля (искажения записанного в счётчике команд значения). А?

Приведу пример
--------------------
lab_1_input: ldi R16 , $00
mov R16 , $98
...
lab_1_output: mov R17 , R5
-----------------------
lab_2_1_input: mov R18, R17


Т.е. допустим программа предусматривает переход к выполнению кодового фрагмента, начинающегося с метки lab_2_1_input только после отработки до конца фрагмента [lab_1_input;lab_1_output]

А представим , что от помехи произошёл случайный переход из произвольной точки 1-го фрагмента кода в произвольную точку 2-го фрагмента кода....

Как вы ПРОГРАММНО отлавливаете такие ситуации?

Т.е. как Вы реализовываете в своих программах для микроконтроллеров ATmega механизм защиты FLASH-памяти от несанкционированного выполнения кода. Ну т.е. как контролировать, что в данный фрагмент кода вошли не где попало, а через строго определённые на этапе проектирования программы, точки

Цитата(Дон Амброзио @ Feb 11 2008, 20:36) *
А кто как защищает код в MCU от несанкционированного выполнения в результате случайного перехода из одной точки программы в другую от воздействия помехонесущего электромагнитного поля (искажения записанного в счётчике команд значения).

Кстати, причины такого случайного джампа могут быть не только в разрушении PC.
Может также случайным образом измениться содержимое ячейки FLASH или содержимое хранимой в ОЗУ таблицы переходов... В любом случае МОЖЕТ произойти переход в точку некоторого логического сегмента кода, которая не предусмотрена данным логическим сегментом FLASH


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
19 страниц V  « < 11 12 13 14 15 > »   
Start new topic
Ответов (180 - 194)
Rst7
сообщение Feb 18 2008, 08:12
Сообщение #181


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
А что? Реальные помехи просто обязаны подчиняться нормам ESD А то их в тюрьму посадят если они нарушат нормы ESD?


Нормы эти, как и пайка солдатская, выработаны годами изучения вопроса. С достаточной степенью точности они описывают реальный мир. Кроме того, испытания в соответствии с данными нормами (испытания должны быть проведены соответствующей структурой, на соответствующем оборудовании, закончены выдачей соответствующих документов, подтверждающих соответствие) дают Вам полное право при наезде на Вас плана "у Вас устройство глючит из-за помех" замерить эти помехи непосредственно на объекте и при превышении просто послать заказчика на йух или, например, снять с него дополнительные деньги за доработку устройства под условия заказчика. Обычно заказчики идут на второй вариант, им спокойней.

Но хотел я не то сказать. Я уже писал про полсотни резисторов выше, видимо никто не прочитал пост. Хочу поставить вопрос так - на плате есть камень с надежностью, ну, 1e-5 и 50 резисторов с надежностью 1e-6 (это близкие к реальности цифры). Возникают 3 вопроса:
1. Какова общая надежность?
2. Что будет с результирующей надежностью, если надежность камня будет 1e-7 (например, программными методами)
3. (Задается после получения ответов на вопросы 1, 2) Стоит ли овчинка выделки?


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
_Sam_
сообщение Feb 18 2008, 08:27
Сообщение #182


Местный
***

Группа: Свой
Сообщений: 278
Регистрация: 18-01-05
Из: Санкт-Петербург
Пользователь №: 2 031



Цитата
А если подумать?

Ведь PC не из особого теста леплен и если он сбивается, то сбиваются и все остальные регистры.

А если у нас без случайного джампа на Run произошло изменение DDRC и PORTC таким образом, что эти два сигнала выставвились. Ластик в руки и вперёдsmile.gif Конечно тут пора вспомнить, что мы не говорим о 100% ловле сбоев и говорим только о случайных джампах wink.gif Но тут та собака и порыта:
1. Во многих применениях интересна 100% работа без сбоев, а сбоящие поделки быстро потеряют долю рынка.
2. Вероятность того что в случае помехи сбойнул только PC близка к нулю. А значит тема о случайных джампах бессмыслена.


p.s.
1. Про корпус это сильно, если на реальном объекте на корпус фазу подать или не заземлить, то будет уже не до вашей программы, если она конечно не ракеты пускаетsmile.gif. А если она ракеты пускает, то такая ситуация с корпусом невозможна ибо думаю тама проверок на эту тему тьма.
2. Если резет оставить в воздухе и вашу тестовую программу загрузить в MCU, то зажигалку и на корпус вешать не прийдётсяsmile.gif Вот где поле непаханное светодиод будет то зажигаться, то гаснуть.

Ну про 100% эт я погорячился - ничто не вечно под луной, но думаю понятно что я имел ввидуsmile.gif
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Feb 18 2008, 08:44
Сообщение #183


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(Rst7 @ Feb 18 2008, 11:12) *
С достаточной степенью точности они описывают реальный мир.

Вот вот. Но эта точность - не 100%. Поэтому всегда сущестует вероятность ситуации, которая "бывает и хуже....Но реже lol.gif ."...Т.е. проскочит например такая помеха раз в месяц. Ваш девайс глюканет и запустит "ядерную ракету". А Вы придёте измерять помеху. Неделю произмеряете и ничего не найдёте. А наследующий день бах. Опять такая помеха. Поэтому я не понимаю, почему многие из ответивших здесь на форуме так упорно сопротивляются против того, чтобы добавить надёжности девайсу (надёжности в смысле не предотвращения сбоев, а их своевременного обнаружения и устранения). Упираются ногами, руками, рогами и прочими частями тела. Почему?

Цитата(_Sam_ @ Feb 18 2008, 11:27) *
Ведь PC не из особого теста леплен и если он сбивается, то сбиваются и все остальные регистры.

А если у нас без случайного джампа на Run произошло изменение DDRC и PORTC таким образом, что эти два сигнала выставвились. Ластик в руки и вперёдsmile.gif

Писал же уже 07.gif Вы не четатиль, чтоли? 07.gif

"А если подумать?
У меня "запуск ракеты" от одной команды невозможен. Ибо у меня железо выполено таким образом, что релюшка, запускающая "ядерную ракету" ( ) включается как минимум 2-мя пинами, сигналы на которых устанавливаются в разных точках программы. Так что даже если на один из пинов в результате сбоя будет подан сигнал "Enable RUN", то на другом-то пине такого сигнала не будет. И Америку не придётся с карты стирать ластиком "


Цитата(Rst7 @ Feb 18 2008, 11:12) *
Стоит ли овчинка выделки?

Зачем спрашивать если Вы заранее знаете какой будет ответ при такой формулировке задачи? 07.gif
Нет. Не стоит.

Но тут есть один нюанс. Что Вы понимаете под надёжностью MCU. Если вероятность выхода из строя какого-то его аппаратного узла, то это одно. А если вероятность сбоя из-за помех - это другое

Цитата(_Sam_ @ Feb 18 2008, 11:27) *
А если у нас без случайного джампа на Run произошло изменение DDRC и PORTC таким образом, что эти два сигнала выставвились.

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


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
Rst7
сообщение Feb 18 2008, 08:48
Сообщение #184


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Но тут есть один нюанс. Что Вы понимаете под надёжностью MCU. Если вероятность выхода из строя какого-то его аппаратного узла, то это одно. А если вероятность сбоя из-за помех - это другое


Прибор или выполняет свои функции или не выполняет. На самом деле пофиг - отпал резистор или сбойнул камень.

Все-таки, подумайте над расчетом надежности Ваших устройств.

Цитата
Дык с точки зрения теории вероятности вероятность любого мыслимого события больше нуля. Весь вопрос в том, насколько больше


А с точки зрения квантовой теории и немыслимого


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 18 2008, 08:49
Сообщение #185


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Rst7 @ Feb 18 2008, 11:12) *
2. Что будет с результирующей надежностью, если надежность камня будет 1e-7 (например, программными методами)


Я бы сказал, судя по теме, надежность камня где-то 1е-4 biggrin.gif

Цитата(_Sam_ @ Feb 18 2008, 11:27) *
1. Про корпус это сильно, если на реальном объекте на корпус фазу подать или не заземлить, то будет уже не до вашей программы, если она конечно не ракеты пускаетsmile.gif.


Пробовали. Случайно,конечно. А Вы что подумали? smile.gif
И ничего страшного не происходит. Если нет свободных ног в Hi-Z состоянии, опять же.

Цитата(Дон Амброзио @ Feb 18 2008, 11:28) *
Поэтому я не понимаю, почему многие из ответивших здесь на форуме так упорно сопротивляются против того, чтобы добавить надёжности девайсу (надёжности в смысле не предотвращения сбоев, а их своевременного обнаружения и устранения). Упираются ногами, руками, рогами и прочими частями тела. Почему?[/size][/b][/i][/u]


Потому что тема трудно формализуется. И как говорил zltigo, актуальность этого вопроса является следствием ошибок на предыдущих этапах разработки.

Кой-чего вспомнил.
Прошлым летом один мой привод (кстати, движимый тривиальной мегой-8) залило водой. 380!!!
И что? И ничего: аппаратная защита от КЗ не дала начаться безобразию, проц рабочий, флеш целый, eeprom(!) целый, хотя возможность записи в программе есть. Нога какая-то второстепенная выгорела, не помню. Короче, ПРОСУШИЛ - ПОМЕНЯЛ ПРОЦ - ВПЕРЕД! Все живы по сей день.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Feb 18 2008, 08:51
Сообщение #186


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Весь вопрос в том, насколько больше


Вот на это Вам ответит теория надежности.


Цитата
Потому что тема трудно формализуется.


Ничего подобного. Весь математический аппарат есть. Соответствующий раздел форума недалеко.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
_Sam_
сообщение Feb 18 2008, 08:51
Сообщение #187


Местный
***

Группа: Свой
Сообщений: 278
Регистрация: 18-01-05
Из: Санкт-Петербург
Пользователь №: 2 031



Цитата
Писал же уже Вы не четатиль, чтоли?

Ну кто ещё не "четатиль" это большой вопрос!

Я ж писал в предыдущем своём посте :
Цитата
А если у нас без случайного джампа на Run произошло изменениеDDRC и PORTC таким образом, что эти два сигнала выставвились.


Цитата
Если вероятность выхода из строя какого-то его аппаратного узла, то это одно. А если вероятность сбоя из-за помех - это другое

Вы читаете, что пишет Rst7? Похоже не всё!

А по поводу стороны проблемы затронутой Rst7 вот есть полезная статейка
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Feb 18 2008, 08:55
Сообщение #188


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Дон Амброзио @ Feb 18 2008, 12:44) *
Дык с точки зрения теории вероятности вероятность любого мыслимого события больше нуля. Весь вопрос в том, насколько больше.

Классика теории вероятности -
У блондинки спрашивают:
- Какая вероятность, что ты встретишь на улице динозавра?
- 50%. То ли встречу, то ли нет.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 18 2008, 09:03
Сообщение #189


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(_Sam_ @ Feb 18 2008, 11:51) *
А по поводу стороны проблемы затронутой Rst7 вот есть полезная статейка

А по статейке выходит, что программа+проц = последовательное соединение блоков?
Go to the top of the page
 
+Quote Post
_Sam_
сообщение Feb 18 2008, 09:09
Сообщение #190


Местный
***

Группа: Свой
Сообщений: 278
Регистрация: 18-01-05
Из: Санкт-Петербург
Пользователь №: 2 031



Цитата
Дык с точки зрения теории вероятности вероятность любого мыслимого события больше нуля. Весь вопрос в том, насколько больше

Дык вы же не хотите считать эти вероятности, вы интуитивно полагаете, что ваши программные нагромаждения существенно их изменят!

Почему вы считаете что вероятность случайного джампа выше чем выставление одновременно двух сигналов на порте? Ведь возможно ситуация когда вы всё проверили выставили первый сигнал и в этот же момент помеха выставила второй! Всё тупик.

Цитата
Пробовали. Случайно,конечно. А Вы что подумали?

Ну например если на корпус шкафа электроавтоматики попадёт фаза соприкосновение с ним радости не доставитsmile.gif

Цитата
А по статейке выходит, что программа+проц = последовательное соединение блоков?

Неа мы ж тута обсуждаем безошибочные проги, которые ещё к тому же и исправляют баги глючных MCU:) Т.ч. надо брать надёжность MCU и надёжность MCU c меганадёжной прогой, которая ловит баги MCU biggrin.gif
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Feb 18 2008, 09:41
Сообщение #191


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(Rst7 @ Feb 18 2008, 11:48) *
Прибор или выполняет свои функции или не выполняет. На самом деле пофиг - отпал резистор или сбойнул камень.

Согласен.. Просто надёжность в с смысле отсутствия необнаруженных сбоев от помех и постоянные (в смысле, не временные) отказы отдельных аппаратных узлов MCU - это другое.
Если 2-й параметр MCU и имеет такой же примерно порядок величины как , например, резистор. То первый хуже в 100 000 раз и более. Так что применение описанных мной методов обоснованно

Цитата(Rst7 @ Feb 18 2008, 11:51) *
Вот на это Вам ответит теория надежности.
Ничего подобного. Весь математический аппарат есть. Соответствующий раздел форума недалеко.

Цитата(_Sam_ @ Feb 18 2008, 11:51) *
Вы читаете, что пишет Rst7? Похоже не всё!

А по поводу стороны проблемы затронутой Rst7 вот есть полезная статейка



А вы, Господа хорошие, вообще понимаете разницу между надёжностью программ и надёжностью железа? И что теория надёжности программ имеет свою специфику? Мне кажется что нет. Ибо тогда бы Вы знали, например, что понятие износа/старения , применяемое сплошь и рядом в теории надёжности железа, для программ не применимо.

Цитата(Dog Pawlowa @ Feb 18 2008, 11:55) *
Классика теории вероятности -
У блондинки спрашивают:
- Какая вероятность, что ты встретишь на улице динозавра?
- 50%. То ли встречу, то ли нет.

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

Цитата(_Pasha @ Feb 18 2008, 12:03) *
А по статейке выходит, что программа+проц = последовательное соединение блоков?

lol.gif

Во-во.. И я про тоже... Некоторые Господа пытаются перенести все методики рассчёта надёжности железа и на программу. Забывая о том, что программа не имеет такого понятия как износ/старение


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
_Sam_
сообщение Feb 18 2008, 09:43
Сообщение #192


Местный
***

Группа: Свой
Сообщений: 278
Регистрация: 18-01-05
Из: Санкт-Петербург
Пользователь №: 2 031



Цитата
А вы, Господа хорошие, вообще понимаете разницу между надёжностью программ и надёжностью железа?

Ну вот приплыли 07.gif
Мы же обсуждаем так сказать идеальные программы в которых всё предусмотрено(имеются ввиду все ситуации с бессбойным MCU) и каким образом не допустить, чтобы глюки MCU не испортили нам программной идеальности. Т.е как программным способом отловить аппаратный сбой, нарушающий ход выполнения программы или искажающий регистры или ОЗУ. Или я уже что-то не понимаю? 05.gif

Цитата
Некоторые Господа пытаются перенести все методики рассчёта надёжности железа и на программу.

Мне кажеться это финиш.
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Feb 18 2008, 09:51
Сообщение #193


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(_Sam_ @ Feb 18 2008, 12:09) *
Ведь возможно ситуация когда вы всё проверили выставили первый сигнал и в этот же момент помеха выставила второй! Всё тупик.
Дык на всякую хитрую ж..у найдётся х..й с винтом... Это я к тому, что всегда существует верояность такой ситуации, когда уже ничего не поможет. И что? Если помогает в 99,99% случаев, а в 0,01% случаев не поможет. То такая защита не нужна? 07.gif

Цитата(_Sam_ @ Feb 18 2008, 12:43) *
Мне кажеться это финиш.
Т.е. от ответа на вопрос Вы уклоняетесь. Значит разницу между надёжностью программ и надёжностью железа не понимаете. Тогда о чём тогда вообще вести речь? 07.gif


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 18 2008, 09:54
Сообщение #194


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(singlskv @ Feb 17 2008, 19:06) *
Не претендуя на звание суперспеца, адепты проверки всего и вся так еще и не ответили на
часть моих вопросов, хотелось бы услышать например про защиту кода при использовании 32бит
команд....

Опять же, дело в цене вопроса. И если не трогать CALL / JMP, то остается проблема избавления от LDS/STS. Тоже, имхо, решаемая за счет использования LDD/STD. Но,блин, асм...
Код
; Let's locate all globals in 64-byte sections!
.dseg
Timer:  .byte 2
Flags:  .byte  1
;.....................
Uart0_sta: .byte 1
; additional defines
.equ Sectn1_org = Timer
.set Active_Sectn = Sectn1_org

.macro  LDvar8; <rdst> <var-addr>
  ldd @0,Y+(@1-Active_Sectn)
.endm

#define Select_Section(SectName) .set Active_Sectn=SectName\ ldi16 yL,yH,Active_Sectn
; where ldi16 is a relevant macro

Исправил.

Сообщение отредактировал _Pasha - Feb 18 2008, 10:04
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Feb 18 2008, 09:54
Сообщение #195


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(_Sam_ @ Feb 18 2008, 12:09) *
вы интуитивно полагаете, что ваши программные нагромаждения существенно их изменят!

Вы не четатиль чтоли? twak.gif
А зачем тогда я уже N раз в этой теме упомянал о разработанных мной тестовых программах и про то, что применённые мной методы давали значительный эффект, по сравнению с программами без использования методов обнаружения сбоев железа? Т.е. все свои предполжения и теоретические рассчёты я реально подтвердил на практике


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post

19 страниц V  « < 11 12 13 14 15 > » 
Closed TopicStart new topic
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 19:57
Рейтинг@Mail.ru


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