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

Группа: Участник
Сообщений: 60
Регистрация: 31-08-10
Из: Минск-Витебск
Пользователь №: 59 203

|
Я шифрую по алгоритму Triple DES (3DES). При заливке на ходу расшифровывается и пишется во флэш. Процы из серии lpc 17xx с прошивкой ~500 kB прошиваются чуть меньше чем за 6 мин. Вся эта защита необходимо если перепрошивкой занимается конечный пользователь.
|
|
|
|
|
Aug 19 2011, 08:15
|

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

|
Цитата(Tanya @ Aug 19 2011, 10:56)  А кусками? Ну так уменьшение heap-а в LZ алгоритмах это и есть фрагментация процесса сжатия. Она и ухудшает показатель сжатия. Есть алгоритм UCL который как утверждается не требует памяти на декомпрессию. Но не пробовал. Цитата(=AK= @ Aug 19 2011, 11:13)  А если хочется, чтобы и просто, и быстро, то сделайте простой потоковый шифр на 32-битном LFSR. Для практики этого будет более чем достаточно, имхо. RC4 будет быстрее чем LFSR. А применяется в серьезных технологиях VPN.
|
|
|
|
|
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() ?
|
|
|
|
|
Aug 22 2011, 11:45
|

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

|
Цитата(zltigo @ Aug 22 2011, 15:36)  Я теряюсь в понимании смысла написанного Вами  . Я выложил исходник. Можете откомпилировать и сравнить результат с оригинальным атмеловским. Обещаю, разница будет. Что Вы при этом называете заморачиваться я не понимаю  упс.. прошу прощения, Вы файл, вероятно, чуть позже приложили когда я писал ответ, то предполагал, что сказанное относится к оригинальному AVR231 теперь видна разница Спасибо
|
|
|
|
|
Aug 22 2011, 12:33
|

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

|
QUOTE (toweroff @ Aug 22 2011, 15:14)  Первый, я так понимаю, "родной" атмелевский, а что во втором? Наверняка определение KEY_COUNT, но что еще? Да. оно самое. Генерится автоматически тем, что у Атмела было под названием CREATOR. Выглядит так: CODE //-------------------------------------------------------------------------- // File: aes_data_usm3.h // Created: Sun Apr 27 17:15:16 2006
// Description: File contains the settings to configure the boot loader // according to the configurations used in the encrypted file. //--------------------------------------------------------------------------
#ifndef _AES_DATA_H #define _AES_DATA_H
#define PAGE_SIZE 512 #define FLASH_SIZE 131072 #define CRC_CHECK 1 #define SIGNATURE 0xXXXXXXXX #define FRAME_BUFFER_SIZE 532 #define INITIALVECTOR_3 0xXXXXXXXX #define INITIALVECTOR_2 0xXXXXXXXX #define INITIALVECTOR_1 0xXXXXXXXX #define INITIALVECTOR_0 0xXXXXXXXX #define KEY_COUNT 3 #define OWNER_STRING "USM3"
#endif //_AES_DATA_H //-------------------------------------------------------------------------- // Description: AES key table for a proper decryption of // the file encrypted using the same configurations. // Keys used: KEY1 = , , , , , // KEY2 = , , , , , // KEY3 = , , , , //--------------------------------------------------------------------------
#ifndef _AES_KEYS_H #define _AES_KEYS_H
const unsigned char kTable[32] = { 0xXX, 0x39, 0x58, 0x51, 0xXX, 0xb7, 0x3e, 0xXX, 0x9f, 0xc0, 0x60, 0xe7, 0xce, 0x8e, 0x1f, 0x6d, 0xba, 0x68, 0x1e, 0xac, 0x20, 0xdd, 0x10, 0x26, 0x83, 0xXX, 0x42, 0x2d, 0xca, 0x86, 0xXX, 0xXX, };
#endif //_AES_KEYS_H
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|