Автор работы: Пользователь скрыл имя, 06 Мая 2014 в 01:16, лабораторная работа
Краткие сведения о стандарте шифрования DES
DES (Data Encryption Standard) симметричный алгоритм шифрования, разработанный фирмой IBM и утвержденный правительством США в 1977 году как официальный стандарт (FIPS 46-3). DES имеет блоки по 64 бита и 16 цикловую структуру сети Фейстеля. Для шифрования использует ключ с длиной 56 бит. Алгоритм использует комбинацию нелинейных (S-блоки) и линейных (перестановки E, IP, IP-1) преобразований.
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РК
НЕКОММЕРЧЕСКОЕ АКЦИОНЕРНОЕ ОБЩЕСТВО
АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ
Факультет радиотехники и связи
Кафедра Радиотехники
Отчет по лабораторной работе №2
По дисциплине «Теоретические основы защиты информации»
На тему: «Алгоритм шифрования DES»
Выполнил студент гр. СИБ-12-02
Жуматайулы Бекжан
Проверил ст. препод. Сафин Р.Т.
Алгоритм шифрования DES
DES (Data Encryption Standard) симметричный алгоритм
шифрования, разработанный фирмой IBM
и утвержденный правительством
США в 1977 году как официальный
стандарт (FIPS 46-3). DES имеет блоки по
64 бита и 16 цикловую структуру
сети Фейстеля. Для шифрования
использует ключ с длиной 56 бит.
Алгоритм использует
Основные достоинства алгоритма DES:
Процесс шифрования заключается в начальной перестановке битов 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__
Ключ из 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__
Ключ из 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 };