Задать вопрос
@list_get

Как реализовать защиту/верификацию флешь памяти микроконтроллера при включении?

Добрый день. Недавно наткнулся на форумах о возможности верификации исходников (при работе) во флешь памяти микроконтроллера путем расчета контрольной суммы. Поэтому хотел бы спросить может кто поделиться примером для реализации данной задачи. Контрольная сумма будет рассчитываться с помощью CRC16.
Буду очень благодарен если кто нибудь подкинет небольшой пример.
  • Вопрос задан
  • 847 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@list_get Автор вопроса
сложность в непонимании программных моментов реализации.
Вот набросал кусок кода правка с crc32.
#include <crc32.h>

#define  BLOCK_SIZE		0x400			// block flash
#define  START_ADDR		0x000000UL
#define  END_ADDR		0x008000UL  

void crc_flash()
{
	int result;
	uint32_t  crc;
	for(int i = (uint32_t)START_ADDR ; i < END_ADDR; i += BLOCK_SIZE)
	{			
		//			     data     len
		crc = data_crc16(&i	    , END_ADDR);
		result  += crc;                  
	}	
}

Подскажите насколько это правильно.

По факту оказалось куда проще чем представлялось
data = сюда помещаем адрес для начала расчета
len   = объем памяти для расчета
uint16_t data_crc16_flash(unsigned char *data, int len)
{
	unsigned short crc = 0xFFFF;
	while(len--)
		crc = (crc >> 8) ^ crc16_table[(crc & 0xff) ^ *data++];
    return crc;
}

на выходе мы получаем нашу контрольную сумму.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
А в чем сложность? Проходим всё адресное пространство flash и кладем её CRC-сумму в самый конец. Если это делать при прошивке, то можно на этапе сборки делать в каком нибудь блоке, например сразу за таблицей прерываний. Если это делается внутри контроллера, то CRC лучше класть отдельно в EEPROM и защитить от изменения хешем самого CRC. Если флеш разбита на блоки, которые например прошиваются на лету по время работы (обновление чего-нибудь), то опять же храним CRC блока и защищаем его хешем. Хеш нужен, если вдруг кто-то сменил блок и CRC.
Ответ написан
RiseOfDeath
@RiseOfDeath
Диванный эксперт.
CRC16 (как и другие CRC) годится только для защиты от непреднамеренного искажения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы