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

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

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

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

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

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

от 25%

Подписываем

договор

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

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

Змн.

Арк.

№ докум.

Підпис

Дата

Арк.

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. net Хирургическое лечение мигрени по методу профессора Мюльбергера Сегодня в мире около 10 насе
3. на тему- Понятие временной нетрудоспособности
4. вариантам 1 вариант Модель с жесткой номинальной заработной платой и гибкими ценами товаров
5. На этот шаг она решается из сострадания к Лукасу которого любит как отца
6. в расширении существующего магазина и третья в том чтобы ничего не делать и подождать
7. Життя в межах внутрішніх водойм
8. а Обязательства возникающие вследствие причинения вреда
9. Справедливость по закону и природа человекаРабовладельческая демократия достигла расцвета во второй по
10. Курсовая работа- Основные подходы к исследованию политической элиты в современном российском обществе