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.
посчитать xor между получившейся и желаемой CRC
Отмотать получившееся значение на N бит назад соотвествующей матрицей (умножить вектор на матрицу)
Вксорить результат в сообщение в нужном месте.
Есть конечно нюансы типа в каком порядке обрабатываются биты сообщения, инвертируется ли CRC перед записью в конец сообщения, в каком порядке идут биты CRC и т.д.
Построение матрицы перехода для генератора псевдослучайной последовательности (PRBS)