PAV писал(а):
можно ли утверждать, что при условии того, что в байте произойдет ошибка, распределение вероятностей искаженного байта равномерное или все-таки шанс, что мы попадем в "близкий" байт сильно выше?
Шанс, что мы попадем в "близкий" байт сильно выше.
PAV писал(а):
Количество сообщений, отличающихся от нашего ровно в одном байте, равно 255n. Примем что все они равновероятны (это не очень правильно). Поскольку всего значений CRC у нас 256, то в среднем можно ожидать, что примерно с вероятностью 1/n мы получим ошибку.
Согласен.
PAV писал(а):
Но если принять, что искажаются все-таки биты, то априорная вероятность получить "большое" искажение очень мала и этот член существенно не влияет. А вблизи нашего сообщения все не так, поскольку при равномерности CRC шанс получить именно такую CRC вблизи нашего сообщения мал.
Согласен.
PAV писал(а):
Если исказится ровно 1 бит, то почти уверен, что CRC всегда будет различная.
Согласен, при условии здравомыслимой длины пакета.
PAV писал(а):
Я очень сильно уверен, что при числе реально искажаемых бит порядка длины CRC мы уже будем наблюдать практически вероятность ошибки равную отношению длины сообщения к длине CRC
Исходя из этих же соображений, написана формула в моем первом сообщении. Там, правда, вероятность ошибки в байте в квадрате, в чем я не очень уверен, и сейчас думаю, что это ошибка.
PAV писал(а):
можно провести статистическое моделирование. Только делать это нужно умно. Потребуется модель ошибок. Для наиболее естественного случая когда биты искажаются независимо с малой вероятностью нужно отдельно моделировать искажение ровно 1 бита, двух, трех и т.д. Моделирование покажет нам (достаточно точно) условную вероятность ошибки при условии искажения ровно заданного числа битов.
Однако, посчитайте, сколько времени займет моделирование для пакета, скажем, 32 байта? (32*8)! чтоли?
PAV писал(а):
Нужно также помнить, что искажения нужно применять не к исходному сообщению (длины n), но к полному (включая CRC).
Согласен.
незванный гость писал(а):
Не все, что в Wiki, есть истина в последней инстанции.
1) CRC (cyclic redundancy check) строится следующим образом:
crc' = (crc ROT 1) + word, где ROT — это операция циклического сдвига (с переносом вытесняемого разряда в освободившийся бит), а word — слово данных (байт, два байта,…) Появилась она еще на до-байтовых компах, так что слово могло быть и 45 бит…
2) сейчас CRC практически не употребляется, и ее место заняла CS (checksum, контрольная сумма). Здесь уже алгоритм произволен, и то, что употребляете Вы называется контрольной суммой по праву. Я, впрочем, каюсь, грешен, и использую CRС и CS как синонимы. Пример другой эффективной CS — adler32.
1. CS - это есть контрольная сумма.
2. CRC - это есть определенный общепринятый алгоритм, который является частным случаем контрольной суммы.
3. Сейчас понятие CRC, также как и сам CRC употребляются повсеместно. Возьмите арихиваторы ZIP и RAR, возьмите связь по последовательным асинхронным интерфейсам. Я лично не знаю более сильного метода защиты информации с помощью такого маленького объема доп. данных.
4. Когда я задавал вопрос о вероятности необнаружения ошибочного пакета, я имел ввиду
прикидочную ф-ию f(n,n_CRC), где n - кол-во полезных байт в пакете, n_CRC - кол-во байт в CRC.
5. Определение байта не ограничено 8-ю битами. Сошлюсь опять же на ту же Википедию:
Википедия писал(а):
Байт (англ. byte) — единица измерения количества информации, обычно равная восьми битам (в этом случае может принимать 256 (2^8) различных значений).
Вообще, байт — это минимально адресуемая последовательность фиксированного числа битов. В современных компьютерах общего назначения байт равен 8 битам.
CRC, естественно, может иметь произвольное число бит. Однако, в на практике широко применяются именно 8, 16, 32 - бит CRC, ибо это удобнее всего при работе с 8-битовыми байтами.
Добавлено спустя 7 минут 29 секунд:незванный гость писал(а):
Существует прямая связь между контрольной суммой и дайджестом сообщения в криптографии. Функция у них идентична, но вот критичность ошибки разная. Потому в криптографии не скупятся на вычислительные ресурсы при построении и проверке, а также при анализе свойств… Для Ваших же целей такие затраты, скорее всего, не оправданы: канал не будет «подделывать» данные, поэтому любое совпадение случайно.
Такие затраты для моих целей не только неоправданны, но и невозможны. Обработка принятого сообщения происходит в прерывании, кол-во сообщение в секунду - от 60 до 3000. Канал данные не подделывает. Мне необходимо оценить средняя время, при котором я пропущу ошибочный пакет (это время зависит, ессесно от скорости передачи, как кстати, и вероятность ошибки). Разделю это время на 10, для надежности.
Тогда, я выбиру приемлемую скорость передачи, кол-во байт на сообщение и т.п., чтобы заведомо эта ошибка не происходила в среднем за все время работы устройства. При этом мне не придется заморачиваться такими вещами, как принятие к действию неверной информации.
незванный гость писал(а):
Я думаю, можно найти и другие полезные для анализа свойства, надо только поискать (и задуматься, как применить — проклятая комбинаторика).
Именно в этом и заключается сложность
.