Научная статья на тему 'Программная реализация алгоритма Sequence c использованием механизма многопоточности'

Программная реализация алгоритма Sequence c использованием механизма многопоточности Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
145
14
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
МНОГОПОТОЧНОСТЬ / MULTITHREADING / ПАРАЛЛЕЛЬНАЯ ОБРАБОТКА / PARALLEL PROCESSING / БАЗЫ ДАННЫХ / DATABASES / РАЗДЕЛЯЕМЫЕ РЕСУРСЫ / SHAREABLE RESOURCES

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Сущевский Д.Г., Панченко О.В.

В работе представлена многопоточная реализация криптоалгоритма Sequence, приведен пример хранения и генерации уникальных идентификаторов на локальном СУБД, а также предложены возможные способы улучшения алгоритма и его внедрения.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Программная реализация алгоритма Sequence c использованием механизма многопоточности»

УДК 519.688

Д. Г. Сущевский, О. В. Панченко

ПРОГРАММНАЯ РЕАЛИЗАЦИЯ АЛГОРИТМА SEQUENCE C ИСПОЛЬЗОВАНИЕМ МЕХАНИЗМА МНОГОПОТОЧНОСТИ

Ключевые слова: многопоточность, параллельная обработка, базы данных, разделяемые ресурсы.

В работе представлена многопоточная реализация криптоалгоритма Sequence, приведен пример хранения и генерации уникальных идентификаторов на локальном СУБД, а также предложены возможные способы улучшения алгоритма и его внедрения.

Keywords: multithreading, parallel processing, databases, shareable resources.

This paper presents multithreading implementation of the Sequence cryptoalgorithm, it provides an example of storing and creating of unique identifiers for a local RDBS, and in addition, it were offered the possible ways of the algorithm improvement and its implement.

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

«параллельно», то есть без предписанного порядка во времени. При выполнении некоторых задач такое разделение позволяет более эффективно использовать ресурсы вычислительной системы.

Многопоточное программирование - это построение программной структуры таким образом, что работа с участками определенной структуры данных производиться не зависимо во времени, и работа выполняется только с определенными частями структуры данных. Эти участки данных принято называть разделяемыми ресурсами, а работу с ними параллельной обработкой. Как правило во время параллельной обработки может быть задействовано не одно ядро мультипроцессора, таким образом увеличивается производительность программы в целом. Однако вместе с возможными преимуществами данный подход несет и определенные проблемы при программной разработке.

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

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

ресурсов и критических секций программы и обеспечения порядка очереди потоков к ним.

В предыдущих статьях [1, 2] было отмечено, что криптосистема Sequence является блочной криптосистемой, или иными словами криптоалгоритм может обрабатывать не всё сообщение, а только его отдельные части. Таким образом, можно организовать программный код, чтобы обрабатывался не один блок криптотекста, а несколько блоков в одно и тоже время, что увеличит скорость шифрования. В результате, программа будет делить исходное числовое сообщение на подблоки той длины, которую данная система может обработать (напомним,в нашей случае оно равно четырем), с каждым из которых будет затем работать отдельный поток.

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

var b21 = b1; byte b11 = 0; _keys.Reverse();

for (var i = 0; i < Rounds; i++) {

//некоторые действия }

b1 = b11; b2 = b21; _keys.Reverse();

Рис. 1 - Выявление критических разделяемых ресурсов

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

единого целого. В результате, эти сети Фейстеля и будут разделяемыми ресурсами.

Теперь необходимо разграничить доступ к этим ресурсам. Для текущего языка программирования были спользован специальный оператор lock [3, с.850], который позволяет заблокировать некоторый фрагмент кода, до тех пор, пока в нем находиться хотя бы один поток. Все остальные потоки, которые попытаются войти в секцию кода ограниченную этим оператором, должны будут встать в очередь на вход в эту область. Как только поток выходит из критической секции, lock позволяет следующему потоку из очереди войти в критическую секцию. Пример кода с lock приводиться ниже:

lock (fiestelNet) // блокируем разделяемый ресурс {

for (var k = 0; k < ArraySubCopy.Length; k += 2) {

// выполняем работу с сетью Фейстеля }

}

ArraySubCopy = crptsystem.InvalMatrix*ArraySubCopy; // умножаем на матрицу

Рис. 2 - Разделение общих ресурсов

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

Для того чтобы оценить преимущества работы многопоточного приложения были разработаны два типа приложений: однопоточное (без использования механизма многопоточности) и многопоточное. Ниже, в таблице 1 приводятся данные о времени обработки сообщений различной длины с постоянном ключом, при количестве испытаний равным пяти.

Таблица 1 - Анализ производительности многопоточных приложений

Время на шифрование без многопоточности Среднее время

4 7 7 3 5 7 5,8

16 8 6 7 7 8 7,2

Л od И F 64 8 7 5 8 7 7

s 2 а! 128 8 8 8 7 8 7,8

1024 17 6 8 9 7 9,4

Время на шифрование с многопоточностью Среднее время

4 7 2 5 7 5 5,2

16 7 6 6 6 6 6,2

Л od И F 64 6 7 6 6 8 6,6

s 2 а! 128 2 8 3 2 2 3,4

1024 11 9 9 3 4 7,2

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

Стоит отметить, что пользователь может хранить все данные криптосистемы, генератора псевдослучайных чисел, а также все полученные последовательности как в виде локального файла, так и в базе данных на локальном и удаленном сервере MSSQLServer [4, 5]. Сами полученные последовательности могут быть использованы позднее для разных целей, однако в данной работе рассмотрен случай хранения уникальных идентификаторов, или ID, которые позднее могут однозначно идентифицировать данные той же самой базы данных. Для начала предположим, что длина ID будет равна 18 знакам, хотя она может быть равной любому натуральному числу больше нуля.

Когда пользователь генерирует, а затем сохраняет все полученные последовательности, то они сохраняются в определенную таблицу базы данных (например,Ые8). Позже, когда в таблицы базы данных добавляются записи, специальные триггеры выбирают в качестве ID первую запись с флагом «доступен»установленный в истину, заменяя его на значение «не доступен». После удаления строк из таблицы, которая использует любой идентификатор, другой триггер устанавливает флаг обратно в значение «доступен», гарантируя что этот ID может быть использован повторно.

Кроме этого, когда пользователь сохраняет/загружает ключ криптосистемы, то этот ключ может сохраняться в отдельную таблицу (например, в таблицу Security в поле Key_word), предварительно изменив свое значение. Такой способ хранения является более эффективным по сравнению с локальным хранением, так как в СУБД присутствует механизм аутентификации и внутреннего шифрования содержимого баз данных.

Рассматриваемый алгоритм криптосистемы обладает высокой степенью зашиты информации и высокой скоростью обработки информации, а также сам программный продукт способен задействовать современные информационные технологии такие как хранение данных на СУБД и многопоточная обработка. Следует заметить, что в ходе проведенного тестирования были выявлены следующие уязвимости криптосистемы: одинаковый выходной результат в схожих криптоблоках, замкнутость множества Z и ограничение на длину алфавита. В качестве варианта доработки программного продукта могут быть предложены следующие действия:

• создание анализатора криптоключа для

выявления вероятности случайности генератора

псевдослучайных чисел

• возможность задавать алфавит открытого текста

• возможность задавать размерность блока

шифрования

• возможность задавать имя криптосистемы при

сохранении ее данных на сервер

• возможность работы с удаленными серверами

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

Литература

1. Сущевский, Д. Г. Современные криптосистемы и их особенности / Д. Г. Сущевский, О. В. Панченко, В. Н. Кугураков // Вестник Казан. технол. ун-та. - 2015. - Т.18. - № 11 - С. 194-197.

2. Кугураков, В. С. О генерации псевдослучайных PIN кодов криптографическим методом / В. С. Кугураков, А. П. Кирпичников, Д. Г. Сущевский // Вестник Казан. технол. ун-та. - 2015. - Т.18. - № 17 - С. 190-194.

3. Шилдт, Гелберт. C# 4.0: полное руководство.: Пер. с англ. - М.:ООО "И.Д. Вильямс", 2011. - 1056 с :ил.

4. ФленовМ.Е. Transact-SQL. СПб::БХВ-Петербург, 2006. - 576 с.: ил.

5. Побегайло А.П. Системное программирование в Windows. - СПб: БХВ-Петербург, 2006. - 1056 с ил.

© Д. Г. Сущевский - бакалавр каф. интеллектуальных систем и управления информационными ресурсами КНИТУ, dercius608270@gmail.com; О. В. Панченко - канд. тех. наук, доцент каф. интеллектуальных систем и управления информационными ресурсами КНИТУ, ov_panchenko@mail.ru.

© D. G. Sushchevsky - baccalaureate, information processing systems and managingtion, KNRTU, dercius608270@gmail.com; O. V. Panchenko - Ph.D., information processing systems and managingtion, KNRTU, ov_panchenko@mail.ru.

i Надоели баннеры? Вы всегда можете отключить рекламу.