Я объясню, что я намерен делать. У меня есть функция или набор строк кода (в C) для защиты - в основном никто не должен изменять инструкции. Итак, у меня есть код (называемый защитой контрольной суммы), который работает с кодом сборки x86, сгенерированным из файла C. Он выбирает одну инструкцию из этой сборки, добавляет (или применяет fletcher algo или любую другую функцию) к значению контрольной суммы (изначально 0), и это делается до завершения всех инструкций. Затем, чтобы увидеть, была ли какая-либо инструкция изменена, я беру добавление (или fletcher и т. Д.) Всех инструкций и проверяю его на значение предварительно вычисленной контрольной суммы. Какие методы подходят для этого?Каков подходящий алгоритм контрольной суммы для предотвращения модификации кода?
Вот исследовательская работа, которая говорит об этой технике:
https://www.cerias.purdue.edu/assets/pdf/bibtex_archive/2001-49.pdf
Вот шаблон охранника:
guard:
add ebp, -checksum
mov eax, client_addr
for:
cmp eax, client_end
jg end
mov ebx, dword[eax]
add ebp, ebx
add eax, 4
jmp for
end:
Контрольная сумма Флетчера ** ** ** контрольная сумма безопасности (у вас есть «безопасность» как один из ваших тегов). Он обеспечивает небольшую защиту от случайных ошибок, но не защищает от вредоносных атак, потому что любой злоумышленник может изменить ваши данные и вычислить соответствующую контрольную сумму для его модификации. Если вам нужна контрольная сумма безопасности, тогда требуются коды аутентификации сообщений (MAC) или цифровые подписи. Чтобы ответить на ваш вопрос, с математической точки зрения, я думаю, что 256 - лучший выбор, чем 255. – TheGreatContini
Я изменил вопрос и, следовательно, описание изменилось. Я читал об аутентификации сообщений, и упоминается, что MAC, цифровые подписи и аутентичное шифрование - это способы для продвижения. Что вы делаете лучше всего? – ak0817