|
|
  |
Шифрование прошивки, кто что использует |
|
|
|
Aug 19 2011, 09:29
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(AlexandrY @ Aug 19 2011, 11:48)  Но для сжатия хотя бы в два раза бинарной прошивки объемом в пару сотен килобайт LZ подобным алгоритмом нужно минимум 64 Кб RAM. А для распаковки? Вообще, не в ту сторону тему увели. Лучшие архиваторы, используя мощь многоголовых гигагерцев и мегабайтов, пакуют среднестатистический ехе-шник примерно вдвое. Естественно, мелкоконтроллерам до этого как до луны. Ну и стоит ли геморрой свеч? Разве что как дополнительная степень защиты. Так для этого можно и попроще алгоритм применить. Вот в ПЛИСах другое дело. Там часто встречаются длинные последовательности нулей и единиц, и даже простейшие методы позволяют существенно пожать прошивку. 2ТС: ознакомьтесь для начала с атмеловскими аппликациями
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Aug 19 2011, 10:41
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (MrYuran @ Aug 19 2011, 12:29)  Естественно, мелкоконтроллерам до этого как до луны. Да. QUOTE Ну и стоит ли геморрой свеч? Нет. QUOTE Разве что как дополнительная степень защиты. Так для этого можно и попроще алгоритм применить. Да QUOTE Вот в ПЛИСах другое дело. Там часто встречаются длинные последовательности н улей и единиц, и даже простейшие методы позволяют существенно пожать прошивку. Ну а поскольку у меня в прошивках контроллера встречается, как правило, прошивка FPGA, то пред шифровкой использую простейшее RLE подобное сжатие. QUOTE 2ТС: ознакомьтесь для начала с атмеловскими аппликациямиКода-то от него и отталкивался. Только там есть - как минимум одна ошибка при обработке нештатых ситуаций(забыл какая конкретно, поскольку сразу все начал переписывать); - все писано небрежно, а AES уж слишком в лоб  . AES подлежит оптимизации (однажды на форуме была стихийно возникшая тема в которой выкладывал эти исходники хоть как-то оптимизипрванные под AVR). Но в общем как отправная точка, или просто почитать документацию - годится. У меня к тому формату добавлено несколько команд, выходной файл сделан hex-образным.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Aug 19 2011, 11:35
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(MrYuran @ Aug 19 2011, 12:29)  Вообще, не в ту сторону тему увели. Лучшие архиваторы, используя мощь многоголовых гигагерцев и мегабайтов, пакуют среднестатистический ехе-шник примерно вдвое. Естественно, мелкоконтроллерам до этого как до луны. Плохо сжимающаяся прошивка говорит о ее низкой избыточности. Т.е. в ней мало ресурсов, мало отладочной информации. Я бы предположил, что в такой прошиве вообще мало фичей. Но тогда на кой ее шифровать? С другой стороны сжатие скрывает вариации размера прошивки от версии к версии. Вломщики как правило сразу ведут дифференциальный анализ прошивок, т.е. сравнение разных версий. На основании размеров они решают че взламывать, а че нет. Где инженерные версии, а где релизные и т.д. На моих платформах всегда применяется сжатие для фирмваре, и даже несколько алгоритмов. И как правило коэффициент сжатия больше 2-х даже на простых алгоритмах типа LZSS. Поскольку часто апгрейд идет через GSM и другие медленные каналы то любые лишние 100K чувствуются.
|
|
|
|
|
Aug 20 2011, 01:13
|

pontificator
     
Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483

|
Цитата(toweroff @ Aug 20 2011, 07:42)  1. не столько важно зашифровать исходник, чем запаковать и зашифровать чем-то исходник Что важно, а что нет - решать вам, под задачу. Если надо экономить время при передаче массива, то сжимать важно, если нет - то нафиг надо, только время зря тратить на распаковку и на написание сложного бутлодера. Цитата(toweroff @ Aug 20 2011, 07:42)  2. Просто зашифрованная прошивка тем же AES, 3DES поддастся анализу? (текстовых блоков нет, передаваемых подряд констант по внешнему каналу максимум 128 бит уже в рабочем девайсе) Это все из категории "неуловимого Джо" - никто вашу прошивку вообще анализировать не будет, если увидят, что она зашифрована. Анализу поддаются данные, для которых набрана статистика, а одиночный блок ломать - только время тратить. Цитата(toweroff @ Aug 20 2011, 07:42)  4. Перестановка блоков прошивки (например, отдельное шифрование+сжатие блоков по 512,1К.2К) для каждого конкретного девайса может дополнительно помочь? Нет. Среди множества с виду "полезных для шифровки" действий значительная их часть не приносит ровно никакой пользы. Насколько я понял, это вещи довольно неочевидные доже для опытных специалистов, поэтому каждый серьезный способ шифрования подвергается долгому анализу.
|
|
|
|
|
Aug 22 2011, 06:11
|
Местный
  
Группа: Свой
Сообщений: 378
Регистрация: 6-12-04
Пользователь №: 1 340

|
Цитата(andrewlekar @ Aug 22 2011, 09:39)  Вообще самое правильное для удаленной прошивки - передавать скрипт для скриптового движка. При таком решении вся прошивка может байт 100 занимать. Что-то не совсем понятно, поясните как будет работать обновление ?
|
|
|
|
|
Aug 22 2011, 11:03
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (toweroff @ Aug 22 2011, 13:10)  можно посмотреть? полазил поиском AES* - пересмотрел несколько страниц, не нашел хотя, конечно, более интересуют реализации, заточенные под 32-бит архитектуру Да, там действительно была какая-то стихийно возникшая тема по оптимизации загрузчика, где на этом атмеловском исходнике тренировались. А этот атмеловский исходник живущий у меня под ARM, с оптимизацией, но помнится, без какой-то особой оптимизации конкретно под ARM - в приложении. Хотя, возможно, это не последний вариант - то, что сейчас нашлось на одном из компьютеров. memcpy_z(). замените на memcpy(). bint для ARM это int. Для AVR bint это unsigned char. Все остальное без изменений.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Aug 22 2011, 11:10
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(zltigo @ Aug 22 2011, 15:03)  Да, там действительно была какая-то стихийно возникшая тема по оптимизации загрузчика, где на этом атмеловском исходнике тренировались. А этот атмеловский исходник живущий у меня под ARM, с оптимизацией, но помнится, без какой-то особой оптимизации конкретно под ARM - в приложении. Хотя, возможно, это не последний вариант - то, что сейчас нашлось на одном из компьютеров. memcpy_z(). замените на memcpy(). bint для ARM это int. Для AVR bint это unsigned char. Все остальное без изменений. то есть, вся адаптация под ARM того самого AVR231 сводится только к замене функции memcpy_z() ?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|