Научная статья на тему 'ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ГЕНЕРАТОРА ПСЕВДОСЛУЧАЙНЫХ ЧИСЕЛ НА ОСНОВЕ АЛГОРИТМА БЛЮМ - БЛЮМА - ШУБА'

ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ГЕНЕРАТОРА ПСЕВДОСЛУЧАЙНЫХ ЧИСЕЛ НА ОСНОВЕ АЛГОРИТМА БЛЮМ - БЛЮМА - ШУБА Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
394
41
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
КРИПТОГРАФИЯ / КРИПТОСТОЙКОСТЬ / ПСЕВДОСЛУЧАЙНОЕ ЧИСЛО / ГЕНЕРАТОР ПСЕВДОСЛУЧАЙНЫХ ЧИСЕЛ / АЛГОРИТМ БЛЮМ - БЛЮМА - ШУБА

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Каргин А.Е.

Изучены и проанализированы основные принципы работы генератора псевдослучайных чисел. Описан генератор псевдослучайных чисел на основе алгоритма Блюм - Блюма - Шуба. Разработано программное средство для генерации псевдослучайных чисел на основе алгоритма Блюм - Блюма - Шуба. Результаты работы программы представлены на снимках и проанализированы.

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

SOFTWARE IMPLEMENTATION OF THE PSEUDORANDOM NUMBER GENERATOR ON THE BLUM - BLUM - SHUB ALGORITHM

The article studies and analyzes the basic principles of the pseudorandom number generator. The Blum - Blum - Shub pseudorandom number generator is described. The Pseudorandom number generator on the Blum - Blum - Shub algorithm has been developed. The results of the program are presented in the pictures and analyzed.

Текст научной работы на тему «ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ГЕНЕРАТОРА ПСЕВДОСЛУЧАЙНЫХ ЧИСЕЛ НА ОСНОВЕ АЛГОРИТМА БЛЮМ - БЛЮМА - ШУБА»

УДК 519

ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ГЕНЕРАТОРА ПСЕВДОСЛУЧАЙНЫХ ЧИСЕЛ НА ОСНОВЕ АЛГОРИТМА БЛЮМ - БЛЮМА - ШУБА

А. Е. Каргин

Донской государственный технический университет (г. Ростов-на-Дону, Российская Федерация)

Изучены и проанализированы основные принципы работы генератора псевдослучайных чисел. Описан генератор псевдослучайных чисел на основе алгоритма Блюм — Блюма — Шуба. Разработано программное средство для генерации псевдослучайных чисел на основе алгоритма Блюм — Блюма — Шуба. Результаты работы программы представлены на снимках и проанализированы.

Ключевые слова: криптография, криптостойкость, псевдослучайное число, генератор псевдослучайных чисел, алгоритм Блюм — Блюма — Шуба.

SOFTWARE IMPLEMENTATION OF THE PSEUDORANDOM NUMBER GENERATOR ON

THE BLUM - BLUM - SHUB ALGORITHM

A. E. Kargin

Don State Technical University (Rostov-on-Don, Russian Federation)

The article studies and analyzes the basic principles of the pseudorandom number generator. The Blum — Blum — Shub pseudorandom number generator is described. The Pseudorandom number generator on the Blum — Blum — Shub algorithm has been developed. The results of the program are presented in the pictures and analyzed.

Keywords: cryptography, cryptographic strength, pseudorandom number, pseudorandom number generator, Blum — Blum — Shub algorithm.

Введение. На сегодняшний день задача генерации случайных чисел является актуальной во многих сферах жизнедеятельности человека — от индустрии развлечений и социологических исследований до компьютерного моделирования и информационной безопасности. Особенно остро стоит проблема в криптографических системах. Для большинства прикладных задач, таких как поточное шифрование или получение уникальных значений, используется генерация псевдослучайных чисел [1].

В начале ХХ века случайные числа генерировали путем бросания монеты, извлечением шаров из урны или с помощью рулетки. Позже Леонардом Типпетом была опубликована таблица со случайными значениями. А в 1939 году для создания таблицы, которая содержала в себе 100 000 случайных чисел, был использован аппаратный генератор. Но ни табличный метод, ни аппаратные генераторы не давали эффективных и надежных результатов. В связи с этим в 1946 году американский математик Джон фон Нейман предложил арифметический способ генерации случайной последовательности. Он назывался «Методом серединных квадратов» и суть его заключалась в следующем: для получения очередного числа необходимо возвести предыдущее в квадрат и выделить из него цифры посередине [2]. Полученные в результате числа не были случайными, ведь они вычислялись с помощью определенной формулы, хотя и были похожи на случайную последовательность. Такие числа называют псевдослучайными, а метод их генерации — генератором псевдослучайных чисел (ГПСЧ).

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

Современные криптографические системы используют псевдослучайные числа для получения ключей или набора входных параметров алгоритма шифрования. Для таких целей необходим криптостойкий генератор псевдослучайных чисел (КСГПСЧ), который удовлетворяет следующим требованиям: он должен проходить статистические тесты на случайность, а также сохранять непредсказуемость, даже если часть его текущего состояния становится известна криптоаналитику [3]. Помимо этого, криптографически стойкий генератор должен выполнять те же требования, которые предъявляются и к обычному генератору. Одним из таких КСГПСЧ является алгоритм Блюм - Блюма - Шуба.

Алгоритм Блюм - Блюма - Шуба, предложенный в 1986 году Ленором Блюмом, Мануэлем Блюмом и Майклом Шубом, на сегодняшний день является одним из самых быстрых и простых алгоритмов. Основу его работы составляет вычисление квадратичных остатков по модулю M [4].

Целью статьи является программная реализация генератора псевдослучайных чисел на основе алгоритма Блюм - Блюма - Шуба.

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

- генерируются два больших простых числа р и q, они должны быть сравнимы с 3 по модулю 4;

- число M, называемое целым числом Блюма, вычисляется как произведение чисел р и q;

- выбирается случайное целое число x, взаимно простое с M;

- стартовое число генератора находится по следующей формуле:

х0 = х2той М (1)

- вычисляем последующие целые числа по формуле:

2

хп = х:2-1той М

(2)

- из каждого п-го числа в его двоичном представлении выбирается младший бит. В результате получаем п псевдослучайных бит.

Например, нужно получить последовательность из 5 бит. Пусть p = 359, q = 463. Данные числа простые и сравнимы с 3 по модулю 4. Вычисляем M = 359 х 463 = 166217. Выбираем взаимно простое с M число x = 5. С помощью формулы (1) вычисляется стартовое число xo = 25. Далее по формуле (2) вычислим следующие 5 чисел xi и запишем в таблицу (1).

Таблица 1

Результаты вычислений xi

i Xi-1 Xi младший бит

1 25 625 1

2 625 58191 1

3 58191 19757 1

4 19757 61533 1

5 61533 53046 0

Результатом работы генератора стала последовательность пяти псевдослучайных бит:

11110.

Одним из преимуществ данного алгоритма является получение 1-го числа без вычисления предыдущих значений. Для этого можно воспользоваться следующей формулой:

(3)

X,- = х! W(Cp-1)C«-1))mod М

ч — Л0

Имея значения q, p и xo, вычислим хз:

х5 = 2523mod((359-1)C463-1))mod 166217 = 258mod165396rnod 166217 = 152587890625mod166217 = 19757.

Использовав формулу (3), получили число 19757, такое же, как и при последовательном вычислении.

Данное свойство полезно при потоковом шифровании, в частности, при работе с массивами данных с произвольной точкой доступа.

Надежность алгоритма Блюм — Блюма — Шуба основывается на вычислительной сложности задачи факторизации числа M. Также данный алгоритм генерирует последовательность псевдослучайных бит с большим периодом, что дает возможность применять его при генерации ключей [5]. Исходя из этого, алгоритм Блюм — Блюма — Шуба можно назвать криптографически стойким генератором псевдослучайных чисел.

Программная реализация. В качестве основного инструмента для разработки программы был выбрал язык программирования Python [6], ключевыми достоинствами которого являются:

- автоматическая работа с освобождением памяти;

- кроссплатформенность;

- поддержка всех кодировок;

- большое количество встроенных математических библиотек; высокая читаемость кода.

Генерация начальных параметров р и д выполняется основе вероятностного теста простоты Рабина-Миллера. Для поддержки высокой криптостойкости алгоритма длина каждого из параметров р и д будет составлять 512 бит.

Подробный алгоритм работы, в котором происходит генерация последовательности значений для дальнейшего получения псевдослучайных бит, показан на рис. 1. Сгенерированное число имеет длину, равную 10 бит.

Из примера выше видно, что полученная последовательность псевдослучайных бит преобразуется в десятичное число, которое и является результатом работы генератора.

На рис. 2 представлен пример генерации 30 псевдослучайных чисел, размер каждого из которых составляет 100 бит. Происходит последовательная генерация 3000 значений от Х1 до хзооо, каждый из которых имеет длину до 1024 бит. Из каждого Х1 вычисляется бит четности. Затем формируются 30 списков из 100 бит. Далее происходит преобразование каждого набора бит в десятичное число. В результате на выходе получаем 30 псевдослучайных чисел.

При использовании одних и тех же входных параметров ГПСЧ будет генерировать одинаковую последовательность чисел, что показано на рис. 3. Это подтверждает детерминированность алгоритма. Данное свойство удовлетворяет одному из качественных требований, предъявляемых к генератору псевдослучайных чисел, — воспроизводимости — возможности в любое время заново сгенерировать последовательность значений необходимое количество раз. Обновление генератора, реализованное в программе, представляет из себя сброс очередного числа Х1 и присвоение ему значения хо, сгенерированного в начале работы алгоритма.

Генерация псевдослучайного числа размером 10 бит. Начальные параметры:

р = 122521888430080219955816291850275236730159724509967583141964748933582885741925382925868387407251774693480739270074057842036115 47190368727072608069372939639

q = 822731982236936277010407646552535661678201877884025810221455577977513979899065728833165970101117992966799649118343939785867975 0302586489636442572259859479

И - 100802676135492647880152436859269092822152638376897502577262171328026700301595490481712725931400151393131630919126803464072882 8332547806941520833547074774839928879777723062639437481954893074249814047008193680656520147220315932843009322589260059931436347404 96481782100470445623966328628586730124359459288988081

Х0 = 43142758593784769735774067601377854452302754718760302074056106793475871757525363866740508467530849955145854431234160854310376 4506537368245169558681509116157175096799681174583748804531814392644817602773181535482702117628094650624283045764084949805636115494 57619286485089797042241480089915860282739104881789708

XI: 298730860240810938085265387352041893351878539221886823461550332145256157585800769739322691889259242307946253946302108578714608 1046519578937412708186786953744192929679217739953999696983198830694028254492027178448040873965093874381104960768588759791667906314 5635482620619539921903220699237466954194148205190137

Х2 : 576898090334389811603533581823787849813778908431988356315714827919419305070173856302795964206623353539012106424670058276147404 0586351339278843373808942400839171631649664909200221600613835225025026732572597158891206846530488848097069271986849287492629608366 5458681620369904865566339801443479449253003657622717

ХЗ: 688618517431817411313506087301990388311678275812593659627277349722573207952966270309390614154818806541184607010821626870729878 2103317500984874860298200998985632988846886577547112014665441509838626066116214131489299717933072704686273898125716941951630457461 3123471158168502782662048242517388771343457157705673

х4 : 617936794317959224620235398740037589960172743094478660002759211054488489779240673955038049618965667490456096356949685729404647 7938918231500825612277344417350408908277626333305851664707393576904092568766871624594866700333381124517527621439252401276291485399 6198836061793862168486508039263663039822066926725548

х5 : 552012206089525566311036530129203563955173857153593228827382035032905448254133107653199425827826331559939660994168506188407450 0819120249847049140439935117111331912263331766347964069253848949411833730127681943624388478033871529900799060920028339295278902358 2155659653258540756541565223844095201157322088709068

хб: 612506550083707470237103370182675810272273052482024949749321236009689820499035975134558402596939321759697004398226004253139189 4852653404175455116720932092281234185319537387755405283602602918888371730322543710100759948163233772818815962726347538963034632276 3850967794855981618103219095762759166727975645995319

Х7: 170560520890703705410783147766063743415251249066020020002347216363919108692753532727397810818380027084675665991182487000264021 1016068539795221956090212769394539794331173761876698708933454965233731124010070456814408152467943789985058865802104849675921737121 4474583426584035479062475926456075544611167589045323

Х8: 587887408325199561737550201055838398460032617617562266813909864993681302591317661992430768968955270313715820177570192153484142 1343346260260430001551325256079583864804223444948030802924336622801782768272826179691802458119450341858656095017009047766147971832 Х9: 193211770935932998119588763954545509093200723846516989776864828030758669383089739300240519994841037110511757422791777551496408 3276902010520936591006219306993533526262763343354724023729484652140000861480498393458339397491996514698643965127755716696156887243 1633037687809309876761641589555923309867935452057677

Х10: 16041207010620006035657586914520108670724090861996983201335036119674714309142924705827665880283871696172128061092950818351148 9163314762566632077784049093909915773751183632739497666987256928653769753873893501893351581980864960563593442865562275371903887945 82118692381592974982048121105751228117151054652535579 Полученные биты: 1110011111

Сгенерированное число: 927_

Рис. 1. Подробный пример генерации псевдослучайного числа

Генерация 30 псевдослучайных чисел размером по 100 бит:

1-е ЧИСЛО = 618593493348874092366324179833

2-е число = 98137181590833330781304391848

3-е число = 46907517223579271973977747303

4-е ЧИСЛО = 333677365978914501395083193491

5-е число = 1051970244775072866656866112858

6-е ЧИСЛО = 569186191849141739279011347573

7-е ЧИСЛО - 1138915147812182293572255601464

8-е ЧИСЛО = 520140335461232109061236087137

9-е ЧИСЛО - 1201835446522008210031817670145

10-е ЧИСЛО = 155421562659790158052327423742

11-е ЧИСЛО = 186113271776894877879760665512

12-е ЧИСЛО = 538114615967236524694030077899

13-е ЧИСЛО = 1138294883602358511089039496387

14-е ЧИСЛО - 844430746092508842749371440501

15-е число = 900929152397432652333132443526

16-е ЧИСЛО = 551354868594395052465777245732

17-е число = 184891620049709230820637657867

18-е ЧИСЛО = 1166217069018270751303829143947

19-е ЧИСЛО = 1126325255125502728362746384816

20-е ЧИСЛО = 25278601073840127892109795423

21-е ЧИСЛО = 93268668745466821087182436063

22-е число = 676351533694004258436129689707

23-е ЧИСЛО = 320977070491183888023635954935

24-е число = 994905096806533083468787470416

25-е ЧИСЛО = 736488655566472750286627906457

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

26-е ЧИСЛО - 762877001182092639401825888314

27-е ЧИСЛО = 169981870760226519789057715361

28-е ЧИСЛО = 42426517895746666989082572389

29-е число = 647698271181357272329985300549

30-е ЧИСЛО = 799434029438494291966821992392

Рис. 2. Пример генерации 30 псевдослучайных чисел

Начальные параметры:

р = 1047609966768189604215979771791358491046161667174Э670278551987804213586615165293947111988483043480761421377422187776348410618 570523556327745913192710985279

q = 11157422712617505620845884503338416359534065160930956698151989549731458852227430063084656028213480286600658574477350508722895 223665133322908869985102287331

М = 11688627237183868972135191013378508286957268623702581823290755491904649563391334859499944663817778546297636566736735753431861 289157946399526099853694155774781324415048908914916570006750279571511414105898296872051358435011007350329118148277198063431713861 1292351667958695770986879098178192844500046153569200349

Х0 = 4328246106742370324702033542149190510425734248393499532205325786119883411556831653215672655205223130956585935385421230546907 498733113859026624876199661119284088297749994636225439215298670903582821862452780041987905197957706415781680444035261796319996881 1766317807506562198842441462034947920338072490773284172

Генерация 5 псевдослучайных чисел размером по 100 бит:

1-е ЧИСЛО = 358902407967599224637451123626

2-е число = 172761703480585187834056474661

3-е число = 295801529076141114780359926004

4-е ЧИСЛО = 81905957829206809031050622451

5-е число - 53177917577251557731382155183

Генерация 5 чисел успешно завершилась! Обновление генератора...

Генерация 10 псевдослучайных чисел размером по 100 бит:

1-е ЧИСЛО = 358902407967599224637451123626

2-е число = 172761703480585187834056474661

3-е число = 295801529076141114780359926004

4-е ЧИСЛО = 81905957829206809031050622451

5-е число - 53177917577251557731382155183

6-е число = 820936381879901648655993060197

7-е ЧИСЛО = 1144746210249194968611013053798

8-е число = 773045843608239813685048735678

9-е число - 1153104463389296805541715285519

10-е ЧИСЛО = 491689696641850410160927276200

Рис. 3. Генерация чисел с одинаковыми входными данными

Заключение. В результате проделанной работы были изучены и проанализированы основные принципы работы генератора псевдослучайных чисел. Разработано программное средство для генерации псевдослучайных чисел на основе алгоритма Блюм — Блюма — Шуба. Программное средство способно генерировать последовательность из больших значений, удовлетворяя основным требованиям к криптографически стойким генераторам псевдослучайных чисел, поэтому данный алгоритм может применяться на практике в криптографии. Таким образом, все поставленные задачи выполнены, а цели достигнуты.

Библиографический список

1. Слеповичев, И. И. Генераторы псевдослучайных чисел / И. И. Слеповичев. — Саратов : СГУ, 2017. — 118 с. — URL : https://www.sgu.ru/sites/default/files/textdocsfiles/2018/07/09/slepo-vichev i.i. generatory psevdosluchaynyh chisel 2017.pdf (дата обращения : 20.03.2022).

2. Генератор псевдослучайных чисел / Википедия :[сайт]. — URL : https://ru.wikipedia.org/wiki/%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%82%D0 %BE%D 1%80 %D0%BF%D 1%81 %D0%B5%D0%B2%D0%B4%D0%BE%D 1%81%D0%BB%D 1%8 3%D 1%87%D0%B0%D0%B9%D0%BD%D 1 %8B%D 1%85 %D 1%87%D0%B8%D 1%81%D0%B5% D0%BB (дата обращения : 20.03.2022).

3. Шнайер, Б. Прикладная криптография. Протоколы, алгоритмы и исходные таксты на языке Си / Б. Шнайер — Москва : Триумф, 2002. — 816 c.

4. Алгоритм Блюм - Блюма - Шуба / Академик :[сайт]. — URL : https://dic.acade-mic.ru/dic.nsf/ruwiki/614129 (дата обращения : 20.03.2022).

5. Выборнова, Ю. Д. Разработка функции генерации ключа на основе пароля в качестве приложения генератора Blum-Blum-Shub / Ю. Д. Выборнова // Информационные технологии и нанотехнологии (ИТНТ-2017) : сб. тр. III междунар. конф и молодежной школы — Самара: Предприятие «Новая техника», 2017. — С. 888-895.

6. Официальный сайт языка программирования Python / Python : [сайт]. — URL : https://www.python.org/ (дата обращения : 20.03.2022).

Об авторе:

Каргин Артем Евгеньевич, студент кафедры «Компьютерная безопасность» Донского государственного технического университета (344003, РФ, г. Ростов-на-Дону, пл. Гагарина, 1), cargin.art@yandex .ru

About the Author:

Kargin, Artem E., Student of the Computer Security Department, Don State Technical University (1, Gagarin sq., Rostov-on-Don, 344003, RF), cargin.art@yandex .ru.

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