Встраивание данных в двоичный файл, охватываемый 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 данных, поэтому ваша схема не ухудшит обнаружение ошибок.