Алгоритм шифрования DES

Автор работы: Пользователь скрыл имя, 06 Мая 2014 в 01:16, лабораторная работа

Краткое описание

Краткие сведения о стандарте шифрования DES
DES (Data Encryption Standard) симметричный алгоритм шифрования, разработанный фирмой IBM и утвержденный правительством США в 1977 году как официальный стандарт (FIPS 46-3). DES имеет блоки по 64 бита и 16 цикловую структуру сети Фейстеля. Для шифрования использует ключ с длиной 56 бит. Алгоритм использует комбинацию нелинейных (S-блоки) и линейных (перестановки E, IP, IP-1) преобразований.

Прикрепленные файлы: 1 файл

ЛабDES.docx

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

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

НЕКОММЕРЧЕСКОЕ АКЦИОНЕРНОЕ ОБЩЕСТВО

АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

Факультет радиотехники и связи

 
Кафедра Радиотехники

 

 

 

 

 

Отчет по лабораторной работе №2

По дисциплине «Теоретические основы защиты информации»

На тему: «Алгоритм шифрования DES»

 

 

 

 

 

 

 

 

 

 

 

Выполнил студент гр. СИБ-12-02

Жуматайулы Бекжан

Проверил ст. препод. Сафин Р.Т.

 

 

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

Алгоритм шифрования DES

Краткие сведения о стандарте шифрования DES

DES (Data Encryption Standard) симметричный алгоритм  шифрования, разработанный фирмой IBM и утвержденный правительством  США в 1977 году как официальный  стандарт (FIPS 46-3). DES имеет блоки по 64 бита и 16 цикловую структуру  сети Фейстеля. Для шифрования  использует ключ с длиной 56 бит. Алгоритм использует комбинацию  нелинейных (S-блоки) и линейных (перестановки E, IP, IP-1) преобразований.

Основные достоинства алгоритма DES:

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

 

 

Общая схема шифрования

Процесс шифрования заключается в начальной перестановке битов 64-битового блока, шестнадцати циклах шифрования и обратной перестановки битов (рисунок 1). Все перестановки и коды в таблицах подобраны разработчиками таким образом, чтобы максимально затруднить процесс расшифровки путем подбора ключа. Структура алгоритма DES приведена на рисунке 2.

Рисунок 1. Обобщенная схема шифрования

Из шифруемой последовательности байт выбирается очередной 8-байтовый блок T, который преобразуется с помощью матрицы начальной перестановки IP (таблица 1) следующим образом: бит 58 блока T становится битом 1, бит 50 - битом 2 и т.д., что даст в результате: T(0) = IP(T).

Полученная последовательность битов T(0) разделяется на две последовательности по 32 бита каждая: L(0) - левые или старшие биты, R(0) - правые или младшие биты. Затем выполняется шифрование, состоящее из 16 итераций.

 

 

Рисунок 2. Структура алгоритма шифрования DES

Процедуры шифрования и дешифрования полностью идентичны, за исключением порядка использования ключевых элементов ki. При дешифровании данных все действия выполняются в обратном порядке. В 16 циклах дешифрования, в отличие от шифрования c помощью прямого преобразования сетью Фейстеля, здесь используется обратное преобразование сетью Фейстеля.

 

Схема дешифрования указана на рисунке 4.

Рисунок 4. Схема дешифрования алгоритма DES

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

Исходный текст: Pinaev

Ключ: Pavelll

Исходный блок бит... Блок № 0:

00001010 10010110 01110110 10000110 10100110 01101110 00000000 00000000

Перевернутые биты в блоке...:

01010000 01101001 01101110 01100001 01100101 01110110 00000000 00000000

Ключ из 56 бит:

0101000__0011000__0101110__1100110__0101011__0110001__1011000__1101100__

Ключ из 64 бита, после добавления бит четности:

01010000 00110000 01011100 11001100 01010110 01100011 10110001 11011000

**********************ШИФРОВАНИЕ**********************

Исходное сообщение:

01010000 01101001 01101110 01100001 01100101 01110110 00000000 00000000

Начальная перестановка IP:

00111111 00100001 00110100 00011010 00000000 00111110 00000110 00100100

HPart:

00111111 00100001 00110100 00011010

LPart:

00000000 00111110 00000110 00100100

Ключ 64 бита. С битами четности:

01010000 00110000 01011100 11001100 01010110 01100011 10110001 11011000

ключ (56). Перестановка РС1:

11001000 10111101 01100010 11010011 00000001 11001000 11000111

ключ (28C (Left)):

1100 1000 1011 1101 0110 0010 1101

ключ (28D (Right)):

0011 0000 0001 1100 1000 1100 0111

Итерация №1

Ключ из 56 бит после циклического сдвига, итерация 1:

1001000101111010110001011011 0110000000111001000110001110

Ключ из 48 бит. Перестановка РС2:

01111001 10010011 01001010 10100111 00011110 01000000

LPart, Началась функция модификации f:

00000000 00111110 00000110 00100100

Перевели 32 в 48. результат функции расширения Е:

00000000 00000001 11111100 00000000 11000001 00001000

Xor. побитово суммируем по модулю 2:

01111001 10010010 10110110 10100111 11011111 01001000

Преобразовали 48 в 32. С помощью узлов замены:

01110110 00111110 00011000 00110110

Перестановка бит в конце функции. Перестановка P:

01110110 01000010 10010110 01110110

HPart после модификации. HPart XOR f(LPart,Key):

01001001 01100011 10100010 01101100

После обмена HPart:

00000000 00111110 00000110 00100100

После обмена LPart:

01001001 01100011 10100010 01101100

Итерация №16

Ключ из 56 бит после циклического сдвига, итерация 16:

1100100010111101011000101101 0011000000011100100011000111

Ключ из 48 бит. Перестановка РС2:

10101101 00001110 10100011 10100101 01000101 00011001

LPart, Началась функция модификации f:

11100110 11110001 10001000 11001010

Перевели 32 в 48. результат функции расширения Е:

01110000 11010111 10100011 11000101 00010110 01010101

Xor. побитово суммируем по модулю 2:

11011101 11011001 00000000 01100000 01010011 01001100

Преобразовали 48 в 32. С помощью узлов замены:

11101011 01000111 11010100 00011011

Перестановка бит в конце функции. Перестановка P:

11101011 11001111 11011010 00001000

HPart после модификации. HPart XOR f(LPart,Key):

01101001 11000010 01110111 11011110

Результат шифрования блока. Конечная перестановка IP-1:

01100100 10010111 10000101 01001011 00100101 11100100 11110111 10111011

Результат блока бит до перевертывания(исправление недочета BitArray)... Блок № 0:

01100100 10010111 10000101 01001011 00100101 11100100 11110111 10111011

Результат блока бит после перевертывания...:

00100110 11101001 10100001 11010010 10100100 00100111 11101111 11011101

Исходное зашифрованное сообщение: d—…K%дч»

Ключ: Pavelll

Исходный блок бит... Блок № 0:

00100110 11101001 10100001 11010010 10100100 00100111 11101111 11011101

Перевернутые биты в блоке...:

01100100 10010111 10000101 01001011 00100101 11100100 11110111 10111011

Ключ из 56 бит:

0101000__0011000__0101110__1100110__0101011__0110001__1011000__1101100__

Ключ из 64 бита, после добавления бит четности:

01010000 00110000 01011100 11001100 01010110 01100011 10110001 11011000

**********************ДеШИФРОВАНИЕ**********************

Начальная перестановка IP:

01101001 11000010 01110111 11011110 11100110 11110001 10001000 11001010

HPart:

01101001 11000010 01110111 11011110

LPart:

11100110 11110001 10001000 11001010

Ключ 64 бита. С битами четности:

01010000 00110000 01011100 11001100 01010110 01100011 10110001 11011000

ключ (56). Перестановка РС1:

11001000 10111101 01100010 11010011 00000001 11001000 11000111

ключ (28C (Left)):

1100 1000 1011 1101 0110 0010 1101

ключ (28D (Right)):

0011 0000 0001 1100 1000 1100 0111

Итерация №1

Ключ из 56 бит после циклического сдвига, итерация 16:

1100100010111101011000101101 0011000000011100100011000111

Ключ из 48 бит. Перестановка РС2:

10101101 00001110 10100011 10100101 01000101 00011001

LPart, Началась функция модификации f:

11100110 11110001 10001000 11001010

Перевели 32 в 48. результат функции расширения Е:

01110000 11010111 10100011 11000101 00010110 01010101

Xor. побитово суммируем по модулю 2:

11011101 11011001 00000000 01100000 01010011 01001100

Преобразовали 48 в 32. С помощью узлов замены:

11101011 01000111 11010100 00011011

Перестановка бит в конце функции. Перестановка P:

11101011 11001111 11011010 00001000

HPart после модификации. HPart XOR f(LPart,Key):

10000010 00001101 10101101 11010110

После обмена HPart:

11100110 11110001 10001000 11001010

После обмена LPart:

10000010 00001101 10101101 11010110

Итерация №16

Ключ из 56 бит после циклического сдвига, итерация 1:

1001000101111010110001011011 0110000000111001000110001110

Ключ из 48 бит. Перестановка РС2:

01111001 10010011 01001010 10100111 00011110 01000000

LPart, Началась функция модификации f:

00000000 00111110 00000110 00100100

Перевели 32 в 48. результат функции расширения Е:

00000000 00000001 11111100 00000000 11000001 00001000

Xor. побитово суммируем по модулю 2:

01111001 10010010 10110110 10100111 11011111 01001000

Преобразовали 48 в 32. С помощью узлов замены:

01110110 00111110 00011000 00110110

Перестановка бит в конце функции. Перестановка P:

01110110 01000010 10010110 01110110

HPart после модификации. HPart XOR f(LPart,Key):

00111111 00100001 00110100 00011010

Результат дешифрования блока. Конечная перестановка IP-1:

01010000 01101001 01101110 01100001 01100101 01110110 00000000 00000000

Результат блока бит до перевертывания(исправление недочета BitArray)... Блок № 0:

01010000 01101001 01101110 01100001 01100101 01110110 00000000 00000000

Результат блока бит после перевертывания...:

00001010 10010110 01110110 10000110 10100110 01101110 00000000 00000000

После дешифрования получили сообщение: Pinaev

 

 
Код программы

using System;

using System.Collections;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace DES

{

public partial class Form1: Form

{

public Form1()

{

InitializeComponent();

}

public string bufff;

public string bufff1;

public string IshSoobshen;

public byte[] T;

public bool Shifr;

public BitArray btIsh = new BitArray(64);

public BitArray[] btTransp;

public BitArray bt1;

public BitArray bt2;

public BitArray btKluch1;

public BitArray btKluch2;

public BitArray[] KLUCHI;

public BitArray[] KLUCHIPREDVORITELNII;

public BitArray kluchC0;

public BitArray kluchD0;

public BitArray kluchC1;

public BitArray kluchD1;

public BitArray[] L0;

public BitArray[] H0;

public BitArray[] L1;

public BitArray[] H1;

public BitArray[] LPart;

public BitArray[] HPart;

public BitArray[] HHH;

public BitArray[] b2b3b4b5;

public BitArray[] b1b6;

public BitArray[] TTT;

public BitArray HShtrih;

public BitArray Funk;

public BitArray[] ItogPredv;

public BitArray[] Itog;

public BitArray[] CBCItog;

public int[] NStr;

public int[] NStolb;

public int[,] UzelZam;

public int buf;

public int buf2;

public BitArray buf3;

public bool steck;

public bool kluch;

public bool vector;

public BitArray Vekt;

public bool EEE2;

public bool EEE3;

public bool EDE2;

public bool EDE3;

public int[] IP = {58,50,42,34,26,18,10,2,

60,52,44,36,28,20,12,4,

62,54,46,38,30,22,14,6,

64,56,48,40,32,24,16,8,

57,49,41,33,25,17,9,1,

59,51,43,35,27,19,11,3,

61,53,45,37,29,21,13,5,

63,55,47,39,31,23,15,7};

public int[] IP1 = {40,8,48,16,56,24,64,32,

39,7,47,15,55,23,63,31,

38,6,46,14,54,22,62,30,

37,5,45,13,53,21,61,29,

36,4,44,12,52,20,60,28,

35,3,43,11,51,19,59,27,

34,2,42,10,50,18,58,26,

33,1,41,9,49,17,57,25};

public int[] E = {32,1,2,3,4,5,

4,5,6,7,8,9,

8,9,10,11,12,13,

12,13,14,15,16,17,

16,17,18,19,20,21,

20,21,22,23,24,25,

24,25,26,27,28,29,

28,29,30,31,32,1};

public int[] P = {16,7,20,21,29,12,28,17,

1,15,23,26,5,18,31,10,

2,8,24,14,32,27,3,9,

19,13,30,6,22,11,4,25};

public int[] S10 = { 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7 };

public int[] S11 = { 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8 };

public int[] S12 = { 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0 };

public int[] S13 = { 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 };

public int[] S20 = { 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10 };

public int[] S21 = { 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5 };

Информация о работе Алгоритм шифрования DES