Это зависит полностью от того, что вы подразумеваете под «сообщением». Если вы можете добавить четыре байта таблеток к одному из сообщений. (I.E. четыре байта, которые не имеют смысла в контексте сообщения.) Затем он становится тривиальным в прямом смысле этого слова.
Думая о битах, проходящих через конечный автомат CRC32.
CRC32 основан на сдвиговом регистре обратной связи galois, каждый бит в его состоянии будет заменен индукцией 32 бит из данных полезной нагрузки. При индукции каждого бита позиции, обозначенные полиномом, будут исключаться с последовательностью, наблюдаемой с конца регистра сдвига. Данные последовательности не влияют на входные данные до тех пор, пока регистр сдвига не будет заполнен.
В качестве примера, представьте мы имеем сдвиговый регистр, заполненный начальным состоянием 10101110, 10000011 полином, и заполнение неизвестных битов, Х.
Polynomial * ** |feedback (End of SR.)
State 10101110 0
State X1010111 1
State XX101000 0
State XXX10100 0
State XXXX1010 0
State XXXXX101 1
State XXXXXX01 1
State XXXXXXX1 1
State XXXXXXXX 0
Обратная связь пока не в терминах X до тех пор, СР был заполнен! Итак, чтобы создать сообщение с предопределенной контрольной суммой, вы берете свое новое сообщение, генерируете его CRC и разрабатываете его следующие 32 бита обратной связи. Это можно сделать в 32 шагах функции CRC. Затем вам необходимо рассчитать эффект, который эта обратная связь имеет на содержимое регистра сдвига.
Ярлык для этого состоит в том, чтобы заполнить ваше сообщение четырьмя нулевыми байтами, а затем посмотреть на контрольную сумму. (Контрольная сумма - это состояние SR в конце, которое, если заполнено четырьмя нулевыми байтами, является влиянием обратной связи и пустых байтов.)
Эксклюзивный ИЛИ, который влияет на значение контрольной суммы, которое вы хотите, замените четырехбайтовый трейлер на это вычисленное значение и восстановите контрольную сумму. Вы можете сделать это с помощью любой программы, которая генерирует CRC32, шестнадцатеричный редактор и калькулятор, который может обрабатывать hex.
Если вы хотите сгенерировать два сообщения, которые имеют полный смысл и не содержат конечный мусор, все становится немного сложнее. Определите несколько разделов, в которых вы можете написать правдоподобные альтернативы с точно такой же длиной.
Использование английской прозы в качестве примера. «Я думаю, что это может работать» и «Я верю в этот подход» Имеют широко похожие значения и точно такую же длину.
Идентификация достаточно примеров в вашем сообщении - это сложный бит (если вы не хотите обманывать пробелы!) CRC 32 является линейным, если данные имеют правильное смещение в сообщении. Таким образом, CRC ([messagea] [padding])^CRC ([padding] [messageb]) = CRC ([messagea] [messageb]) Есть некоторые оговорки со выравниванием слов, с которыми вам нужно будет справиться, намек, вы хотите расширить проходы в «фиксированные» части сообщения. Как правило, вы хотите иметь альтернативы для n * 1.5 проходов, где n - размер CRC.
Теперь вы можете вычислить CRC, что имеет скелетное сообщение, впечатление, что каждый альтернативный проход будет иметь на нем, а затем составить таблицу, сравнив влияние, которое будет иметь каждая альтернатива для каждого прохода. Затем вам нужно выбрать альтернативы, которые изменят CRC скелета, чтобы соответствовать требуемому CRC. Эта проблема на самом деле довольно забавная для решения. Прежде всего, найдите любые альтернативы, которые однозначно изменяют бит, если этот бит необходимо изменить для вашего CRC, выберите эту альтернативу и сбросьте ее влияние на CRC, а затем снова развернитесь. Это должно сократить пространство для решения, которое вам нужно искать.
Это очень сложная задача для кодирования, но это создаст ваши столкновения за очень короткий промежуток времени.
Хорошо, но мне было интересно, что вы сказали «на месте» модификацию. Я бы подумал, что CRC предназначен для обнаружения этих небольших модификаций в больших файлах/строках, поскольку он используется для проверки целостности. – 2009-10-04 09:48:42
В этом суть. CRC очень быстро вычисляет и хорошо обнаруживает случайные изменения, а не выдерживает криптоанализ. –