Автор: Пользователь скрыл имя, 23 Апреля 2013 в 23:32, курсовая работа
Под гаммированием понимают процесс наложения по определенному закону гаммы шифра на открытые данные. Гамма шифра - это псевдослучайная последовательность, выработанная по заданному алгоритму для зашифрования открытых данных и расшифрования зашифрованных данных.
Процесс зашифрования заключается в генерации гаммы шифра и наложении полученной гаммы на исходный открытый текст обратимым образом, например с использованием операции сложения по модулю два.
Следует отметить, что перед зашифрованием открытые данные разбивают на блоки одинаковой длины, обычно по 64 бита. Гамма шифра вырабатывается в виде последовательности блоков аналогичной длины.
ИСХОДНЫЕ ДАННЫЕ 4
ВВЕДЕНИЕ 5
1 АНАЛИЗ ПОСТАВЛЕННОЙ ЗАДАЧИ 6
1.1 Общее описание алгоритма криптографического преобразования ГОСТ 28147-89 6
1.2 Описание режима работы алгоритма ГОСТ 28147-89 в режиме гаммирования 9
2 РЕАЛИЗАЦИЯ АЛГОРИТМА В СРЕДЕ ALTERA 12
3. ОПИСАНИЕ ИСПОЛЬЗУЕМОЙ ПЛИС 16
ЗАКЛЮЧЕНИЕ 18
СПИСОК ЛИТЕРАТУРЫ 19
СОДЕРЖАНИЕ
ИСХОДНЫЕ ДАННЫЕ 4
ВВЕДЕНИЕ 5
1 АНАЛИЗ ПОСТАВЛЕННОЙ ЗАДАЧИ 6
1.1 Общее описание алгоритма криптографического преобразования ГОСТ 28147-89 6
1.2 Описание режима работы алгоритма ГОСТ 28147-89 в режиме гаммирования 9
2 РЕАЛИЗАЦИЯ АЛГОРИТМА В СРЕДЕ ALTERA 12
3. ОПИСАНИЕ ИСПОЛЬЗУЕМОЙ ПЛИС 16
ЗАКЛЮЧЕНИЕ 18
СПИСОК ЛИТЕРАТУРЫ 19
ПРИЛОЖЕНИЕ А 20
ПРИЛОЖЕНИЕ Б 28
Требуется реализовать шифратор, используя алгоритм ГОСТ 28147-89 в режиме гаммирования на языке AHDL.
Под гаммированием понимают процесс наложения по определенному закону гаммы шифра на открытые данные. Гамма шифра - это псевдослучайная последовательность, выработанная по заданному алгоритму для зашифрования открытых данных и расшифрования зашифрованных данных.
Процесс зашифрования заключается в генерации гаммы шифра и наложении полученной гаммы на исходный открытый текст обратимым образом, например с использованием операции сложения по модулю два.
Следует отметить, что перед зашифрованием открытые данные разбивают на блоки одинаковой длины, обычно по 64 бита. Гамма шифра вырабатывается в виде последовательности блоков аналогичной длины.
Уравнение зашифрования можно записать в виде
Где - i-й блок шифртекста; - i-й блок гаммы шифра; - i-й блок открытого текста; М - количество блоков открытого текста.
Процесс расшифрования сводится к повторной генерации гаммы шифра и наложению этой гаммы на зашифрованные данные. Уравнение расшифрования имеет вид
Получаемый этим методом шифртекст достаточно труден для раскрытия, поскольку теперь ключ является переменным. По сути дела гамма шифра должна изменяться случайным образом для каждого шифруемого блока. Если период гаммы превышает длину всего шифруемого текста и злоумышленнику неизвестна никакая часть исходного текста, то такой шифр можно раскрыть только прямым перебором всех вариантов ключа. В этом случае криптостойкость шифра определяется длиной ключа.[1]
В описании алгоритма криптографического преобразования ГОСТ 28147-89 содержится описание алгоритмов нескольких уровней. На самом верхнем находятся практические алгоритмы, предназначенные для шифрования массивов данных и выработки для них имитовставки. Все они опираются на три алгоритма низшего уровня, называемые в тексте ГОСТа циклами. Эти фундаментальные алгоритмы называются базовыми циклами. Они имеют следующие названия и обозначения:
В свою очередь, каждый из базовых циклов представляет собой многократное повторение одной единственной процедуры, называемой шагом криптопреобразования.
В соответствии с принципом Керхгоффса, которому удовлетворяют все современные известные широкой общественности шифры, именно секретность ключевой информации обеспечивает секретность зашифрованного сообщения. В ГОСТе ключевая информация состоит из двух структур данных. Помимо собственно ключа, необходимого для всех шифров, она содержит еще и таблицу замен.
Ключ является массивом из восьми 32-битовых элементов кода. В ГОСТе элементы ключа используются как 32-разрядные целые числа без знака, размер ключа составляет 32·8 = 256 бит или 32 байта.
Таблица замен является вектором, содержащим восемь узлов замены. Каждый узел замены, в свою очередь, является вектором, содержащим шестнадцать 4-битовых элементов замены, которые можно представить в виде целых чисел от 0 до 15, все элементы одного узла замены обязаны быть различными. Таким образом, таблица замен может быть представлена в виде матрицы размера 8x16 или 16x8, содержащей 4-битовые заменяющие значения. Тогда узлы замены будут строками таблицы замен. Общий объем таблицы замен равен 512 бит или 64 байта.
Основной шаг
Рисунок 1.1 - Схема основного шага криптопреобразования алгоритма ГОСТ 28147-89
Шаг 0 определяет исходные данные для основного шага криптопреобразования: N – преобразуемый 64-битовый блок данных, в ходе выполнения шага его младшая (N1) и старшая (N2) части обрабатываются как отдельные 32-битовые целые числа без знака. Таким образом, можно записать N=(N1,N2). X – 32-битовый элемент ключа;
Шаг 1. Сложение с ключом. Младшая половина преобразуемого блока складывается по модулю 232 с используемым на шаге элементом ключа, результат передается на следующий шаг;
Шаг 2. Поблочная замена. 32-битовое значение, полученное на предыдущем шаге, интерпретируется как массив из восьми 4-битовых блоков кода: S = (S0, S1, S2, S3, S4, S5, S6, S7), причем S0 содержит 4 самых младших, а S7 – 4 самых старших бита S.
Далее значение каждого из восьми блоков заменяется новым, которое выбирается по таблице замен следующим образом: значение блока Si меняется на Si -тый по порядку элемент (нумерация с нуля) i-того узла замены (т.е. i-той строки таблицы замен, нумерация также с нуля). Другими словами, в качестве замены для значения блока выбирается элемент из таблицы замен с номером строки, равным номеру заменяемого блока, и номером столбца, равным значению заменяемого блока как 4-битового целого неотрицательного числа. Отсюда становится понятным размер таблицы замен: число строк в ней равно числу 4-битовых элементов в 32-битовом блоке данных, то есть восьми, а число столбцов равно числу различных значений 4-битового блока данных, равному шестнадцати.
Шаг 3. Циклический сдвиг на 11 бит влево. Результат предыдущего шага сдвигается циклически на 11 бит в сторону старших разрядов и передается на следующий шаг. На схеме алгоритма символом R11 обозначена функция циклического сдвига своего аргумента на 11 бит влево, т.е. в сторону старших разрядов.
Шаг 4. Побитовое сложение: значение, полученное на шаге 3, побитно складывается по модулю 2 со старшей половиной преобразуемого блока.
Шаг 5. Сдвиг по цепочке: младшая часть преобразуемого блока сдвигается на место старшей, а на ее место помещается результат выполнения предыдущего шага.
Шаг 6. Полученное значение преобразуемого блока возвращается как результат выполнения алгоритма основного шага криптопреобразования.[2]
В зависимости от алгоритма основной шаг преобразования повторяется от 16 до 32 раз, формируя цикл зашифрования или расшифрования. Эти циклы могут быть идентичными, либо с измененным порядком записи ключа. Далее будет рассмотрен алгоритм криптографического преобразования ГОСТ 28147-89 в режиме гаммирования.
Для наложения гаммы при зашифровании и ее снятия при расшифровании должны использоваться взаимно обратные бинарные операции. В ГОСТе для этой цели используется операция побитового сложения по модулю 2, поскольку она является обратной самой себе и, к тому же, наиболее просто реализуется аппаратно.
Криптосхема, реализующая алгоритм зашифрования в режиме гаммирования, имеет вид, указанный на рисунке 1.2.
Рисунок 1.2 - Криптосхема, реализующая алгоритм зашифрования в режиме гаммирования
РГПЧ, используемый для выработки гаммы, является рекуррентной функцией: , где - элементы рекуррентной последовательности, f – функция преобразования. Следовательно, неизбежно возникает вопрос о его инициализации, то есть об элементе В действительности, этот элемент данных является параметром алгоритма для режимов гаммирования, на схемах он обозначен как S, и называется в криптографии синхропосылкой , а в нашем ГОСТе – начальным заполнение одного из регистров шифрователя.
По определенным соображениям разработчики ГОСТа решили использовать для инициализации РГПЧ не непосредственно синхропосылку, а результат ее преобразования по циклу 32-З:
Последовательность элементов, вырабатываемых РГПЧ, целиком зависит от его начального заполнения, то есть элементы этой последовательности являются функцией своего номера и начального заполнения РГПЧ:
де .
С учетом преобразования по алгоритму простой замены добавляется еще и зависимость от ключа:
,
где – i-тый элемент гаммы, K – ключ.
Таким образом, последовательность
элементов гаммы для
Рисунок 1.3 - Алгоритм зашифрования (расшифрования) данных в режиме гаммирования
Шаг 0 определяет исходные данные для основного шага криптопреобразования:
Tо(ш) – массив открытых (зашифрованных) данных произвольного размера, подвергаемый процедуре зашифрования (расшифрования), по ходу процедуры массив подвергается преобразованию порциями по 64 бита;
S – синхропосылка, 64-битовый элемент данных, необходимый для инициализации генератора гаммы;
Шаг 1. Начальное преобразование синхропосылки, выполняемое для ее «рандомизации», то есть для устранения статистических закономерностей, присутствующих в ней, результат используется как начальное заполнение РГПЧ.
Шаг 2. Один шаг работы РГПЧ, реализующий его рекуррентный алгоритм. В ходе данного шага старшая (S1) и младшая (S0) части последовательности данных вырабатываются независимо друг от друга;
Шаг 3. Гаммирование. Очередной 64-битовый элемент, выработанный РГПЧ, подвергается процедуре зашифрования по циклу 32–З, результат используется как элемент гаммы для зашифрования (расшифрования) очередного блока открытых (зашифрованных) данных того же размера.
Шаг 4. Результат работы алгоритма – зашифрованный (расшифрованный) массив данных.[2]
Вследствие причин, которые будут указаны далее, реализация данного алгоритма на ПЛИС нецелесообразна, поэтому в данной курсовой работе будет показан пример реализации алгоритма на ПЛИС. Разрабатываемое устройство может быть применено в образовательных целях, поэтому ключевая информация была выбрана таким образом, чтобы максимально упростить анализ работы устройства, что существенно ухудшает криптостойкость алгоритма.
Для проверки правильности работы алгоритма была собрана полная модель устройства: шифратор и дешифратор. Структурная модель устройства изображена на рисунке 2.1.
Рисунок 2.1 – Структурная модель устройства
Блок «gost_count» - 5-ти разрядный счетчик.
Блок «gen_otext» генерирует слово открытого текста каждые 32 такта, так как длительность цикла создания гаммы шифра равна 32 тактам.
Отличительной чертой данного алгоритма является различие зашифрованных слов одного и того же открытого слова текста, поэтому для наглядности все слова открытого текста одинаковы.
Блок «do_xor» осуществляет побитовое сложение открытого/зашифрованного текста с гаммой шифра/открытым текстом.
Блок «main_test» представляет собой генератор гаммы шифра и содержит в себе блоки, представленные на рисунке 2.2.
Вход «clk» - вход тактого генератора.
Вход «prn» - установка начальных значений счетчиков.
Вход «cycle_switch» осуществляет переключение начального цикла рандомизации синхропосылки и дальнейших циклов генерации гаммы шифра.
Вход «main_load» осуществляет загрузку синхропосылки в устройство генерации гаммы.
Вход «mem_load» осуществляет загрузку данных суммирования с константами C1 и C2 в регистр.
Выход «cout» контролирует значения счетчиков.
Выход «cycle_test» контролирует значения каждого шага криптообразования.
Выход «mem_test» показывает значения регистра памяти.
Выходы «test_n1» и «test_n2» показывают значения накопителей N1 и N2.
Выход «summ_out» показывает результаты суммирования до их записи в регистр памяти.
Рисунок 2.2 – Структурная модель генератора гаммы шифра
Блок «kzy» содержит 256-ти битный ключ.
Блок «gen_synchro» генерирует синхропосылку.
Блок «main_cycle» выполняет основной шаг криптопреобразования, включающий в себя сложение синхропосылки с ключом по модулю 2 в степени 32, выполнение процедуры замены, сдвига и побитового сложения по модулю 2.
Блок «summ232» осуществляет сложение по модулю первых 32 бит синхропосылки и сложение по модулю оставшихся 32 бит, и запись получившихся результатов в регистр.
Блоки «cycle_manager», «main_manager» и «cycle_handle» осуществляют переключение сигнала между выходом и циклом зашифрования/расшифрования.
Рисунок 2.3 – Результат работы программы после рандомизации синхропосылки посредством цикла 32-З/32-Р
На рисунке 2.3 показан результат работы первого цикла 32-З/32-Р. Рандомизированная синхропосылка отображена на выходе «cle_test». Видно, что количество единиц приблизительно равно количеству нулей, т.е. получившаяся синхропосылка похожа на шум. Учитывая, что изначальная синхропосылка была равна 1, можно сказать, что решение разработчиков алгоритма рандомизировать изначальную синхропосылку была удачной.
Рисунок 2.4 – Результат работы программы после генерации гаммы шифра посредством цикла 32-З/32-Р