Cryptographic module of MapInfo geographic information system file protection using regular expressions and .NET platform parallel library
Cryptographic module of MapInfo geographic information system file protection using regular expressions and .NET platform parallel library
Abstract
The article presents research aimed at developing a software module for cryptographic protection of MapInfo geographic information system files. The main attention is paid to the application of regular expressions for identification and encryption of confidential information, as well as parallel computing based on the .NET platform library, which provides high performance. The proposed solution allows selective encryption of valuable data, such as coordinates, minimising resource and time costs. Analyses of existing solutions revealed their lack of flexibility and inability to process data partially, highlighting the novelty of the approach. Testing has shown that the parallel implementation of the module significantly outperforms the serial one, especially when processing large amounts of data, and the use of AES and GOST "Grasshopper" algorithms provides a high level of cryptographic strength. The developed module has practical significance for organizations working with sensitive geospatial information and demonstrates prospects for further scaling and integration into existing systems.
1. Введение
В последние годы наблюдается растущий интерес к разработке технологий защиты данных, применимых в специфических областях, таких как геоинформационные системы (ГИС). Современные исследования в данной области подтверждают необходимость создания узкоспециализированных инструментов, способных обеспечивать избирательную защиту данных в условиях высокой производительности. Например, в работе , рассмотрены подходы к шифрованию данных в облачных средах, однако они не адаптированы для работы с форматом данных ГИС, что затрудняет их практическое применение.
Кроме того, в публикациях , обсуждаются криптографические алгоритмы, такие как AES и Serpent, используемые в современных системах. Однако эти работы фокусируются на защите данных в целом и не учитывают необходимость избирательного шифрования, что критически важно для приложений, работающих с большими объёмами геопространственной информации. Такой подход приводит к значительным временным и ресурсным затратам.
Исследования, связанные с использованием регулярных выражений для обработки текстовых данных, также находят широкое применение в различных областях, например, в валидации данных и обработке текстовых файлов . Тем не менее, их потенциал для задач шифрования данных в ГИС, особенно в сочетании с параллельными вычислениями , , остаётся недостаточно исследованным.
Предложенный в настоящей работе подход ориентирован на устранение этих недостатков. Он сочетает в себе высокую производительность параллельных вычислений на платформе .NET с возможностью точечного шифрования данных, определённых с помощью регулярных выражений. Такой подход позволяет минимизировать объём зашифрованных данных, обеспечивая при этом конфиденциальность и целостность наиболее ценной информации, например, координатных данных. По сравнению с существующими решениями, данный подход предлагает уникальную комбинацию технологий, что подчёркивает его актуальность.
Целью работы является разработка программного модуля криптографической защиты файлов ГИС MapInfo с использованием регулярных выражений и параллельной библиотеки платформы .NET. Для достижения данной цели решаются задачи: исследование существующих подобных решений; изучение ГИС MapInfo и ее файлового формата; изучение криптографических методов защиты данных; разработка программного модуля; тестирование разработанного модуля; оценка производительности.
Новизна данной разработки заключается в объединении современных методов шифровая, регулярных выражений и параллельной библиотеки платформы .NET, что позволяет обеспечить надежную защиту файлов и повысить производительность модуля.
Созданный в процессе исследования программный модуль практически значимо для организаций, использующих ГИС MapInfo для хранения конфиденциальной информации, поскольку он поможет эффективно защищать данные от несанкционированного доступа, обеспечивая конфиденциальность и целостность геопространственных данных.
2. Существующие решения
В рамках данной работы разрабатывается не отдельное приложение с графическим пользовательским интерфейсом, а программная библиотека, которая предназначена для последующей интеграции в другие программные продукты. Несмотря на это, рассмотреть существующие аналоги все же необходимо для лучшего понимания предметной области и обоснования актуальности разработки.
VeraCrypt
– бесплатное приложение с открытым исходным кодом для шифрования данных на основе TrueCrypt. Оно позволяет создавать зашифрованные контейнеры, а также шифровать целые диски и разделы. VeraCrypt использует надежные алгоритмы шифрования, такие как AES, Serpent, Twofish, позволяя применять несколько слоев шифрования. Приложение поддерживает Windows, macOS и Linux, может работать в портативном режиме. Однако оно довольно сложно в использовании для начинающих, не имеет официальной технической поддержки, а шифрование/расшифровка может занимать много времени и ресурсов.NordLocker
– коммерческое приложение от компании NordVPN для безопасного хранения и обмена файлами с использованием алгоритма AES-256. Оно предоставляет простой интуитивно понятный интерфейс, интегрируется с облачными сервисами (Dropbox, Google Drive, OneDrive), позволяя шифровать файлы в облаке. Кроме шифрования, NordLocker предлагает функции блокировки, скрытия файлов и создания защищенных папок. Недостатками являются необходимость покупки лицензии, возможные опасения по конфиденциальности при использовании облака и ограниченная гибкость настроек.AxCrypt
– приложение с открытым исходным кодом для шифрования файлов, совместимое с Windows, macOS, Linux и мобильными устройствами. Оно имеет простой интерфейс, поддерживает AES, Blowfish, интегрируется с облачными хранилищами. Основными недостатками являются ограниченный функционал бесплатной версии и тот факт, что, как и другие рассмотренные приложения, AxCrypt шифрует файлы целиком, не позволяя зашифровать только определенные данные внутри файла.Анализ существующих решений показал, что они не обеспечивают требуемую функциональность целевого шифрования конфиденциальных данных (например, координат) внутри файлов ГИС MapInfo, оставляя остальную информацию открытой. На данный момент, хоть и имеется множество приложений, позволяющих шифровать файлы и даже дисковые пространства, необходимость в данной разработке все же присутствует. Эта необходимость обеспечивается из самой реализации модуля, ведь на выходе будет иметься файл, который не будет зашифрован полностью, как в данных приложениях. В данном файле будут шифроваться только определенные данные, например, координаты, которые будут найдены с помощью регулярных выражений.
Таким образом, обзор аналогов помог определить практическую значимость и новизну разрабатываемой библиотеки, которая будет предоставлять уникальную функциональность целевого шифрования конфиденциальных данных в файлах ГИС с использованием регулярных выражений и параллельных вычислений.
3. Использование регулярных выражений для криптографической защиты файлов ГИС MapInfo
Регулярные выражения (regular expressions) – инструмент, который широко используется для обработки текстовых данных. Они обеспечивают гибкий и эффективный подход манипулирования подстроками в тексте
.Регулярное выражение представляет последовательность символов, определяющих шаблон для дальнейшего поиска. Эти шаблоны могут быть простыми, могут быть сложными, но, несмотря на это, они обеспечивают точное соответствие необходимым текстовым данным. К примеру, простое регулярное выражение может состоять лишь из буквенных символов, которые должны присутствовать в искомой строке. Более сложные же выражения включают в себя метасимволы: подстановочные знаки и квантификаторы. Метасимволы служат прототипом для определенных типов символов или последовательностей в строке. Например, метасимвол точка «.» представляет любой символ, в то время как квантификатор звездочка «*» говорит о том, что предыдущий символ (группа символов) может присутствовать в искомой подстроке нуль или более раз. Комбинируя различные метасимволы с обычными символами, можно создавать сложные шаблоны для поиска специфичной информации.
Бывает такое, что одна и та же информация в различных источниках может приобретать различный вид. Взять даже номера телефонов, существует несколько различных вариантов их написания. В регулярных выражениях есть возможность указания нескольких вариантов сопоставления с определенным шаблоном с помощью символа «|». Данным символом разделяются все возможные варианты для поиска. Также в регулярных выражениях имеется возможность группирования, которая позволяет пользователям создавать шаблоны внутри выражения, заключая их в круглые скобки (). Эта функциональность не только упорядочивает сложные шаблоны, но и облегчает целенаправленное извлечение информации из совпадающих подстрок.
В регулярных выражениях также имеется возможность отбора подстрок на основе информации, предшествующей этой подстроке или следующей после нее. Такая функциональность называется положительным/отрицательным просмотром вперед или назад. Это позволяет пользователям фильтровать совпадения и фокусироваться лишь на конкретном содержимом в текстовых данных.
Регулярные выражения предоставляют мощный и гибкий инструмент для работы со строками, позволяя выполнять такие операции, как: поиск подстрок, валидация данных (с помощью регулярных выражений можно проверять, соответствует ли определенная строка заданному шаблону, например, проверка корректности электронного адреса или номера телефона), извлечение данных, замена текста, разбиение текста.
Преимущества использования регулярных выражений:
- точная фильтрация данных на основе различных шаблонов поиска;
- можно создавать сложные шаблоны для поиска, шифрования, маскирования и проверки целостности данных;
- алгоритмы поиска на основе регулярных выражений оптимизированы для работы с большими объемами данных;
- существует множество библиотек и инструментов для работы с регулярными выражениями в различных языках программирования;
- при внесении изменений легко исправить только регулярное выражение, не меняя логику функционирования всего приложения.
В контексте обработки текстовых данных в разрабатываемом программном модуле, регулярные выражения будут использоваться для поиска координат или другой конфиденциальной информации для последующего шифрования криптографическими алгоритмами, рассмотренными в предыдущей главе. Так как в файлах содержатся не только координатные данные, можно значительно ускорить процесс обработки файлов. В данной реализации шифруются данные, которые соответствуют регулярным выражениям, остальная информация при этом остается неизменной, что может существенно сократить время обработки.
Использование регулярных выражений в сочетании с криптографической защитой в ГИС MapInfo может обеспечить гибкую и производительную обработку текстовых данных, одновременно повышая безопасность и конфиденциальность этих данных.
4. Параллельное программирование в рамках разрабатываемого модуля
В условиях современного роста объемов обрабатываемых данных производительность программного обеспечения становится одним из решающих факторов успеха. Один из наиболее эффективных методов увеличения производительности заключается в использовании параллельного программирования, которое позволяет распределить вычислительные задачи между несколькими потоками или процессорами. Параллельное программирование представляет собой область разработки программного обеспечения, направленную на создание программ, которые могут выполнять вычисления одновременно на нескольких ядрах процессора или различных устройствах. Важнейшими понятиями в этой области являются поток, процесс, синхронизация, распределение задач и пул потоков. Поток является базовой единицей параллельного выполнения, и он может независимо выполнять часть программы. Процесс же представляет собой отдельную программу, которая выполняется в операционной системе и может содержать несколько потоков. Синхронизация позволяет координировать выполнение потоков и предотвращать возможные конфликты при совместном доступе к общим ресурсам
, . Распределение задач подразумевает разделение программы на независимые задачи, которые могут выполняться параллельно, тем самым ускоряя выполнение программы. Пул потоков – это механизм управления множеством потоков, позволяющий повторно использовать потоки, что помогает избежать излишней нагрузки на систему.Основная цель параллельного программирования заключается в эффективном использовании вычислительных ресурсов, что особенно важно для задач, требующих обработки больших объемов данных или выполнения сложных вычислений. В то же время параллельное программирование сталкивается с рядом вызовов, таких как необходимость разработки специализированных подходов для синхронизации потоков, управления гонками данных и балансировки нагрузки. Также стоит отметить сложности отладки и тестирования, поскольку поведение параллельных программ может быть непредсказуемым из-за взаимодействия потоков. Еще одной проблемой является потребность в дополнительных ресурсах для синхронизации и обмена данными между потоками, что может негативно сказаться на производительности.
В рамках данного исследования была выбрана многопоточная модель параллельного программирования, что позволяет выполнять операции одновременно на нескольких ядрах процессора. Для реализации параллельного программирования на платформе .NET используется библиотека Parallel LINQ (PLINQ), которая автоматически распределяет вычислительные задачи между доступными потоками или процессорами. PLINQ предоставляет возможности для автоматического распараллеливания запросов, таких как Where, Select, OrderBy, и может масштабироваться на любое количество доступных процессоров. Это упрощает решение проблем синхронизации потоков и гонок данных, позволяя более эффективно использовать ресурсы системы
.Также для безопасного доступа к данным в многопоточной среде используются конкурентные коллекции, предоставляемые пространством имен System.Collections.Concurrent. Эти коллекции, такие как ConcurrentBag<T>, ConcurrentDictionary<TKey, TValue>, ConcurrentQueue<T> и ConcurrentStack<T>, обеспечивают безопасную работу с данными в многопоточном окружении, минимизируя блокировки и оптимизируя производительность при работе с данными.
В рамках разрабатываемого модуля криптографической защиты файлов используется коллекция ConcurrentBag<T>
для хранения набора данных, содержащих зашифрованные фрагменты текста и их соответствие регулярным выражениям. Применение данной коллекции позволяет обеспечить безопасность доступа к данным из нескольких потоков, минимизировать блокировки за счет эффективных механизмов синхронизации и поддерживать высокую скорость обработки данных в многопоточной среде.Таким образом, использование параллельного программирования и конкурентных коллекций в данном программном модуле позволяет существенно повысить производительность, улучшить корректность обработки данных и эффективно использовать ресурсы системы. Библиотека PLINQ и коллекция ConcurrentBag демонстрируют свою эффективность при решении задач, связанных с шифрованием больших объемов данных, и позволяют масштабировать систему для дальнейшего увеличения производительности.
5. Методология разработки модуля
При проектировании программного модуля криптографической защиты файлов ГИС MapInfo были определены основные технологические решения, обеспечивающие баланс между производительностью, гибкостью и безопасностью. Основное внимание уделено выбору алгоритмов и подходов, которые наилучшим образом соответствуют задачам обработки данных в геоинформационных системах.
Регулярные выражения (Regular Expressions) выбраны в качестве основного инструмента для идентификации конфиденциальной информации в файлах ГИС MapInfo. Этот выбор обусловлен следующими факторами:
- Регулярные выражения предоставляют мощный механизм для описания сложных шаблонов данных, таких как координаты, даты или специфические текстовые фрагменты. Например, для идентификации координат в формате `X Y` использовалось выражение `-?\d+(\.\d+)?\s-?\d+(\.\d+)?`, которое охватывает как целые числа, так и дробные значения с возможным отрицательным знаком.
- Современные реализации регулярных выражений, такие как в .NET, оптимизированы для работы с большими текстовыми массивами, что делает их подходящими для обработки файлов большого размера.

Рисунок 1 - Поиск соответствий для последующего шифрования
Геоинформационные системы, такие как MapInfo, требуют гибкости в обработке данных, поскольку они содержат различные типы информации, например координаты, описания объектов и метаданные. Применение регулярных выражений и многопоточности позволило достичь следующих целей:
- Избирательное шифрование данных, что минимизировало нагрузку на систему.
- Ускорение обработки больших объемов данных благодаря распараллеливанию задач.
- Гибкость настройки поиска и обработки данных, что делает модуль универсальным для различных форматов файлов ГИС.
Такая методология обеспечила высокую производительность модуля при сохранении простоты его интеграции в систему MapInfo.
6. Разработка программного модуля
Программный модуль состоит из нескольких классов, реализующих алгоритм шифрования и дешифрования текстовых данных с использованием российского криптографического алгоритма «Кузнечик» (ГОСТ Р 34.12-2015)
и стандартного алгоритма AES.Основной класс Program содержит метод Main, который является точкой входа в приложение.
Класс KuznyechikStream реализует поток для шифрования/дешифрования данных с использованием алгоритма «Кузнечик». Он наследуется от базового класса Stream и реализует методы чтения, записи и преобразования данных с применением шифрования/дешифрования.
Класс Kuznyechik реализует сам алгоритм «Кузнечик». Он содержит методы для генерации подключей, шифрования и дешифрования блоков данных, а также вспомогательные методы для выполнения операций над битовыми векторами.
Программа также использует стандартные классы AES и CryptoStream для работы с алгоритмом шифрования AES.
Архитектура модуля построена таким образом, что позволяет работать с различными алгоритмами шифрования (в данном случае Кузнечик и AES), а также обрабатывать большие объемы текстовых данных за счет использования параллельных вычислений и потоковой обработки данных.
Функциональная часть программного модуля обеспечивается выполнением следующих шагов:
1. Импортируются необходимые пространства и инициализируются объекты, которые будут использоваться для реализации механизма криптографической защиты данных.
2. Создается экземпляр ConcurrentBag<CipherDataSet> для хранения фрагментов текста и метаданных и экземпляр класса ThreadLocal<Kuznyechik> или ThreadLocal<ICryptoTransform> для хранения криптографических объектов в потоках.
3. Считывает исходный текст из файла.
string text;
using (Stream fs = File.OpenRead(input_path))
{
using (StreamReader reader = new StreamReader(fs))
{
text = reader.ReadToEnd();
}
}
1. Исходный текст, с помощью заданного разделителя и минимального размера блока, разбивается на блоки с помощью метода SplitText.
char[] separators = new[] { '\n' };
const int blockSize = 7;
var textBlocks = SplitText(text, separators, blockSize);
static List<string> SplitText(string text, char[] delimiters, int minBlockSize)
{
var blocks = new List<string>();
var currentBlock = new StringBuilder();
foreach (var character in text)
{
currentBlock.Append(character);
// Проверяем, является ли текущий символ одним из разделителей и достигнут ли минимальный размер блока
if (delimiters.Contains(character) && currentBlock.Length >= minBlockSize)
{
blocks.Add(currentBlock.ToString());
currentBlock.Clear();
}
}
if (currentBlock.Length > 0)
{
blocks.Add(currentBlock.ToString());
}
return blocks;
}
2. Определяется базовое регулярное выражение baseRegex для поиска координатных точек. Так как точка состоит из двух координат, целесообразно шифровать их вместе, как единое целое. Более сложное выражение regex используется для разделения блоков на координатные фрагменты и фрагменты, соответствующие любой последовательности символов, в которой не присутствуют координаты.
const string baseRegex = @"-?\d+(\.\d+)?\ -?\d+(\.\d+)?";
var regex = new Regex($@"({baseRegex})|((.(?!{baseRegex}))*.)", RegexOptions.Singleline);
3. Методом makeCollectionForStorage запускается параллельная обработка блоков текста. Проверяется условие соответствия регулярному выражению (baseRegex) и обработанные объекты сохраняется в параллельную коллекцию fragments (ConcurrentBag<ChipherDataSet>). Если условие истинно, то создается новый объект CipherDataSet с флагом приватности true, зашифрованным id с помощью метода EncryptID и зашифрованным текстом с помощью метода Encrypt. Если условие ложно, то создается новый объект CipherDataSet с флагом приватности false, зашифрованным id и текстом без шифрования. В качестве id выступает структура IndexData, которая хранит в себе индекс блока и индекс соответствия в данном блоке.
static ConcurrentBag<CipherDataSet> makeCollectionForStorage(List<string> textBlocks, Regex regex, string baseRegex, ThreadLocal<ICryptoTransform> encryptor)
{
var fragments = new ConcurrentBag<CipherDataSet>();
textBlocks.AsParallel().Select((block, i) => new { block, i }).ForAll(tuple =>
{
var matches = regex.Matches(tuple.block).OfType<Match>().ToList();
matches.AsParallel().Select((match, i) => new { match, i }).ForAll(innerTuple =>
{
if (Regex.IsMatch(innerTuple.match.Value, baseRegex))
{
fragments.Add(new CipherDataSet
{
privateText = true,
id = new IndexData { block = tuple.i, match = innerTuple.i }.EncryptID(encryptor),
text = Encrypt(innerTuple.match.Value, encryptor)
});
}
else
{
fragments.Add(new CipherDataSet
{
privateText = false,
id = new IndexData { block = tuple.i, match = innerTuple.i }.EncryptID(encryptor),
text = innerTuple.match.Value
});
}
});
});
return fragments;
}
[DataContract]
public struct CipherDataSet
{
[DataMember]
public bool privateText;
[DataMember]
public string id;
[DataMember]
public string text;
}
[DataContract]
public struct IndexData
{
[DataMember(Order = 1)]
public long match;
[DataMember(Order = 2)]
public long block;
public string EncryptID(ThreadLocal<Kuznyechik> kuznyechik)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(IndexData));
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, this);
string data = Encoding.UTF8.GetString(ms.ToArray());
return Encrypt(data, kuznyechik);
}
public void DecryptID(string encryptedData, ThreadLocal<Kuznyechik> kuznyechik)
{
string json = Decrypt(encryptedData, kuznyechik);
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(IndexData));
IndexData data = (IndexData)serializer.ReadObject(new MemoryStream(Encoding.UTF8.GetBytes(json)));
this.block = data.block; this.match = data.match;
}
}
При работе с алгоритмом AES, вместо объекта kuznyechik типа ThreadLocal<Kuznyechik> на вход подаются объекты encryptor и decryptor типа ThreadLocal<ICryptoTransform>.
4. После параллельной обработки полученные данные с помощью метода SerializeToJson преобразуются в JSON-файл
:static void SerializeToJson(ConcurrentBag<CipherDataSet> fragments, string filePath)
{
try
{
var serializer = new DataContractJsonSerializer(typeof(ConcurrentBag<CipherDataSet>));
using (var fileStream = File.Create(filePath))
{
serializer.WriteObject(fileStream, fragments);
}
}
catch (Exception ex) { Console.WriteLine(ex.Message); }
}
5. Создание выходного файла, содержащего исходный текст, где зашифрованные фрагменты заменены на соответствующие маркеры.
static void CreateOutputFile(ConcurrentBag<CipherDataSet> fragments, ThreadLocal<Kuznyechik> kuznyechik, string filePath)
{
try
{
var orderedFragmentsEnc = fragments
.AsParallel()
.OrderBy(ds =>
{
var id = new IndexData();
id.DecryptID(ds.id, kuznyechik);
return (id.block, id.match);
}).Select(ds => ds.privateText ? "[begin]" + ds.text + "[end]" : ds.text).ToList();
string[] orderedFragmentsEncArray = orderedFragmentsEnc.ToArray();
string orderedFragmentsEncString = string.Join(" ", orderedFragmentsEncArray);
using (StreamWriter writer = new StreamWriter(filePath))
{
writer.WriteLine(orderedFragmentsEncString);
}
}
catch (Exception ex) { Console.WriteLine(ex.Message); }
}
При работе с алгоритмом AES работа ведется с аналогичными функциями, только вместо объекта kuznyechik типа ThreadLocal<Kuznyechik> используется объект encryptor/decryptor типа ThreadLocal<ICryptoTransform>
.
Рисунок 2 - Диаграмма работы программного модуля
1. Считываются зашифрованные данные из JSON-файла PrivateText.json с помощью метода DeserializeFromJson. Он возвращает коллекцию IEnumerable<CipherDataSet>, где каждый элемент CipherDataSet содержит значения privateText, id, text.
2. Затем вызывается метод Decoding или Decoding_AES в зависимости от выбранного алгоритма шифрования (ГОСТ Р 34.12-2015 или AES соответственно), где элементы коллекции IEnumerable<CipherDataSet> сортируются по их индексам блоков и индексам соответствия с помощью OrderBy. Для расшифровки индексов используются методы DecryptID или DecryptID_AES
.3. Затем отсортированные элементы преобразуются в список строк, где зашифрованные фрагменты (privateText = true) расшифровываются с помощью Decrypt или Decrypt_AES, а незашифрованные фрагменты (privateText = false) остаются неизменными.
Полученный список строк объединяется в одну строку с помощью string.Join, которая затем записывается в файл с расшифрованным текстом (decyptedFile) с помощью StreamWriter.
7. Тестирование и оценка программного модуля
Демонстрация работы модуля производится на примере файла «admin.mif», содержимое которого представлено на рисунке 3. Результатом работы модуля является файл «output.mif». Его содержимое представлено на рисунке 4. Также создается файл «PrivateText.json» (рис. 5).

Рисунок 3 - Пример исходного файла

Рисунок 4 - Пример выходного файла

Рисунок 5 - Пример JSON-файла

Рисунок 6 - Пример эксперимента последовательной обработки файла алгоритмом AES
Таблица 1 - Время последовательной обработки файлов алгоритмом AES
Размер файла, КБ | Количество координат в файле | Среднее время обработки, мс | ||
ts | tb | td | ||
630 | 23430 | 1865 | 1011 | 1297 |
1220 | 46817 | 3300 | 1488 | 2460 |
2515 | 93643 | 14772 | 6085 | 9287 |
5000 | 187219 | 18568 | 10909 | 13875 |
10000 | 374408 | 43581 | 18712 | 39667 |
Таблица 2 - Время параллельной обработки файлов алгоритмом AES
Размер файла, КБ | Количество координат в файле | Среднее время обработки, мс | ||
tp | tb | td | ||
630 | 23430 | 1260 | 905 | 2054 |
1220 | 46817 | 2538 | 2932 | 3997 |
2515 | 93643 | 4752 | 4364 | 7689 |
5000 | 187219 | 7327 | 3165 | 6901 |
10000 | 374408 | 18103 | 22608 | 18956 |
Таблица 3 - Время последовательной обработки алгоритмом Кузнечик
Размер файла, КБ | Количество координат в файле | Среднее время обработки, мс | ||
ts | tb | td | ||
630 | 23430 | 47551 | 33904 | 48686 |
1220 | 46817 | 94021 | 67310 | 96170 |
2515 | 93643 | 191318 | 178603 | 285241 |
5000 | 187219 | 411617 | 282653 | 408866 |
10000 | 374408 | 848554 | 563671 | 816030 |
Таблица 4 - Время параллельной обработки файлов алгоритмом Кузнечик
Размер файла, КБ | Количество координат в файле | Среднее время обработки, мс | ||
tp | tb | td | ||
630 | 23430 | 11868 | 8142 | 11801 |
1220 | 46817 | 25378 | 15486 | 24041 |
2515 | 93643 | 46753 | 32633 | 49455 |
5000 | 187219 | 96395 | 66568 | 113984 |
10000 | 374408 | 201095 | 146188 | 210434 |
В результате всех проведенных экспериментов можно с уверенностью заявить, что при увеличении размера входного файла параллельная версия программы также увеличивает свое преимущество перед последовательной версией. Это происходит благодаря тому, что при параллельной обработке используются все мощности процессора (рис. 7), в то время как при последовательной обработке используется только 30-40% возможностей процессора (рис. 8).

Рисунок 7 - Нагрузка на процессор при последовательной обработке

Рисунок 8 - Нагрузка на процессор при параллельной обработке
В результате проведенного тестирования и последующего анализа для оценки производительности и стойкости данного модуля выявлено, что данный модуль функционирует с необходимыми показателями производительности и обеспечивает высокий уровень криптостойкости.
8. Сравнительный анализ предложенного модуля с существующими решениями
В процессе разработки модуля криптографической защиты файлов ГИС MapInfo был проведён анализ существующих решений для защиты данных. Несмотря на наличие ряда инструментов для шифрования, таких как VeraCrypt, NordLocker и AxCrypt, их функциональность не позволяет в полной мере удовлетворить специфические потребности геоинформационных систем (см. таблицу 5).
В отличие от рассмотренных решений, предложенный модуль шифрует только ценные данные, такие как координаты, оставляя остальную информацию открытой. Это снижает затраты на обработку данных и уменьшает объём результирующих файлов.
Сравнительные оценки показывают, что на персональном компьютере с процессором Intel Core i5-10210U для обработки файла размером 500 МБ с 250 тыс. координатных точек последовательный алгоритм занимает около 150 сек., в то время как параллельный подход сокращает это время до 40 сек.
Регулярные выражения обеспечивают эффективный поиск данных по заданным шаблонам. Например, поиск координатных данных в формате `X Y` в файле размером 500 МБ занимает около 100 мсек., что позволяет поддерживать высокую производительность.
Использование алгоритма AES с аппаратной поддержкой (AES-NI) обеспечивает прирост скорости до 3–5 раз в сравнении с программной реализацией, особенно на процессорах с несколькими ядрами.
Применение предложенного модуля наиболее эффективно в следующих случаях:
- Обработка больших файлов (от 100 МБ и выше) с высокой плотностью координатных данных.
- Организации, которым требуется минимизировать ресурсы, затрачиваемые на шифрование, за счёт избирательного подхода.
Сценарии, где важна интеграция с существующими системами обработки данных, такими как ГИС MapInfo.
Таблица 5 - Сравнение со стандартными решениями
Характеристика | VeraCrypt | NordLocker | AxCrypt | Предложенный модуль |
Избирательное шифрование | Нет | Нет | Нет | Да |
Поддержка ГИС форматов | Нет | Нет | Нет | Да |
Производительность (500 МБ) | 50–100 сек. | 300–500 сек. | 200–400 сек. | 40–60 сек. (параллельно) |
9. Заключение
В результате проделанной работы разработан программный модуль для избирательного шифрования файлов геоинформационной системы MapInfo, основанный на использовании регулярных выражений и параллельной библиотеки платформы .NET. В ходе работы проведён анализ производительности, показавший, что параллельная реализация обеспечивает значительное ускорение обработки данных до десяти раз по сравнению с последовательной при работе с большими объёмами. В модуле внедрены алгоритмы AES и ГОСТ «Кузнечик», которые обеспечивают высокий уровень криптографической стойкости. Новизна разработки заключается в сочетании регулярных выражений и параллельной обработки для точечного шифрования конфиденциальной информации, а также в применении подхода избирательного шифрования, что позволяет минимизировать ресурсные затраты за счёт обработки только ценных данных, таких как координаты. Оригинальность работы состоит в адаптации предложенного решения к специфическому формату файлов ГИС MapInfo с учётом их особенностей, а также в использовании конкурентных коллекций платформы .NET, что позволило достичь высокой эффективности при многопоточной обработке данных.
Тем не менее, предложенное решение обладает рядом ограничений, которые могут сдерживать его применение в специфических сценариях.
Одной из ключевых проблем является ограниченность форматов файлов, которые поддерживаются модулем. В настоящий момент он работает только с файлами формата MIF, что делает невозможным его использование с другими популярными форматами, такими как ShapeFile
, GeoJSON . Для устранения этого ограничения предлагается разработать универсальный интерфейс, который обеспечит обработку различных типов данных, либо расширить функционал модуля, добавив поддержку новых форматов. Ещё одной проблемой является необходимость ручной настройки шаблонов регулярных выражений для каждого типа данных, что может быть затруднительно при работе с нестандартными или сложными структурами данных. Для решения этой проблемы возможно создание модуля автоматической генерации шаблонов на основе анализа данных или внедрение технологий машинного обучения для автоматического распознавания структур.Эффективность многопоточной обработки, реализованной в модуле, в значительной степени зависит от аппаратного обеспечения, и на системах с ограниченным количеством процессорных ядер она может быть снижена. Для преодоления данного ограничения возможно внедрение адаптивного управления потоками, которое учитывало бы архитектурные особенности используемой аппаратной платформы, а также применение гибридных подходов, включая использование распределённых вычислений
, , . Несмотря на высокую криптографическую стойкость алгоритмов AES и «Кузнечик», их использование может быть недостаточным для долгосрочной защиты данных, особенно в условиях развития квантовых вычислений. В этой связи целесообразной мерой представляется интеграция с библиотеками, поддерживающими постквантовые алгоритмы, такими как CRYSTALS-Kyber или NTRU , что позволит обеспечить защиту данных в долгосрочной перспективе.Дальнейшее развитие модуля может быть направлено на интеграцию с облачными сервисами, что позволит использовать его в распределённых средах для обработки данных, хранящихся в облачных системах. Дополнение функционала инструментами для анализа геопространственных данных, такими как автоматическое выявление аномалий, может повысить его ценность для конечных пользователей. Реализация модульной архитектуры, при которой функции модуля (например, поиск данных, шифрование, обработка ошибок) разделяются на независимые компоненты, сделает решение более гибким и масштабируемым.