
- •Практическая работа №1 Практическое использование элементов управления RichTextBox, ToolStrip, OpenFileDialog и SaveFileDialog
- •Практическая работа №2 Работа с хэш-функциями
- •Практическая работа №3 Работа с асимметричным криптографическим алгоритмом rsa
- •Практическая работа №4 Работа с симметричным криптографическим алгоритмом aes (Rijndael)
- •Практическая работа №5 Тестирование программного обеспечения
- •1. Общее описание процесса тестирования
- •2. Тест-план
- •3. Тест-стратегия
- •4. Отчетная документация
- •Критерии оценки usability системы
- •Сводная информация по тестированию
- •Практическая работа №6 Создание модульных тестов для автоматизированного тестирования исходного кода программного обеспечения
- •1. Аргументы в пользу модульных тестов
- •2. Аргументы против модульных тестов
- •3. Рекомендации по созданию модульных тестов
- •4. Разработка через тестирование
- •5. Добавление теста
- •11. Преимущества
- •12. Недостатки
- •13. Рекомендации по созданию модульных тестов
- •Литература
Практическая работа №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 требует от банковских учреждений, пользующихся ее услугами, применения именно этого алгоритма криптографического преобразования информации.
Алгоритм работает так:
Отправитель выбирает два очень больших простых числа P и Q и вычисляет два произведения N = PQ и M = (P-1)(Q-1).
Затем он выбирает случайное целое число D, взаимно простое с M, и вычисляет E, удовлетворяющее условию DE = 1 mod M.
После этого он публикует D и N как свой открытый ключ шифрования, сохраняя E как закрытый ключ.
Если S - сообщение, длина которого, определяемая по значению выражаемого им целого числа, должна быть в интервале (1, N), то оно превращается в шифровку возведением в степень D по модулю N и отправляется получателю S1 = SD mod N.
Получатель сообщения расшифровывает его, возводя в степень E по модулю N, так как S = S1E mod N = SDE mod N.
Таким образом, открытым ключом служит пара чисел N и D, а секретным ключом число E. Смысл этой системы шифрования основан на так называемой малой теореме Ферма, которая утверждает, что при простом числе P и любом целом числе K, которое меньше P, справедливо тождество KP-1 = 1 mod P. Эта теорема позволяет определить, является ли какое-либо число простым или составным.
Выполнение практической работы
Во время выполнения практической работы необходимо написать программу, которая позволяет:
Генерировать открытый и закрытый ключи алгоритма RSA и записывать их в файлы в формате XML.
Считывать ключи из файлов.
Осуществлять шифрование текстовой информации.
Сохранять зашифрованную информацию в файл.
Считывать зашифрованную информацию из файла.
Осуществлять расшифрование зашифрованной информации.
Главное окно приложения представлено на рис. 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
Вопросы к практической работе
Опишите принципы работы асимметричных алгоритмов шифрования.
Приведите примеры наиболее распространенных асимметричных алгоритмов шифрования.
Опишите, для каких целей используются открытый и закрытый ключи шифрования.
Опишите предназначение класса RSACryptoServiceProvider.
Опишите работу функций Encrypt и Decrypt класса RSACryptoServiceProvider.