tvoi original block zacodirovan s izbytochnym codom, no
kontrolnuu sum vychisliaesh ot originalnogo coda. itogda skolko by ne proishodilo korrektiruemyh oshibok kontrolnaia sum ORIGINALNOGO koda budet ta zhe.
Есть блок длиной 16Кбит. Нужно состряпать из него уникальную сигнатуру, типа контрольной суммы, длиной 32-128 бит, чтобы отличие на единицу в любом разряде блока всегда приводило к отличию сигнатуры на единицу (младшего разряда) и при этом вероятность совпадения сигнатур полностью различных блоков была того же порядка, что и для обычной суммы по мод.2.
Как сделать алгоритм типа контрольной суммы, чтобы:07.03.02 05:34 Автор: + <Mikhail> Статус: Elderman
tvoi original block zacodirovan s izbytochnym codom, no
kontrolnuu sum vychisliaesh ot originalnogo coda. itogda skolko by ne proishodilo korrektiruemyh oshibok kontrolnaia sum ORIGINALNOGO koda budet ta zhe.
Net tam izbytochnogo! Ya by ego i Uzal!08.03.02 10:30 Автор: Zef <Alloo Zef> Статус: Elderman
Нужно сравнивать блоки данных, содержащие небольшое (1-4) кол-во ошибок. Чтобы не хранить копии блоков я хочу сделать что-то на подобие CRC, но классическая CRC делается так, чтобы как можно меньшие изменения в блоке вызывали как можно большие изменения сигнатуры (и на эту тему есть куча инфы), а мне надо наоборот - чтобы контрольная сумма не менялась при различии менее, чем на 4 бита в любых позициях.
такого не бывает05.03.02 15:32 Автор: ukv Статус: Незарегистрированный пользователь
> а мне надо наоборот - чтобы контрольная сумма не > менялась при различии менее, чем на 4 бита в любых > позициях.
Если контрольная сумма не меняется СОВСЕМ при замене 4 бит - то такая контрольная сумма просто константа (N раз по 4 бита - можно заменить блок любой длины без изменения контрольной суммы). То же самое и в постановке "различие на 1 бит блока - отличие сигнатуры в младшем разраде". По-моему, задачка неразрешима.
такого не бывает: да не, бывает ... но как ?05.03.02 18:07 Автор: Chingachguk <Chingachguk> Статус: Member
> > а мне надо наоборот - чтобы контрольная сумма не > > менялась при различии менее, чем на 4 бита в любых > > позициях.
Как-то можно сделать ...
У меня вот была такая мысля: вот переданный поток бит. Каждый бит несет инфу: нуль он или не нуль, плюс свой нумер. Пусть это будет график функции = значение бита(номера бита) (значения 0 или 1 соответственно). Как и всякую функцию, ее можно разложить в ряд(интеграл Фурье) до какого-там знака. Коэффициенты выслать как CRC. Потом (при получении) опять-таки разложить полученный поток и сравнить каким-нибудь критерием(Хи-квадрат ?) c присланными коэффициентами.
Это так, слова. Но, видимо, решение быть должно...
А если так?06.03.02 12:57 Автор: Zef <Alloo Zef> Статус: Elderman
Извини, я си не знаю - может, что не понял, но, судя по всему, у тебя нечто вроде реперных контрольных суммочек для каждого фрагмента последовательности, так ? И ты хочешь как-то потом по ним отдельно проверять фрагменты полученной последовательности ?
(А ты проверил насчет случая, если ВСЕ кривые биты будут в одном слове ?!)
Если так, то чем это отличается вот от чего: передаем, например, четность каждых 16-ти байтовых блоков. Т.е. фактически - побитно. Получаем на каждые 256 бит 1 бит четности. И стандартный CRC(-какой-нибудь обычный хэш).
Получив присланные байты и получив на них правильный хэш(совпадающий с присланным), проблем не имееем. Однако если хэш не совпал, то мы начианем рыскать по четности с целью определить, где дыра(дырки). Потом перебором(что не должно занять много времени - можно размер блока уменьшить) пытаемся менять по 1-4 битика в том куске(кусках), где четность неверна ... Если вдруг совпало(поменяли 2 бита - получился верный хэш), то считаем присланную инфу OK.
ps Я вот в книжке по криптографии глянул - нифига такого нету Ж)
А если так? - Хм... А чем это отличается от...07.03.02 04:18 Автор: Zef <Alloo Zef> Статус: Elderman
На случай, если все кривые биты в одном слове (или в разных разрядах разных слов) я суммирую остатки (см текст проги). А вот от "перескока" бита в одном разряде (т.е. если один из 1 в 0, а др. из 0 в 1) защиты нет. Правда, если учитывать, что биты считываются с устройства, то "перескок" наиболее вероятен для смежных бит, а они попадают в разные разряды.
Сейчас я думаю как раз над этим и над тем, как свернуть сигнатуру дальше.
Или так:08.03.02 14:37 Автор: Zef <Alloo Zef> Статус: Elderman
Считаем вхождения в блок 4х битных блоков от 0 до 0f (как в LZW), затем вычисляем среднее, потом дисперсии для каждого числа, обрезаем их до байта и получаем 128бит сигнатуру, к-рая при изменении 1 бита в блоке изменяется на 2 бита.
По-моему, красыва?
Жял, что нэ я придумал, абидна, а?
Или так: А что, это доказано ?09.03.02 08:14 Автор: Chingachguk <Chingachguk> Статус: Member
> Считаем вхождения в блок 4х битных блоков от 0 до 0f (как в > LZW), затем вычисляем среднее, потом дисперсии для каждого > числа, обрезаем их до байта и получаем 128бит сигнатуру, > к-рая при изменении 1 бита в блоке изменяется на 2 бита.
А формулу-то то покажи ?!
Пусть Xi - значения блоков (от 0 до 0f),
Ni - их количества в переданном буфере, и
Если Xсреднее = (Xi*Ni)/N;
N = Ni;
Дисперсия(i) = Di = Ni * (Xi-Xсреднее) ^ 2;
Что дальше означает - обрезаем до байта ? Если ты отнормировал на единицу Ni - это одно, а нет - тогда непонятно, с ростом длины все Ni растут.
В любом случае я не пойму, почему при изменении одного бита меняются ТОЛЬКО ДВЕ дисперсии ?
> По-моему, красыва? > Жял, что нэ я придумал, абидна, а?
А хто ? ;)
Почему 2? Смотри:10.03.02 09:03 Автор: Zef <Alloo Zef> Статус: Elderman
Если изменился бит, значит 4битная группа, в к-рую он входил тоже изменилась. Тогда одного кода стало на 1 меньше, другого на 1 больше, т.е. сигнатура меняется на 1 в 2байтах.
Извини, не понял, ты же...11.03.02 03:54 Автор: Chingachguk <Chingachguk> Статус: Member
только это не инженерная, а научная задачка. Может даже на кандидатскую потянет.
Если работодатель пытается в втюхать такое задание - его сразу посылать нужно.
> > а мне надо наоборот - чтобы контрольная сумма не > > менялась при различии менее, чем на 4 бита в любых > > позициях. > > Если контрольная сумма не меняется СОВСЕМ при замене 4 бит > - то такая контрольная сумма просто константа (N раз по 4 > бита - можно заменить блок любой длины без изменения > контрольной суммы). То же самое и в постановке "различие на > 1 бит блока - отличие сигнатуры в младшем разраде". > По-моему, задачка неразрешима.
Как сделать алгоритм: нахаляву ?!03.03.02 15:12 Автор: Chingachguk <Chingachguk> Статус: Member Отредактировано 03.03.02 15:13 Количество правок: 1
> Есть блок длиной 16Кбит. Нужно состряпать из него > уникальную сигнатуру, типа контрольной суммы, длиной 32-128 > бит, чтобы отличие на единицу в любом разряде блока всегда > приводило к отличию сигнатуры на единицу (младшего разряда) > и при этом вероятность совпадения сигнатур полностью > различных блоков была того же порядка, что и для обычной > суммы по мод.2.
Почему нельзя:
Сигнатура =
Бит0 = Четность(Блок);
Биты1..XX = MD5(Блок) ; Или что-то в этом роде.
?
Хемминг? А вероятность совпадения не увеличится?04.03.02 05:26 Автор: Zef <Alloo Zef> Статус: Elderman