Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab-Security.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.23 Mб
Скачать

Практическая работа №3 Работа с асимметричным криптографическим алгоритмом rsa

Цель работы: ознакомиться с особенностями криптографического алгоритма RSA и его реализацией в Microsoft .NET Framework на языке программирования Microsoft Visual Basic 2010.

Введение

Начало асимметричным шифрам было положено в работе «Новые направления в современной криптографии» Уитфилда Диффи и Мартина Хеллмана, опубликованной в 1976 году. Находясь под влиянием работы Ральфа Меркле о распространении открытого ключа, они предложили метод получения секретных ключей, используя открытый канал. Этот метод экспоненциального обмена ключей, который стал известен как обмен ключами Диффи – Хеллмана, был первым опубликованным практичным методом для установления разделения секретного ключа между заверенными пользователями канала. В 2002 году Хеллман предложил называть данный алгоритм «Диффи – Хеллмана – Меркле», признавая вклад Меркле в изобретение криптографии с открытым ключом. Эта же схема была разработана Малькольмом Вильямсоном в 1970-х, но держалась в секрете до 1997 года. Метод Меркле по распространению открытого ключа был изобретён в 1974 и опубликован в 1978 году, его также называют загадкой Меркле.

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

Формально асимметричный метод можно описать следующим образом. Обозначим результат шифрования текста T с помощью открытого ключа – E(T), а результат расшифровки текста с помощью закрытого ключа - D(T). Тогда асимметричный метод должен отвечать следующим трем требованиям:

  • D(E(T)) = T;

  • D практически невозможно определить по E;

  • Е нельзя взломать.

Преимущество указанного метода состоит в уменьшении количества ключей, с которыми приходится оперировать. Однако данный алгоритм имеет существенный недостаток - требует значительной вычислительной мощности. Использование асимметричного метода шифрования представлено на Рис. 3.1.

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

В настоящее время наиболее известными и надежными являются следующие асимметричные алгоритмы:

  • алгоритм RSA (Rivest, Shamir, Adleman);

  • алгоритм Эль Гамаля (Elgamal);

  • ГОСТ Р 34.10-2001.

Алгоритм RSA принят в качестве следующих международных стандартов: ISO/IEC/DIS 9594-8 и X.509. Алгоритм использует факт, что нахождение больших (например, 100-битных) простых чисел в вычислительном отношении осуществляется легко, однако разложение на множители произведения двух таких чисел в вычислительном отношении представляется невыполнимым.

В настоящее время Международная сеть электронного перечисления платежей SWIFT требует от банковских учреждений, пользующихся ее услугами, применения именно этого алгоритма криптографического преобразования информации.

Алгоритм работает так:

  1. Отправитель выбирает два очень больших простых числа P и Q и вычисляет два произведения N = PQ и M = (P-1)(Q-1).

  2. Затем он выбирает случайное целое число D, взаимно простое с M, и вычисляет E, удовлетворяющее условию DE = 1 mod M.

  3. После этого он публикует D и N как свой открытый ключ шифрования, сохраняя E как закрытый ключ.

  4. Если S - сообщение, длина которого, определяемая по значению выражаемого им целого числа, должна быть в интервале (1, N), то оно превращается в шифровку возведением в степень D по модулю N и отправляется получателю S1 = SD mod N.

  5. Получатель сообщения расшифровывает его, возводя в степень E по модулю N, так как S = S1E mod N = SDE mod N.

Таким образом, открытым ключом служит пара чисел N и D, а секретным ключом число E. Смысл этой системы шифрования основан на так называемой малой теореме Ферма, которая утверждает, что при простом числе P и любом целом числе K, которое меньше P, справедливо тождество KP-1 = 1 mod P. Эта теорема позволяет определить, является ли какое-либо число простым или составным.

Выполнение практической работы

Во время выполнения практической работы необходимо написать программу, которая позволяет:

  1. Генерировать открытый и закрытый ключи алгоритма RSA и записывать их в файлы в формате XML.

  2. Считывать ключи из файлов.

  3. Осуществлять шифрование текстовой информации.

  4. Сохранять зашифрованную информацию в файл.

  5. Считывать зашифрованную информацию из файла.

  6. Осуществлять расшифрование зашифрованной информации.

Главное окно приложения представлено на рис. 3.2.

Рис. 3.2. Главное окно приложения.

Используемые элементы управления описаны в табл. 3.1.

Таблица 3.1.

Тип элемента

Устанавливаемые свойства

1

Form

Name = “frmRSA”

Text = “Шифрование с помощью алгоритма RSA”

2

Button

Name = “cmdGenAndSave”

Text = “Генерировать ключи и записать их в файл”

3

Button

Name = “cmdLoadKeysFromFiles”

Text = “Считать ключи из файла”

4

Button

Name = “cmdCrypt”

Text = “Шифровать”

5

Button

Name = “cmdDecrypt”

Text = “Расшифровать”

6

Button

Name = “cmdToFile”

Text = “Записать в файл”

7

Button

Name = “cmdFromFile”

Text = “Считать из файла”

8

TextBox

Name = “txtEncryptText”

Text = “”

9

TextBox

Name = “txtResult”

Text = “”

10

Label

Name = “lblEncryptText”

Text = “Введите текст, который будете шифровать”

11

Label

Name = “lblResult”

Text = “Зашифрованный текст”

Исходный код программы приведен в листинге 3.1.

Листинг 3.1.

Imports System.Security.Cryptography

Imports System.Text

Imports System.Xml

Public Class frmRSA

Dim EK As String = ""

Dim DK As String = ""

Dim cspParam As CspParameters

Private Sub cmdGenAndSave_Click(_

ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles cmdGenAndSave.Click

Dim rsaProvider As New RSACryptoServiceProvider()

EK = rsaProvider.ToXmlString(False)

DK = rsaProvider.ToXmlString(True)

My.Computer.FileSystem.WriteAllText("C:\EK.xml", EK, False)

My.Computer.FileSystem.WriteAllText("C:\DK.xml", DK, False)

End Sub

Private Sub cmdLoadKeysFromFiles_Click(_

ByVal sender As System.Object, _

ByVal e As System.EventArgs) _

Handles cmdLoadKeysFromFiles.Click

EK = My.Computer.FileSystem.ReadAllText("C:\EK.xml")

DK = My.Computer.FileSystem.ReadAllText("C:\DK.xml")

End Sub

Private Sub cmdCrypt_Click(_

ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles cmdCrypt.Click

Dim rsaProvider = New RSACryptoServiceProvider(cspParam)

rsaProvider.FromXmlString(EK)

Dim cipheredText As Byte() = rsaProvider.Encrypt(_

UTF8Encoding.UTF8.GetBytes(txtEncryptText.Text), True)

Dim EncodingText As String = Convert.ToBase64String(_

cipheredText)

txtResult.Text = EncodingText        

End Sub

Private Sub cmdDecrypt_Click(_

ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles cmdDecrypt.Click

Dim rsaProvider = New RSACryptoServiceProvider(cspParam)

rsaProvider.FromXmlString(DK)

Dim EncodingText As String = txtResult.Text

Dim DecodingText As String = ""

DecodingText = UTF8Encoding.UTF8.GetString(_

rsaProvider.Decrypt(Convert.FromBase64String(_

EncodingText), True))

txtEncryptText.Text = DecodingText

End Sub

Private Sub frmRSA_Load(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles MyBase.Load

cspParam = New CspParameters()

cspParam.KeyContainerName = "aaa13bbb"

End Sub

Private Sub cmdToFile_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles cmdToFile.Click

My.Computer.FileSystem.WriteAllText("C:\info.crypt", _

txtResult.Text, False)

End Sub

Private Sub cmdFromFile_Click(_

ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles cmdFromFile.Click

txtResult.Text = My.Computer.FileSystem.ReadAllText(_

"C:\info.crypt")

End Sub

End Class

Вопросы к практической работе

  1. Опишите принципы работы асимметричных алгоритмов шифрования.

  2. Приведите примеры наиболее распространенных асимметричных алгоритмов шифрования.

  3. Опишите, для каких целей используются открытый и закрытый ключи шифрования.

  4. Опишите предназначение класса RSACryptoServiceProvider.

  5. Опишите работу функций Encrypt и Decrypt класса RSACryptoServiceProvider.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]