Кратко

  • RFC 3385 показал неполноту ярлыка «32-битная сумма»: необнаружение зависело также от порождающего полинома, длины блока, распределения ошибок и структуры данных.
  • CRC32C был признан хорошей основой iSCSI при заявленной модели случайной порчи, а не криптографической или универсальной гарантией.

Сгруппированная ошибка проходит через аддитивную сумму и задерживается CRC, хотя оба результата занимают четыре байта. Разрядность описывает объём избыточности, но не множество различимых шаблонов. RFC 3385 сделал эту скрытую разницу проверяемым выбором.

Документ вышел в сентябре 2002 года как Informational. Он оценивал необнаруженные ошибки для выбора iSCSI, а не задавал весь протокол, сертифицировал продукт или сообщал внедрение. Его числа принадлежали явным моделям.

iSCSI переносил команды SCSI и данные хранения через IP. Тихая порча могла попасть на устройство как допустимое содержимое. Масштаб повышал цену: текст учитывал петабайты и требовал хорошего поведения хотя бы до блоков 8 КиБ.

RFC 3347 объяснял недостаточность TCP checksum. Некоторые ошибки могли пройти; прокси мог завершить TCP, перестроить заголовок iSCSI и пересчитать сумму. Данным, командам и статусу требовалась собственная граница digest.

RFC 3385 разделил пакетные и независимые битовые ошибки. Память, внутренний канал или программа тоже создают сгруппированную порчу. Важны распределение, длительность и длина блока, а не одно число изменённых битов.

CRC вычисляет избыточность порождающим полиномом. Ошибочное слово проходит, лишь когда шаблон ошибки сам имеет структуру кодового слова. Минимальное расстояние и распределение весов формируют слепую зону. 32 бита — количество, не геометрия.

Сокращённые коды усиливали различие. Полиномы одной степени на практических длинах могли отличаться на порядки для конкретной вспышки. Классификация по ширине скрыла бы главное.

IEEE-802 CRC и CRC32C оба 32-битные, но CRC32C использует 0x11EDC6F41. Полином меняет делимость ошибок, расстояние и поверхность необнаружения. Это не декоративная деталь реализации.

Расчёты предполагали частоту вспышек, независимых ошибок, распределение длительности и блок 8 КиБ. Одинаковая по времени вспышка покрывает больше битов на высокой скорости. Другой канал, размер, нагрузка или распределение означают другое утверждение. Малое число без предпосылок не является гарантией.

В анализируемых условиях CRC оценивался примерно в 12 тысяч раз лучше Fletcher и 22 тысячи раз лучше Adler для независимых ошибок. Короткие шаблоны могли компенсироваться в аддитивных суммах; смещённые реальные данные усугубляли слепые зоны.

Итоговая таблица сопоставляла Fletcher32, Adler32, IEEE-802 и CRC32C: ширина одна, расстояния и модельные вероятности разные. Защита, устойчивость к смещению данных и длинным блокам обосновали выбор CRC32C.

Стоимость тоже измерялась. В приведённом синтезе CRC32C занимал больше ячеек, чем CCITT-CRC32, но менее процента типичного небольшого миллионно-ячеечного чипа. Стоимость не исчезла, а получила масштаб.

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

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

RFC 7143 позже консолидировал iSCSI. HeaderDigest и DataDigest по умолчанию None; инициаторы и цели обязаны реализовать CRC32C и None. После согласования digest действует на PDU полной фазы и прямо назван некриптографическим.

Реализовать, предложить, выбрать, покрыть, успешно проверить и сохранить защиту после iSCSI — разные факты. Совместимость не доказывает включение во всех сессиях.

Граница безопасности ясна: атакующий, меняющий данные, пересчитает код. CRC обнаруживает случайность, но не подтверждает источник и полномочия. Прохождение не является доказательством против активного противника.

RFC 3309, RFC 4960 и RFC 9260 применяли CRC32C в SCTP. Это повторное использование, не равенство моделей. Длины, поля, нижние слои и восстановление меняют значение.

RFC 1071 описывал Internet checksum; RFC 1141 и RFC 1624 — инкрементальное обновление, причём поздний текст исправлял проблему. RFC 2151 рассматривал Fletcher для UDP, RFC 1950 — Adler-32 для zlib. Checksum — семейство, не единый уровень.

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

Минимальная начальная спецификация Lu Heng локализует общий выбор в полиноме, представлении и охвате. Затем реализация оптимизирует. Свобода начинается после единого смысла «проверено».

Слои реальности разделяют наличие поля, реализацию, согласование, охват PDU, успешную проверку, исключение случайной порчи в модели и защиту от противника. Фраза «32-битная сумма» сжимает семь фактов и почти ничего не доказывает.

RFC 3385 не просто рекомендовал CRC32C. Он превратил лозунг целостности в ограниченное свидетельство. Биты были оболочкой; полином, блок, нагрузка, путь и угроза определяли смысл.

Источники