Встраивание данных в двоичный файл, охватываемый CRC, последствия?

Предположим следующий сценарий:

  • Существует двоичное изображение некоторого приложения для микроконтроллера (во всяком случае, чтобы не мешать решению проблем формата ELF / PE, моя конкретная связанная с этим проблема - это проект микроконтроллера).
  • Это двоичное изображение защищено с помощью CRC (для обнаружения ошибок в нем, никаких криптографических проблем).
  • Я хочу иметь раздел, который можно заменить позже (например, с помощью загрузчика), не затрагивая CRC.

Проблема разрешима, пример для CRC32:

  • Внутренний поток 1: 0x49 0xA3 0x45 0xEF => CRC32: 0xA1DD6F3B
  • Внутренний поток 2: 0xAD 0x33 0x10 0x86 => CRC32: 0xF6717149
  • Двоичный 1: 0x11 0x49 0xA3 0x45 0xEF 0x3B 0x6F 0xDD 0xA1 0x22 => 0xDEAD20F7
  • Двоичный код 2: 0x11 0xAD 0x33 0x10 0x86 0x49 0x71 0x71 0xF6 0x22 => 0xDEAD20F7

То есть, встраивая блок данных с CRC32 в другой, имеющий CRC32, внутренний блок можно заменить, не влияя на внешний CRC (это относится к тому, что при выполнении вычисления CRC для блока с включенным CRC вы получаете то же самое " магическое значение ": 0xDEBB20E3 или дополнено, как можно увидеть в калькуляторе CRC: 0x2144DF1C).

Я думаю, что это включение не должно влиять на производительность (возможность обнаружения ошибок) CRC, ни в какой-либо части внешнего блока или внутреннего блока (если я проверял это только внешним CRC, естественно, внутренний блок проверен своим собственным CRC не может быть затронуто), однако я не совсем уверен.

(Конечно, внутренний блок не получит никакого улучшения в обнаружении ошибок внешним CRC, как в случае, когда в нем происходит не обнаруживаемая ошибка внутреннего CRC, это означает, что он выдает то же самое "магическое значение", таким образом также побеждая внешний CRC возможность обнаружить ошибку в нем)

Таким образом, вопрос заключается в том, что если CRC используется таким образом, будут ли части внешнего блока (или внутренний блок, если проверяется только внешним CRC) подвергаться какому-либо снижению производительности обнаружения ошибок.

2 ответа

Нет. Фактически вы увеличили общую вероятность обнаружения ошибок, вставив в сообщение второй CRC. Вы можете также проверить это, чтобы видеть, есть ли ошибка только в замененном разделе.

Независимо от того, обнаружена ли ошибка при проверке CRC, зависит от того, какие биты ввода перевернуты ошибкой, а не от первоначального значения этих битов.

Поэтому проверяемые данные не влияют на способность CRC обнаруживать ошибки, если только она не предрасполагает систему передачи к возникновению ошибок определенного типа.

Это вряд ли так, и почти наверняка не будет зависеть от CRC данных, поэтому ваша схема не ухудшит обнаружение ошибок.

Другие вопросы по тегам