Алгоритм шифрования CAST
Принцип работы блочного алгоритма симметричного шифрования на основе сети Фейстеля. Реализация алгоритма криптосистемы на языке программирования C# в Visual Studio. Принцип зашифровки текста. Проверка работоспособности и корректности работы программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 20.12.2017 |
Размер файла | 135,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Министерство образования и науки российской федерации
Федеральное государственное автономное образовательное учреждение высшего профессионального образования
Национальный исследовательский ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ
«МИСиС»
Институт информационных технологий и автоматизированных систем управления
Кафедра электротехники и информационно-измерительных систем
Контрольная работа
по дисциплине: Информационная безопасность и защита информации
на тему: Алгоритм шифрования CAST
Москва 2017
Оглавление
Введение
- 1. Принцип работы алгоритма
- 2. Математическая модель алгоритма
- 3. Реализация алгоритма на языке C#
- 4. Проверка программы
- Заключение
Введение
- Криптография -- наука о методах обеспечения конфиденциальности (невозможности прочтения информации посторонним), целостности данных (невозможности незаметного изменения информации), аутентификации (проверки подлинности авторства или иных свойств объекта), а также невозможности отказа от авторства.
Изначально криптография изучала методы шифрования информации -- обратимого преобразования открытого (исходного) текста на основе секретного алгоритма или ключа в шифрованный текст (шифротекст). Традиционная криптография образует раздел симметричных криптосистем, в которых зашифровывание и расшифровывание проводится с использованием одного и того же секретного ключа. Помимо этого раздела современная криптография включает в себя асимметричные криптосистемы, системы электронной цифровой подписи (ЭЦП), хеш-функции, управление ключами, получение скрытой информации, квантовую криптографию.
Криптография не занимается защитой от обмана, подкупа или шантажа законных абонентов, кражи ключей и других угроз информации, возникающих в защищённых системах передачи данных.
Криптография -- одна из старейших наук, её история насчитывает несколько тысяч лет.
В данной работе представлен алгоритм шифрования CAST. Используется в целом ряде продуктов криптографической защиты, в частности некоторых версиях PGP и GPG и кроме того одобрен для использования Канадским правительством. Хотя CAST-128 защищён патентом Entrust, его можно использовать во всём мире для коммерческих или некоммерческих целей бесплатно. CAST -- это популярный 64-битовый шифр, допускающий размеры ключа вплоть до 128 бит, который был разработан в Канаде Карлайлом Адамсом (Carlisle Adams) и Стаффордом Таваресом (Stafford Tavares).
- Цель работы - построение программного продукта на основе заданного криптографического алгоритма. Для ее реализации необходимо решить следующие задачи:
- 1. Изучить криптографический алгоритм
- 2. Построить математическую модель, удобную для программирования
- 3. Реализовать заданный алгоритм криптосистемы на одном из языков программирования
- 4. Произвести проверку работоспособности и корректности работы программы
алгоритм шифрование криптосистема программа
1. Принцип работы алгоритма
- Алгоритм CAST в криптографии -- блочный алгоритм симметричного шифрования на основе сети Фейстеля. Сеть Фейстеля, конструкция Фейстеля -- один из методов построения блочных шифров. Сеть состоит из ячеек, называемых ячейками Фейстеля. На вход каждой ячейки поступают данные и ключ. На выходе каждой ячейки получают изменённые данные и изменённый ключ. Все ячейки однотипны, и говорят, что сеть представляет собой определённую многократно повторяющуюся (итерированную) структуру. Ключ выбирается в зависимости от алгоритма шифрования/расшифрования и меняется при переходе от одной ячейки к другой. При шифровании и расшифровании выполняются одни и те же операции; отличается только порядок ключей. Ввиду простоты операций сеть Фейстеля легко реализовать как программно, так и аппаратно. Большинство современных блочных шифров (DES, RC2, RC5, RC6, Blowfish, FEAL, CAST-128, TEA, XTEA, XXTEA и др.) используют сеть Фейстеля в качестве основы.
- CAST-128 основан на сети Фейстеля. Полный алгоритм шифрования изложен ниже.
- Реализация алгоритма была осуществлена на языке C# в Visual Studio в приложении - WindowsForms.
Создали форму, кнопки и области для вводя текста и ключей.
В данной программе для текста взяли международный язык - английский, по нему и проходило шифрование текста. Все данные появляются по кнопке “Текст из файла”, из файла на поле программы загружается текст, который будем шифровать и два ключа, ключ маскировки и ключ перестановки. Есть ещё две кнопки, одна из них выход из программы - “Выход”, вторая - “Зашифровать”.
Зашифровка происходит по следующему принципу:
- Мы берём текст и из его начала берём 8 символов, что соответствует 64 битам информации. Ключ состоит из 32 бит - 4 символа. Для кодировки взяли UTF-8. UTF-8 является кодировкой с переменной длиной кодирования. Если символ может быть закодирован одним байтом(потому что номер пункта символа очень маленький), UTF-8 закодирует его одним байтом. Если нужно 2 байта, то используется 2 байта. Кодировка сообщает старшими битами, сколькими битами кодируется текущий символ. Такой способ экономит место, но так же и тратит его в случае, если эти сигнальные биты часто используются. В данном случае английские символы кодируют 7-ю битами. Чтобы было удобнее производить вычисления, было выполнено следующее действие: для каждого символа, который представляет меньше 8 бит - добавить нули в начало этого символа, чтобы стало ровно 8 символов.
- Так было сделано и для текста и для ключа. Далее символы по UTF-8 переводились в десятичные числа. Восемь символом которые мы взяли в начале делятся на 2 блока L0 и R0, каждой переменной принадлежит 4 символа. Первые 4 записываются в L0, вторые в R0.
- В R0 поступает 4 символа и ключ маскировки, который складывается с каждым символом по модулю 2 (XOR). Далее происходит сдвиг на 1 влево.
- Каждый символ внутри программы разделён пробелом, так программа понимает, к какому из чисел обращаются. Все числа записаны в два двумерных массива LL и RR. Каждый представляет собой одномерный массив, в ячейках которого находится ещё один одномерный массив. Первый массив состоит из 16 так как у нас 16 раундов, второй из 4, так как по 4 символа используются для вычисления. После того, как прошло сложение и сдвиг, происходит сложение по модулю 2 с левой стороной текста.
Далее текст с левой стороны переходит на правую сторону, а начальное значение правой стороны, на левую сторону. Такая перестановка будет 12 раундов. Потом во избежание больших чисел после первого сложения происходит обычное вычитание из числа раунда, раунда предыдущего, а потом сдвиг на определённое число. После этого так же складывается с левой стороной и меняется местами до 16 раунда.
Далее нужно вывести полученный текст правая и левые стороны поменялись местами на последнем раунде, следовательно, нужно поменять их местами.
Меняем местами и склеиваем.
Так алгоритм выполняется свою работу для каждых восьми символов текста, пока текст не закончится. Шифровка выводится на экран символами соответствующим их номерам таблицы. Номера берётся из последнего раунда, после всех перестановок.
- Рис. 1 Работа функции R программы
2. Математическая модель алгоритма
- Алгоритм CAST использует пары раундовых ключей. Которые используются для реализации алгоритма.
- В данной программе на вход подаётся ключ маскировки Km и ключ перестановки Kr, которые мы можем задать, как в самой программе, так и через текстовый файл, откуда берутся данные изначально.
Для каждого рунда используется формула:
- I = ((Kmi + Ri-1) <<< Kri)
- Берётся определённая часть текста состоящая из 4 символов. Каждый символ складывается с ключём, сложение используется по модулю 2 т.е. mod 2, XOR или ^ на языке C#.
Потом использовалась перестановка на 1 символ, как по алгоритму. Если взять большую перестановку, то числа получатся очень большими, они не поместятся в диапазон используемых типов.
- Далее, происходило сравнение, на каком раунде находится программа, так как числа получались большими, в алгоритме было применено с 12 по 16 раунды - вычитание, после применения сложения по модулю 2 и перестановки. Использовалась кодировка UTF-8, все символы брались из единой базы символов Unicode, в которой каждый символ на любом языке мира имеет свою ячейку с номером.
- 3. Реализация алгоритма на языке C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Numerics;
namespace CAST
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- textBox1.MaxLength = 4;
- textBox2.MaxLength = 1;
- }
- private void button2_Click(object sender, EventArgs e)
- {
- System.IO.StreamReader file = new System.IO.StreamReader(@"C:\Users\Admin\Desktop\sh.txt");
- richTextBox1.Text = file.ReadLine();
- textBox1.Text = file.ReadLine();
- textBox2.Text = file.ReadLine();
- }
- public void rrr()
- {
- for (int mass = 0; mass < richTextBox1.TextLength; mass++)
- {
- textBox9.Text = richTextBox1.TextLength.ToString();
- //Зашифровка
- byte[] bytes = Encoding.UTF8.GetBytes(richTextBox1.Text);
- StringBuilder sb = new StringBuilder();
- foreach (byte b in bytes)
- {
- sb.Append(Convert.ToString(b, 2).PadLeft(8, '0')).Append(' ');
- }
- richTextBox3.Text = sb.ToString();
textBox3.Text = richTextBox3.TextLength.ToString();
- //L0 - левая сторона шифра
- StringBuilder sb1 = new StringBuilder();
- for (int i = 0 + mass; i < 4 + mass; i++)
- {
- sb1.Append(Convert.ToString(bytes[i], 2).PadLeft(8, '0')).Append(' ');
- }
- richTextBox4.Text = sb1.ToString();
textBox4.Text = richTextBox4.TextLength.ToString();
- string[] str2 = richTextBox4.Text.Split(new char[] { ' ' });
- int[] b2 = new int[4];
- for (int i = 0; i < 4; i++)
- {
- b2[i] = Convert.ToInt32(str2[i], 2);
- richTextBox15.Text += b2[i].ToString() + " ";
- }
- //R0 - правая сторона шифра
- StringBuilder sb2 = new StringBuilder();
- for (int i = 4 + mass; i < 8 + mass; i++)
- {
- sb2.Append(Convert.ToString(bytes[i], 2).PadLeft(8, '0')).Append(' ');
- }
- richTextBox5.Text = sb2.ToString();
- textBox5.Text = richTextBox5.TextLength.ToString();
textBox6.Text = bytes.Length.ToString();
- ////Перевод двоичных в десятичные
- string[] str = richTextBox5.Text.Split(new char[] { ' ' });
- int[] b1 = new int[4];
- for (int i = 0; i < 4; i++)
- {
- b1[i] = Convert.ToInt32(str[i], 2);
- richTextBox10.Text += b1[i].ToString() + " ";
- }
- //Ключ
- byte[] bytess = Encoding.UTF8.GetBytes(textBox1.Text);
- if (mass == 0)
- {
- for (int j = 0; j < 4; j++)
- {
- richTextBox9.Text += bytess[j].ToString() + " ";
- }
- }
else { }
- int[][] RR = new int[17][];
- for (int ii = 0; ii < 17; ii++)
- {
- RR[ii] = new int[4];
- }
RR[0] = b1;
- int[][] LL = new int[17][];
- for (int ii = 0; ii < 17; ii++)
- {
- LL[ii] = new int[4];
- }
LL[0] = b2;
- //Сложение + сдвиг
- //R0-R16
- int[] p1 = new int[4];
int[] p2 = new int[4];
- for (int ii = 0; ii < 16; ii++)
- {
- for (int p11 = 0; p11 < 4; p11++)
- {
- p1[p11] = bytess[p11] ^ RR[ii][p11];
richTextBox13.Text += p1[p11].ToString() + " ";
- if ((ii >= 12))
- {
- p1[p11] = bytess[p11] - RR[ii][p11];
- }
p1[p11] = p1[p11] << int.Parse(textBox2.Text);
richTextBox11.Text += p1[p11].ToString() + " ";
- RR[ii][p11] = p1[p11];
- richTextBox6.Text += RR[ii][p11].ToString() + " ";
- }
- //L0-L16
- for (int p21 = 0; p21 < 4; p21++)
- {
- p2[p21] = p1[p21] ^ LL[ii][p21];
richTextBox16.Text += p2[p21].ToString() + " ";
- LL[ii][p21] = p2[p21];
- }
- richTextBox13.Text += "\n";
- richTextBox11.Text += "\n";
- richTextBox6.Text += "\n";
richTextBox16.Text += "\n";
- RR[ii + 1] = LL[ii];
LL[ii + 1] = RR[ii];
- richTextBox6.Clear();
- richTextBox16.Clear();
- for (int y = 0; y < 4; y++)
- {
- richTextBox6.Text += RR[ii][y].ToString() + " ";
- richTextBox16.Text += LL[ii][y].ToString() + " ";
- }
- }
- //Перевод десятичных в символы L0
string[] str4 = richTextBox16.Text.Split(new char[] { ' ' });
- char[] mc2 = new char[4];
- for (int i = 0; i < 4; i++)
- {
mc2[i] = (Char)(Convert.ToInt32(str4[i], 10));
- textBox8.Text += (mc2[i]);
- }
- //Перевод десятичных в символы R0
string[] str1 = richTextBox6.Text.Split(new char[] { ' ' });
- char[] mc1 = new char[4];
- for (int i = 0; i < 4; i++)
- {
mc1[i] = (Char)(Convert.ToInt32(str1[i], 10));
- richTextBox14.Text += (mc1[i]);
- }
richTextBox2.Text = textBox8.Text + richTextBox14.Text + ' ';
- mass = mass + 7;
- }
- 4. Проверка программы
Рис. 1
В начале работы программы нужно ввести текст, который будем шифровать, текст берётся из файла по кнопке, так же, как и ключи.
Заключение
- По проделанной работе можно сделать выводы: был изучен алгоритм шифрования Cast, реализовано данное шифрование было на языке C#, изучены побитовые операции, их сложение по модулю, их перевод из символов в десятичные, двоичные системы счисления и обратно в символы.
- Размещено на Allbest.ru
Подобные документы
Шифрование - широко используемый криптографический метод сохранения конфиденциальности информации. Описание схемы шифрования и расшифрования. Структура алгоритмов на основе сети Фейстеля. Скриншоты работающей программы. Скорость работы алгоритмов.
курсовая работа [545,2 K], добавлен 29.11.2010Симметричные криптосистемы как способ шифрования, в котором для шифрования и расшифровывания применяется один и тот же криптографический ключ. Разбор и реализация шифрования алгоритма: простая и двойная перестановка, перестановка "магический квадрат".
курсовая работа [3,3 M], добавлен 11.03.2013Исследование симметричных алгоритмов блочного шифрования. Минусы и плюсы алгоритма IDEA. Разработка программы аутентификации пользователя и сообщений на основе алгоритма IDEA. Выбор языка программирования. Тестирование и реализация программного средства.
курсовая работа [314,2 K], добавлен 27.01.2015История возникновения алгоритма симметричного шифрования, условия и особенности его применения на современном этапе. Принципы и функции исследуемой технологии. Анализ главных преимуществ и недостатков использования алгоритма, оценка его уязвимости.
курсовая работа [301,9 K], добавлен 29.10.2017Симметричные криптосистемы; алгоритмы шифрования и дешифрования данных, их применение в компьютерной технике в системах защиты конфиденциальной и коммерческой информации. Основные режимы работы алгоритма DES, разработка программной реализации ключа.
курсовая работа [129,6 K], добавлен 17.02.2011Схема работы и требования к программам шифрования и дешифрования. Алгоритмы и тексты программы шифрования и программы дешифрования, выполненные на языке программирования C/C++. Содержание файла с исходным текстом, с шифротекстом, с дешифрованным текстом.
курсовая работа [24,7 K], добавлен 20.10.2014Алгоритм ГОСТ 28147-89 симметричного шифрования на основе сети Фейстеля, основные режимы его работы. Атаки на системы защиты информации. Метод грубой силы. Атаки класса "встреча посередине". Характеристики ГОСТ 28147-89 и американского шифра Rijndael.
курсовая работа [510,7 K], добавлен 17.01.2012История появления и развития шифрования текста. Проблема шифрования и дешифрования текстовых сообщений в современности. Создание программы для зашифровки и расшифровки вводимого текста пятью методами: Атбаш, Цезаря, Полибия, Гронсфельда и Винжера.
курсовая работа [923,6 K], добавлен 26.12.2011Реализация алгоритма DES и режимов шифрования для любой длины сообщения и любой длины ключа. Шифрование сообщений различной длины и ключа с замериванием времени и скорости шифрования. Реализация алгоритма RSA. Сохранение зашифрованного файла на диск.
курсовая работа [398,4 K], добавлен 26.01.2010Разработка приложения для шифрования данных с помощью алгоритма DES5: процесс шифрования, расшифрования, получение ключей. Спецификация программы, процедуры и функции; описание интерфейса пользователя. Реализация задачи в среде программирования DELPHI.
курсовая работа [812,6 K], добавлен 27.03.2012Исследование системы распределения ключей на основе линейных преобразований. Описание компонентов сети конфиденциальной связи. Характеристика отечественного алгоритма шифрования данных. Обзор результатов расчетов криптостойкости алгоритма шифрования.
контрольная работа [56,5 K], добавлен 26.09.2012Разработка программы кодирования текстового файла при помощи блочного алгоритма шифрования ТЕА типа "Сеть Фейштеля", который основан на битовых операциях с 64-битным блоком и имеет 128-битный ключ шифрования. Результаты кодирования и декодирования.
лабораторная работа [299,9 K], добавлен 18.07.2013Симметричные и асиметричные методы шифрования. Шифрование с помощью датчика псевдослучайных чисел. Алгоритм шифрования DES. Российский стандарт цифровой подписи. Описание шифрования исходного сообщения асимметричным методом с открытым ключом RSA.
курсовая работа [101,1 K], добавлен 09.03.2009Формирование ключей для шифрования сообщения. Описание алгоритма RSA: шифрование и дешифрование. Понятие и история изобретения криптосистемы с открытым ключом. Свойства односторонней функции и сложность раскрытия шифра. Сущность цифровой подписи.
лабораторная работа [326,0 K], добавлен 04.11.2013Комбинированное использование симметричного и асимметричного шифрования. Зависимость между открытым и закрытым ключами. Основные недостатки симметричного шифрования. Схема двухстороннего конфиденциального обмена. Концепция шифрования по алгоритму DES.
презентация [1,4 M], добавлен 20.12.2012Описание принципа работы генетического алгоритма, проверка его работы на функции согласно варианту на основе готовой программы. Основные параметры генетического алгоритма, его структура и содержание. Способы реализации алгоритма и его компонентов.
лабораторная работа [20,2 K], добавлен 03.12.2014Разработка криптографического алгоритма программы ручного шифра по таблице Виженера. Разработка программы, выполняющей шифрование и расшифрование. Особенности использования в качестве ключа самого открытого текста. Алгоритмы решения "обратных" задач.
курсовая работа [45,0 K], добавлен 13.11.2009Создание приложения для шифрования–дешифрования текста тремя алгоритмами (алгоритм "Цезаря","Модифицированного Цезаря", "Скитала"). Исходный текст компонента. Инструкция пользователя, возможность просмотра примерного алгоритма. Исходный текст программы.
курсовая работа [2,8 M], добавлен 27.02.2015История появления симметричных алгоритмов шифрования. Роль симметричного ключа в обеспечении степени секретности сообщения. Диффузия и конфузия как способы преобразования бит данных. Алгоритмы шифрования DES и IDEA, их основные достоинства и недостатки.
лабораторная работа [335,9 K], добавлен 18.03.2013Реализация криптографического алгоритма шифрования и дешифрования с использованием шифра Виженера. Понятие и суть полиалфавитного шифра. Метод полиалфавитного шифрования буквенного текста с использованием ключевого слова. Взлом полиалфавитных шифров.
курсовая работа [863,0 K], добавлен 21.04.2012