Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практики / Практика 4

.doc
Скачиваний:
19
Добавлен:
20.06.2014
Размер:
91.65 Кб
Скачать

Липецкий государственный технический университет

Кафедра автоматизированных систем управления

Практическая работа №4

по средствам и методам защиты информации

Асимметричные системы шифрования

Студент

Филатов А.А.

подпись, дата

фамилия, инициалы

Группа

АС-09-2

Принял

Батищев Р.В.

ученая степень, звание

подпись, дата

фамилия, инициалы

Липецк 2012

1. Задание

Изучить асимметричные методы шифрования. Реализовать метод RSA. Зашифровать и расшифровать заданное слово, используя заданные ключи, различные для шифрования и дешифрования.

2. Краткая теория

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

RSA-ключи генерируются следующим образом:[14]

Выбираются два различных случайных простых числа и заданного размера (например, 1024 бита каждое).

Вычисляется их произведение , которое называется модулем.

Вычисляется значение функции Эйлера от числа :

Выбирается целое число (), взаимно простое со значением функции . Обычно в качестве берут простые числа, содержащие небольшое количество единичных бит в двоичной записи, например, простые числа Ферма 17, 257 или 65537.

Число называется открытой экспонентой (англ. public exponent)

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

Слишком малые значения , например 3, потенциально могут ослабить безопасность схемы RSA.[15]

Вычисляется число , мультипликативно обратное к числу по модулю , то есть число, удовлетворяющее условию:

Число называется секретной экспонентой. Обычно, оно вычисляется при помощи расширенного алгоритма Евклида.

Пара публикуется в качестве открытого ключа RSA (англ. RSA public key).

Пара играет роль закрытого ключа RSA (англ. RSA private key) и держится в секрете.

3. Текст программы

#include <math.h>

#include <iostream>

#include <locale.h>

using namespace std;

int PowerMod(int a, int b, int c) {

// возведение t в степень k

a%=c;

int res = 1;

while (b)

{

if (b & 1) res =(res*a)%c;

a=(a*a)%c;

b >>= 1;

}

return res;

}

struct en_p

{

char en[10];

double hash;

};

void main()

{

int e=11, d=131;

int n=143;

setlocale(LC_ALL,"Rus");

char m[]="антифашист";

char dec[10];

double hash =0;

cout << "Исходное сообщение: ";

for(int i=0;i<strlen(m);i++)

cout << m[i];

cout << endl;

struct en_p enp;

for(int i=0;i<strlen(m);i++)

enp.en[i] = PowerMod((int)m[i]+33,e,n) - 33;

cout << "Закодированное сообщение: ";

for(int i=0;i<strlen(m);i++)

cout << (int) enp.en[i] << " ";

cout << endl;

enp.hash=0;

for(int i=0;i<10;i++)

{

enp.hash+=((int)enp.en[i]+33)%3;

}

cout << "Хэш: " << enp.hash << endl;

enp.hash = PowerMod((int)enp.hash,e,n);

cout << "Зашифрованный хэш: " << enp.hash << endl;

int enhash = PowerMod((int)enp.hash,d,n);

cout << "Расшифрованный хэш: " << enhash << endl;

double hash1=0;

for(int i=0;i<10;i++)

{

hash1+=((int)enp.en[i]+33)%3;

}

cout << "Пересчитанный хэш: " << hash1 << endl;

if(enhash == hash1)

cout << "Проверка подлинности прошла успешно!" << endl;

for(int i=0;i<strlen(m);i++)

dec[i] = PowerMod((int)enp.en[i]+33,d,n)-33;

cout << "Дешифрованное сообщение: ";

for(int i=0;i<strlen(m);i++)

cout << dec[i];

cout << endl;

system("pause");

}

4. Пример

6. Выводы о проделанной работе

В данной практической работе был реализован алгоритм RSA шифрования. Было выяснено, что для шифрования используется одна пара ключей, а для расшифрования другая. В результате зашифрованное одним ключом слово дешифруется правильно.

7. Список источников

      1. GFI LANGuard: Официальный сайт. URL: http://www.gfi.ru/languard. 24.09.2012

      2. Dr. Web. URL: http://vms.drweb.com/. 24.09.2012

7

Соседние файлы в папке Практики