Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Лабораторная работа № 7
Существует несколько типов регистров с обратной связью.
Принципиальная схема регистра сдвига с линейной обратной связью (РСЛОС) представлена на рис. 1. РСЛОС относится к простейшему типу регистров сдвига.
Обратная связь представляет собой операцию XOR над некоторыми битами регистра, которые называются последовательностью отводов (или точек съема). Такой принцип реализации обратной связи называют конфигурацией Фибоначчи. В криптографии РСЛОС используются чаще других регистров сдвига.
Принцип работы генератора РСЛОС заключается в следующем. n-битовый РСЛОС (длина регистра равна n битам) может находиться в одном из 2n 1 внутренних состояний. Это значит, что теоретически такой регистр может генерировать псевдослучайную последовательность с периодом 2n 1 битов.
Количество возможных состояний равно 2n 1, а не 2n, так как заполнение РСЛОС одними нулями приведет к выводу бесконечной последовательности нулей. Только при определенных последовательностях отводов РСЛОС циклически пройдет через все 2n 1 внутренних состояний. Такие регистры называются регистрами РСЛОС с максимальным периодом. Получившийся выход называют т-последовательностью.
Для обеспечения максимального периода конкретного РСЛОС, соответствующий многочлен, образованный из последовательности отводов регистра, должен быть примитивным по модулю 2. Степень многочлена является длиной регистра сдвига.
Так как не существует простого способа генерации примитивных многочленов данной степени по модулю 2, то после выбора какого-либо многочлена осуществляется его проверка. Брюс Шнайер в своем труде на стр. 423-425 приводит таблицу примитивных по модулю 2 многочленов, которую можно использовать для создания алгоритмов шифрования.
В данной работе будет рассмотрена программная реализация генератора, работа которого описывается уравнением (1).
(1)
В данном случае длина регистра равна 32. Биты с номерами 0, 1, 2, 3, 5, 7 задают последовательность отводов. Началом последовательности является правый (младший) край регистра сдвига. Член х32 является входом, куда подается новый бит регистра.
Таким образом, новый бит последовательности, создается при помощи операции XOR над седьмым, пятым, третьим, вторым, первым и нулевым битами и помещается на место 31 бита (Рис. 2). Период данного РСЛОС будет максимальным. Число возможных внутренних состояний регистра равняется 232 1, после чего наступит повторение состояний.
Рис. 2. Схема 32-битового генератора РСЛОС
Задание 1. Выполнить программную реализацию описанного формулой (1) генератора РСЛОС.
Выполнение.
После объявления переменных и открытия файлов начинается шифрование. Описываемый генератор РСЛОС работает в режиме побитового шифрования, то так как в программе используется переменная типа unsigned char byte_gamma, то используется дополнительный цикл for из 8 повторений. Цикл предназначен для заполнения переменной byte_gamma 8 битами гаммы. Рассмотрим команды цикла:
bit_ch=key&0x01;
byte_gamma|=(bit_ch<<(7-j));
shift_reg=(((key>>7)^(key>>5)^(key>>3)^(key>>2)^(key>>1)^(key>>0))&0x01);
key=key>>1;
key=key^(shift_reg<<31);
После окончания цикла выполняется XOR над переменной ch символом из открытого текста и byte_gamma, затем считывается новый байт открытого текста и цикл повторяется снова.
При тестировании следует установить точки останова на строках, где выполняются генерация бита гаммы, заполнение байта гаммы, получение значения регистра.
Задание 2. Выполнить программную реализацию генератора РСЛОС, описанного формулой (2).
Работа данного РСЛОС описывается формулой (2):
(2)
Для описания работы этого многочлена требуется внести следующие изменения в программный код, изображенный на рисунке 3:
unsigned long key[2];
cout<<"Enter the first Key: "<<endl;
cin>>key[0];
cout<<"Enter the second Key: "<<endl;
cin>>key[1];
key[1]=key[1]&0x3fffff;
Рис. 4. Перемещение битов ключевой последовательности
Программный код для реализации усложненного преобразования приведен ниже:
shift_reg=(((key[0]>>6)^(key[0]>>5)^(key[0]>>4)^(key[0]>>3)^(key[0]>>2)^(key[0]>>0))&0x01);
key[0]=key[0]>>1;
key[0]=((key[1]&0x01)<<31)^key[0];
key[1]=key[1]>>1;
key[1]=key[1]^(shift_reg<<21);
Задание 3 Самостоятельно. Выполнить программную реализацию РСЛОС, описываемого формулой (3):
(3)
Задание 4 Самостоятельно. Выполнить программную реализацию шифрования, основанную на двух РСЛОС, описываемых формулами (4):
(4)
РСЛОС должны работать последовательно, вход второго РСЛОС равен выходы первого (рис. 5).
Внимание!!! Данный двойной РСЛОС будет обеспечивать максимальный выход, поскольку высшие степени РСЛОС1 и РСЛОС2 взаимно просты. При использовании нескольких РСЛОС следует проследить, чтобы значения их высших степеней были взаимно просты. Однако, данная схема, несмотря на то, что позволяет шифровать данные, не является криптографически устойчивой и представляет только учебное значение. Подробно ознакомиться с поточными генераторами, основанными на основе РСЛОС можно в работе Б. Шнайера (стр. 416-444)
Рис. 5. Схема работы двойного РСЛОС
Контрольные вопросы: