Предположим, что следующий сценарий:
- Существует двоичное изображение некоторого приложения для микроконтроллера (чтобы не мешать этому к проблемам формата ELF / PE, в любом случае, моя конкретная связанная проблема - это микроконтроллерпроект).
- Это двоичное изображение защищено с помощью CRC (для обнаружения ошибок в нем, никаких проблем с криптографией).
- Я хочу иметь раздел, который можно заменить позже (например, используязагрузчик), без влияния на CRC.
Проблема решаема, пример для CRC32 следующий:
- Внутренний поток 1: 0x49 0xA3 0x45 0xEF => CRC32:0xA1DD6F3B
- Двоичный 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) будет страдать от любого снижения производительности обнаружения ошибок.