Как стать автором
Обновить

Недвоичные регистры сдвига с линейной обратной связью модулированные пилообразным кодом

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров1.9K

Введение

Ранее, Full-stack шифрование на обобщенных регистрах с линейной обратной связью / Хабр (habr.com), рассматривались недвоичные регистры сдвига с линейной обратной связью (LFSR), обеспечивающие периоды T_q = {p}^{m-q} - 1, где q=0,1,....

Для увеличения периода комбинировались два регистра с периодами T_0 и T_1, что в итоге давало период

T = {{T_0 T_1} \over {p-1}}.

Такие генераторы назывались генераторной парой. Видно, что присутствует уменьшение периода в p-1 раз. Хотелось бы избавиться от этого недостатка (это актуально для недвоичных регистров, т.е. при p>2). По этой причине было введено управление (модуляция) пилообразным кодом, а также был сделан отказ от генератора с малым периодом T_1, то есть пара выбрана симметричной по свободному (free) периоду.

Описание модулированного LFSR генератора

Под пилообразным кодом понимается выход генератора типа

i \leftarrow (i + 1) \mod q.

Здесь переменная i есть целое число, увеличивающееся на единицу и не превосходящее q. Операция по модулю q обеспечивает цикличность процесса (модулирующий период). Начальное состояние задается числом i_0. Итого, пилообразный генератор характеризуется парой параметров (i_0, q<p). Выход генератора пилообразного кода подается на вход генераторной LFSR пары, которая имеет разные коэффициенты.

Численно показано, что для некоторого начального состояния пары, которая имеет свободный период T_0, можно подобрать начальное состояние генератора пилообразного кода и его период, меньший p, так, что периоды T управляемых генераторов пары будут в пределах

T_0 < T < p {T}_{0}.

Причем данные периоды будут разными для разных LFSR генераторов пары, так, что общий период будет равен произведению периодов без всякой редукции, то есть возможно достичь единичного наибольшего общего делителя (НОД) периодов.

Таким образом видим, что за счет модуляции LFSR генераторной пары можно преодолеть коэффициент редукции p-1, и, более того, получить небольшой выигрыш (коэффициент усиления, gain). При этом заранее неизвестны итоговые периоды T, что дополнительно повышает случайность генерируемого процесса.

Работа LFSR генератора со скалярным входом a и вектором-генератором \vec g может быть выражена в виде рабочего цикла

\vec s = \left( v \vec g + D[\vec s, a, 1] \right) \mod p,v = {s}_{m-1}.

Здесь оператор D[\vec v, a, 1] означает преобразование одного вектора в другой вектор типа задержки со вставкой числа: (v_0, v_1, v_2, ...) \rightarrow (a, v_0, v_1, v_2, ...). Вектор \vec s является вектором состояния генератора, состоящий из m элементов, в которых хранятся числа по модулю p. Вместо скаляра a подставляем выход подобранного генератора пилообразного кода. В итоге, генератор пилообразного кода и LFSR генератор образуют некоторый общий генератор, который работает по единым тактам (тактовым импульсам). Общий период генератора определяется по равенству состояний LFSR генератора: начального и текущего. При достижении периода некоторого LFSR генератора пары, генератор пилообразного кода сбрасывается в начальное состояние, чтобы гарантировать достигнутый период.

Численно показано (по уровню авто-корреляции), что после XOR состояний генераторной пары для повышения случайности генерируемого процесса выгодно итоговое состояние привести по модулю p.

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

В терминах англоязычной аудитории примененный принцип усиления периода LFSR генераторов гласит как "Sawtooth boosted LFSR generators".

Пример реализации рассмотренного генератора в качестве датчика случайных чисел приведен на платформе github:

nawww83/lfsr: LFSR and its cryptographic applications (github.com)

Теги:
Хабы:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

Публикации

Истории

Работа

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
24 сентября
Astra DevConf 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн