Регистр сдвига с линейной обратной связью: различия между версиями
[непроверенная версия] | [непроверенная версия] |
→Конфигурация Фибоначчи: не верно был указан полином в примере |
Miqha (обсуждение | вклад) →Пример реализации на логических элементах: добавил ссылки на другие статьи вики |
||
(не показаны 44 промежуточные версии 22 участников) | |||
Строка 1: | Строка 1: | ||
'''Регистр сдвига с линейной обратной связью''' (РСЛОС, {{lang-en|linear feedback shift register}}, {{lang-en2|LFSR}}) — [[ |
'''Регистр сдвига с линейной обратной связью''' (РСЛОС, {{lang-en|linear feedback shift register}}, {{lang-en2|LFSR}}) — {{iw|Сдвиговый регистр|сдвиговый||Shift register}} [[Регистр (цифровая техника)|регистр]] битовых слов, у которого значение входного (вдвигаемого) [[бит]]а равно линейной [[Булева функция|булевой функции]] от значений остальных битов регистра до сдвига. Может быть организован как программными, так и аппаратными средствами. Применяется для [[Генератор псевдослучайных чисел|генерации псевдослучайных последовательностей битов]], что находит применение, в частности, в [[Криптография|криптографии]]{{sfn|Б. Скляр|2007}}. По похожему принципу работают [[регистр сдвига с обратной связью по переносу]] и [[регистр сдвига с обобщённой обратной связью]]. |
||
== Описание == |
== Описание == |
||
Строка 7: | Строка 7: | ||
В [[Регистр сдвига|регистре сдвига]] с линейной [[Обратная связь (техника)|обратной связью]] (РСЛОС) выделяют две части (модуля): |
В [[Регистр сдвига|регистре сдвига]] с линейной [[Обратная связь (техника)|обратной связью]] (РСЛОС) выделяют две части (модуля): |
||
* собственно регистр сдвига; |
* собственно регистр сдвига; |
||
* схему (или подпрограмму) обратной связи, вычисляющую значение вдвигаемого |
* схему (или подпрограмму) обратной связи, вычисляющую значение вдвигаемого бита. |
||
Регистр состоит из функциональных [[Ячейка памяти|ячеек памяти]] (битов одного или нескольких машинных слов), в каждой из которых хранится текущее состояние (значение) одного бита. Количество ячеек <math>L</math>, называют длиной регистра. Биты (ячейки) обычно нумеруются числами <math>i = 0,\;1,\;\dots,\;L-1</math>, содержимое <math>i</math>-й ячейки обозначается через <math>S_{(L-1)-i}</math>. Значение нового бита <math>S_L</math> определяется до сдвига битов в регистре и только после сдвига записывается в ячейку <math>0</math>, а из ячейки <math>L-1</math> извлекается очередной сгенерированный бит. |
Регистр состоит из функциональных [[Ячейка памяти|ячеек памяти]] (битов одного или нескольких машинных слов), в каждой из которых хранится текущее состояние (значение) одного бита. Количество ячеек <math>L</math>, называют длиной регистра. Биты (ячейки) обычно нумеруются числами <math>i = 0,\;1,\;\dots,\;L-1</math>, содержимое <math>i</math>-й ячейки обозначается через <math>S_{(L-1)-i}</math>. Значение нового бита <math>S_L</math> определяется до сдвига битов в регистре и только после сдвига записывается в ячейку <math>0</math>, а из ячейки <math>L-1</math> извлекается очередной сгенерированный бит. |
||
Функцией обратной связи для РСЛОС является линейная [[булева функция]] от значений всех или некоторых битов регистра. Функция выполняет умножение битов регистра на коэффициенты <math>c_i</math>, где <math>i = 1, \; 2, \; \dots, \; L</math>. Количество коэффициентов совпадает с количеством битов регистра <math>L</math>. Коэффициенты <math>c_i</math> принимают значения <math>\{ 0, \; 1 \}</math>, причём последний коэффициент <math>c_L</math> равен <math>c_L = 1</math>, так как РСЛОС задаётся [[ |
Функцией обратной связи для РСЛОС является линейная [[булева функция]] от значений всех или некоторых битов регистра. Функция выполняет умножение битов регистра на коэффициенты <math>c_i</math>, где <math>i = 1, \; 2, \; \dots, \; L</math>. Количество коэффициентов совпадает с количеством битов регистра <math>L</math>. Коэффициенты <math>c_i</math> принимают значения <math>\{ 0, \; 1 \}</math>, причём последний коэффициент <math>c_L</math> равен <math>c_L = 1</math>, так как РСЛОС задаётся [[Линейная рекуррентная последовательность#Формула общего члена|характеристическим многочленом]] степени <math>L</math>. [[Сложение по модулю 2]] (операция «XOR», обозначаемая в формулах символом «<math>\oplus</math>») или её логическая инверсия «[[Эквиваленция|XNOR]]» являются линейными булевыми функциями и наиболее часто применяются в таких регистрах<ref>{{Cite web |url=http://www.xilinx.com/support/documentation/application_notes/xapp210.pdf |title=Linear Feedback Shift Registers in Virtex Devices |access-date=2014-11-19 |archive-date=2013-11-02 |archive-url=https://web.archive.org/web/20131102042344/http://www.xilinx.com/support/documentation/application_notes/xapp210.pdf |deadlink=no }}</ref>. При этом биты, являющиеся переменными функции обратной связи, называются '''отводами''', а сам регистр называется '''конфигурацией [[Фибоначчи]]'''{{sfn|Б. Шнайер|2013}}. |
||
Управление регистром в аппаратных реализациях производится подачей сдвигающего импульса (иначе называемого '''[[Тактовый сигнал|тактовым]]''' или '''синхроимпульсом''') на все ячейки. Управление регистром в программных реализациях производится выполнением [[Цикл (программирование)|цикла]]. На каждой итерации цикла вычисляется функция обратной связи и выполняется [[ |
Управление регистром в аппаратных реализациях производится подачей сдвигающего импульса (иначе называемого '''[[Тактовый сигнал|тактовым]]''' или '''синхроимпульсом''') на все ячейки. Управление регистром в программных реализациях производится выполнением [[Цикл (программирование)|цикла]]. На каждой итерации цикла вычисляется функция обратной связи и выполняется [[битовый сдвиг]] в слове. |
||
== Принцип работы == |
== Принцип работы == |
||
В течение каждого [[Тактовый сигнал|такта]] |
В течение каждого [[Тактовый сигнал|такта]] сдвигового регистра с линейной обратной связью выполняет следующие операции: |
||
* читается бит, расположенный в ячейке <math>L-1</math>; этот бит является очередным |
* читается бит, расположенный в ячейке <math>L-1</math>; этот бит является очередным битом выходной последовательности; |
||
* функции обратной связи вычисляет новое значение для ячейки <math>0</math>, используя текущие значения ячеек; |
* функции обратной связи вычисляет новое значение для ячейки <math>0</math>, используя текущие значения ячеек; |
||
* содержимое каждой <math>i</math>-й ячейки перемещается в следующую ячейку <math>i+1</math>, где <math>i = 0,\;1,\;\dots,\;L-2</math>; |
* содержимое каждой <math>i</math>-й ячейки перемещается в следующую ячейку <math>i+1</math>, где <math>i = 0,\;1,\;\dots,\;L-2</math>; |
||
Строка 22: | Строка 22: | ||
Если функция обратной связи выполняет логическую операцию «[[Сложение по модулю 2|XOR]]» (исключающее ИЛИ), значения бит (ячеек) могут быть вычислены по следующим формулам{{sfn|Габидулин, Кшевецкий, Колыбельников|2011}}: |
Если функция обратной связи выполняет логическую операцию «[[Сложение по модулю 2|XOR]]» (исключающее ИЛИ), значения бит (ячеек) могут быть вычислены по следующим формулам{{sfn|Габидулин, Кшевецкий, Колыбельников|2011}}: |
||
<math>S_L=(c_1*S_{L-1})\oplus(c_2*S_{L-2})\oplus\dots\oplus(c_L*S_{0})</math> |
<math>S_L=(c_1*S_{L-1})\oplus(c_2*S_{L-2})\oplus\dots\oplus(c_L*S_{0})</math> |
||
<math>S_{L+1}=(c_1*S_{L})\oplus(c_2*S_{L-1})\oplus\dots\oplus(c_L*S_{1})</math> |
<math>S_{L+1}=(c_1*S_{L})\oplus(c_2*S_{L-1})\oplus\dots\oplus(c_L*S_{1})</math> |
||
<math>...</math> |
<math>...</math> |
||
Строка 30: | Строка 32: | ||
=== Периодичность === |
=== Периодичность === |
||
Периодом |
Периодом регистра сдвига называется минимальная длина получаемой последовательности до начала её повторения. РСЛОС длины <math>L</math> имеет <math>2^{L}</math> начальных состояний, задающих значения бит в ячейках. Из них <math>2^{L}-1</math> состояний - ненулевые, так что генерируемая последовательность имеет период <math>T\leq2^{L}-1</math>. Период генерируемой последовательности максимален и равен <math>2^{L}-1</math>, если многочлен обратной связи (или характеристический многочлен) <math>C(x)=c_Lx^{L}+c_{L-1}x^{L-1}+\dots+c_1x+1</math> [[Многочлен над конечным полем|над полем]] <math>\mathrm{GF}(2)</math> является [[Примитивный многочлен (теория чисел)|примитивным]]. Для этого необходимо (но не достаточно) выполнение следующих 2-х условий: |
||
* чётное число отводов; |
* чётное число отводов; |
||
* номера отводов, взятые все вместе, а не попарно, [[Взаимно простые числа|взаимно просты]]. |
* номера отводов, взятые все вместе, а не попарно, [[Взаимно простые числа|взаимно просты]]. |
||
Строка 48: | Строка 50: | ||
== Программная реализация == |
== Программная реализация == |
||
Программные реализации РСЛОС достаточно медленны и работают быстрее, если они написаны на [[ассемблер]]е. Одно из решений - параллельное использование 16-ти РСЛОС (или 32-х, в зависимости от [[Машинное слово#Размер машинного слова на различных архитектурах|длины слова]] в архитектуре компьютера). В такой схеме используется [[Массив (программирование)|массив]] слов, размер которого равен длине |
Программные реализации РСЛОС достаточно медленны и работают быстрее, если они написаны на [[ассемблер]]е. Одно из решений - параллельное использование 16-ти РСЛОС (или 32-х, в зависимости от [[Машинное слово#Размер машинного слова на различных архитектурах|длины слова]] в архитектуре компьютера). В такой схеме используется [[Массив (программирование)|массив]] слов, размер которого равен длине регистра сдвига, а каждый бит слова относится к своему РСЛОС. Так как используются одинаковые номера отводных последовательностей, то это может дать заметный выигрыш в производительности генератора{{sfn|Б. Шнайер|2013}}. |
||
=== Конфигурация Фибоначчи === |
=== Конфигурация Фибоначчи === |
||
Строка 62: | Строка 64: | ||
=== Конфигурация Галуа === |
=== Конфигурация Галуа === |
||
[[Файл:LFSR Galois.png| |
[[Файл:LFSR Galois.png|мини|600px|Конфигурация Галуа регистра сдвига с линейной обратной связью]] |
||
Как и в конфигурации |
Как и в конфигурации Фибоначчи, схема обратной связи представляет собой набор операций XOR отводных битов с выходом генератора, но порядок битов в регистре обратный: входным является <math>L-1</math>-й бит, а выходным — <math>0</math>-й. Результат сложения записывается в следующую ячейку, а новый выходной бит записывается в <math>L-1</math>-ю. Таким образом, если генерируемый бит равен нулю, то все биты в ячейках сдвигаются вправо без изменений, если генерируемый бит равен единице, то биты отвода меняют своё значение на противоположное, и все биты сдвигаются вправо. И конфигурация Фибоначчи, и конфигурация [[Галуа, Эварист|Галуа]] одной и той же длины генерируют одинаковые, но смещённые по времени одна от другой последовательности (при этом внутренние состояния регистров могут отличаться){{sfn|Beker, Piper|1982}}. |
||
Данный генератор не обладает большей [[Криптографическая стойкость|криптостойкостью]], но он даёт выигрыш в производительности: все операции XOR посредством [[Параллельные вычисления|распараллеливания]] можно выполнить за одно действие, а не последовательно одна за другой, как в конфигурации Фибоначчи. Данная схема также даст выигрыш при аппаратной реализации. |
Данный генератор не обладает большей [[Криптографическая стойкость|криптостойкостью]], но он даёт выигрыш в производительности: все операции XOR посредством [[Параллельные вычисления|распараллеливания]] можно выполнить за одно действие, а не последовательно одна за другой, как в конфигурации Фибоначчи. Данная схема также даст выигрыш при аппаратной реализации. |
||
Строка 72: | Строка 74: | ||
int LFSR_Galois (void) |
int LFSR_Galois (void) |
||
{ |
{ |
||
// for polynomial 0x80000057, reversed 0xea000001 |
|||
static unsigned long S = 0x00000001; |
static unsigned long S = 0x00000001; |
||
if (S & 0x00000001) { |
if (S & 0x00000001) { |
||
S = (S ^ 0x80000057 >> 1) | 0x80000000; |
S = ((S ^ 0x80000057) >> 1) | 0x80000000; |
||
return 1;} |
return 1;} |
||
else { |
else { |
||
Строка 87: | Строка 90: | ||
=== Конфигурация Фибоначчи === |
=== Конфигурация Фибоначчи === |
||
[[Файл:LFSR Example.png |
[[Файл:LFSR Example.png|400px|мини|Пример РСЛОС конфигурации [[Фибоначчи]]]] |
||
Пусть РСЛОС задаётся характеристическим многочленом <math>x^3+x |
Пусть РСЛОС задаётся характеристическим многочленом <math>x^3+x+1</math>. Это значит, что [[бит]]ами отвода будут 2-й и 0-й, а единица в формуле многочлена означает, что 0-й бит - входной. Функция обратной связи имеет вид <math>S_j=S_{j-1}\oplus S_{j-3}</math>. Допустим, изначальным состоянием регистра сдвига была последовательность <math>\left[0,\;0,\;1\right]</math>. Дальнейшие состояния регистра приведены в таблице ниже: |
||
{|class="wikitable" style="text-align:center;" |
{|class="wikitable" style="text-align:center;" |
||
Строка 95: | Строка 98: | ||
! Номер шага !! Состояние !! Генерируемый бит |
! Номер шага !! Состояние !! Генерируемый бит |
||
|- |
|- |
||
| 0 || <math>\left[0,\;0,\;1\right] </math>|| |
| 0 || <math>\left[0,\;0,\;1\right] </math>|| 1 |
||
|- |
|- |
||
| 1 || <math>\left[1,\;0,\;0\right]</math> || |
| 1 || <math>\left[1,\;0,\;0\right]</math> || 0 |
||
|- |
|- |
||
| 2 || <math>\left[ |
| 2 || <math>\left[1,\;1,\;0\right]</math> || 0 |
||
|- |
|- |
||
| 3 || <math>\left[1,\; |
| 3 || <math>\left[1,\;1,\;1\right]</math> || 1 |
||
|- |
|- |
||
| 4 || <math>\left[ |
| 4 || <math>\left[0,\;1,\;1\right]</math> || 1 |
||
|- |
|- |
||
| 5 || <math>\left[1,\; |
| 5 || <math>\left[1,\;0,\;1\right]</math> || 1 |
||
|- |
|- |
||
| 6 || <math>\left[0,\;1,\; |
| 6 || <math>\left[0,\;1,\;0\right]</math> || 0 |
||
|- |
|- |
||
| 7 || <math>\left[0,\;0,\;1\right]</math> || |
| 7 || <math>\left[0,\;0,\;1\right]</math> || 1 |
||
|- |
|- |
||
|} |
|} |
||
Поскольку внутреннее состояние на седьмом шаге вернулось к исходному, то, начиная со следующего шага, будет идти повтор битов. То есть генерируемая последовательность такова: <math>\left[1,\;0,\; |
Поскольку внутреннее состояние на седьмом шаге вернулось к исходному, то, начиная со следующего шага, будет идти повтор битов. То есть генерируемая последовательность такова: <math>\left[1,\;0,\;0,\;1,\;1,\;1,\;0,\;1\;...\right]</math> (порядок бит в последовательности соответствует порядку их генерации РСЛОС). Таким образом, период последовательности равен 7, то есть максимально возможному значению, что произошло в силу [[Примитивный многочлен (теория чисел)|примитивности]] заданного многочлена. |
||
=== Конфигурация Галуа === |
=== Конфигурация Галуа === |
||
Строка 123: | Строка 126: | ||
! Номер шага !! Состояние !! Генерируемый бит |
! Номер шага !! Состояние !! Генерируемый бит |
||
|- |
|- |
||
| 0 || <math>\left[0,\;0,\;1\right]</math> || |
| 0 || <math>\left[0,\;0,\;1\right]</math> || 1 |
||
|- |
|- |
||
| 1 || |
| 1 ||<math>\left[1,\;0,\;1\right]</math>||1 |
||
|- |
|- |
||
| 2 || |
| 2 ||<math>\left[1,\;1,\;1\right]</math>|| 1 |
||
|- |
|- |
||
| 3 || |
| 3 ||<math>\left[1,\;1,\;0\right]</math>||0 |
||
|- |
|- |
||
| 4 || |
| 4 ||<math>\left[0,\;1,\;1\right]</math>||1 |
||
|- |
|- |
||
| 5 || |
| 5 ||<math>\left[1,\;0,\;0\right]</math>||0 |
||
|- |
|- |
||
| 6 || <math>\left[0,\;1,\;0\right]</math> || 0 |
| 6 || <math>\left[0,\;1,\;0\right]</math> || 0 |
||
|- |
|- |
||
| 7 || <math>\left[0,\;0,\;1\right]</math> || |
| 7 || <math>\left[0,\;0,\;1\right]</math> || 1 |
||
|- |
|- |
||
|} |
|} |
||
Внутреннее состояние регистра на седьмом шаге вернулось к исходному, следовательно, его период также равен 7. |
Внутреннее состояние регистра на седьмом шаге вернулось к исходному, следовательно, его период также равен 7. |
||
== Пример реализации на логических элементах == |
|||
[[Файл:РСЛОС в конфигурации Галуа.png|мини|476x476пкс|Схема РСЛОС в конфигурации Галуа, реализованного на D-триггерах]] |
|||
На картинке справа можно увидеть пример реализации РСЛОС с конфигурацией Галуа вида (7, 10). |
|||
В верхней части схемы расположены выходные контакты, на которых можно увидеть последовательность генерируемых регистром битов. Ниже идут [[D-триггер|D-триггеры]], которые соединены друг с другом и образуют собственно регистр. Самый правый триггер (номер 1) является выходным и, согласно реализуемой конфигурации, влияет на передачу бита из 10-го и 7-го триггеров (берётся XOR передаваемого и выходного бита). Остальные биты передаются без изменений. |
|||
Начальная конфигурация регистра задаётся при помощи мультиплексоров перед каждым триггером. Чтобы сбросить конфигурацию регистра до начальной (или той, которая нужна, её можно выбрать на контактах перед [[Мультиплексор (электроника)|мультиплексорами]]), нужно всего лишь подать 1 на контакт Init, после чего подать сигнал синхронизации. После зануления синхронизации регистр примет нужную конфигурацию. Чтобы дальше он начал работать корректно, сигнал Init нужно вновь занулить. |
|||
==Матричное представление LFSR== |
|||
{{в планах|дата=2019-12-05}} |
|||
[[:en:Linear-feedback shift register#Matrix forms|раздел английской статьи]] |
|||
== Генерация примитивных многочленов == |
== Генерация примитивных многочленов == |
||
Вычисление [[Примитивный многочлен (теория чисел)|примитивного многочлена]] [[Многочлен над конечным полем|над полем]] <math>\mathrm{GF}(2)</math> — достаточно сложная математическая задача: для генерации примитивного многочлена степени <math>k</math> нужно знать множители числа <math>2^k-1</math>. Проще случайным образом выбрать многочлен и проверить его на примитивность{{sfn|Б. Шнайер|2013}}. Ещё один метод заключается в использовании готовых таблиц, в которых приведены номера отводных последовательностей, обеспечивающих максимальный период генератора. Ниже приведена таблица примитивных многочленов над полем <math>\mathrm{GF}(2)</math> для |
Вычисление [[Примитивный многочлен (теория чисел)|примитивного многочлена]] [[Многочлен над конечным полем|над полем]] <math>\mathrm{GF}(2)</math> — достаточно сложная математическая задача: для генерации примитивного многочлена степени <math>k</math> нужно знать множители числа <math>2^k-1</math>. Проще случайным образом выбрать многочлен и проверить его на примитивность{{sfn|Б. Шнайер|2013}}. Ещё один метод заключается в использовании готовых таблиц, в которых приведены номера отводных последовательностей, обеспечивающих максимальный период генератора. Ниже приведена таблица примитивных многочленов над полем <math>\mathrm{GF}(2)</math> для регистров сдвига максимального периода длиной до 19 бит{{sfn|Ю.Б. Кобзарев|2013}}. Стоит учесть, что у генератора любой заданной длины может быть более одного примитивного многочлена согласно их [[Примитивный многочлен (теория чисел)#свойства|свойствам]]. Полный список для регистров длиной от 4 до 32 бит можно найти [http://www.ece.cmu.edu/~koopman/lfsr/index.html здесь]. |
||
{|class="wikitable" style="text-align:center;" |
{|class="wikitable" style="text-align:center;" |
||
|- |
|- |
||
Строка 186: | Строка 201: | ||
|20 - 168 ||style="text-align:left;" colspan="3"| [http://www.xilinx.com/support/documentation/application_notes/xapp052.pdf] |
|20 - 168 ||style="text-align:left;" colspan="3"| [http://www.xilinx.com/support/documentation/application_notes/xapp052.pdf] |
||
|- |
|- |
||
|2 - 786, 1024, 2048, 4096 ||style="text-align:left;" colspan="3"| [http://www.eej.ulst.ac.uk/~ian/modules/EEE515/files/old_files/lfsr/lfsr_table.pdf] |
|2 - 786, 1024, 2048, 4096 ||style="text-align:left;" colspan="3"| [https://web.archive.org/web/20121021184350/http://www.eej.ulst.ac.uk/~ian/modules/EEE515/files/old_files/lfsr/lfsr_table.pdf] |
||
|} |
|} |
||
Строка 205: | Строка 220: | ||
=== Генераторы с несколькими регистрами сдвига === |
=== Генераторы с несколькими регистрами сдвига === |
||
[[Файл:LFSR multiple1.png| |
[[Файл:LFSR multiple1.png|мини|400px|Генератор с несколькими регистрами сдвига]] |
||
Генератор такого типа состоит из нескольких |
Генератор такого типа состоит из нескольких регистров сдвига с линейной обратной связью, которые генерируют биты <math>x_{1,i},\;x_{2,i},\;\dots,\;x_{M,i}</math> соответственно. Далее, генерируемые биты преобразуются некоторой [[Булева функция|булевой функцией]] <math>f(x_{1,i},\;x_{2,i},\;\dots,\;x_{M,i})</math>. Необходимо отметить, что у генераторов такого типа длины регистров <math>L_i</math>, <math>i=1,\;2,\;\dots,\;M</math>, [[Взаимно простые числа|взаимно просты]] между собой. |
||
Период данного генератора равен <math>T=(2^{L_1}-1)\cdot(2^{L_2}-1)\cdots(2^{L_M}-1)\lesssim2^L</math>, где <math>L=\sum\limits_{i=1}^M L_i</math> |
Период данного генератора равен <math>T=(2^{L_1}-1)\cdot(2^{L_2}-1)\cdots(2^{L_M}-1)\lesssim2^L</math>, где <math>L=\sum\limits_{i=1}^M L_i</math> — общее число ячеек. Следовательно, использование нескольких РСЛОС увеличивает период генерируемой последовательности по сравнению с одним регистром, что увеличивает [[Криптографическая стойкость|криптостойкость]] генератора. Также увеличивается линейная сложность или длина кратчайшего регистра, соответствующего данному генератору. Такой регистр находится с помощью [[Алгоритм Берлекэмпа — Мэсси|алгоритма Берлекэмпа — Мэсси]] по генерируемой последовательности. В лучшем случае его длина соизмерима с периодом генерируемой последовательности{{sfn|Габидулин, Кшевецкий, Колыбельников|2011}}. |
||
=== Генераторы с нелинейными преобразованиями === |
=== Генераторы с нелинейными преобразованиями === |
||
Строка 249: | Строка 264: | ||
=== Мажоритарные генераторы === |
=== Мажоритарные генераторы === |
||
[[Файл:LFSR Majority.png|справа|thumb|400px|Система регистров сдвига в алгоритме шифрования А5/1]] |
[[Файл:LFSR Majority.png|справа|thumb|400px|Система регистров сдвига в алгоритме шифрования А5/1]] |
||
''Мажоритарный'' (или ''пороговый'') генератор состоит из большого числа регистров сдвига, выводы которых поступают на устройство, заданное функцией мажорирования, например, [[мажоритарный элемент]]. Особенность данного генератора заключается в том, что каждый из регистров сдвига имеет свой тактовый бит <math>a_i</math>, <math>i=1,\;2,\;\dots,\;M</math>, которые и являются переменными мажоритарной функции. Например, для трёх регистров такая функция имеет вид <math>b(t)=(a_1\ |
''Мажоритарный'' (или ''пороговый'') генератор состоит из большого числа регистров сдвига, выводы которых поступают на устройство, заданное функцией мажорирования, например, [[мажоритарный элемент]]. Особенность данного генератора заключается в том, что каждый из регистров сдвига имеет свой тактовый бит <math>a_i</math>, <math>i=1,\;2,\;\dots,\;M</math>, которые и являются переменными мажоритарной функции. Например, для трёх регистров такая функция имеет вид <math>b(t)=(a_1\land a_2)\oplus(a_1\land a_3)\oplus(a_2\land a_3)</math>. Сдвигаются только те регистры, чьи тактовые биты равны значению <math>b(t)</math>, то есть сдвиг регистров происходит по большинству значений таких битов: 0 или 1. |
||
Таким образом, мы получаем генератор с переменным числом РСЛОС. Его линейная сложность <math>L(S) = \sum\limits_{i,j=1}^M L_iL_j</math>, где <math>L_i</math> — длина <math>i</math>-го регистра{{sfn|Фомичёв|2003}}. Недостатками такого генератора являются возможность [[Полный перебор|прямого перебора]] и корреляционного вскрытия (каждый выходной бит дает некоторую информацию о состоянии сдвигового регистра, а точнее - 0.189 бита). |
Таким образом, мы получаем генератор с переменным числом РСЛОС. Его линейная сложность <math>L(S) = \sum\limits_{i,j=1}^M L_iL_j</math>, где <math>L_i</math> — длина <math>i</math>-го регистра{{sfn|Фомичёв|2003}}. Недостатками такого генератора являются возможность [[Полный перебор|прямого перебора]] и корреляционного вскрытия (каждый выходной бит дает некоторую информацию о состоянии сдвигового регистра, а точнее - 0.189 бита). |
||
Строка 256: | Строка 271: | ||
== Применение == |
== Применение == |
||
Регистры сдвига с линейной обратной связью могут быть реализованы аппаратными средствами, что позволяет их использовать для быстрой [[Генератор псевдослучайных чисел|генерации псевдослучайной последовательности]], например при [[Метод расширения спектра методом прямой последовательности|расширении спектра методом прямой последовательности]] или для генерации [[шум]]ового сигнала{{sfn|А. Сизоненко|2012}}. |
|||
=== Использование в криптографии === |
=== Использование в криптографии === |
||
Строка 266: | Строка 281: | ||
=== Использование в качестве счётчиков === |
=== Использование в качестве счётчиков === |
||
Периодичность генерируемой последовательности РСЛОС позволяет использовать его в качестве делителя [[Тактовый сигнал|тактовой]] частоты или [[Счётчик (электроника)|счётчика]]<ref> |
Периодичность генерируемой последовательности РСЛОС позволяет использовать его в качестве делителя [[Тактовый сигнал|тактовой]] частоты или [[Счётчик (электроника)|счётчика]]<ref>{{Cite web |url=http://www.xilinx.com/support/documentation/application_notes/xapp052.pdf |title=Efficient Shift Registers, LFSR Counters and Long Pseudo-Random Sequence Generators |access-date=2014-11-18 |archive-date=2021-01-25 |archive-url=https://web.archive.org/web/20210125001412/https://www.xilinx.com/support/documentation/application_notes/xapp052.pdf |deadlink=no }}</ref>. Счётчик на основе такого генератора имеет упрощенную схему обратной связи, в отличие от обычных двоичных счётчиков или счётчиков [[Код Грея|кода Грея]], и, следовательно, может работать на высоких тактовых частотах. Однако необходимо убедиться, чтобы такой счётчик никогда не входил в нулевое состояние. |
||
=== Тестирование цифровых устройств === |
=== Тестирование цифровых устройств === |
||
Строка 334: | Строка 349: | ||
* {{source|Q27077671|ref=Beker, Piper|ref-year=1982}} <!-- Cipher systems: the protection of communications --> |
* {{source|Q27077671|ref=Beker, Piper|ref-year=1982}} <!-- Cipher systems: the protection of communications --> |
||
* {{книга |
* {{книга |
||
| |
|автор = {{nobr|Сизоненко А. Б.}} |
||
| |
|заглавие = Многоканальный цифровой источник шума на основе рекуррентного регистра сдвига |
||
| |
|ссылка = http://www.st-s.su/sites/www.st-s.su/files/pdf/articles/2012-03-sizonenko.pdf |
||
| |
|издательство = Журнал «Спецтехника и связь» №3 |
||
| |
|год = 2012 |
||
| |
|ref = А. Сизоненко |
||
}} {{Wayback|url=http://www.st-s.su/sites/www.st-s.su/files/pdf/articles/2012-03-sizonenko.pdf |date=20141129040015 }} |
|||
}} |
|||
* {{книга |
* {{книга |
||
| автор = {{nobr|Barklan E.}}, {{nobr|Biham E.}}, {{nobr|Keller N.}} |
| автор = {{nobr|Barklan E.}}, {{nobr|Biham E.}}, {{nobr|Keller N.}} |
||
Строка 350: | Строка 365: | ||
}} |
}} |
||
* {{книга |
* {{книга |
||
| |
|автор = {{nobr|Lu Y.}}, {{nobr|Meier W.}}, {{nobr|Vaudenay S.}} |
||
| |
|заглавие = Instant ciphertext-only Cryptanalysis of GSM encrypted communication |
||
| |
|ссылка = http://download.springer.com/ruwiki/static/pdf/36/chp%253A10.1007%252F11535218_7.pdf?auth66=1416519329_0f2c0e98fcffcf2f7c7e83baeed7f361&ext=.pdf |
||
| |
|издательство = Crypto №3621 |
||
| |
|год = 2005 |
||
| |
|ref = Y. Lu, W. Meier, S. Vaudenay |
||
}}{{Недоступная ссылка|date=Ноябрь 2018 |bot=InternetArchiveBot }} |
|||
}} |
|||
* {{книга |
* {{книга |
||
| автор = {{nobr|Eastlake D.}}, {{nobr|Schiller J.}}, {{nobr|Crocker S.}} |
| автор = {{nobr|Eastlake D.}}, {{nobr|Schiller J.}}, {{nobr|Crocker S.}} |
||
Строка 365: | Строка 380: | ||
}} |
}} |
||
* {{книга |
* {{книга |
||
| |
|автор = {{nobr|Harrington B.}} |
||
| |
|заглавие = Get your boost from BIST |
||
| |
|ссылка = http://fplreflib.findlay.co.uk/articles/14676%5CAnalog%20Tut.pdf |
||
| |
|год = 2008 |
||
| |
|ref = B. Harrington |
||
}}{{Недоступная ссылка|date=Ноябрь 2018 |bot=InternetArchiveBot }} |
|||
}} |
|||
* {{книга |
* {{книга |
||
| автор = {{nobr|Дяченко О. Н.}} |
| автор = {{nobr|Дяченко О. Н.}} |
||
Строка 385: | Строка 400: | ||
== Ссылки == |
== Ссылки == |
||
* [http://www.newwaveinstruments.com/resources/articles/m_sequence_linear_feedback_shift_register_lfsr.htm LFSR reference]{{ref-en}}. Теория и реализация LFSR, последовательности максимальной длины и полные таблицы отводных последовательностей для длин от 7 до 16 миллионов (от 3 до 24 битов), а также частичные таблицы для длин до 4 миллиардов (от 25 до 32 битов) |
* [http://www.newwaveinstruments.com/resources/articles/m_sequence_linear_feedback_shift_register_lfsr.htm LFSR reference]{{ref-en}}. Теория и реализация LFSR, последовательности максимальной длины и полные таблицы отводных последовательностей для длин от 7 до 16 миллионов (от 3 до 24 битов), а также частичные таблицы для длин до 4 миллиардов (от 25 до 32 битов){{Недоступная ссылка|archiveurl=https://web.archive.org/web/20181001062252/http://www.newwaveinstruments.com/resources/articles/m_sequence_linear_feedback_shift_register_lfsr.htm|archivedate=2018-10-01}} |
||
* [http://www.itu.int/rec/T-REC-O.151-199210-I/en International telecommunications union recommendation O.151]{{ref-en}}. Август 1992 |
* [http://www.itu.int/rec/T-REC-O.151-199210-I/en International telecommunications union recommendation O.151]{{ref-en}}. Август 1992 |
||
* [http://www.maxim-ic.com/appnotes.cfm?appnote_number=1743&CMP=WP-9 Pseudo-random number generation routine]{{ref-en}} |
* [http://www.maxim-ic.com/appnotes.cfm?appnote_number=1743&CMP=WP-9 Pseudo-random number generation routine] {{Wayback|url=http://www.maxim-ic.com/appnotes.cfm?appnote_number=1743&CMP=WP-9 |date=20081225073609 }}{{ref-en}} |
||
* [http://www.quadibloc.com/crypto/co040801.htm]{{ref-en}} |
* [http://www.quadibloc.com/crypto/co040801.htm]{{ref-en}} |
||
* [http://www.yikes.com/~ptolemy/lfsr_web/index.htm Simple explanation of LFSRs for engineers]{{ref-en}} |
* [https://web.archive.org/web/20060315203220/http://www.yikes.com/~ptolemy/lfsr_web/index.htm Simple explanation of LFSRs for engineers]{{ref-en}} |
||
* [http://www.ece.cmu.edu/~koopman/lfsr/index.html Feedback terms]{{ref-en}} |
* [http://www.ece.cmu.edu/~koopman/lfsr/index.html Feedback terms]{{ref-en}} |
||
* [http://hg8lhs.ham.hu/linuxbsd/crypto4o.tar.gz An implementation of a cryptographically secure shrinking pseudorandom number generator]{{ref-en}} |
* [https://web.archive.org/web/20160303181210/http://hg8lhs.ham.hu/linuxbsd/crypto4o.tar.gz An implementation of a cryptographically secure shrinking pseudorandom number generator]{{ref-en}} |
||
* [http://window.edu.ru/window_catalog/files/r58904/10.pdf Методы и задачи криптографической защиты информации] |
* [http://window.edu.ru/window_catalog/files/r58904/10.pdf Методы и задачи криптографической защиты информации]{{Недоступная ссылка|date=Ноябрь 2018 |bot=InternetArchiveBot }} |
||
[[Категория:Генераторы псевдослучайных чисел]] |
[[Категория:Генераторы псевдослучайных чисел]] |
||
[[Категория:Криптография]] |
[[Категория:Криптография]] |
||
[[Категория:Обратная связь]] |
Текущая версия от 03:56, 10 июля 2023
Регистр сдвига с линейной обратной связью (РСЛОС, англ. linear feedback shift register, LFSR) — сдвиговый[англ.] регистр битовых слов, у которого значение входного (вдвигаемого) бита равно линейной булевой функции от значений остальных битов регистра до сдвига. Может быть организован как программными, так и аппаратными средствами. Применяется для генерации псевдослучайных последовательностей битов, что находит применение, в частности, в криптографии[1]. По похожему принципу работают регистр сдвига с обратной связью по переносу и регистр сдвига с обобщённой обратной связью.
Описание
[править | править код]В регистре сдвига с линейной обратной связью (РСЛОС) выделяют две части (модуля):
- собственно регистр сдвига;
- схему (или подпрограмму) обратной связи, вычисляющую значение вдвигаемого бита.
Регистр состоит из функциональных ячеек памяти (битов одного или нескольких машинных слов), в каждой из которых хранится текущее состояние (значение) одного бита. Количество ячеек , называют длиной регистра. Биты (ячейки) обычно нумеруются числами , содержимое -й ячейки обозначается через . Значение нового бита определяется до сдвига битов в регистре и только после сдвига записывается в ячейку , а из ячейки извлекается очередной сгенерированный бит.
Функцией обратной связи для РСЛОС является линейная булева функция от значений всех или некоторых битов регистра. Функция выполняет умножение битов регистра на коэффициенты , где . Количество коэффициентов совпадает с количеством битов регистра . Коэффициенты принимают значения , причём последний коэффициент равен , так как РСЛОС задаётся характеристическим многочленом степени . Сложение по модулю 2 (операция «XOR», обозначаемая в формулах символом «») или её логическая инверсия «XNOR» являются линейными булевыми функциями и наиболее часто применяются в таких регистрах[2]. При этом биты, являющиеся переменными функции обратной связи, называются отводами, а сам регистр называется конфигурацией Фибоначчи[3].
Управление регистром в аппаратных реализациях производится подачей сдвигающего импульса (иначе называемого тактовым или синхроимпульсом) на все ячейки. Управление регистром в программных реализациях производится выполнением цикла. На каждой итерации цикла вычисляется функция обратной связи и выполняется битовый сдвиг в слове.
Принцип работы
[править | править код]В течение каждого такта сдвигового регистра с линейной обратной связью выполняет следующие операции:
- читается бит, расположенный в ячейке ; этот бит является очередным битом выходной последовательности;
- функции обратной связи вычисляет новое значение для ячейки , используя текущие значения ячеек;
- содержимое каждой -й ячейки перемещается в следующую ячейку , где ;
- в ячейку записывается бит, ранее вычисленный функцией обратной связи.
Если функция обратной связи выполняет логическую операцию «XOR» (исключающее ИЛИ), значения бит (ячеек) могут быть вычислены по следующим формулам[4]:
Свойства
[править | править код]Периодичность
[править | править код]Периодом регистра сдвига называется минимальная длина получаемой последовательности до начала её повторения. РСЛОС длины имеет начальных состояний, задающих значения бит в ячейках. Из них состояний - ненулевые, так что генерируемая последовательность имеет период . Период генерируемой последовательности максимален и равен , если многочлен обратной связи (или характеристический многочлен) над полем является примитивным. Для этого необходимо (но не достаточно) выполнение следующих 2-х условий:
- чётное число отводов;
- номера отводов, взятые все вместе, а не попарно, взаимно просты.
Число всех возможных примитивных многочленов равно , где - функция Эйлера[5]. Регистр, заданный таким многочленом, называется регистром сдвига максимального периода (или генератором псевдослучайной последовательности), а генерируемые последовательности - последовательностями максимального периода (или М-последовательностями)[4][6].
Линейная сложность
[править | править код]Линейной сложностью бесконечной двоичной последовательности называется число , которое определяется следующим образом:
- если — нулевая последовательность, то ;
- если не существует РСЛОС, который генерирует , то ;
- в противном случае равна длине самого короткого РСЛОС, который генерирует .
Линейной сложностью конечной двоичной последовательности называется число , равное длине самого короткого РСЛОС, который генерирует эту последовательность.
Линейная сложность регистра сдвига с линейной обратной связью показывает, насколько близка генерируемая последовательность к случайной. Эффективным алгоритмом определения линейной сложности конечной бинарной последовательности является алгоритм Берлекэмпа-Мэсси.
Корреляционная независимость
[править | править код]Пытаясь получить высокую линейную сложность генерируемой последовательности, криптографы нелинейно объединяют выходы нескольких регистров сдвига. При этом одна или несколько выходных последовательностей (или даже выходы отдельных РСЛОС) могут быть связаны общим потоком и вскрыты криптоаналитиком. Взлом на основе такой уязвимости называют корреляционным вскрытием. Основная идея такого взлома заключается в обнаружении некоторой корреляции между выводом генератора и выводами его составных частей. Затем, наблюдая выходную последовательность, можно получить информацию об этих промежуточных выводах, и, таким образом, взломать генератор. Томас Сигенталер показал, что можно точно определить корреляционную независимость, и что существует компромисс между корреляционной независимостью и линейной сложностью[7].
Программная реализация
[править | править код]Программные реализации РСЛОС достаточно медленны и работают быстрее, если они написаны на ассемблере. Одно из решений - параллельное использование 16-ти РСЛОС (или 32-х, в зависимости от длины слова в архитектуре компьютера). В такой схеме используется массив слов, размер которого равен длине регистра сдвига, а каждый бит слова относится к своему РСЛОС. Так как используются одинаковые номера отводных последовательностей, то это может дать заметный выигрыш в производительности генератора[3].
Конфигурация Фибоначчи
[править | править код]Рассмотрим 32-битовый сдвиговый регистр. Для него имеется отводная последовательность . Это означает, что для генерации нового бита необходимо с помощью операции XOR просуммировать 31-й, 30-й, 29-й, 27-й, 25-й и 0-й биты. Полученный РСЛОС имеет максимальный период . Код для такого регистра на языке Си следующий:
int LFSR_Fibonacci (void)
{
static unsigned long S = 0x00000001;
S = ((((S >> 31) ^ (S >> 30) ^ (S >> 29) ^ (S >> 27) ^ (S >> 25) ^ S ) & 0x00000001 ) << 31 ) | (S >> 1);
return S & 0x00000001;
}
Конфигурация Галуа
[править | править код]Как и в конфигурации Фибоначчи, схема обратной связи представляет собой набор операций XOR отводных битов с выходом генератора, но порядок битов в регистре обратный: входным является -й бит, а выходным — -й. Результат сложения записывается в следующую ячейку, а новый выходной бит записывается в -ю. Таким образом, если генерируемый бит равен нулю, то все биты в ячейках сдвигаются вправо без изменений, если генерируемый бит равен единице, то биты отвода меняют своё значение на противоположное, и все биты сдвигаются вправо. И конфигурация Фибоначчи, и конфигурация Галуа одной и той же длины генерируют одинаковые, но смещённые по времени одна от другой последовательности (при этом внутренние состояния регистров могут отличаться)[8].
Данный генератор не обладает большей криптостойкостью, но он даёт выигрыш в производительности: все операции XOR посредством распараллеливания можно выполнить за одно действие, а не последовательно одна за другой, как в конфигурации Фибоначчи. Данная схема также даст выигрыш при аппаратной реализации.
Код для регистра сдвига длины 32 бит на языке Си следующий:
int LFSR_Galois (void)
{
// for polynomial 0x80000057, reversed 0xea000001
static unsigned long S = 0x00000001;
if (S & 0x00000001) {
S = ((S ^ 0x80000057) >> 1) | 0x80000000;
return 1;}
else {
S >>= 1;
return 0;}
}
Стоит отметить, что цикл из фиксированного числа вызовов функции LFSR_Galois
в конфигурации Галуа выполняется примерно в 2 раза быстрее, чем функция LFSR_Fibonacci
в конфигурации Фибоначчи (компилятор MS VS 2010 на Intel Core i5).
Пример генерируемой последовательности
[править | править код]Конфигурация Фибоначчи
[править | править код]Пусть РСЛОС задаётся характеристическим многочленом . Это значит, что битами отвода будут 2-й и 0-й, а единица в формуле многочлена означает, что 0-й бит - входной. Функция обратной связи имеет вид . Допустим, изначальным состоянием регистра сдвига была последовательность . Дальнейшие состояния регистра приведены в таблице ниже:
Номер шага | Состояние | Генерируемый бит |
---|---|---|
0 | 1 | |
1 | 0 | |
2 | 0 | |
3 | 1 | |
4 | 1 | |
5 | 1 | |
6 | 0 | |
7 | 1 |
Поскольку внутреннее состояние на седьмом шаге вернулось к исходному, то, начиная со следующего шага, будет идти повтор битов. То есть генерируемая последовательность такова: (порядок бит в последовательности соответствует порядку их генерации РСЛОС). Таким образом, период последовательности равен 7, то есть максимально возможному значению, что произошло в силу примитивности заданного многочлена.
Конфигурация Галуа
[править | править код]Возьмём тот же характеристический многочлен, то есть , . С выходным битом складывается только 1-й бит. Начальное состояние то же самое. Дальнейшие состояния регистра:
Номер шага | Состояние | Генерируемый бит |
---|---|---|
0 | 1 | |
1 | 1 | |
2 | 1 | |
3 | 0 | |
4 | 1 | |
5 | 0 | |
6 | 0 | |
7 | 1 |
Внутреннее состояние регистра на седьмом шаге вернулось к исходному, следовательно, его период также равен 7.
Пример реализации на логических элементах
[править | править код]На картинке справа можно увидеть пример реализации РСЛОС с конфигурацией Галуа вида (7, 10).
В верхней части схемы расположены выходные контакты, на которых можно увидеть последовательность генерируемых регистром битов. Ниже идут D-триггеры, которые соединены друг с другом и образуют собственно регистр. Самый правый триггер (номер 1) является выходным и, согласно реализуемой конфигурации, влияет на передачу бита из 10-го и 7-го триггеров (берётся XOR передаваемого и выходного бита). Остальные биты передаются без изменений.
Начальная конфигурация регистра задаётся при помощи мультиплексоров перед каждым триггером. Чтобы сбросить конфигурацию регистра до начальной (или той, которая нужна, её можно выбрать на контактах перед мультиплексорами), нужно всего лишь подать 1 на контакт Init, после чего подать сигнал синхронизации. После зануления синхронизации регистр примет нужную конфигурацию. Чтобы дальше он начал работать корректно, сигнал Init нужно вновь занулить.
Матричное представление LFSR
[править | править код]Этот раздел статьи ещё не написан. |
Генерация примитивных многочленов
[править | править код]Вычисление примитивного многочлена над полем — достаточно сложная математическая задача: для генерации примитивного многочлена степени нужно знать множители числа . Проще случайным образом выбрать многочлен и проверить его на примитивность[3]. Ещё один метод заключается в использовании готовых таблиц, в которых приведены номера отводных последовательностей, обеспечивающих максимальный период генератора. Ниже приведена таблица примитивных многочленов над полем для регистров сдвига максимального периода длиной до 19 бит[5]. Стоит учесть, что у генератора любой заданной длины может быть более одного примитивного многочлена согласно их свойствам. Полный список для регистров длиной от 4 до 32 бит можно найти здесь.
Биты, | Примитивный многочлен | Период, | Число примитивных многочленов |
---|---|---|---|
2 | 3 | 1 | |
3 | 7 | 2 | |
4 | 15 | 2 | |
5 | 31 | 6 | |
6 | 63 | 6 | |
7 | 127 | 18 | |
8 | 255 | 16 | |
9 | 511 | 48 | |
10 | 1023 | 60 | |
11 | 2047 | 176 | |
12 | 4095 | 144 | |
13 | 8191 | 630 | |
14 | 16383 | 756 | |
15 | 32767 | 1800 | |
16 | 65535 | 2048 | |
17 | 131071 | 7710 | |
18 | 262143 | 7776 | |
19 | 524287 | 27594 | |
20 - 168 | [1] | ||
2 - 786, 1024, 2048, 4096 | [2] |
Преимущества и недостатки
[править | править код]Преимущества
[править | править код]- высокое быстродействие криптографических алгоритмов, создаваемых на основе РСЛОС (например потоковых шифров);
- применение только простейших битовых операций сложения и умножения, аппаратно реализованных практически во всех вычислительных устройствах;
- хорошие криптографические свойства (РСЛОС могут генерировать последовательности большого периода с хорошими статистическими свойствами);
- благодаря своей структуре, РСЛОС легко анализируются с использованием алгебраических методов.
Недостатки
[править | править код]- Одна из главных проблем РСЛОС в том, что их программная реализация крайне неэффективна: приходится избегать разреженных многочленов обратной связи, так как они приводят к облегчению взлома корреляционным вскрытием, а плотные многочлены очень медленно просчитываются. Поэтому программная реализация такого генератора работает не быстрее, чем реализация DES.
- Линейность последовательности на выходе регистра позволяет однозначно определить многочлен обратной связи по последовательным битам с помощью алгоритма Берлекэмпа — Мэсси или алгоритма Евклида[3][4].
- Относительная лёгкость анализа алгебраическими методами не только облегчает разработку, но и увеличивает шансы на взлом генератора на базе РСЛОС.
Способы улучшения криптостойкости генерируемых последовательностей
[править | править код]Генераторы с несколькими регистрами сдвига
[править | править код]Генератор такого типа состоит из нескольких регистров сдвига с линейной обратной связью, которые генерируют биты соответственно. Далее, генерируемые биты преобразуются некоторой булевой функцией . Необходимо отметить, что у генераторов такого типа длины регистров , , взаимно просты между собой.
Период данного генератора равен , где — общее число ячеек. Следовательно, использование нескольких РСЛОС увеличивает период генерируемой последовательности по сравнению с одним регистром, что увеличивает криптостойкость генератора. Также увеличивается линейная сложность или длина кратчайшего регистра, соответствующего данному генератору. Такой регистр находится с помощью алгоритма Берлекэмпа — Мэсси по генерируемой последовательности. В лучшем случае его длина соизмерима с периодом генерируемой последовательности[4].
Генераторы с нелинейными преобразованиями
[править | править код]Структурная схема такого генератора ничем не отличается от схемы предыдущего генератора. Главное отличие заключается в том, что устройство преобразования задано нелинейной булевой функцией . В качестве такой функции берётся, например, полином Жегалкина (согласно теореме Жегалкина, всякая булева функция единственным образом может быть представлена полиномом Жегалкина).
Нелинейный генератор может быть также реализован на регистре сдвига с нелинейной обратной связью[англ.]. Он может дать вариантов последовательностей максимального периода, что больше, чем у РСЛОС[5].
Криптостойкость данного генератора повышается за счет нелинейности используемой функции. Определение состояния регистров по генерируемой последовательности битов является сложной математической задачей, потому что не известен алгоритм, восстанавливающий исходные состояния.
Данный метод используется, например, в генераторе Геффа и обобщённом генераторе Геффа, однако такие генераторы могут быть взломаны корреляционным вскрытием[7].
Генераторы с различным тактированием регистров сдвига
[править | править код]Генератор «стоп-пошёл»
[править | править код]Генератор «стоп-пошёл» (англ. Stop-and-Go, Both-Piper) использует вывод РСЛОС-1 для управления тактовой частотой РСЛОС-2, так что РСЛОС-2 меняет своё состояние в некоторый момент времени , только если выход РСЛОС-1 в момент времени был равен единице. Данная схема не устояла перед корреляционным вскрытием[3].
В целях увеличения криптостойкости был предложен чередующийся генератор «стоп-пошёл». В нём используются три регистра сдвига различной длины. Здесь РСЛОС-1 управляет тактовой частотой 2-го и 3-го регистров, то есть РСЛОС-2 меняет своё состояние, когда выход РСЛОС-1 равен единице, а РСЛОС-3 - когда выход РСЛОС-1 равен нулю. Выходом генератора является операция сложения по модулю два выходов РСЛОС-2 и РСЛОС-3. У данного генератора большой период и большая линейная сложность. Существует способ корреляционного вскрытия РСЛОС-1, но это не сильно ослабляет криптографические свойства генератора.
Усложнённая схема тактирования использована в двустороннем генераторе «стоп-пошёл», в котором используются 2 регистра сдвига одинаковой длины. Если выход РСЛОС-1 в некоторый момент времени равен нулю, а в момент времени - единице, то РСЛОС-2 не тактируется в момент времени . Если выход РСЛОС-2 в момент времени равен нулю, а в момент времени - единице, и если этот регистр тактируется в момент времени , то в этот же момент РСЛОС-1 не тактируется. Линейная сложность данной схемы примерно равна периоду генерируемой последовательности.
Самопрореживающий генератор
[править | править код]Самопрореживающие (англ. self-decimated) генераторы управляют собственной частотой. Существует два типа таких генераторов. Первый был предложен Рэйнером Рюппелом. Он состоит из регистра сдвига и схемы с линейной обратной связью, которая тактирует этот регистр в зависимости от того, какими получаются выходные значения регистра сдвига. Если выход РСЛОС равен единице, то регистр тактируется с одной частотой, а если выход равен нулю - то с другой. Второй тип был предложен Биллом Чамберсом и Дитером Коллманом. В схему обратной связи поступает не сам выходной сигнал, а результат операции XOR определённых битов РСЛОС.
Существуют также прореживаемый (англ. shrinking) и самопрореживаемый (англ. self-shrinking) генераторы. Они достаточно новые, и не все их свойства хорошо изучены. Первый использует два РСЛОС. Если на генератор подать тактовый импульс, и выходом РСЛОС-1 является единица, то выходом генератора будет выход РСЛОС-2. В противном случае, при подаче тактового импульса оба бита сбрасываются, тактирование начинается заново. Во втором генераторе вместо проверки выходов двух регистров на 0 или 1 проверяются 2 бита одного регистра.
Прореживаемый генератор может быть взломан, если многочлены обратной связи прорежены. Кроме того, его скорость генерации не постоянна. Для самопрореживаемого генератора нужно примерно в 2 раза меньше памяти, чем первому, но при этом он работает в 2 раза медленнее[7].
Многоскоростной генератор с внутренним произведением
[править | править код]Данный генератор использует два регистра сдвига РСЛОС-1 и РСЛОС-2. Тактовая частота РСЛОС-2 в раз больше, чем у РСЛОС-1. Определённые биты этих регистров перемножаются друг с другом операцией AND. Результаты умножений суммируются операцией XOR, и получается выходная последовательность. Этот генератор имеет высокую линейную сложность и обладает хорошими статистическими свойствами. Однако его состояние может быть определено по выходной последовательности длиной , где и — длины РСЛОС-1 и РСЛОС-2 соответственно, а — отношение их тактовых частот.
Каскад Голлманна
[править | править код]Данная схема представляет собой улучшенную версию генератора «стоп-пошёл». Он состоит из последовательности РСЛОС, тактирование каждого из которых управляется предыдущим РСЛОС. Если выходом РСЛОС-1 в момент времени является 1,то тактируется РСЛОС-2. Если выходом РСЛОС-2 в момент времени является 1, то тактируется РСЛОС-3, и так далее. Выход последнего РСЛОС является выходом генератора. Если длина всех РСЛОС одинакова и равна , то период системы из РСЛОС равен , а линейная сложность - [7].
Эта идея проста и может быть использована для генерации последовательностей с огромными периодами, большими линейными сложностями и хорошими статистическими свойствами. Но, к сожалению, они чувствительны к вскрытию, называемому запиранием (англ. lock-in), когда криптоаналитик, восстанавливая сначала входную последовательность последнего регистра в каскаде, взламывает весь каскад, регистр за регистром. С ростом числа регистров генерируемая последовательность приближается к случайной, так что лучше использовать больше РСЛОС небольшой длины, чем меньше длинных РСЛОС.
Мажоритарные генераторы
[править | править код]Мажоритарный (или пороговый) генератор состоит из большого числа регистров сдвига, выводы которых поступают на устройство, заданное функцией мажорирования, например, мажоритарный элемент. Особенность данного генератора заключается в том, что каждый из регистров сдвига имеет свой тактовый бит , , которые и являются переменными мажоритарной функции. Например, для трёх регистров такая функция имеет вид . Сдвигаются только те регистры, чьи тактовые биты равны значению , то есть сдвиг регистров происходит по большинству значений таких битов: 0 или 1.
Таким образом, мы получаем генератор с переменным числом РСЛОС. Его линейная сложность , где — длина -го регистра[7]. Недостатками такого генератора являются возможность прямого перебора и корреляционного вскрытия (каждый выходной бит дает некоторую информацию о состоянии сдвигового регистра, а точнее - 0.189 бита).
Подобные генераторы используются в алгоритмах шифрования A5 (A5/1, A5/2).
Применение
[править | править код]Регистры сдвига с линейной обратной связью могут быть реализованы аппаратными средствами, что позволяет их использовать для быстрой генерации псевдослучайной последовательности, например при расширении спектра методом прямой последовательности или для генерации шумового сигнала[9].
Использование в криптографии
[править | править код]Регистры сдвига с линейной обратной связью издавна применяются в качестве генераторов псевдослучайной последовательности для потоковых шифров (особенно в военной криптографии). Однако РСЛОС представляет собой линейную схему и в некоторых случаях может быть легко взломан. Например, криптоаналитик может перехватить часть зашифрованного текста и по нему с помощью вышеупомянутого алгоритма Берлекэмпа — Мэсси восстановить РСЛОС минимального размера, который имитирует оригинальный РСЛОС. Затем, перехваченный текст может быть подан на полученный регистр и расшифрован. Методы увеличения криптостойкости потоковых шифров, основанных на РСЛОС, приведены выше.
На регистре сдвига с линейно обратной связью основаны такие потоковые шифры, как A5/1 и A5/2, используемые в стандарте GSM, и шифр E0[англ.], используемый в Bluetooth. Шифр A5/2 был взломан, а шифры A5/1 и E0 имеют серьёзные недостатки[10][11].
Регистр сдвига с линейной обратной связью тесно связан с линейным конгруэнтным генератором[12].
Использование в качестве счётчиков
[править | править код]Периодичность генерируемой последовательности РСЛОС позволяет использовать его в качестве делителя тактовой частоты или счётчика[13]. Счётчик на основе такого генератора имеет упрощенную схему обратной связи, в отличие от обычных двоичных счётчиков или счётчиков кода Грея, и, следовательно, может работать на высоких тактовых частотах. Однако необходимо убедиться, чтобы такой счётчик никогда не входил в нулевое состояние.
Тестирование цифровых устройств
[править | править код]В отличие от обычного счётчика, РСЛОС переходит из одного состояния в другое не в порядке двоичного счёта, что позволяет его использовать для генерации тестового сигнала при обнаружении ошибок в логических схемах[6].
Также регистры сдвига с линейной обратной связью применяются во встроенных системах самоконтроля[англ.] (англ. built-in self-test, BIST) для сигнатурного анализа (выявления ошибочных битов) в логических схемах. Подобные системы применяют ввиду ограниченности числа выводов микросхем (не все промежуточные значения битов можно подать на выход). Система BIST представляет собой 3 блока: генератор тестовой последовательности и сигнатурный анализатор, которые и строятся на основе РСЛОС, и контроллер тестов. Регистр сдвига в анализаторе «сжимает» результат схемы на тестовую последовательность в сигнатуру и продолжает работать до тех пор, пока всего его биты, кроме 0-го, не станут равными нулю, то есть до состояния . Наряду с РСЛОС работает двоичный счётчик, подсчитывающий количество тактов с момента окончания сжатия тестовой реакции. Если изначальное состояние регистра соответствовало эталонной сигнатуре (сигнатуре безошибочной схемы), то показание счётчика соответствует номеру ошибочного бита[14][15].
Так как РСЛОС производит сжатие с потерей данных, то есть вероятность, что в схеме с ошибками получившаяся сигнатура будет равна эталонной. Этого можно избежать, используя сигнатурный анализатор с несколькими входами.
Скремблирование
[править | править код]Регистры сдвига с линейной обратной связью применяются при скремблировании с целью получения цифрового потока со свойствами случайной последовательности. Псевдослучайная последовательность РСЛОС максимальной длины складывается по модулю 2 с потоком передаваемых битов, причём генерация последовательности происходит с той же скоростью, что и передача данных. Некоторые системы и технологии, использующие скремблирование:
- ATSC[16];
- DAB;
- DVB-T;
- NICAM;
- CDMA;
- 100BASE-T2[англ.] Fast Ethernet;
- 1000BASE-T Gigabit Ethernet;
- PCI Express 3.0;
- SATA;
- Serial Attached SCSI;
- USB 3.0;
- IEEE 802.11a;
- Bluetooth LE.
См. также
[править | править код]Примечания
[править | править код]- ↑ Б. Скляр, 2007.
- ↑ Linear Feedback Shift Registers in Virtex Devices . Дата обращения: 19 ноября 2014. Архивировано 2 ноября 2013 года.
- ↑ 1 2 3 4 5 Б. Шнайер, 2013.
- ↑ 1 2 3 4 Габидулин, Кшевецкий, Колыбельников, 2011.
- ↑ 1 2 3 Ю.Б. Кобзарев, 2013.
- ↑ 1 2 Ларин, 2008.
- ↑ 1 2 3 4 5 Фомичёв, 2003.
- ↑ Beker, Piper, 1982.
- ↑ А. Сизоненко, 2012.
- ↑ E. Barklan, E. Biham, N. Keller, 2008.
- ↑ Y. Lu, W. Meier, S. Vaudenay, 2005.
- ↑ D. Eastlake, J. Schiller, S. Crocker, 2005.
- ↑ Efficient Shift Registers, LFSR Counters and Long Pseudo-Random Sequence Generators . Дата обращения: 18 ноября 2014. Архивировано 25 января 2021 года.
- ↑ B. Harrington, 2008.
- ↑ О. Дяченко.
- ↑ В. Варгаузин, 1999.
Литература
[править | править код]- Шнайер Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си. — Триумф, 2013. — 816 с. — ISBN 978-5-89392-527-2.
- Габидулин Э. М., Кшевецкий А. С., Колыбельников А. И. Защита информации: учебное пособие — М.: МФТИ, 2011. — 225 с. — ISBN 978-5-7417-0377-9
- Ларин А. Л. Основы цифровой электроники — М.: МФТИ, 2008. — 314 с. — ISBN 978-5-7417-0228-4
- Скляр Б. Цифровая связь. Теоретические основы и практическое применение. — Вильямс, 2007. — 1104 с. — ISBN 978-5-8459-0497-3.
- Кобзарев Ю. Б. Современная радиолокация. — Рипол Классик, 2013. — 708 с. — ISBN 978-5-4584-7357-6.
- Фомичёв В. М. Дискретная математика и криптология: Курс лекций / под ред. Н. Д. Подуфалов — М.: Диалог-МИФИ, 2013. — 397 с. — ISBN 978-5-86404-185-7
- Beker H., Piper F. Cipher systems: the protection of communications (англ.) — London: Northwood Books, 1982. — 427 p. — ISBN 978-0-7198-2611-5
- Сизоненко А. Б. Многоканальный цифровой источник шума на основе рекуррентного регистра сдвига. — Журнал «Спецтехника и связь» №3, 2012. Архивная копия от 29 ноября 2014 на Wayback Machine
- Barklan E., Biham E., Keller N. Instant ciphertext-only cryptanalysis of GSM encrypted communication. — Journal of cryptology №21-3, 2008.
- Lu Y., Meier W., Vaudenay S. Instant ciphertext-only Cryptanalysis of GSM encrypted communication. — Crypto №3621, 2005. (недоступная ссылка)
- Eastlake D., Schiller J., Crocker S. Randomness requirements for security. — 2005.
- Harrington B. Get your boost from BIST. — 2008. (недоступная ссылка)
- Дяченко О. Н. Компактный анализ над полем GF(3).
- Варгаузин В. Принципы цифрового телевидения стандарта ATSC. — Журнал Теле-Спутник №9(47), 1999.
Ссылки
[править | править код]- LFSR reference (англ.). Теория и реализация LFSR, последовательности максимальной длины и полные таблицы отводных последовательностей для длин от 7 до 16 миллионов (от 3 до 24 битов), а также частичные таблицы для длин до 4 миллиардов (от 25 до 32 битов) (недоступная ссылка) Архивировано 1 октября 2018.
- International telecommunications union recommendation O.151 (англ.). Август 1992
- Pseudo-random number generation routine Архивная копия от 25 декабря 2008 на Wayback Machine (англ.)
- [3] (англ.)
- Simple explanation of LFSRs for engineers (англ.)
- Feedback terms (англ.)
- An implementation of a cryptographically secure shrinking pseudorandom number generator (англ.)
- Методы и задачи криптографической защиты информации (недоступная ссылка)