Регистр сдвига с линейной обратной связью: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
мНет описания правки
Строка 6: Строка 6:
Для РСЛОС функция обратной связи представляет собой [[сумма по модулю два|сумму по модулю 2]] (xor) некоторых битов регистра, называемых '''отводами'''.
Для РСЛОС функция обратной связи представляет собой [[сумма по модулю два|сумму по модулю 2]] (xor) некоторых битов регистра, называемых '''отводами'''.


Регистр сдвига с линейной обратной связью длины <math>~L</math> состоит из <math>~L</math> ячеек, пронумерованных <math>~0, 1, 2, \dots, L-1</math>, каждая из которых способна хранить <math>~1</math> битов и имеет один вход и один выход, а также синхросигнала, который контролирует смещение данных. В течение каждой единицы времени выполняются следующие операции:
Регистр сдвига с линейной обратной связью длины <math>~L</math> состоит из <math>~L</math> ячеек, пронумерованных <math>~0, 1, 2, \dots, L-1</math>, каждая из которых способна хранить <math>~1</math> бит и имеет один вход и один выход, а также синхросигнал, который контролирует смещение данных. В течение каждой единицы времени выполняются следующие операции:
* содержимое ячейки <math>~L-1</math> формирует часть выходной последовательности;
* содержимое ячейки <math>~L-1</math> формирует часть выходной последовательности;
* содержимое <math>~i</math>-й ячейки перемещается в ячейку <math>~i+1</math> для любого <math>~i, 0<~ i<~ L-1</math>
* содержимое <math>~i</math>-й ячейки перемещается в ячейку <math>~i+1</math> для любого <math>~i, 0<~ i<~ L-1</math>

Версия от 13:51, 6 октября 2010

Регистр сдвига с линейной обратной связью (РСЛОС, англ. Linear feedback shift register, LFSR) — один из методов генерации псевдослучайных чисел.

Определение

Регистр сдвига с линейной обратной связью состоит из двух частей: собственно регистра сдвига и функции обратной связи. Регистр состоит из битов, его длина — количество этих бит. Когда нужно извлечь бит, все биты регистра сдвигаются вправо на одну позицию. Новый крайний слева бит определяется функцией остальных битов. На выходе регистра оказывается один, обычно младший, значащий бит. Период регистра сдвига — длина получаемой последовательности до начала её повторения.

Для РСЛОС функция обратной связи представляет собой сумму по модулю 2 (xor) некоторых битов регистра, называемых отводами.

Регистр сдвига с линейной обратной связью длины состоит из ячеек, пронумерованных , каждая из которых способна хранить бит и имеет один вход и один выход, а также синхросигнал, который контролирует смещение данных. В течение каждой единицы времени выполняются следующие операции:

  • содержимое ячейки формирует часть выходной последовательности;
  • содержимое -й ячейки перемещается в ячейку для любого
  • новое содержимое ячейки определяется битом обратной связи, который вычисляется сложением по модулю с определёнными коэффициентами битов ячеек .
Регистр сдвига с линейной обратной связью

Таким образом, в качестве функции обратной связи берётся логическая операция XOR (исключающее ИЛИ), то есть:

  • на первом шаге:
  • на втором шаге:
  • на -м шаге:

Свойства

Свойства выдаваемой РСЛОС последовательности тесно связаны со свойствами ассоциированного многочлена над полем . Его ненулевые коэффициенты называются отводами, как и соответствующие ячейки регистра, поставляющие значения аргументов функции обратной связи.

Периодичность

Так как существует разных ненулевых состояний регистра, то период последовательности, генерируемой РСЛОС при любом ненулевом начальном состоянии, не превышает . При этом период зависит от ассоциированного многочлена:

  • если старший коэффициент ассоциированного многочлена равен нулю, то периодичная часть генерируемой последовательности может проявляться не сразу;
  • если , то соответствующая последовательность называется неособой. Такая последовательность начинается со своей периодичной части. Наиболее интересны неособые последовательности, соответствующие многочленам со следующими дополнительными свойствами:
    • если неприводим, то при любом ненулевом начальном состоянии регистра период генерируемой последовательности равен наименьшему числу , при котором многочлен делит . Как следствие, период последовательности будет делить число ;
    • если примитивен (то есть, является делителем , но не является делителем для всех d, делящих ), то любое ненулевое начальное состояние регистра дает последовательность с максимально возможным периодом . Например, РСЛОС с отводной последовательностью, состоящей из первого и четвёртого битов имеет максимальный период тогда и только тогда, когда ассоциированный многочлен является примитивным.

Линейная сложность

Линейная сложность бинарной последовательности — одна из самых важных характеристик работы РСЛОС. Введём следующие обозначения:

  •  — бесконечная последовательность;
  •  — подпоследовательность длины последовательности ;
  • говорят, что РСЛОС генерирует последовательность , если существует некоторое исходное состояние, при котором выходная последовательность РСЛОС совпадает ;
  • говорят, что РСЛОС генерирует конечную последовательность , если существует некоторое начальное состояние, для которого выходная последовательность РСЛОС имеет в качестве первых членов члены последовательности .
Определение

Линейной сложностью бесконечной двоичной последовательности называется число , которое определяется следующим образом:

  • если — нулевая последовательность, то ;
  • если не существует РСЛОС, который генерирует , то ;
  • иначе равна длине самого короткого РСЛОС, который генерирует .

Линейной сложностью конечной двоичной последовательности называется число , которое равно длине самого короткого РСЛОС, который генерирует последовательность, имеющую в качестве первых членов .

Свойства линейной сложности

Пусть и  — двоичные последовательности. Тогда:

  1. для любого линейная сложность подпоследовательности удовлетворяет неравенствам ;
  2. тогда и только тогда, когда  — нулевая последовательность длины ;
  3. тогда и только тогда, когда ;
  4. если периодическая с периодом , то ;
  5. .

Пример

Для РСЛОС с ассоциированным многочленом генерируемая последовательность имеет вид . Допустим, перед началом процесса в регистре записана последовательность , тогда период генерируемого потока битов будет равен 7 со следующей последовательностью:

Номер шага Состояние Генерируемый бит
0 -
1 1
2 0
3 0
4 1
5 1
6 1
7 0

Поскольку внутреннее состояние на седьмом шаге вернулось к исходному, то, начиная со следующего шага, будет идти повтор. Иными словами, период последовательности оказался равен 7, что произошло ввиду примитивности многочлена .

Алгоритмы генерации примитивных многочленов

Готовые таблицы

Вычисление примитивности многочлена — достаточно сложная математическая задача. Поэтому существуют готовые таблицы, в которых приведены номера отводных последовательностей, обеспечивающих максимальный период генератора. Например, для 32-битового сдвигового регистра имеется последовательность . Это означает, что для генерации нового бита необходимо с помощью функции XOR просуммировать 32-й, 7-й, 5-й, 3-й, 2-й и 1-й биты. Код для такого РСЛОС на языке Си следующий:

int LFSR (void){
  static unsigned long ShiftRegister = 1;
  ShiftRegister = ((((ShiftRegister >> 31)
    ^ (ShiftRegister >> 6)
    ^ (ShiftRegister >> 4)
    ^ (ShiftRegister >> 2)
    ^ (ShiftRegister >> 1)
    ^ ShiftRegister) & 0x00000001) << 31)
    | (ShiftRegister >> 1);
  return ShiftRegister & 0x00000001;
}

Программные реализации РСЛОС генераторов достаточно медленны и быстрее работают, если они написаны на ассемблере, а не на языке Си. Одним из решений является использование параллельно 16-ти РСЛОС (или 32, в зависимости от длины слова в архитектуре конкретного компьютера). В такой схеме используется массив слов, размер которого равен длине РСЛОС, а каждый бит слова массива относится к своему РСЛОС. При условии, что используются одинаковые номера отводных последовательностей, то это может дать заметный выигрыш в производительности.[нужен пример кода] (См.: bitslice).

Конфигурация Галуа

Схему обратной связи также можно модифицировать. При этом генератор не будет обладать большей криптостойкостью, но его будет легче реализовывать программно. Вместо использования для генерации нового крайнего левого бита битов отводной последовательности выполняется XOR каждого бита отводной последовательности с выходом генератора и замена его результатом этого действия, затем результат генератора становится новым левым крайним битом. На языке Си это выглядит следующим образом:

static unsigned long ShiftRegister = 1;
static unsigned long mask = 0x80000057;
void seed_LFSR (unsigned long seed){
  if (seed == 0)
    seed = 1;
  ShiftRegister = seed;
}
  
int Galua_LFSR (void){
  if (ShiftRegister & 0x00000001) {
    ShiftRegister = (ShiftRegister ^ mask >> 1) | 0x80000000;
    return 1;
  } else {
    ShiftRegister >>= 1;
    return 0;
  } 
}

Выигрыш состоит том, что все XOR выполняются за одну операцию.

Преимущества

  • высокое быстродействие криптографических алгоритмов, создаваемых на основе РСЛОС, например таких как потоковые шифры;
  • применение только простейших битовых операций сложения и умножения, аппаратно реализованных практически во всех вычислительных устройствах;
  • хорошие криптографические свойства (РСЛОС могут генерировать последовательности большого периода с хорошими статистическими свойствами);
  • благодаря своей структуре ЛРС легко анализируются с использованием алгебраических методов.

См. также

Ссылки