Associative Protection of Numerical Information in Text Documents Using the Parallel Framework Library on the .NET Platform
- Authors: Gibadullin R.F.1, Vershinin I.S.1
-
Affiliations:
- Kazan National Research Technical University named after A.N. Tupolev – KAI
- Issue: Vol 10, No 3 (2023)
- Pages: 121-129
- Section: METHODS AND SYSTEMS OF INFORMATION PROTECTION, INFORMATION SECURITY
- URL: https://journals.eco-vector.com/2313-223X/article/view/623748
- DOI: https://doi.org/10.33693/2313-223X-2023-10-3-121-129
- EDN: https://elibrary.ru/STEVDR
- ID: 623748
Cite item
Full Text
Abstract
The paper discusses the development and analysis of an application designed to protect numeric data in text files using an associative data protection mechanism. The application, based on the .NET platform and using the Parallel Framework library, was tested in detail to evaluate the effectiveness of multithreaded data processing and the use of regular expressions to extract numeric information from text. The results showed that the application of parallel processing can significantly increase performance, achieving twice the speedup on a multi-core hardware platform. At the same time, the paper highlights and analyzes some of the challenges and limitations associated with parallel processing, including user interface locking, the need for thread safety, and the peculiarities of working with regular expressions in multithreaded mode. Possible directions for further improvement of the application are discussed. The conducted research is of practical value for the development of parallel data processing methods in the context of information protection.
Full Text
ВВЕДЕНИЕ
В эпоху информационных технологий данные стали основой многих отраслей, включая коммерцию, науку, здравоохранение, образование и другие. Однако с ростом количества данных возросла и необходимость в их защите. Числовые данные в текстовых документах, такие как финансовые сведения, исследовательские результаты или персональные данные, представляют особый интерес с точки зрения информационной безопасности.
Сегодня, когда взлом и утечка данных стали частыми событиями, защита этих данных стала критически важной. Особенно это относится к числовым сведениям, которые могут быть особенно ценны для мошенников. Это могут быть банковские реквизиты, номера кредитных карт, персональные идентификационные номера, данные медицинских исследований и т.д.
Несанкционированные пользователи могут использовать эти данные для различных целей, от кражи личности до мошенничества и шпионажа. Поэтому защита числовых сведений в текстовых документах стала ключевым вопросом информационной безопасности.
В то же время, методы защиты должны быть не только эффективными, но и применимыми на практике, не вызывая значительных неудобств для пользователей и не замедляя обработку данных. Поэтому важно разрабатывать новые методы и подходы, которые позволили бы обеспечить надежную защиту числовых данных в текстовых документах.
В данной статье обсудим применение метода ассоциативной защиты числовых сведений в текстовых документах с использованием библиотеки Parallel Framework платформы .NET. Этот метод представляет собой новый подход к защите данных, который может усилить текущие методы защиты и предложить решения проблем, с которыми сталкиваются организации и индивидуальные пользователи в области информационной безопасности.
Ассоциативный механизм защиты – методика защиты данных, объединяющая принципы стеганографии и криптографии. Она предназначена для обеспечения безопасности данных в процессе анализа сцен, когда данные агрегируются в формате «объекты-координаты». В этой методике для создания защищенного стегоконтейнера k-разрядный код каждого объекта или координаты преобразуется через процесс матричной бинаризации, маскирования и рандомизации [1; 2]. Пустой контейнер заполняется псевдослучайной последовательностью, после чего в него внедряются коды. Благодаря своей универсальности, ассоциативная стеганография может применяться в различных прикладных областях. В свете современных вызовов в области информационной безопасности и растущего объема обрабатываемых данных, важность интеграции стеганографической защиты в программные продукты усиливается. Ассоциативная подход к защите данных отличается от традиционных (криптографических) методов, предлагая высокую стойкость к атакам и повышенную помехозащищенность при хранении и передаче информации по незащищенным каналам.
Несмотря на преимущества ассоциативного подхода по защите данных, у него есть недостаток. Например, если для сокрытия 1 байта размер контейнера задать равным 936 бит, то объем исходных данных возрастет в 117 раз, это делает данный механизм защиты непригодным для проектов, где увеличение размера данных критично.
Несмотря на заявленный недостаток, работа имеет практическую значимость, т.к. акцент делается на защите числовых данных, которые обычно составляют небольшую часть текстовых документов. Цель работы заключается в разработка программного модуля, который обеспечит замену числовых сведений в текстовом документе стегоконтейнерами в формате Base64 [3].
Base64 – это широко применяемый метод кодирования, позволяющий преобразовывать бинарные данные в текстовый формат. В контексте данной работы выбор кодировки Base64 обусловлен следующими преимуществами:
- Base64 преобразует бинарные данные в текстовый формат, что обеспечивает совместимость со многими системами, которые могут обрабатывать только текст;
- кодировка Base64 гарантирует, что данные будут сохраняться и передаваться без изменений, независимо от платформы;
- процесс кодирования и декодирования в Base64 относительно прост, что делает его удобным для использования.
Библиотека Parallel Framework в платформе .NET – это мощный инструмент, который предоставляет функции для параллельных и асинхронных вычислений. Параллелизация позволяет ускорить процесс обработки данных, особенно при работе с большими объемами информации. При использовании ассоциативной стеганографии, где каждый байт данных преобразуется в стегоконтейнер, возможность параллельной обработки может значительно увеличить скорость выполнения операций. Функции асинхронной обработки данных, доступные в Parallel Framework, обеспечивают отзывчивость пользовательского интерфейса приложения даже при обработке больших объемов данных, позволяя продолжать выполнение других задач во время длительных операций. Благодаря возможности распараллеливания обеспечивается эффективное использование доступных процессорных ядер, это способствует масштабируемости и позволяет приложению адаптироваться под различные рабочие нагрузки. Кроме того, библиотека предлагает удобные высокоуровневые конструкции для параллельного программирования, что упрощает разработку и обеспечивает лучшую читаемость кода. Таким образом, использование библиотеки Parallel Framework в рамках данной работы способствует улучшению производительности при обработке числовых сведений в текстовых документах в целях обеспечения требований информационной безопасности [4].
РАЗРАБОТКА ПРОГРАММНОГО ПРОЕКТА
На проектном уровне предлагаемое решение поставленной задачи достигается следующим образом.
- Импортируются необходимые пространства и создаются объекты для применения ассоциативного механизма защиты (Stegomask, StegoAlg). В статье [5] дается исчерпывающее пояснение данной процедуре.
- Сохраняется секретный ключ в виде отдельного файла.
- Читается текстовый файл с данными из заданного пользователем пути.
- С помощью регулярного выражения (Regex) выполняется поиск и извлечение всех числовых и нечисловых фрагментов в тексте.
- Запускается параллельная обработка найденных фрагментов текста, где числовые фрагменты преобразуются в стегоконтейнеры с использованием декоратора StegoStream, а нечисловые фрагменты остаются неизменными.
- Вставляются маркеры [BEGIN] и [END] вокруг закодированных стегоконтейнеров в формате Base64. В зависимости от содержания текста в исходном текстовом файле значения данных маркеров можно выбрать иные.
- Обработанные фрагменты сохраняются в конкурентную коллекцию (ConcurrentDictionary), где ключами являются индексы фрагментов.
- После параллельной обработки все фрагменты объединяются в одну строку.
- Конечный результат сохраняется в новый текстовый файл по указанному пути.
Предлагаемый на рисунке программный проект, представленный в виде диаграммы деятельности на языке UML [6], обеспечивает потокобезопасное и параллельное кодирование числовых сведений в текстовом файле в стегоконтейнеры, представленные в формате Base64, с введением маркеров для удобства обнаружения и декодирования стегоконтейнеров при обратном преобразовании.
Рис. 1. Программный проект ассоциативной защиты числовых сведений в текстовом документе
РЕАЛИЗАЦИЯ ПРОГРАММНОГО ПРОЕКТА
В виде программного кода на языке программирования C# представим ключевой фрагмент реализации вышеуказанного проекта.
Данный код начинается с объявления двух констант, n и m, которые используются в качестве параметров размерности матрицы в ассоциативном механизме защиты.
const int n = 36;
const int m = 9 * n – 12;
Stegomask s = new Stegomask(n);
s.GetEtalons(out char[,] etalons);
s.GetKey(out char[,] key);
BinaryWriter w = new BinaryWriter
(new FileStream("yourKeyFilePathHere", FileMode.Create));
for (int i = 0; i < key.GetLength(0); i++)
for (int j = 0; j < key.GetLength(1); j++)
if (key[i, j] == ‘1’) w.Write(i * m + j);
w.Close();
var text = await File.ReadAllTextAsync("yourFilePathHere");
var regex = new Regex(@"(\d+)|(\D+)");
var matches = regex.Matches(text);
// Конкурентная коллекция для хранения пар "индекс фрагмента : текст фрагмента"
var fragments = new ConcurrentDictionary<int, string>();
// Формирование стегоконтейнеров в параллельных потоках
Parallel.For(0, matches.Count, i =>
{
var match = matches[i];
if (int.TryParse(match.Value, out _))
{
// Если фрагмент является числом
byte[] numberBytes = Encoding.ASCII.GetBytes(match.Value);
using (var ms = new MemoryStream())
{
var sa = new StegoAlg(n, etalons, key);
var ss = new StegoStream(ms, sa);
ss.Write(numberBytes, 0, numberBytes.Length);
var stegoData = ms.ToArray();
var stegoBase64 = "[BEGIN]" + Convert.ToBase64String(stegoData) + "[END]";
fragments.TryAdd(i, stegoBase64);
}
}
else
{
// Если фрагмент не является числом
fragments.TryAdd(i, match.Value);
}
});
// Собираем все фрагменты обратно в одну строку
var result = new StringBuilder();
for (int i = 0; i < matches.Count; i++)
{
result.Append(fragments[i]);
}
await File.WriteAllTextAsync("outputFilePathHere", result.ToString());
Методы GetEtalons и GetKey созданного экземпляра Stegomask используются для получения эталонов и секретного ключа соответственно. Далее используется BinaryWriter для записи секретного ключа в файл. Программа читает текст из файла, разделяет его на числовые и нечисловые фрагменты с помощью регулярного выражения [7]. Следующий шаг – инициализация конкурентного словаря (коллекции) fragments, который будет хранить отдельные фрагменты текста вместе с их индексами. В методе For класса Parallel обеспечивается параллельная обработка каждого фрагмент текста. Если фрагмент является числом, он преобразуется в байты, которые преобразуются в стегоконтейнеры с помощью StegoStream, в основе которого задан экземпляр StegoAlg с параметрами n, etalons и key. Затем полученные данные кодируются в соответствии со стандартом Base64 и добавляются в словарь fragments. Если фрагмент не является числом, он добавляется в конкурентную коллекцию fragments без какой-либо обработки. Наконец, все фрагменты собираются вместе в исходном порядке и записываются в новый файл.
В предложенной реализации используются средства параллельной обработки и обеспечения потокобезопасности, предоставляемые .NET Framework. Метод For класса Parallel автоматически разбивает цикл на диапазоны и обрабатывает каждый диапазон в рабочем потоке пула потоков. Это позволяет оптимизировать использование многоядерных процессоров, выполняя операции в несколько потоков одновременно. Потокобезопасная коллекция ConcurrentDictionary позволяет выполнять операции чтения, записи и изменения без необходимости явно блокировать коллекцию, что обычно требуется при работе с обычными коллекциями. Потокобезопасность достигается за счет использования механизма блокировки на уровне сегмента, что позволяет обрабатывать несколько операций одновременно, если они применяются к разным сегментам коллекции.
Необходимо отметить факт применения в программном коде регулярного выражения для разделения текста на фрагменты, которые затем обрабатываются отдельно. Регулярное выражение @"(\d+)|(\D+)" используется для разделения текста на последовательности чисел и нечисловые фрагменты. В данном выражении \d+ означает одну или более цифр (т.е. число). | – это оператор ИЛИ, он используется для указания альтернативы. \D+ означает один или более нецифровых символов.
Таким образом, регулярное выражение ищет либо последовательности чисел, либо последовательности нечисловых символов. Это позволяет разделить исходный текст на фрагменты, каждый из которых является либо числом, либо нечисловым текстом.
Важно отметить, что регулярные выражения – мощный инструмент, но они могут быть сложными в понимании и использовании. Например, если необходимо, чтобы совпадали только полные числа, а не числа, встроенные в другие слова, то регулярное выражение должно выглядеть следующим образом: @"(\b\d+ \b)|(\D+)", где \b означает границу слова.
Оператор await используется для асинхронного ожидания выполнения задачи. Он используется в двух местах: в File.ReadAllTextAsync("yourFilePathHere") и File.WriteAllTextAsync("outputFilePathHere", result.ToString()). File.ReadAllTextAsync – это метод, который асинхронно открывает текстовый файл, читает все символы из файла и затем закрывает файл. Когда этот метод вызывается, управление возвращается обратно вызывающему коду почти немедленно, т.е. вызывающий код продолжает выполняться, пока файл читается. То же самое касается метода File.WriteAllTextAsync, который создает новый файл, записывает указанную строку в файл, а затем закрывает файл (если целевой файл уже существует, он будет перезаписан). Данный метод также возвращает управление вызывающему коду немедленно, позволяя ему продолжить выполнение параллельно с процессом записи в файл. Таким образом, ключевое слово await позволяет выполнять эти операции ввода-вывода асинхронно, без блокировки основного потока исполнения. Это особенно полезно в ситуациях, когда работа с большими файлами может занять значительное время, и блокировка основного потока на это время может привести к замедлению работы всего приложения или даже его «зависанию». Использование await в таких случаях повышает отзывчивость пользовательского приложения.
В заключительной части кода используется объект типа StringBuilder, представляющий собой класс в .NET для объединения строк. Он является более эффективным вариантом, чем использование оператора += для строк, когда объединяется большое количество строк. Дело в том, что строки в .NET являются неизменяемыми, и при каждой операции += создается новый объект строки, который содержит объединенные строки. Это приводит к чрезмерному использованию памяти при большом количестве подобных операций. StringBuilder использует изменяемую буферизированную память для хранения строки, что позволяет добавлять новые элементы к строке без необходимости постоянно создавать новые строки. Это делает его более эффективным для объединения большого количества строк.
ТЕСТИРОВАНИЕ
Продемонстрируем работу приложения на примере текстового документа, представленного на рис. 2.
Рис. 2. Демонстрационный пример текстового документа
По результатам работы программы получен следующий защищенный файл (рис. 3).
Рис. 3. Демонстрационный пример защищенного текстового документа
Проверить работоспособность программы и применить ее для защиты текстовых документов можно, скачав проект из репозитория1 (соответствующая фиксация показана на рис. 4).
Рис. 4. Фиксация в репозитории
Чтобы убедиться в эффективности применения библиотеки Parallel Framework платформы .NET в рамках решаемой задачи, проведено сравнительное тестирование двух версий программ: последовательной и параллельной.
Для проведения экспериментов выбран персональный компьютер с процессором Intel Core i5-9300H (базовая частота 2,4 ГГц) под управлением ОС Windows 11 Pro. В качестве экспериментальных данных созданы тестовые файлы разного размера. В текст этих файлов в произвольные позиции внедрены числовые данные. В табл. 1 представлены времена обработки сгенерированных файлов:
- tm – время чтения содержимого файла и выполнения регулярного выражения для формирования коллекции с числовыми и нечисловыми фрагментами текста;
- ts/tp – время последовательной/параллельной обработки текстовых фрагментов, полученных с использованием регулярных выражений. При этом к числовым фрагментам применяется ассоциативный механизм защиты с формированием стегоконтейнеров, которые в последующем конвертируются в формат Base64. Фрагменты, не представляющие собой числовые значения, сохраняются в исходном виде без изменений;
- ta – время сборки обработанных фрагментов и записи их в новый файл.
Таблица 1. Времена обработки тестовых файлов [Test file processing times]
Размер файла, МБ [File size, MB] | Количество цифр в файле [Number of digits in the file] | Среднее время обработки, мс [Average processing time, ms] | ||
tm | ts/tp | ta | ||
2,56 | 65 052 | 31 | 661/347 | 116 |
5,12 | 130 104 | 50 | 1314/637 | 246 |
7,68 | 195 156 | 65 | 1960/975 | 381 |
10,2 | 260 208 | 82 | 2527/1272 | 522 |
Для измерения времен участков программ был использован класс Stopwatch, который обеспечивает измерение времени с точностью до тысячных долей секунды, что позволяет получить более точные замеры, чем если бы использовались традиционные методы, такие как DateTime.Now. Данная точность достигается способностью этого класса измерять интервалы времени с точностью до тика (единицы измерения времени внутри операционной системы).
Проведенные эксперименты показали, что параллельная версия программы имеет двукратный выигрыш в производительности обработки текстовых фрагментов, полученных с использованием регулярных выражений. Это указывает на то, что применение библиотеки Parallel Framework платформы .NET в рамках решаемой задачи является оправданным.
Важно отметить, что применение параллелизма эффективно только для достаточно больших объемов текста и на машинах с несколькими ядрами процессора. Для небольших объемов текста или на одноядерных системах введение параллелизма сопряжено с накладными расходами на создание и управление потоками, что приводит к замедлению общего времени выполнения кода.
ЗАКЛЮЧЕНИЕ
В результате проведенного исследования было разработано приложение на платформе .NET с использованием библиотеки Parallel Framework, задачей которого является защита числовых сведений в текстовых файлах с помощью ассоциативного механизма защиты данных. Детально представлено применение таких концепций, как потокобезопасность и параллельная обработка, а также применение регулярных выражений для поиска и обработки числовых данных в тексте. Основной акцент был сделан на увеличении производительности приложения с помощью параллельной обработки данных.
Проведенное тестирование подтвердило эффективность выбранного подхода: параллельная версия программы показала двукратное увеличение производительности по сравнению с последовательной версией на выбранной аппаратной платформе. Это показало преимущество использования многопоточной обработки данных и позволило сделать вывод о том, что применение библиотеки Parallel Framework платформы .NET в рамках решаемой задачи является результативным.
Следует заметить, что текущий проект не лишен недостатков. В целях улучшения разработанного приложения необходимо учитывать следующее.
- Метод Parallel.For действительно может помочь ускорить обработку данных путем распределения работы по различным потокам. Однако, если он вызывается из пользовательского интерфейса (UI) потока, это может привести к блокировке UI на время выполнения этой операции, поскольку Parallel.For блокирует вызывающий поток до завершения всех выполняемых параллельных операций. Для обеспечения отзывчивости пользовательского интерфейса во время выполнения вычислительно сложных и продолжительных операций рекомендуется выполнять такие операции в фоновом потоке. В .NET для этого следует использовать асинхронные методы совместно с Task.Run или Task.Factory.StartNew.
- Инициализация объекта StegoAlg перед запуском Parallel.For способствует оптимизации производительности за счет избегания многократного создания этого объекта в каждой итерации цикла. Однако для реализации этого подхода необходимо обеспечить потокобезопасность класса StegoAlg, чтобы предотвратить возможные конфликты при совместном доступе из различных потоков.
- Распараллеливание нижеуказанного участка кода позволит ускорить получение числовых и нечисловых фрагментов текста.
var regex = new Regex(@"(\d+)|(\D+)");
var matches = regex.Matches(text);
Однако, если разделить текст на части и запустить поиск совпадений в каждой части параллельно, есть риск упустить совпадения, которые могли бы быть обнаружены при просмотре текста целиком. Это обусловлено тем, что регулярные выражения работают на основе одного непрерывного потока символов и зависят от контекста. Тем не менее, конкретно в нашем случае деление текста на независимые блоки допустимо, это позволяет распараллелить поиск совпадений, используя библиотеку Parallel Framework. Для этого можно разделить весь текст на набор подстрок и выполнять поиск совпадений в каждой подстроке независимо.
Таким образом, в ходе работы были успешно реализованы и протестированы ключевые функции приложения для защиты числовых данных в текстовых файлах. Полученные результаты открывают путь для дальнейшего развития и улучшения проекта, включая возможность расширения защиты на другие типы данных.
About the authors
Ruslan F. Gibadullin
Kazan National Research Technical University named after A.N. Tupolev – KAI
Author for correspondence.
Email: rfgibadullin@kai.ru
Scopus Author ID: 55978150900
Candidate of Engineering; Associate Professor at the Department of Computer Systems
Russian Federation, Kazan, Republic of TatarstanIgor S. Vershinin
Kazan National Research Technical University named after A.N. Tupolev – KAI
Email: isvershinin@kai.ru
Scopus Author ID: 55977774300
Candidate of Engineering, Associate Professor; Head of the Department of Computer Systems
Russian Federation, Kazan, Republic of TatarstanReferences
- Raikhlin V.A., Vershinin I.S., Gibadullin R.F., Pystogov S.V. Reliable recognition of masked binary matrices. Connection to information security in map systems. Lobachevski Journal of Mathematics. 2013. Vol. 34. Pp. 319–325.
- Raikhlin V.A., Gibadullin R.F., Vershinin I.S., Pystogov S.V. Reliable recognition of masked cartographic scenes during transmission over the network: Materials of the International Siberian Conference on Control and Communications (SIBCON). 2016. Pp. 1–5.
- Anwar F., Rachmawanto E.H., Atika Sari C., Setiadi D.R.I.M. StegoCrypt Scheme using LSB-AES Base64: Materials of the International Conference on Information and Communications Technology (ICOIACT). 2019. Pp. 85–90.
- Garcia A.M., Griebler D., Fernandes L.G.L., Schepke C. Introducing a stream processing framework for assessing parallel programming interfaces: Materials of the 29th Euromicro International Conference on Parallel, Distributed and Network-Based Processing (PDP). 2021. Pp. 84–88.
- Gibadullin R.F., Gashigullin D.A., Vershinin I.S. Development of the StegoStream decorator for associative protection of byte stream. Modeling, optimization and information technologies. 2023. Vol. 11. No. 2. (In Rus.) URL: moitvivt.ru/ru/journal/pdf?id=1359
- Braude E. Incremental UML for Agile Development: Embedding UML Class Models in Source Code. 2017 IEEE/ACM 3rd International Workshop on Rapid Continuous Software Engineering (RCoSE). 2017. Pp. 27-31.
- Sharmila L., Sakthi U., Geethanjali A., Sagadevan S. Regular expression based pattern matching for gene expression data to identify the abnormality gnome: Materials of the Second International Conference on Recent Trends and Challenges in Computational Models (ICRTCCM). 2017. Pp. 301–305.
Supplementary files




