Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Тема- Блочные составные шифры

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 25.11.2024

Змн.

Арк.

№ докум.

Підпис

Дата

Арк.

11

8.050103.5151.14.02

Змн.

Арк.

№ докум.

Підпис

Дата

Арк.

11

8.050103.5151.14.02

Змн.

Арк.

№ докум.

Підпис

Дата

Арк.

1

8.050103.5151.14.02

Студент:

Паламарчук.Ю

Викладач:

Устенко І.В.

Блочные составные шифры. Сеть Фейстеля

Літ.

Аркушів

8

НУК ім. Адм. Макарова

Лабораторная робота №2

Тема: Блочные составные шифры. Сеть Фейстеля.

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

Задание:

I. Реализовать приложение для шифрования, позволяющее выполнять следующие действия:

1. Шифровать данные при помощи сети Фейстеля:

1) шифруемый текст должен храниться в одном файле, а ключ шифрования – в другом;

2) приложение должно позволять выбирать способ получения подключей из заданного ключа шифрования;

а) для i-го раунда подключем Vi является цепочка из 32 подряд идущих бит заданного ключа, которая начинается с бита номер i, продолжается до последнего бита ключа и при его достижении  циклически повторяется, начиная с 1 бита;

б) для i-го раунда, начиная с битв номер i, берётся цепочка из 8 подряд идущих бит ключа, которая является начальным значением для скремблера вида 0000 00112: подключем Vi является сгенерированная этим скремблером последовательность из 32 бит;

3) Приложение должно позволять выбирать вид образующей функции:

а) функция F – единичная F(Vi) = Vi

б) функция имеет вид F(Vi, X) = S(X) XOR Vi, где S(X) – левая часть шифруемого блока на которую посредством операции XOR била наложена 32-битная последовательность сгенерированная 16 разрядным скремблером вида 0100 0000 0000 00112;

4) Зашифрованный текст должен сохранятся в файл;

5) В процессе шифрования предусмотреть возможность просмотра и изменения ключа, шифруемого и зашифрованного текстов в шестнадцатеричном и символьном виде.

2. Исследовать лавинный эффект (исследования проводить на одном блоке текста)

1) для бита, который будет изменяться приложение должно позволять задавать его позицию (номер) в, открытом тексте или в ключе;

2) приложение должно уметь после каждого раунда шифрования подсчитывать число бит, изменившихся в зашифрованном тексте при изменении одного бита в открытом тексте либо в ключе;

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

II Реализовать приложение для дешифрования, позволяющее выполнять следующие действия:

  1.  Дешифровать данные при помощи сети Фестеля:
  2.  Зашифрованный текст должен храниться в одном файле, ключ – в другом;
  3.  Приложение должно позволять выбирать способ получения подключений из заданного ключа шифрования;
  4.  Приложение должно позволять выбирать вид образующей функции;
  5.  Расшифрованный текст должен сохраняться в файл
  6.  В процессе дешифрования предусмотреть возможность просмотра и изменения ключа, зашифрованного и расшифрованного текстов в шестнадцатеричном и символьном виде.

III С помощью реализованных приложений выполнить следующие задания:

  1.  Протестировать правильность работы разработанных приложений.
  2.  Исследовать лавинный эффект при изменении одного бита в открытом тексте и а ключе: построить графики зависимостей числа бит, изменившихся в зашифрованном сообщении от раунда шифрования при всех возможных комбинациях способов выбора ключа и образующей функции (всего должно быть построено 8 графиков)

Теоритические сведения:

В 1971 году, «крестный отец» стандарта DES, Хорст Фейстель (Horst Feistel), в стенах корпорации IBM, разработал два устройства, реализовавшие различные алгоритмы шифрования, названные затем общим название «Люцифер». В одной из этих устройств он использовал схему, которую впоследствии назвали Сетью Фейстеля. Эта сеть представляет собой определённую многократно итерированную (повторяющуюся) структуру, которою называют ячейкой Фейстеля.


Рисунок 1 – Схема работы сети Фейстеля
Принцип работы сети :

  1.  Исходные данные разбиваются на блоки фиксированной длины (как правило кратно степени двойки — 64 бит, 128 бит). В случае если длина блока исходных данных меньше длины разрядности шифра, то блок дополняется каким-либо заранее известным образом.
  2.  Блок делится на два равных подблока — «левый» L0 и «правый» R0.
    В случае 64-битной разрядности — на два блока с длиной 32 бита каждый.
  3.  «Левый подблок» L0 видоизменяется функцией итерации F(L0, P0) в зависимости от ключа P0,
    после чего он складывается по модулю 2 (XOR) с «правым подблоком» R
    0.
  4.  Результат сложения присваивается новому левому подблоку L1, который становится левой половиной входных данных для следующего раунда, а «левый подблок» L0 присваивается без изменений новому правому подблоку R1, который становится правой половиной.
  5.  Эта операция повторяется n-1 раз, при этом при переходе от одного этапа к другому меняются раундовые ключи (P0, P1, P2 и т.д.), где n — количество раундов для используемого алгоритма.


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

Хід роботи:

Текст програми представлено в додатку А.

Результати роботи програми:

Рисунок 1 – Головна форма створеної програми

Рисунок 2 – обираємо файл тексту

Генеруємо ключ в файл за допомогою скремблеру:

Рисунок 3 – Генерация ключа скремблером

Вибираєм сгенерированній скремблером ключь в файле k.txt:

Рисунок 4 – Выбираем путь шифруемого текста

Рисунок 4 – Зашифрований текст и біти

Рисунок 5 – Расшифрованній текст и біти

Висновок: В ході цієї лабораторної роботи було створено програму, яка шифрує дані за допомогою сети Фейстеля, ознакомился с блочными составными шифрами, освоитл криптографические преобразования подстановки и перестановки. Изучил и реализовать шифрование информации про помощи сети Фейстеля.

Додаток А. Код програми

Form1.cs

using System;

using System.Collections;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.IO;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace SetFeistela

{

   public partial class Form1 : Form

   {

       static int rounds = 0;

       int[] keys = new int[16];

       int[] text = new int[2];

       int[] dtext = new int[2];

       int L, dL = 0;

       int R, dR = 0;

       string bite = "";

       string stext = "";

       string skey = "";

       Shifraciya shif = new Shifraciya();

       Deshifraciya deshif = new Deshifraciya();

       Skrembler NewScr = new Skrembler();

       string skr = "";

       public Form1()

       {

           InitializeComponent();           

       }

       private void Form1_Load(object sender, EventArgs e)

       {

       }

       private void button2_Click(object sender, EventArgs e)

       {

           if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)

           {

               StreamReader sr = new StreamReader(openFileDialog1.FileName);

               stext = sr.ReadToEnd();

               string[] split = stext.Split(new Char[] { ' ', ',', '.', ':', '\t' });

               for (int i = 0; i < split.Length; i++)

               {

                   if (i < (split.Length - 1))

                   {

                       //if (s.Trim() != "")

                       text[i] += Convert.ToInt32(split[i]);

                       textBox2.Text += text[i] + " ";

                   }

                   else

                   {

                       text[i] += Convert.ToInt32(split[i]);

                       textBox2.Text += text[i];

                   }

                   

               }

               L = text[0];

               R = text[1];

               label4.Visible = true;

           }

           bool[] b = new BitArray(new int[] { text[0] }).Cast<bool>().Reverse().ToArray();

           foreach (var item in b)

           {

               bite += item ? "1" : "0";

               Console.Write(item ? "1" : "0");

           }

           textBox5.Text += bite;

       }

       private void button1_Click(object sender, EventArgs e)

       {

           if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)

           {

               StreamReader sr = new StreamReader(openFileDialog1.FileName);

               skey = sr.ReadLine();

               string[] split = skey.Split(new Char[] { ' ', ',', '.', ':', '\t' });

               rounds = split.Length;

               for (int i = 0; i < split.Length; i++)

               {

                       keys[i] += Convert.ToInt32(split[i]);

                       textBox1.Text += keys[i];

               }     

               label3.Text = "Ключ заменен!";

               label3.ForeColor = Color.Green;

           }

       }

       private void button3_Click(object sender, EventArgs e)

       {

           string bite1 = "";

           string a = shif.crypt(L, R, rounds, keys);

           string[] split = a.Split(new Char[] { ' ', ',', '.', ':', '\t' });

           for (int i = 0; i < split.Length; i++)

           {

               dtext[i] += Convert.ToInt32(split[i]);

           }

           dL = dtext[0];

           dR = dtext[1];           

           textBox3.Text = a;

           bool[] d = new BitArray(new int[] { dtext[0] }).Cast<bool>().Reverse().ToArray();

           foreach (var item in d)

           {

               bite1 += item ? "1" : "0";

               Console.Write(item ? "1" : "0");

           }

           TextBoxMsg.Text += bite1;

          MessageBox.Show(a);

       }

       private void button4_Click(object sender, EventArgs e)

       {

           string bite2 = "";

           string a = deshif.decrypt(dL, dR, rounds, keys);

           textBox4.Text = a;

           bool[] b = new BitArray(new int[] { text[0] }).Cast<bool>().Reverse().ToArray();

           foreach (var item in b)

           {

               bite2 += item ? "1" : "0";

               Console.Write(item ? "1" : "0");

           }

           textBox6.Text += bite2;

           

           if (textBox2.Text == textBox4.Text)

           {

               MessageBox.Show("Расшифрованно успешно!");

           }

       }

       private void button5_Click(object sender, EventArgs e)

       {

           try

           {

               skr = textBox7.Text;

               string z = "";

               string s = NewScr.BinaryString(skr);

               char[] chars = s.ToCharArray();

               for (int i = 0; i < 16; i++)

               {

                   if (i < 15)

                   {

                       z += chars[i] + " ";

                   }

                   else

                   {

                       z += chars[i];

                   }

               }

               File.WriteAllText(@"F:\k.txt", z, Encoding.Default);

               MessageBox.Show("Ключь успешно сгенерирован да диск : F в файл : k.txt");

           }

           catch (Exception)

           {

               MessageBox.Show("Введите ключ!");

           }          

       }

       public static int BinToInt(string binaryNumber)

       {

           int multiplier = 1;

           int converted = 0;

           for (int i = binaryNumber.Length - 1; i >= 0; i--)

           {

               int t = System.Convert.ToInt16(binaryNumber[i].ToString());

               converted = converted + (t * multiplier);

               multiplier = multiplier * 2;

           }

           return converted;

       }

   }

}

Shifraciya.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace SetFeistela

{

   class Shifraciya

   {

       /* функция преобразования подблока по ключу (зависит от конкретного алгоритма)

           subblock - преобразуемый подблок

           key - ключ

           возвращаяемое значение - преобразованный блок*/

       int f(int subblock, int key)

       {

           return subblock + key;

       }

       /*Шифрование открытого текста

       left - левый входной подблок

       right - правый входной подблок

       * key - массив ключей (по ключу на раунд)

       rounds - количество раундов*/

       public string crypt(int left, int right, int rounds, int[] key)

       {

           int i, temp;

           for (i = 0; i < rounds; i++)

           {

               temp = right ^ f(left, key[i]);

               right = left;

               left = temp;

           }

           string z = left.ToString() + " " + right.ToString();

           return z;

       }

   }

}

Deshifraciya.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace SetFeistela

{

   class Deshifraciya

   {

       int f(int subblock, int key)

       {

           return subblock + key;

       }

       /*Расшифрование текста

       left - левый зашифрованный подблок

       right - правый зашифрованный подблок*/

       public string decrypt(int left, int right, int rounds, int[] key)

       {

           int i, temp;

           for (i = rounds - 1; i >= 0; i--)

           {

               temp = left ^ f(right, key[i]);

               left = right;

               right = temp;

           }

           string z = left.ToString() + " " + right.ToString();

           return z;

       }

   }

}




1. тематические смены
2. Правонарушители Young offenders
3. Управление банковскими рискам
4. тема являлась частью Единой энергетической системы СССР российский опыт энергосбережения представляет не
5. ОБЩИЕ ПОЛОЖЕНИЯ Курсовое проектирование является важным этапом учебного процесса т
6. Временное хранение товаров
7. Тягач. Не много отдохнув проводник скомандовал группе Подъем
8. Образование- поддержка талантливой молодежи в Саратовской области Перечен
9. Дипломная работа- Исчисление и уплата страховых взносов во внебюджетные фонды
10. ВАРИАНТЫ КОНТРОЛЬНЫХ РАБОТ по дисциплине Макроэкономика для студентов заочного отделения Специальн
11. Общая экономическая теория
12. ЭНЕРГИЯ РОКА 2014 Город- ВУЗ-
13. ЗАКОН СПРАВЕДЛИВОСТИ УЖЕ ПРОВОЗГЛАШЕН Дж
14. ~лем мойында~ан ж~не кезкелген ~йымды бас~ару ~~руды~ тиімді ~~ралы
15. Реферат- Основные направления протестантизма
16. Виктория расположен на первом этаже бизнес ~ центра Виктория находящийся на проспекте Победителей59
17. 29 реферат дисертації на здобуття наукового ступеня кандидата економічних наук Київ1
18. .Экскурсия как вид деятельности
19. Инвестирование в виде объектов интеллектуальной собственности на примере табачной промышленности РФ.html
20. Введение7