
- •Практическая работа №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. Рекомендации по созданию модульных тестов
- •Литература
Практическая работа №4 Работа с симметричным криптографическим алгоритмом aes (Rijndael)
Цель работы: ознакомиться с особенностями криптографического алгоритма AES (Rijndael) и его реализацией в Microsoft .NET Framework на языке программирования Microsoft Visual Basic 2010.
Введение
В симметричных методах для шифрования и расшифровывания используется один и тот же секретный ключ.
Общая технология использования симметричного метода шифрования представлена на Рис. 4.1.
Рис. 4.1. Использование симметричного метода шифрования.
К достоинствам симметричных методов относят высокое быстродействие и простоту.
Основным недостатком указанных методов является то, что ключ должен быть известен и отправителю, и получателю. Это существенно усложняет процедуру назначения и распределения ключей между пользователями. По существу, в открытых сетях должен быть предусмотрен физически защищенный канал передачи ключей.
Названный недостаток послужил причиной разработки методов шифрования с открытым ключом – асимметричных методов.
В 1997 г. NIST (National Institute of Standards and Technology) анонсировал конкурс на создание AES (Advanced Encryption Standard) - нового государственного криптографического стандарта США. Тогда же были оговорены следующие первичные требования, которым должен удовлетворять AES: это должен быть незасекреченный, открыто опубликованный алгоритм шифрования, бесплатно доступный по всему миру. Спустя некоторое время было уточнено, что AES должен быть блочным шифром, реализующим криптографическую процедуру с симметричным ключом, причем алгоритм (как минимум) должен поддерживать 128-битную длину шифруемого блока текста и длины ключей 128, 192 и 256 бит.
В 2000 г. в конкурсе победил алгоритм Rijndael, предложенный бельгийскими криптоаналитиками Джоаном Дайеменом (Joan Daemen) и Винсентом Риджеменом (Vincent Rijmen).
В настоящее время подавляющее большинство применяемых на практике симметричных систем с закрытым (секретным) ключом представляют собой блочные системы, которые задают параметризованное ключом преобразование блоков исходного сообщения (как правило, длиной 64 бита) в блоки шифрограммы. Алгоритм Rijndael не является исключением.
При блочном шифровании открытый текст сначала разбивается на равные по длине блоки, затем применяется зависящая от ключа функция шифрования для преобразования блока открытого текста длиной m бит в блок шифртекста такой же длины.
Достоинством блочного шифрования является то, что каждый бит блока шифртекста зависит от значений всех битов соответствующего блока открытого текста, и никакие два блока открытого текста не могут быть представлены одним и тем же блоком шифртекста. Поэтому в настоящее время подавляющее большинство применяемых на практике как симметричных систем с закрытым (секретным) ключом так и асимметричных систем с открытым ключом представляют собой блочные системы, как правило, с длиной блоков в 64 бита.
Выполнение практической работы
Во время выполнения практической работы необходимо написать программу, которая позволяет:
Осуществлять шифрование текстовой информации с помощью алгоритма Rijndael при нажатии на кнопку «Зашифровать».
Осуществлять расшифрование зашифрованной информации с помощью алгоритма Rijndael при нажатии на кнопку «Расшифровать».
Главное окно приложения представлено на рис. 4.2.
Рис. 4.2. Главная форма приложения.
Используемые элементы управления описаны в табл. 4.1.
Таблица 4.1.
№ |
Тип элемента |
Устанавливаемые свойства |
1 |
Form |
Name = “ frmRijndael” Text = “Шифрование с помощью алгоритма Rijndael” |
2 |
Button |
Name = “cmdEncrypt” Text = “Зашифровать” |
3 |
Button |
Name = “cmdDecrypt” Text = “Расшифровать” |
8 |
TextBox |
Name = “txtEncryptText” Text = “” |
10 |
Label |
Name = “lblEncryptText” Text = “Введите текст, который будете шифровать” |
Исходный код программы приведен в листинге 4.1.
Листинг 4.1.
Imports System.Security.Cryptography
Imports System.Text
Imports System.IO
Public Class frmRijndael
Dim RijndaelManager As New RijndaelManaged()
Private Sub cmdEncrypt_Click(sender As System.Object, _
e As System.EventArgs) Handles cmdEncrypt.Click
Dim memStream As New MemoryStream()
Dim encStream As New CryptoStream(memStream, _
RijndaelManager.CreateEncryptor(), CryptoStreamMode.Write)
Dim sw As New StreamWriter(encStream)
sw.WriteLine(txtEncrypt.Text)
sw.Close()
encStream.Close()
My.Computer.FileSystem.WriteAllBytes("C:\myFile.data", _
memStream.ToArray(), False)
memStream.Close()
End Sub
Private Sub cmdDecrypt_Click(sender As System.Object, _
e As System.EventArgs) Handles cmdDecrypt.Click
Dim buffer As Byte() = _
My.Computer.FileSystem.ReadAllBytes("C:\myFile.data")
Dim memStream As New MemoryStream(buffer)
Dim decStream As New CryptoStream(memStream, _
RijndaelManager.CreateDecryptor(), CryptoStreamMode.Read)
Dim sr As New StreamReader(decStream)
txtEncrypt.Text = sr.ReadToEnd()
sr.Close()
decStream.Close()
memStream.Close()
End Sub
Private Sub frmRijndael_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
'указываем ключ
RijndaelManager.Key = New Byte() {1, 2, 3, 4, 5, 6, 7, 8, _
9, 10, 11, 12, 13, 14, 15, 16}
'указываем вектор инициализации
RijndaelManager.IV = New Byte() {1, 2, 3, 4, 5, 6, 7, 8, _
9, 10, 11, 12, 13, 14, 15, 16}
End Sub
End Class
Вопросы к практической работе
Опишите принципы работы симметричных алгоритмов шифрования.
Приведите примеры наиболее распространенных симметричных алгоритмов шифрования.
Опишите предназначение класса RijndaelManaged.
Опишите работу функций CreateEncryptor и CreateDecryptor класса RijndaelManaged.