Pull to refresh

Comments 4

Матрицы это, конечно, хорошо, но в настоящее время оптимальнее использовать недвоичные регистры. Я делал регистр из 4х ячеек с простым основанием 251. Это укладывается в simd регистры CPU. https://github.com/nawww83/lfsr

Действительно, если не хочется останавливаться на матрице перехода на 1 бит -- нужно просто возвести матрицу в нужную степень (умножить саму на себя). Для удобства можно проводить вычисления в https://www.sagemath.org/ . Точно так же можно рассчитать обратную матрицу (переход назад на 1 состояние, возведение матрицы в степень -1). А т.к. LFSR и например CRC одно и то же -- при помощи такой обратной матрицы (отмотка на n бит назад -- матрица в степени -n) можно элементарно "подделывать" нужное значение CRC, если в сообщении есть последовательно k бит (k -- размер CRC), куда можно записать что угодно.

по подробнее про подделку контрольной суммы, пожалуйста)

p.s. про отрицательную степень не думал

по подробнее про подделку контрольной суммы, пожалуйста)

Не "контрольной суммы" а CRC.

  1. посчитать xor между получившейся и желаемой CRC

  2. Отмотать получившееся значение на N бит назад соотвествующей матрицей (умножить вектор на матрицу)

  3. Вксорить результат в сообщение в нужном месте.

Есть конечно нюансы типа в каком порядке обрабатываются биты сообщения, инвертируется ли CRC перед записью в конец сообщения, в каком порядке идут биты CRC и т.д.

Sign up to leave a comment.

Articles