XML-КРИПТОГРАФИЯ И ЕЕ РЕАЛИЗАЦИЯ НА ПЛАТФОРМЕ. NET FRAMEWORK - Студенческий научный форум

VII Международная студенческая научная конференция Студенческий научный форум - 2015

XML-КРИПТОГРАФИЯ И ЕЕ РЕАЛИЗАЦИЯ НА ПЛАТФОРМЕ. NET FRAMEWORK

Нестеренко А.Е. 1
1Южный федеральный университет
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF
Аннотация. Статья посвящена интересной тематике – использованию xml – документов для цифровой подписи и шифрования данных. Так как этот тип документа зачастую используется на веб – сервисах, пересылке почты, но сам по себе не шифрует данные, а лишь предоставляет такую возможность, то возникает потребность в создании программ и решений, выполняющих эти функции в полной мере.

Ключевые слова: Цифровая подпись, симметричный шифр, ассиметричный шифр, xml-документ.

Abstract. Article is devoted to the use of xml - document for digital signatures and encryption. Since this type of document is often used on the web - services, but by itself does not encrypt the data, only provides such an opportunity, there is a need to create programs and solutions that perform these functions to the fullest.

Keywords: Digital signature , symmetric cipher , asymmetric cipher , xml- document.

Введение

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

Для проведения криптографических операций требуется сам XML-документ и инструмент, позволяющий автоматизировать процесс.

Мной был разработан инструментарий, который позволяет подписывать и проверять цифровую подпись XML-документа, а также шифровать и дешифровывать этот документ.

Разработка проводилась с использованием платформы .NET Framework.

В качестве примера XML-документа рассмотрим данные кредитной карты в формате XML.

  1. Реализация электронной цифровой подписи

Электронная подпись – мощное средство контроля подлинности информации в электронном виде, обеспечения целостности электронных данных, подтверждения их авторства и актуальности. Электронная подпись - это информационный объект, создаваемый для подписываемых данных, позволяющий удостовериться в целостности и аутентичности этих данных.

Распространенное мнение об электронной подписи – «это что-то криптографическое» - верно лишь отчасти. Электронная подпись – это формализованная структура, электронный документ, состоящий из набора обязательных и не обязательных реквизитов – атрибутов электронной подписи. В состав обязательных атрибутов как раз и входит криптографическая часть, обеспечивающая надёжную идентификацию подписываемых данных и гарантирует надёжность источника информации о подписавшем.

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

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

Опишем мою реализацию модуля подписывания xml – документа.

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

  • Оператор выделения памяти – позволяет динамически выделить память под переменные определённого типажа.

  • Параметр имя контейнера с ключом – позволяет задать имя контейнера с ключом, с помощью которого в последствии можно сгенерировать сам RSA – ключ.

  • Параметр использования пробелов – позволяет определить, будут ли учитываться пробелы при шифровании/дешифровании документов.

  • Метод загрузки позволяет загружать данные xml файла в переменную соответствующего типа.

  • Модуль подписывания xml файла – подписывает файл, для этого принимает переменную типа xml и ключ. Возвращает подписанный документ.

  • Модуль попытки – принимает все вышеописанные действия, пытается их осуществить. Если не получится, то далее включится модуль отлова исключений.

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

  • Оператор условия – описывает условие, при котором будет выполняться подписывание. В данной программе он необходим для проверки файла и ключа на содержимое. Если содержимое пусто, то следовательно нечего и подписывать, пробросится исключение.

  • Переменная подписанного документа – переменная, принимающая xml документ при своей инициализации.

  • Параметр ключа для подписи – параметр, который принимает значение ключа для подписывания данных.

  • Переменная ссылки – содержит в себе ссылки.

  • Метод добавления ссылок – добавляет ссылки на информацию о способе подписи и т.д.

  • Метод добавления подписанных данных в xml файл, берёт в себя подписанные данные xml файла и записывает их.

Использовались стандартные модули С#, содержащие методы, функции и классы, необходимые для цифровой подписи: using System, using System.Security.Cryptography, using System.Security.Cryptography.Xml, using System.Xml. Сама программа представляет собой цельномодульный скрипт с набором функций:

  • public class SignXML – основной класс программы, в теле которого создается цифровая подпись, включает два производных класса.

  • public static void Main – основной класс программы цифровой подписи, в нём создаются переменные для хранения данных xml файла, генерации ключа, его параметров.

  • CspParameters – контейнер для создания параметров ключа.

  • RSACryptoServiceProvider rsaKey – переменная класса RSA ключа.

  • new – оператор выделения динамической памяти для переменных соответствующего типа.

  • KeyContainerName – свойство, определяющее имя ключа.

  • XmlDocument – класс, в котором экземплярах которого хранятся xml документы.

  • PreserveWhitespace – свойство, определяющее, будут ли учитываться пробелы при шифровании.

  • Load – метод, который загружает данные из файла в переменную xml документа.

  • public static void SignXml – класс подписи документа, берёт в себя xml документ и ключ для подписи, записывает результат в xml файл.

  • Catch – блок, который отлавливает исключения.

  • WriteLine – метод, который выводит сообщение на экран.

  • If – оператор условия, в данной программе используется для проверки наличия данных в файле и ключе.

  • throw – оператор проброса исключений.

  • SignedXml – класс, позволяющий работать с подписанными xml файлами.

  • SigningKey – свойство класса SignedXml, хранящее значение ключа для подписи.

  • Reference – класс ссылок, необходим для создания ссылок в подписанном файле.

  • XmlDsigEnvelopedSignatureTransform – представляет преобразование запечатанной подписи для цифровой подписи XML.

  • AddTransform –добавляет объект System.Security/Cryptography.Xml в список преобразований данных перед их передачей алгоритму хэширования.

  • AddReference – метод добавления ссылок. Берёт в себя ссылку и добавляет её в подписанный XML файл.

  • ComputeSignature – метод, который вычисляет цифровую подпись.

  • GetXml –метод, который возвращает XML-представление объекта System.Security.Cryptography.Xml.SignedXml.

  • AppendChild –добавляет указанный узел в конец списка дочерних узлов данного узла, берёт в себя цифровую подпись, импортированную в XML файл.

Для хеширования необходимо воспользоваться модулем import hashlib import sys, from rsa import *, import string, import random.

Необходимо задать кодировку тексту # -*- coding: utf-8 -*- и считать его из файла методом read, при этом лучше убрать все символы перевода строки методом replace("n",""), зашифровать данные XML - файла методами hashlib.sha1, update, и hexdigest.

Метод find найдёт индекс подстроки в строке. Метод write запишет полученные данные в файл. Метод close закроет XML-файл после работы с ним.

Рис.1 Блок-схема алгоритма реализации электронной цифровой подписи

  1. Реализация программы шифрования/дешифрования XML – элементов с помощью симметричного ключа.

Программа шифрования/дешифрования также работает с xml-документом. Для того, чтобы воспользоваться готовыми модулями, методами и свойствами, позволяющими шифроватьдешифровать данные, необходимо подключить пространства имён соответствующих библиотек.

  • Оператор выделения памяти – позволяет динамически выделить память под переменные определённого типажа.

  • Параметр использования пробелов – позволяет определить, будут ли учитываться пробелы при шифровании/дешифровании документов.

  • Метод загрузки позволяет загружать данные xml файла в переменную соответствующего типа.

  • Модуль попытки – принимает все вышеописанные действия, пытается их осуществить. Если не получится, то далее включится модуль отлова исключений.

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

  • Оператор условия – описывает условие, при котором будет выполняться подписывание. В данной программе он необходим для проверки файла и ключа на содержимое. Если содержимое пусто, то следовательно нечего и подписывать, пробросится исключение.

  • Модуль шифрования – принимает XML файл, область, которую необходимо зашифровать и ключ. Шифрует данные в XML файле.

  • Модуль дешифрования – принимает XML файл и ключ для дешифрования, дешифрует данные в XML файле.

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

  • class Program –основной класс программы в теле которого проводятся необходимые операции шифрования/дешифрования.

  • static void Main – основная функция программы.

  • RijndaelManaged key - создает ключ шифрования Rijndael, необходимый для шифрования/дешифрования по симметричному алгоритму DES, осуществляет доступ к управляемой версии алгоритма System.Security/Criptography.Rijdael.

  • XmlDocument – класс, в котором экземплярах которого хранятся xml документы.

  • public static void Encrypt – модуль шифрования. Класс принимает XML файл, область, которую необходимо зашифровать и ключ. Шифрует данные в XML файле.

  • public static void Decrypt –модуль дешифровки. Класс, который принимает XML файл и ключ для дешифрования, дешифрует данные в XML файле.

  • try – блок, который пытается что – то сделать.

  • Catch – блок, который отлавливает исключения.

  • WriteLine – метод, который выводит сообщение на иэкран.

  • If – оператор условия, в данной программе используется для проверки на наличие данных в файле и ключе.

  • throw – оператор проброса исключений.

  • new – оператор выделения динамической памяти для переменных соответствующего типа.

  • PreserveWhitespace – свойство, определяющее будут ли учитываться пробелы при шифровании.

  • Load – метод, который загружает данные из файла, который он принимает, в переменную xml документа.

  • InnerXml - возвращает или задаёт разметку, отражающую дочерние узлы текущего узла. По сути выводит на консоль результаты шифрования/дешифрования данных XML файла.

  • GetElementsByTagName – метод, который ищет заданный элемент в XML файле по его тегу.

  • EncryptedXml – класс, который представляет собой модель для реализации алгоритмов шифрования.

  • Byte – класс, экземпляры которого являются переменными с объёмом в 1 байт.

  • EncryptData- метод, который зашифровывает указанный элемент или его содержимое с использованием указанного алгоритма симметричного шифрования принимает элемент для шифрования, ключ и выдаёт последовательность зашифрованных данных в виде байт.

  • String - класс, необходимый для хранения знаков Юникод.

  • TripleDES - базовый класс, который представляет собой класс для реализации алгоритма TripleDES.

  • DES - базовый класс, который представляет собой класс для реализации алгоритма DES.

  • Rijndael - базовый класс, который представляет собой класс для реализации алгоритма Rijndael.

  • switch - логический оператор переключения, необходим для выбора размера ключа шифрования.

  • Case – оператор, который определяет, какие варианты могут быть выбраны в логическом операторе switch.

  • CipherData.CipherValue – параметры класса, необходимые для добавления в зашифрованный элемент данные EncryptedData.

  • DecryptData – метод, который принимает зашифрованный документ и ключ, и дешифрует этот элемент.

  • ReplaceData – заменяет элемент с зашифрованными данными указанной расшифрованной последовательностью байтов.

  • EncryptedXml.ReplaceElement – создание элемента с использованием ключа.

  • edElement.EncryptionMethod - создание метода, для опознования шифрования.

  • struct aes_key - структура для хранения ключа.

  • aes_expand- функция для вычисления расширенного ключа, принимает структуру ключа и данные ключа, и вычисляет расширенную версию

  • aes_encrypt - функция шифрования, принимает ключ, исходный текст и переменную, в которую будет сохранён результат.

  • aes_sub_bytes-функция, необходимая для нелинейной подстановки при

шифровании. Принимает выражение и преобразует его.

  • aes_shift_rows - функция, необходимая для перестановки строк матрицы, принимает строки и переставляет их.

  • aes_mix_columns – функция, необходимая для перемешивания столбцов, принимает столбцы и перемешивает их.

  • aes_add_round_key - функция сложения с ключом, принимает ключ, выражение и вспомогательное значение, и применяет к выражению сложение по модулю 2 с ключом.

  • aes_decrypt - функция дешифрования, принимает ключ, исходный текст и переменную, в которую будет сохранён результат.

Рис.2 Блок-схема алгоритма реализации шифрования

Рис.3 Блок-схема основной функции шифрования

Рис.4 Блок-схема основной функции дешифрования

ЗАКЛЮЧЕНИЕ

В данной работе представлены некоторые способы реализации XML-криптографии на основе платформы .NET Framework. Рассмотрены примеры программ осуществляющих эту реализацию. XML-документы – это мощное средство, часто применяющее для защиты данных в сети Интернет. Но, к сожалению, само по себе, это средство не обеспечивает необходимую защиту данных, которые «перевозит».

Защита должна быть основана на выполнении следующих функций:

  • аутентификации взаимодействующих сторон;

  • подтверждении подлинности и целостности информации;

  • криптографическом закрытии передаваемых данных.

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
  1. М. Вельненбах Криптография на Си и С++ в действии. Учебное пособие. – М.: Издательство Триумф, 2004 – 464 с.: ил.

  1. Шифрование. [Электронный ресурс].  URL: https://ru.wikipedia.org/wiki/Шифрование (дата обращения: 23.11.14)

  1. Дешифрование. [Электронный ресурс].  URL: https://ru.wikipedia.org/wiki/Дешифрование (дата обращения: 23.11.14)

  1. XML-криптография. [Электронный ресурс].  URL: http://msdn.microsoft.com/ (дата обращения: 23.11.14)

  1. Защита XML-документов при передаче по открытым коммуникациям. [Электронный ресурс].  URL: http://compress.ru/article.aspx?id=10152 (дата обращения: 3.12.14)

  1. Справочник по языку C++ [Электронный ресурс].  URL: http://msdn.microsoft.com/ru-ru/library/3bstk3k5.aspx (дата обращения: 3.12.14)

11

Просмотров работы: 1463