Есть некий 64-байтный блок, в состав которого входит 32-разрядная контрольная сумма. Блок данных и контрольная сумма формируются чёрным ящиком. Существуют ли какие-то методы/подходы, позволяющие предположить, как она считается? Получить контрольную сумму от произвольного блока нельзя, но можно набрать много (сотни) готовых вариантов. Кроме того, можно получить последовательность блоков, различающихся несколькими или даже одним байтом, что-то типа этого: Код (Text): 04 bf 98 ab c9 6d 02 80-26 48 00 00 00 00 00 00 41 87 50 18 88 c0 64 16-3f 1b c0 00 16 40 00 00 16 40 1e 40 0a 00 00 00-00 01 c0 b0 00 00 00 00 16 40 1e 40 0a 00 00 00-00 01 c0 b0 00 00 00 00 --- 04 bf 98 ab c9 6d 02 80-26 48 00 00 00 00 00 00 41 87 50 18 88 c0 64 16-3f 1b c0 00 16 40 00 00 16 41 1e 00 09 00 00 00-84 c5 08 70 00 00 00 00 16 41 1e 00 09 00 00 00-84 c5 08 70 00 00 00 00 --- 04 bf 98 ab c9 6d 02 80-26 48 00 00 00 00 00 00 41 87 50 18 88 c0 64 16-3f 1b c0 00 16 40 00 00 16 41 1e 00 08 00 00 00-ef 4e b8 4b 00 00 00 00 16 41 1e 00 08 00 00 00-ef 4e b8 4b 00 00 00 00 И так далее, пока байт по смещению 0x24 не обнулится (после первого раза больше никакие байты кроме этого не меняются). Байты 0x20-0x2f и 0x30-0x3f дублируются, 4 байта по смещению 0x28 - и есть эта сумма. Пока только понял, судя по реакции на изменение 1 бита, что это не может быть LRC. Пробовал считать CRC32 на 4 стандартных полиномах от нескольких очевидных кусков блока - не срастается. Понятно, что в общем случае задача не решается (злой гений безграничен), но можно ли хотя-бы что-то выяснить? Например, понять, CRC32 это или нет (кроме перебора всех возможных полиномов и кусков, включая не непрерывные).
Из предоставленного смею предположить, что DWORD по смещению 24h - есть количество байт по которым считается хеш. Тоесть в первом случае обсчитываем 10 байт: 04 bf 98 ab c9 6d 02 80-26 48 Далее 9: 04 bf 98 ab c9 6d 02 80-26 И 8: 04 bf 98 ab c9 6d 02 80- ps Дайте чтоли значения от предполагаемой "длины" в 1, 2 и 3.
Нет, это не может быть количество байт, по которым считается хеш. Семантика этого байта (24h) известна - скажем так, это некий счётчик использования (с каждым разом декрементируется на 1). Для 1, 2 и 3 значений пока нет, есть такие: Код (Text): 04 bf 98 ab c9 6d 02 80-26 48 00 00 00 00 00 00 41 87 50 18 88 c0 64 16-3f 1b c0 00 16 40 00 00 16 41 1e 00 07 00 00 00-a9 6b 0b 83 00 00 00 00 16 41 1e 00 07 00 00 00-a9 6b 0b 83 00 00 00 00 --- 04 bf 98 ab c9 6d 02 80-26 48 00 00 00 00 00 00 41 87 50 18 88 c0 64 16-3f 1b c0 00 16 40 00 00 16 41 1e 00 06 00 00 00-9c a9 f4 b3 00 00 00 00 16 41 1e 00 06 00 00 00-9c a9 f4 b3 00 00 00 00 --- 04 bf 98 ab c9 6d 02 80-26 48 00 00 00 00 00 00 41 87 50 18 88 c0 64 16-3f 1b c0 00 16 40 00 00 16 41 1e 00 05 00 00 00-74 64 61 61 00 00 00 00 16 41 1e 00 05 00 00 00-74 64 61 61 00 00 00 00
Естественно - иначе какой же он нафиг чёрный? =) Попробую ещё поизменять разные байты и попроверять, где КС срастается, а где нет - хоть будет понятно, что в неё входит... Ещё одна бабка на базаре сказала, что у Кнута где-то описаны математические свойства CRC - тож попробую найти - видимо, не в тех томах и/или не в том издании, которое у меня есть... Хоть бы для начала доказать, CRC это, или нет.
Я думал, может, какие методы для подобного гадания есть (как есть они в криптографии для всяких "несерьёзных" шифров)...
GluckMaker великовата контрольная сумма (32) для такого блока (64). а вообще прямой перебор очень рулит.
Увы, то, что это не CRC, можно доказать на основе CRC(A^B^C)=CRC(A)^CRC(B)^CRC(C). А какие бывают стандартные 32-разрядные суммы кроме CRC? Как-то не верится, что кто-то специально выдумывал свой алгоритм КС (было бы из-за чего...) Возможны, конечно, варианты типа свёртки через DES/ГОСТ и т.п., но почему-то кажется, что это должно быть что-то относительно простое...
GluckMaker А почему бы и нет? Ведь тебе код черного ящика недоступен -), вот и гадай себе. Смысл наверное в нестандартности.
Нестандартность - это, конечно, хорошо, но поди докажи, что ты придумал хорошую контрольную сумму. По поводу моей задачки - оказалось, что как минимум 3 левые тетрады к контрольной сумме не имеют никакого отношения (они предсказуемы, но сначала я не обратил внимания, откуда они берутся). Четвёртая тетрада - под вопросом.