Изучение и реализация алгоритма Фейстеля

Автор работы: Пользователь скрыл имя, 06 Мая 2013 в 23:10, лабораторная работа

Описание

Сеть Фе́йстеля («Feistel cipher», «Feistel network») — один из методов построения блочных шифров. Сеть представляет собой определённую многократно повторяющуюся (итерированную) структуру, называющуюся ячейкой Фейстеля. При переходе от одной ячейки к другой меняется ключ, причём выбор ключа зависит от конкретного алгоритма. Операции шифрования и расшифрования на каждом этапе очень просты, и при определённой доработке совпадают, требуя только обратного порядка используемых ключей.

Работа состоит из  1 файл

Криптология_отчет.docx

— 515.66 Кб (Скачать документ)

пМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ,

МОЛОДЕЖИ И СПОРТА УКРАИНЫ

ДОНЕЦКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ  УНИВЕРСИТЕТ

Кафедра прикладной математики и информатики

 

 

 

 

 

ОТЧЁТ

к лабораторной работе №2

на тему:

“ Изучение и реализация алгоритма Фейстеля.”

 

 

 

 

 

Выполнила: 

 

 

 

 

 

Донецк  2013

  1. Краткое словесное описание криптографического алгоритма

 

Сеть Фе́йстеля («Feistel cipher», «Feistel network») — один из методов построения блочных шифров. Сеть представляет собой определённую многократно повторяющуюся (итерированную) структуру, называющуюся ячейкой Фейстеля. При переходе от одной ячейки к другой меняется ключ, причём выбор ключа зависит от конкретного алгоритма. Операции шифрования и расшифрования на каждом этапе очень просты, и при определённой доработке совпадают, требуя только обратного порядка используемых ключей.

К достоинствам данного алгоритма шифрования можно отнести простоту аппаратной и программной реализаций, к недостаткам – шифрование только половины входного блока за один раунд.

Рисунок 1 - Классическая сеть Фейстеля

Классическая (или простая) сеть Фейстеля (рисунок 1) разбивает исходный текст на блок длиной 2n бит, каждый блок разбивается на два потока L (левый) и R(правый). Далее выполняется преобразование по формуле:

где Ki – ключ, Fi – функция преобразования.

Каждое такое действие называется раундом. Обычно используется 8-16 раундов. При этом, ключ в каждом раунде может быть как частью общего ключа, так и ее модификацией по некоторому правилу: следует отметить, что это в значительной мере влияет на криптостойкость. Также важным является правило, по которому текст разбивается на потоки.

Основное достоинство алгоритма заключается в том, что функция f не обязана быть обратимой, более того, для повышения криптостойкости обычно используют нелинейные именно необратимые функции.

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

 

 

 

 

 

 

 

 

 

  1. Блок-схема


Входной блок




Разбиение блока на 2 части по 32 бита




 

 i = 1…n





Li = Ri-1 XOR f(Li-1,Ri-1)



Ri = Li-1





Зашифрованный блок



 


 


 

 

 

  1. Пример шифрования

 

 

 

4. Листинг программы

 

Dim a As String, key As String, mas1(1 To 100) As String, ch1 As Integer, i As Integer

Dim rpart As String, lpart As String, temp2 As String, rpart2 As String

Dim temp1 As Integer

 

Private Sub Command1_Click()

a = Text2.Text 'Вводим в a текст для шифровки

Label1.Caption = "" 'Очищаем значение

Ch = 1 'Обнуляем счётчик, он нужен для того, чтобы разбить текст на блоки из 8 символов

For i = 1 To (Len(a) \ 8) 'В цикле разбиваем текст на 8 и вводим "куски" в массив

mas1(i) = Mid(a, Ch, 8)

Ch = Ch + 8

Next i

For i = 1 To (Len(a) \ 8) 'Процедура шифровки

lpart = Mid(mas1(i), 1, 4) 'Делим на 2 части

rpart = Mid(mas1(i), 5, 4)

key = Text1.Text 'Берём ключ

temp2 = "" 'Временные переменные

temp1 = 0

For ii = 1 To 4 'Цикл первого шага (1 раунд)

temp1 = Abs(255 - Asc(Mid(lpart, ii, 1)) - 32) 'Берём символ блока

temp1 = temp1 + Abs(255 - Asc(Mid(key, ii, 1)) - 32) 'Складываем с ключом

If temp1 > 100 Then temp1 = -23 'Если есть пробел, то меняем, чтоб не было ошибки

If temp1 > 32 Then 'Проверяем, чтоб не было символов больше, чем букв в алфавите

temp1 = temp1 - 32 'Отнимаем, если привысило

End If

temp2 = temp2 & Chr(temp1 + 223) 'Собираем новое слово

Next ii

key = temp2 'Присваеваем его ключу

temp2 = "" 'Обнуляем

temp1 = 0

For ii = 1 To 4 'Аналогично (1 раунд) 2 раунд

temp1 = Abs(255 - Asc(Mid(rpart, ii, 1)) - 32)

temp1 = temp1 + Abs(255 - Asc(Mid(key, ii, 1)) - 32)

If temp1 > 100 Then temp1 = -23

If temp1 > 32 Then

temp1 = temp1 - 32

End If

temp2 = temp2 & Ch(temp1 + 223)

Next ii

rpart = lpart 'Меняем местами

lpart = temp2

 

temp2 = ""

key = Text1.Text 'Опять ключ берём

For ii = 1 To 4 'Выполняем аналогично второй раунд

temp1 = Abs(255 - Asc(Mid(lpart, ii, 1)) - 32)

temp1 = temp1 + Abs(255 - Asc(Mid(key, ii, 1)) - 32)

If temp1 > 100 Then temp1 = -23

If temp1 > 32 Then

temp1 = temp1 - 32

End If

temp2 = temp2 & Chr(temp1 + 223)

Next ii

key = temp2

temp2 = ""

temp1 = 0

For ii = 1 To 4

temp1 = Abs(255 - Asc(Mid(rpart, ii, 1)) - 32)

temp1 = temp1 + Abs(255 - Asc(Mid(key, ii, 1)) - 32)

If temp1 > 100 Then temp1 = -23

If temp1 > 32 Then

temp1 = temp1 - 32

End If

temp2 = temp2 & Chr(temp1 + 223)

Next ii

rpart = temp2

Label1.Caption = Label1.Caption & lpart & rpart 'Выводим

mas1(i) = lpart & rpart 'ЗЗапоминаем в массиве

Next i

End Sub

 

Private Sub Command2_Click()

Label1.Caption = "" 'Очищаем

For i = 1 To (Len(a) \ 8)

lpart = Mid(mas1(i), 1, 4) 'Здесь так же, как и при шифровке

rpart = Mid(mas1(i), 5, 4)

key = Mid(Text1.Text, 4, 1) & Mid(Text1.Text, 3, 1) & Mid(Text1.Text, 2, 1) & Mid(Text1.Text, 1, 1) 'Перевёрнутый ключ

temp2 = ""

temp1 = 0

For ii = 1 To 4 '1 раунд

temp1 = Abs(255 - Asc(Mid(lpart, ii, 1)) - 32)

If temp1 = 128 Then temp1 = 35

temp1 = temp1 - Abs(255 - Asc(Mid(key, ii, 1)) - 32)

If temp1 < 0 Then

temp1 = temp1 + 32

End If

temp2 = temp2 & Chr(temp1 + 223)

Next ii

key = temp2

temp2 = ""

temp1 = 0

For ii = 1 To 4

temp1 = Abs(255 - Asc(Mid(rpart, ii, 1)) - 32)

If temp1 = 128 Then temp1 = 35

temp1 = temp1 - Abs(255 - Asc(Mid(key, ii, 1)) - 32)

If temp1 < 0 Then

temp1 = temp1 + 32

End If

temp2 = temp2 & Chr(temp1 + 223)

Next ii

rpart = lpart

lpart = temp2

key = Mid(Text1.Text, 4, 1) & Mid(Text1.Text, 3, 1) & Mid(Text1.Text, 2, 1) & Mid(Text1.Text, 1, 1)

temp2 = ""

'Второй

For ii = 1 To 4

temp1 = Abs(255 - Asc(Mid(lpart, ii, 1)) - 32)

If temp1 = 128 Then temp1 = 35

temp1 = temp1 - Abs(255 - Asc(Mid(key, ii, 1)) - 32)

If temp1 < 0 Then

temp1 = temp1 + 32

End If

temp2 = temp2 & Chr(temp1 + 223)

Next ii

key = temp2

temp2 = ""

temp1 = 0

For ii = 1 To 4

temp1 = Abs(255 - Asc(Mid(rpart, ii, 1)) - 32)

If temp1 = 128 Then temp1 = 35

temp1 = temp1 - Abs(255 - Asc(Mid(key, ii, 1)) - 32)

If temp1 < 0 Then

temp1 = temp1 + 32

End If

temp2 = temp2 & Chr(temp1 + 223)

Next ii

'key = temp2

rpart = temp2

temp2 = ""

lpart = key

key = Text1.Text

For ii = 1 To 4 'Здесь используем на 1 цикл больше, т.к. не полностью дешифруется 2 циклами

temp1 = Abs(255 - Asc(Mid(lpart, ii, 1)) - 32)

If temp1 = 128 Then temp1 = 35

temp1 = temp1 - Abs(255 - Asc(Mid(key, ii, 1)) - 32)

If temp1 < 0 Then

temp1 = temp1 + 32

End If

temp2 = temp2 & Chr(temp1 + 223)

Next ii

lpart = temp2

Label1.Caption = Label1.Caption & lpart & rpart 'И выводим

Next i

End Sub

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Результат работы программы

 

 

 

6. Литература

1. http://exponenta.ru/educat/referat/XXIIkonkurs/8/index.asp

2. http://frela14.ru/_fr/3/2lecture_2_bloc.pdf

3. http://www.cyberforum.ru/algorithms/thread372063-page2.html

4. http://www.oitzi.ru/Materials.aspx?doc_id=31&id=665


Информация о работе Изучение и реализация алгоритма Фейстеля