Параллельная реализация и сравнительный анализ алгоритмов факторизации в системах с распределённой памятью

УДК 519.688:004.75

ПАРАЛЛЕЛЬНАЯ РЕАЛИЗАЦИЯ И СРАВНИТЕЛЬНЫЙ АНАЛИЗ АЛГОРИТМОВ ФАКТОРИЗАЦИИ В СИСТЕМАХ С РАСПРЕДЕЛЁННОЙ ПАМЯТЬЮ

А.В. Макаренко, А.В. Пыхтеев, С.С. Ефимов

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

Введение

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

Ранее К.А. КапаЬаг проводил достаточно объёмные исследования некоторых распространённых алгоритмов факторизации, в том числе анализировались такие, как метод Ферма, р-метод Полларда, метод эллиптических кривых, которые также были исследованы в настоящей работе. КапаЬаг предложил такую методику измерений, при которой используются числа с двумя близкими сомножителями, тремя близкими сомножителями или тремя произвольными сомножителями. При этом последовательно увеличивается разрядность исследуемых чисел. В работе также приведены общие результаты по сравнению быстродействия алгоритмов факторизации, среди которых, кроме названных выше, исследовались метод последовательного деления и (Р-1)-метод Полларда.

Copyright © 2012 А.В. Макаренко, А.В. Пыхтеев, С.С. Ефимов

Омский государственный университет им. Ф.М. Достоевского E-mail: alv.makarenko0gmail.com, alex.pykhteyev0gmail.com, s_ef imov0mail. ru

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

Цель проведённого исследования — реализовать параллельные алгоритмы факторизации, оценить их эффективность, сравнив и систематизировав результаты, полученные в ходе проведения экспериментов.

В данной работе использовались алгоритмы и результаты описанные в [1-7].

1. Алгоритмы факторизации

В работе исследованы следующие методы:

Экспоненциальные:

• метод Ферма,

• p-метод Полларда,

• метод Лемана,

• метод Шенкса.

Субэкспоненциальные:

• метод эллиптических кривых,

• метод квадратичного решета.

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

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

1.1. Метод Ферма

На входе: нечётное число n

1: x ^ УП 2: y ^ x2 — n

3: while isSquare (y) = true do 4: x ^ x +1

5: y ^ x2 — n

6 end while

7 s ^ x — /у

8 t ^ x + /у

9 if s = 1 and s = n then

10 st

11 end if

Функция isSquare (...) возвращает true, если аргумент является полным квадратом, и false иначе.

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

1.2. Метод Шермана Лемана

n

for a ^ 2 to [n1/3] do a| n

return a end if end for

for k ^ Mo [n1/3 for d 0 to

do

n1/6

4 Vk

+ 1 do

if isSquare /4k

n

+ d ) — 4kn I =true then

A

V4k

n

B ^ VA2 — 4kn if 1 < gcd

9

10 11 12

13

14

15: end if

16: end if

17: end for

18: end for

Функция gcd (...) возвращает наибольший общий делитель аргументов.

Параллельная реализация аналогична таковой в методе Ферма. На первом

a

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

1.3. Метод Шенкса

На входе: нечётное число n, маленький множитель k

Po <-

л/kn

Qo — 1 Qi —— kn — P2

4: repeat

5:

bi <—

л/kn

+ Pi-1

Qi

Pi — biQi — Pi-1 Qi+1 — Qi-1 + bi (Pi-1 — Pi) 8: until isSquare(Qi) = false

b0

л/kn

+ Pi-1

Qi

10: Po — bo \[Qi + Pi-1

^ ггл- гл kn — Pn2 11: Qo — \[Qi, Q1 —

12: repeat

bi

л/kn

Q0

+ Pi-1

Qi

Pi — biQi — Pi-1 Qi+1 — Qi-1 + bi (Pi-1 — Pi) Until Pi-1 = Pi

13:

14

15

16

17: if 1 < gcd

19: end if

20: return FAIL

Если нетривиальный делитель не найден, то следует использовать другое зна-k

Параллельная реализация данного алгоритма заключается в использовании

k

динатора. Остальные процессы выполняют описанный выше алгоритм со своим k

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

1.4. Метод р-Полларда

n

1: xi — Random

2: x2i — f (xi) mod n

3: while gcd (x2i — xi,n) = 1 or gcd (x2i — xi,n) = n do xi — f (xi) mod n 5: x2i — f (f (xi)) mod n

6: end while

gcd

Функция Random (n) возвращает случайное число от 1 до п. Функция f (xi) выбирается с коэффициентами из Обычно, f (xi) = x2 + 1.

Параллельная реализация данного алгоритма заключается в генерации раз-

xi

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

1.Б. Метод эллиптических кривых

На входе: число n, границы v (n), w (n) e N Выбираем случайную ЭК Ea,b mod n и точку P0 = (x0,y0) на ней. k — 1 2: m — 0

3: for r - простое, r — 2 to w do 4: while rm < v + 2^v + 1 do

5: m — m +1

6: end while

7: k — k x rm

m—0 9: end for

10: d — compute

11: if 1 < d < n then 12: return d

13: end if 14: return FAIL

(kP) n

kP

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

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

1.6. Метод квадратичного решета

На входе: число п, количество чисел & факторной базы, радиус интервала просеивания Ь.

1: ^ ЬиіШРасіогВаБе

2 for i ^ Mo k do

3 x ^ solveEquation

4 solutions.add

5 end for

6 for i < L to L do

7 W [i] ^ (m + i)2 — n

8 end for

9 for i ^ 1 to solutions.size() do

10 sieving

11 end for

12 M ^ createMatrixQ

13 if 1 < solveMatrix(M) < n then

14

15 end if

16 return FAIL

(k) k

Функция solveEquation(FB[i]) ищет решение сравнения:

(m + x)2 — n = 0 (mod FB[i]),

где m = [Vn^- Массив solutions хранит пары чисел (x,p), где x является решением сравнения (m + x)2 — n = 0 (mod p). Функция solutions.size() возвращает

уравнений. Функция solveMatrix(M) решает систему линейных уравнений и

n

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

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

2. Результаты экспериментов

Все алгоритмы выполнялись на языке программирования Java с использованием Java SE 6 update 31. Для параллельной реализации алгоритмов исполь-

зовалась адаптация для Java интерфейса передачи сообщений MPI (Message Passing Interface) — MPJ Express v0.38.

Исследование проводилось на компьютерах следующей конфигурации:

• ЦП - Dual Core Е5200 2.5 ГГц,

. ОЗУ - 3.24 Гб,

• ОС — Mandriva Linux 2008,

. ЛВС - 100 Мбит/с.

Алгоритмы факторизации тестировались на числах вида n = pq, где p, q — простые, так как разложение именно таких чисел на множители является наиболее трудной задачей.

В ходе исследования производилось два вида экспериментов:

n

pq

четырёх миллиардов.

• Факторизация чисел n с последовательным увеличением разрядности числа (от 20 до 110 бит), где p e (0, n1/3] — небольшой простой множитель.

В ходе выполнения каждого алгоритма факторизации были последовательно задействованы 1, 2, 4 и 8 процессов, каждый из которых работал на отдельном компьютере, то есть тесты проводились на вычислительной системе с распределённой памятью.

2.1. Метод Ферма

Время нахождения нетривиального делителя (см. рис. 1) числа линейно возрастает с увеличением расстояния между двумя делителями. При этом если делители достаточно близки друг к другу, то разложение происходит относительно быстро. Именно поэтому в асимметричной системе шифрования ИБА одним из основных требований является выбор множителей модуля, расстояние между которыми достаточно велико, иначе модуль возможно факторизовать за малое время с помощью метода Ферма, и шифр окажется ненадёжным.

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

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

Рис. 1. Результаты измерений для метода Ферма

2.2. Метод Шермана Лемана

Как усовершенствование метода Ферма метод Шермана Лемана также существенно зависит от расстояния между множителями числа (см. рис. 2), время его выполнения линейно зависит от дистанции. Но для таких типов чисел данный алгоритм значительно проигрывает алгоритму Ферма.

Для чисел с небольшим простым делителем ситуация обратная — метод Лемана благодаря последовательным делениям на шаге один достаточно быстро выделит простой множитель (см. рис. 3).

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

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

1000

900 -----------------------

800 ----------------------------------------------------

700 ---------------------

0 600 ----------------

1 500 --------- ---

си _ - -

О- „ - - -'

со 400 ---—• ••--------- ^ - —

300

200 —— . - ----------------------------—

100 ' ' _ —_________- --------------------------------------—

О

2 ООО 000 000 2 500 ООО ООО 3 ООО ООО ООО 3 500 ООО ООО 4 ООО ООО ООО

Дистанция

Рис. 2. Результаты измерений для метода Лемана

2.3. Метод Шенкса

Метод Шенкса не зависит от расстояния между сомножителями (см. рис. 4). Время работы данного метода для чисел с фиксированной разрядностью различно.

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

2.4. Метод р-Полларда

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

Была получена экспоненциальная зависимость времени работы алгоритма от разрядности числа (см. рис. 6). Для чисел с относительно небольшим множителем метод Полларда показывает наилучшие результаты среди алгоритмов с экспоненциальной сложностью. Линейного ускорения достичь не удалось.

2.5. Метод эллиптических кривых

С увеличением дистанции между множителями величина наименьшего простого множителя уменьшается. Так как время выполнения алгоритма факторизации с эллиптическими кривыми зависит лишь от величины этого множителя, оно постепенно уменьшается с увеличением расстояния между множителями (см. рис. 8). Фактически данные кривые - это небольшие участки экспонент (см. рис. 9).

..п1

- -п2 - п4

— п8

Рис. 3. Результаты измерений для метода Лемана

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

2.6. Метод квадратичного решета

Для чисел с фиксированной разрядностью время работы алгоритма не меняется в зависимости от разрядности сомножителя (см. рис. 10).

Линейного ускорения достичь не удалось (см. рис. 11), ввиду того что метод квадратичного решета для чисел с разрядностью до 110 бит работал достаточно быстро и на одном процессе, а при распараллеливании алгоритма происходит отправка данных каждым процессом, которая влияет на время работы алгоритма.

^емя'с Время, с

2 ООО ООО ООО 2 500 ООО ООО 3 ООО ООО ООО 3 500 ООО ООО 4 ООО ООО ООО

Дистанция

Рис. 4. Результаты измерений для метода Шенкса

20 30 40 50 60 70 80 90 100 110

Разрядность, бит

Время, с м Время, с

ООО ООО ООО 2 500 ООО ООО 3 ООО ООО ООО 3 500 ООО ООО 4 ООО ООО ООО

Дистанция

Рис. 6. Результаты измерений для метода Полларда

Разрядность, бит

Время, с Время, с

2 ООО ООО ООО 2 500 ООО ООО 3 ООО ООО ООО 3 500 ООО ООО 4 ООО ООО ООО

Дистанция

Рис. 8. Результаты измерений для метода эллиптических кривых

Время, с Время, с

Рис. 10. Результаты измерений для метода квадратичного решета

...п і

— п2 п4

— п8

50 60 70

Разрядность, бит

2.7. Сравнение алгоритмов

Ввиду существенной разницы во времени выполнения экспоненциальных и субэкспоненциальных алгоритмов сравнение произведено в пределах своих категорий.

8000

7000 /

6000 /

5000 /

<_> /

§ 4000 /

Ш /

о_ /

0:1 3000 /

2000 /

1000 ----------------------------------------------------/---

О .....................................................................

20 30 40 50 60 70 80 90 100 110 120

Разрядность, бит

Рис. 12. Сравнение времени выполнения экспоненциальных алгоритмов

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

25 20 15 10

о. со

О -

20

Рис. 13. Сравнение времени выполнения субэкспоненциальных алгоритмов

--ЕСМ

—QS

..Lehman

—Shanks — Pollard

Очевидно, самым быстрым алгоритмом факторизации среди рассмотренных в исследовании является метод квадратичного решета (см. рис. 13). Погрет-

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

Заключение

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

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

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

Литература

1. Brent R.P. Some parallel algorithms for integer factorisation // Lect. Notes in Comp. Sci. 1999. V. 1685. P. 1-22.

2. Kanabar K.A. A Comparison Of Integer Factoring Algorithms. The University of Bath, 2007.

3. Lenstra H.W. Factoring integers with elliptic curves // Ann. Math. 1987. V. 126. P. 649-674

4. Василенко O.H. Теоретико-числовые алгоритмы в криптографии. М. : МЦНМО, 2003.

5. Ишмухаметов Ш.Т. Методы факторизации натуральных чисел: учебное пособие. Казань : Казан, ун-т, 2011. 190 с.

6. Фороузан Б. А. Криптография и безопасность сетей: учебное пособие. М. : Интернет-Университет Информационных Технологий: БИНОМ. Лаборатория знаний, 2010. 784 с.

7. Черемушкин А.В. Лекции по арифметическим алгоритмам в криптографии. М. : МЦНМО, 2002.