eeriesu
@eeriesu

Самопроверка целостности кода контрольной суммой, как реализовать?

Сразу поставлю плашку, что из меня довольно поверхностный программист, обычно таким не занимаюсь.
Суть вопроса в контрольной сумме.
При инициализации контроллера необходима проверка целостности кода по тз, как это работает не получается разобраться, сравнивая с эталонной суммой если все ок, то понятно. Но если текущая сумма не будет равна, что делать?
Где-то предлагают текущую сумму записать как эталонную и перезагрузить, но в чем тогда вообще смысл этой проверки. Как будто нужно сделать что-то чтобы откатить код к эталонной сумме, типа восстановиться, но как это реализовать не представляю.
  • Вопрос задан
  • 343 просмотра
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Для точного восстановления кода по контрольной сумме последняя должна быть размером с архив этого кода.
Как правило, если контрольная сумма не совпадает, то просто выдаётся ошибка и запуск оборудования останавливается. Так поступают, например, BIOS'ы компьютеров. Дальше нужно восстановить код из внешнего источника, это дело для сервисного техника, или внутреннего хранилища (если там всё в порядке), такое есть на материнских платах с двумя чипами BIOS.
Как более сложный вариант - проверять контрольную сумму каждой функции. Если повреждена критическая функция, то останавливать работу, если некритическая, то не вызывать её во время работы.
Ответ написан
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Если контрольная сумма не сошлась, то надо вывести сообщение об ошибке (если на данном этапе это вообще возможно) и остановить инициализацию. Потушить контроллер, повиснуть или перезагрузиться.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
В лихие 90-е был такой антивирус типа ADinf кажется. Он работал под MS-DOS и он после
проверки каждого файла писал в свою базу контрольную сумму как результат проверки.
Есть позитивный результат и связь 1:1 контрольной суммы? Все хорошо! Кажется такие антивирусы называли
ревизорами. И если файл по каким-то причинам менялся то Adinf соотвественно бил тревогу
и сообщал что длина или сумма отличается от оригинальной.

Сегодня все программные продукты разрабатываются в версионным контролем. Тоесть есть Github
или BitBucket где лежит оригинальный код. И есть репозитарии бинарей. Их много. Для Linux
apt/rpm, есть у Java maven и есть у Python свой PIP

Все они - централизованы. Имеют в вебе ендпоинт и не очень сложно написать логику которая
просто сверяет актуальность бинаря и сооответсвующего в репо.

Я слушал интервью с Евгением Касперским. Он сказал что не сильно верит в антивирусы но
очень доверяет системам с ЭЦП и тотальному алгоритму проверки доверия. Тоесть допустим
ты доверяешь производителю ПО - соотв. ты должен чекать наличие сертификата у любого
бинарника перед запуском. Обычно чек сертификата это легче чем антивирус-контроль
и при хорошей инфраструктуре может быть очень быстрый.

В лихие 2000е я читал о разработках Филиппа Циммермана который создал свою систему
кругового доверия и назвал ее PGP. Сегодня она может называться по другому но суть в том
что нет главного арбитра а есть просто круг друзей которыеы могут что-то там подписывать
и соотвественно если вы доверяете друзьям то вы доверяете всему на что их подпись накладывается.
Система очень интересная. И заслуживает внимания.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы