Симметричные криптосистемы. Метод гаммирования

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 23.12.2016
Размер файла 574,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Симметричные криптосистемы. Метод гаммирования

Введение

Цель работы: Научиться шифровать и дешифровать исходный текст методом гаммирования.

Постановка задачи: Разработать приложение, которое позволит пользователю открыть файл с исходным текстом, зашифровать его, задав при этом необходимые константы А и С, а также исходную величину То, которая выбирается в качестве порождающего числа. Зашифрованный текст необходимо сохранять в другой файл. А также приложение должно позволять расшифровать зашифрованный текст, зная при этом все необходимые параметры, которые использовались при наложении на исходный текст некоторой псевдослучайной последовательности, генерируемой на основе ключа.

Гаммирование: Гаммирование является также широко применяемым криптографическим преобразованием. На самом деле граница между гаммированием и использованием бесконечных ключей и шифров Вижинера, о которых речь шла выше, весьма условная.

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

Процесс дешифрования данных сводится к повторной генерации гаммы шифра при известном ключе и наложении такой гаммы на зашифрованные данные.

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

Метод гаммирования становится бессильным, если злоумышленнику становится известен фрагмент исходного текста и соответствующая ему шифрограмма. Простым вычитанием по модулю получается отрезок ПСП и по нему восстанавливается вся последовательность. Злоумышленники может сделать это на основе догадок о содержании исходного текста. Так, если большинство посылаемых сообщений начинается со слов "СОВ. СЕКРЕТНО", то криптоанализ всего текста значительно облегчается. Это следует учитывать при создании реальных систем информационной безопасности.

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

Датчики ПСЧ: Чтобы получить линейные последовательности элементов гаммы, длина которых превышает размер шифруемых данных, используются датчики ПСЧ. На основе теории групп было разработано несколько типов таких датчиков.

Конгруэнтные датчики: В настоящее время наиболее доступными и эффективными являются конгруэнтные генераторы ПСП. Для этого класса генераторов можно сделать математически строгое заключение о том, какими свойствами обладают выходные сигналы этих генераторов с точки зрения периодичности и случайности.

Одним из хороших конгруэнтных генераторов является линейный конгруэнтный датчик ПСЧ. Он вырабатывает последовательности псевдослучайных чисел T(i), описываемые соотношением:

T(i+1) = (A*T(i)+C) mod m,

где А и С - константы, Т(0) - исходная величина, выбранная в качестве порождающего числа. Очевидно, что эти три величины и образуют ключ.

Такой датчик ПСЧ генерирует псевдослучайные числа с определенным периодом повторения, зависящим от выбранных значений А и С. Значение m обычно устанавливается равным 2n, где n - длина машинного слова в битах. Датчик имеет максимальный период М до того, как генерируемая последовательность начнет повторяться. По причине, отмеченной ранее, необходимо выбирать числа А и С такие, чтобы период М был максимальным. Как показано Д. Кнутом, линейный конгруэнтный датчик ПСЧ имеет максимальную длину М тогда и только тогда, когда С - нечетное, и А mod 4 = 1. гаммирование криптографическая программа алгоритм

Для шифрования данных с помощью датчика ПСЧ может быть выбран ключ любого размера. Например, пусть ключ состоит из набора чисел x(j) размерностью b, где j=1, 2,..., n. Тогда создаваемую гамму шифра G можно представить как объединение непересекающихся множеств H(j).

1. Описание алгоритма перестановки

В данной лабораторно работе разработаны 3 генератора: линейный конгруэнтный генератор, нелинейный конгруэнтный генератор, и алгоритм Блюма-Микали.

Алгоритм Блюма - Микали - это криптографически стойкий алгоритм генерации псевдослучайных последовательностей, с использованием зерна.

Стойкость алгоритма определяется трудностью решения задачи дискретного логарифма. Пусть g - просто, и p - простое. Ключ используется в качестве начального значения 0 x, последовательность формируется согласно рекуррентному выражению x g p i x i+1 = mod. Выходом генератора является 1, если 2 ?1 < p i x, и 0 в противном случае. Если p достаточно велико, чтобы вычисление дискретного логарифма mod p стало физически невозможным, то этот генератор - безопасен.

2. Демонстрация работы программы

Рисунок 3.1 - Работа программы с ключом

Рисунок. Текстовый файл для шифрования

Рисунок. Зашифрованный файл (алгоритм Блюма-Микали)

Рисунок. Расшифрованный файл

Вывод

Во время выполнения лабораторно работы:

- реализовал метод гаммирования линейным конгруэнтным генератором;

- реализовал метод гаммирования нелинейным конгруэнтным генератором;

- реализовал метод гаммирования алгоритмом Блюма-Микали.

Приложение А. Код программы

using …

namespace bespeka_4_bard

{

public partial class Form1: Form

{

public Form1()

{

InitializeComponent();

}

int value = 0;

private void button1_Click(object sender, EventArgs e)

{

int key = 0; string s = "";

int m=0, x=0, a=0, c=0;

m = (int)numericUpDownM.Value;

x = (int)numericUpDownX.Value;

a = (int)numericUpDownA.Value;

c = (int)numericUpDownC.Value;

if (m < a || m < c || m < x)

MessageBox.Show("Введены не верные данные!Проверте: x < M, a < M, c < M.");

else

{

//Файл для шифрований

openFileDialog1.Filter = "txt files (*.txt)|*.txt";

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

{

System.IO.StreamReader sr = new

System.IO.StreamReader(openFileDialog1.FileName);

//Сохраняем сюда

StreamWriter sw = new StreamWriter("C:/baspeke_4/1shifr.txt");

while (!sr.EndOfStream)

{

s = sr.ReadLine();

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

{

x = ((a * x) + c) % m; // формула линейного конгруэнтного метода генерации псевдослучайных чисел

key = x;

}

sw.WriteLine(Shifr(s, key));

}

sr.Close();

sw.Close();

MessageBox.Show("Файл зашифрован!");

}

}

}

private void button2_Click(object sender, EventArgs e)

{

int key = 0;

int m = 0, x = 0, a = 0, c = 0;

m = (int)numericUpDownM.Value;

x = (int)numericUpDownX.Value;

a = (int)numericUpDownA.Value;

c = (int)numericUpDownC.Value;

string s = "";

if (m < a || m < c || m < x)

MessageBox.Show("Введены не верные данные!Проверте: x < M, a < M, c < M.");

else

{

StreamReader sr = new StreamReader("C:/baspeke_4/1shifr.txt");

StreamWriter sw = new StreamWriter("C:/baspeke_4/rash.txt");

while (!sr.EndOfStream)

{

s = sr.ReadLine();

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

{

x = ((a * x) + c) % m; // формула линейного конгруэнтного метода генерации псевдослучайных чисел

key = x;

}

sw.WriteLine(Rashifr(s, key));

}

sr.Close();

sw.Close();

MessageBox.Show("Файл расшифрован!");

}

}

//шифровка

private string Shifr(string stroka, int keyword)

{

string result = "";

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

{

//Если величина сдвига больше длины алфавита кирилицы

if (keyword > 32)

keyword = keyword % 32;

//Если не кириллица

if (((int)(stroka [i]) < 1040) || ((int)(stroka [i]) > 1103))

result += stroka [i];

//Если буква является строчной

if ((Convert.ToInt16(stroka [i]) >= 1072) && (Convert.ToInt16(stroka [i]) <= 1103))

{

//Если буква, после сдвига выходит за пределы алфавита

if (Convert.ToInt16(stroka [i]) + keyword > 1103)

//Добавление в строку результатов символ

result += Convert.ToChar(Convert.ToInt16(stroka [i]) + keyword - 32);

//Если буква может быть сдвинута в пределах алфавита

else

//Добавление в строку результатов символ

result += Convert.ToChar(Convert.ToInt16(stroka [i]) + keyword);

}

//Если буква является прописной

if ((Convert.ToInt16(stroka [i]) >= 1040) && (Convert.ToInt16(stroka [i]) <= 1071))

{

//Если буква, после сдвига выходит за пределы алфавита

if (Convert.ToInt16(stroka [i]) + keyword > 1071)

//Добавление в строку результатов символ

result += Convert.ToChar(Convert.ToInt16(stroka [i]) + keyword - 32);

//Если буква может быть сдвинута в пределах алфавита

else

//Добавление в строку результатов символ

result += Convert.ToChar(Convert.ToInt16(stroka [i]) + keyword);

}

}

return result;

}

//расшифровка

private string Rashifr(string stroka, int keyword)

{

string result = "";

int tr = 0, t = 0;

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

{

//Если величина сдвига больше длины алфавита кирилицы

if (keyword > 32)

keyword = keyword % 32;

//Если не кириллица

if (((int)(stroka [i]) < 1040) || ((int)(stroka [i]) > 1103))

result += stroka [i];

//Если буква является строчной

if ((Convert.ToInt16(stroka [i]) >= 1072) && (Convert.ToInt16(stroka [i]) <= 1103))

{

//Если буква, после сдвига выходит за пределы алфавита

if (Convert.ToInt16(stroka [i]) - keyword < 1072)

//Добавление в строку результатов символ

result += Convert.ToChar(Convert.ToInt16(stroka [i]) - keyword + 32);

//Если буква может быть сдвинута в пределах алфавита

else

//Добавление в строку результатов символ

result += Convert.ToChar(Convert.ToInt16(stroka [i]) - keyword);

}

//Если буква является прописной

if ((Convert.ToInt16(stroka [i]) >= 1040) && (Convert.ToInt16(stroka [i]) <= 1071))

{

//Если буква, после сдвига выходит за пределы алфавита

if (Convert.ToInt16(stroka [i]) - keyword < 1040)

//Добавление в строку результатов символ

result += Convert.ToChar(Convert.ToInt16(stroka [i]) - keyword + 32);

//Если буква может быть сдвинута в пределах алфавита

else

//Добавление в строку результатов символ

result += Convert.ToChar(Convert.ToInt16(stroka [i]) - keyword);

}

}

return result;

}

private void button3_Click(object sender, EventArgs e)

{

MessageBox.Show("Внимание! x < M, a < M, c < M.");

numericUpDownM.Value = 100;

numericUpDownX.Value = 2;

numericUpDownA.Value = 8;

numericUpDownC.Value = 65;

}

private void button6_Click(object sender, EventArgs e)

{

int key = 0; string s = "";

int m = 0, x = 0, a = 0, b = 0,c = 0;

m = (int)numericUpDownM1.Value;

x = (int)numericUpDownX1.Value;

a = (int)numericUpDownA1.Value;

b = (int)numericUpDownB1.Value;

c = (int)numericUpDownC1.Value;

if (m < a || m < c || m < x || m < b)

MessageBox.Show("Введены не верные данные!Проверте: x < M, a < M, c < M.");

else

{

//Файл для шифрований

openFileDialog1.Filter = "txt files (*.txt)|*.txt";

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

{

System.IO.StreamReader sr = new

System.IO.StreamReader(openFileDialog1.FileName);

//Сохраняем сюда

StreamWriter sw = new StreamWriter("C:/baspeke_4/nelen_1shifr.txt");

while (!sr.EndOfStream)

{

s = sr.ReadLine();

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

{

x = ((a * (x*x)) + (b*x)+c) % m; // формула линейного конгруэнтного метода генерации псевдослучайных чисел

key = x;

}

sw.WriteLine(Shifr(s, key));

}

sr.Close();

sw.Close();

MessageBox.Show("Файл зашифрован!");

}

}

}

private void button5_Click(object sender, EventArgs e)

{

int key = 0;

int m = 0, x = 0, a = 0, b = 0, c = 0;

m = (int)numericUpDownM1.Value;

x = (int)numericUpDownX1.Value;

a = (int)numericUpDownA1.Value;

b = (int)numericUpDownB1.Value;

c = (int)numericUpDownC1.Value;

string s = "";

if (m < a || m < c || m < x||m<b)

MessageBox.Show("Введены не верные данные!Проверте: x < M, a < M, c < M.");

else

{

StreamReader sr = new StreamReader("C:/baspeke_4/nelen_1shifr.txt");

StreamWriter sw = new StreamWriter("C:/baspeke_4/nelen_rash.txt");

while (!sr.EndOfStream)

{

s = sr.ReadLine();

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

{

x = ((a * (x * x)) + (b * x) + c) % m;// формула линейного конгруэнтного метода генерации псевдослучайных чисел

key = x;

}

sw.WriteLine(Rashifr(s, key));

}

sr.Close();

sw.Close();

MessageBox.Show("Файл расшифрован!");

}

}

private void button4_Click(object sender, EventArgs e)

{

MessageBox.Show("Внимание! x < M, a < M, b < M, c < M.");

numericUpDownM1.Value = 100;

numericUpDownX1.Value = 2;

numericUpDownA1.Value = 8;

numericUpDownB1.Value = 34;

numericUpDownC1.Value = 65;

}

private void button7_Click(object sender, EventArgs e)

{

int p = 0, x = 0, g = 0, a=0, key =0;

string s = "";

p = (int)numericUpDownP.Value;

g = (int)numericUpDownG.Value;

x = (int)numericUpDownXx.Value;

//if (m < a || m < c || m < x || m < b)

// MessageBox.Show("Введены не верные данные!Проверте: x < M, a < M, c < M.");

//else

{

//Файл для шифрований

openFileDialog1.Filter = "txt files (*.txt)|*.txt";

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

{

System.IO.StreamReader sr = new

System.IO.StreamReader(openFileDialog1.FileName);

//Сохраняем сюда

StreamWriter sw = new StreamWriter("C:/baspeke_4/Blum-Micali_shifr.txt");

while (!sr.EndOfStream)

{

s = sr.ReadLine();

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

{

a = modExp(g, x, p);

x = a;

key = x;

}

sw.WriteLine(Shifr(s, key));

}

sr.Close();

sw.Close();

MessageBox.Show("Файл зашифрован!");

}

}

}

public static int modExp(int g, int x, int p)

{

int r = 1;

while (x > 0)

{

if (x % 2 == 1)

r = r * g % p;

x = (int)Math.Floor((double)x / 2);

g = g * g % p;

}

return r;

}

private void button8_Click(object sender, EventArgs e)

{

int p = 0, x = 0, g = 0, a = 0, key = 0;

string s = "";

p = (int)numericUpDownP.Value;

g = (int)numericUpDownG.Value;

x = (int)numericUpDownXx.Value;

StreamReader sr = new StreamReader("C:/baspeke_4/Blum-Micali_shifr.txt");

StreamWriter sw = new StreamWriter("C:/baspeke_4/Blum-Micali_rash.txt");

while (!sr.EndOfStream)

{

s = sr.ReadLine();

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

{

a = modExp(g, x, p);

x = a;

key = x;

}

sw.WriteLine(Rashifr(s, key));

}

sr.Close();

sw.Close();

MessageBox.Show("Файл расшифрован!");

}

private void button9_Click(object sender, EventArgs e)

{

numericUpDownP.Value=39319;

numericUpDownG.Value=4;

numericUpDownXx.Value=1022;

}

}

}

Размещено на Allbest.ru

...

Подобные документы

  • Криптография и шифрование. Симметричные и асимметричные криптосистемы. Основные современные методы шифрования. Алгоритмы шифрования: замены (подстановки), перестановки, гаммирования. Комбинированные методы шифрования. Программные шифраторы.

    реферат [57,7 K], добавлен 24.05.2005

  • Особенности шифрования данных, предназначение шифрования. Понятие криптографии как науки, основные задачи. Анализ метода гаммирования, подстановки и метода перестановки. Симметрические методы шифрования с закрытым ключом: достоинства и недостатки.

    курсовая работа [564,3 K], добавлен 09.05.2012

  • Функциональное и эксплуатационное назначение данного изделия. Требования к составу и параметрам технических средств. Описание алгоритма ГОСТ 28147-89 в режиме гаммирования. Технико-экономические показатели разработки. Интерфейс программного продукта.

    курсовая работа [1,7 M], добавлен 27.02.2015

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

    курсовая работа [129,6 K], добавлен 17.02.2011

  • Исследование системы распределения ключей на основе линейных преобразований. Описание компонентов сети конфиденциальной связи. Характеристика отечественного алгоритма шифрования данных. Обзор результатов расчетов криптостойкости алгоритма шифрования.

    контрольная работа [56,5 K], добавлен 26.09.2012

  • Разработка программы, реализующей процедуры шифрования и расшифрования текста по стандарту DES (Data Encryption Standard). Структура алгоритма шифрования, схема выработки ключевых элементов. Использование криптографического программного средства.

    курсовая работа [1,7 M], добавлен 15.06.2013

  • Схема работы и требования к программам шифрования и дешифрования. Алгоритмы и тексты программы шифрования и программы дешифрования, выполненные на языке программирования C/C++. Содержание файла с исходным текстом, с шифротекстом, с дешифрованным текстом.

    курсовая работа [24,7 K], добавлен 20.10.2014

  • История появления и развития шифрования текста. Проблема шифрования и дешифрования текстовых сообщений в современности. Создание программы для зашифровки и расшифровки вводимого текста пятью методами: Атбаш, Цезаря, Полибия, Гронсфельда и Винжера.

    курсовая работа [923,6 K], добавлен 26.12.2011

  • Основные методы криптографической защиты информации. Система шифрования Цезаря числовым ключом. Алгоритмы двойных перестановок и магические квадраты. Схема шифрования Эль Гамаля. Метод одиночной перестановки по ключу. Криптосистема шифрования данных RSA.

    лабораторная работа [24,3 K], добавлен 20.02.2014

  • Методы шифрования данных. Криптосхема, реализующая алгоритм зашифрования в режиме гаммирования. Визуальное представление, схема приемника и передатчика. Расшифровывание зашифрованных данных в режиме гаммирования. Стойкость и возможности обхождения шифра.

    реферат [823,8 K], добавлен 26.12.2011

  • Сравнительный анализ роторной криптосистемы на основании криптографической машины "Энигма" времен второй мировой войны и усовершенствованной "Энигма". Ассиметричная система шифрования и дешифрования данных RSA, ее принципиальное отличие от симметричных.

    курсовая работа [1,7 M], добавлен 14.12.2012

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

    курсовая работа [863,0 K], добавлен 21.04.2012

  • Применение алгоритмов шифрования и дешифрования данных в компьютерной технике в системах сокрытия конфиденциальной и коммерческой информации от злонамеренного использования сторонними лицами. Классический пример - симметричные криптографические алгоритмы.

    дипломная работа [44,9 K], добавлен 08.07.2009

  • Основные требования к разрабатываемым программам и исходным текстовым файлам. Характеристика шифров замены. Укрупненные структурные схемы и коды программ шифрования и дешифрования, скриншоты их выполнения. Пример зашифрованного текста и его дешифрования.

    курсовая работа [556,8 K], добавлен 14.01.2013

  • Значение применения криптоалгоритмов в современном программном обеспечении. Классификация методов и средств защиты информации, формальные, неформальные средства защиты. Традиционные симметричные криптосистемы. Принципы криптографической защиты информации.

    методичка [359,6 K], добавлен 30.08.2009

  • Изучение классических криптографических алгоритмов моноалфавитной подстановки и перестановки для защиты текстовой информации. Анализ частоты встречаемости символов в тексте для криптоанализа классических шифров. Сущность одноалфавитного метода шифрования.

    лабораторная работа [2,8 M], добавлен 25.03.2015

  • Создание приложения для шифрования–дешифрования текста тремя алгоритмами (алгоритм "Цезаря","Модифицированного Цезаря", "Скитала"). Исходный текст компонента. Инструкция пользователя, возможность просмотра примерного алгоритма. Исходный текст программы.

    курсовая работа [2,8 M], добавлен 27.02.2015

  • Основные способы криптографии, история ее развития. Принцип шифрования заменой символов, полиалфавитной подстановкой и методом перестановки. Симметричный алгоритм шифрования (DES). Открытое распределение ключей. Шифры Ривеста-Шамира-Алдемана и Эль Гамаля.

    реферат [39,3 K], добавлен 22.11.2013

  • Традиционные симметричные криптосистемы. Основные понятия и определения. Методы шифрования. Метод перестановок на основе маршрутов Гамильтона. Асимметричная криптосистема RSA. Расширенный алгоритм Евклида. Алгоритмы электронной цифровой подписи Гамаля.

    курсовая работа [235,6 K], добавлен 06.01.2017

  • Рассмотрение основных понятий криптографии: конфиденциальности, целостности, аутентификации и цифровой подписи. Описание криптографических средств защиты (криптосистемы, принципы работы криптосистемы, распространение ключей, алгоритмы шифрования).

    дипломная работа [802,2 K], добавлен 08.06.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.