Исследование параллельных алгоритмов факторизации целых чисел в вычислительных кластерных системах

ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ

Вестн. Ом. ун-та. 2012. № 4. С. 149-158.

УДК 519.688:004.75:004.421

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

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

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

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

Введение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Метод Ферма.

На входе: нечетное число п. x ^ [Ап] у ^ X —п

while isSquare(y) Ф true do

x ^ x + 1

2

у ^ X -п end while

s ^ x - Ay t ^ x + Ay if s Ф 1 & s Ф п then

return s, t end if

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

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

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

На входе: нечетное число п. for a ^ 2 to п113 do if а\п then

return a

end if end for

for k ^ 1 to п do

for d ^ 0 to

do

if isSquarei (<4kn]+d ?'

A ^ [л4 кп ]+ d

ЛЙ2

4kn

) = true then

B •

4 кп

if 1<gcd(A+B,n)<n then return A+B

else

if 1<gcd(A-B,n)<n then return A-B

end if

end if

end if

end for end for

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

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

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

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

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

Ро ^ [ ^кп]

Qo ^ 1

Q1 ^ Ы — Ро2

repeat

Ып]+pi- /

[4^]+pi-1 ]

bi ^ L Qi

Pt ^ biQi -Pi Qi+1 ^ Qi-1 +biPi-1 - Pi)

until isSquare(Q) = false

pi-11 Qi J

Ро ^ boAQi +Pi-1

Q0 ^ AQi, Q1

кп- P0

Qo

repeat

|Т>кп]+ Pi-1 ]

bi ^ L Qi Pi ^ biQi -Pi-1 Qi+1 ^ Qi-1 +bi

until Pi-1 Ф Pi if 1 < gcd(Pi, п) < п then return gcd(Pi, п) end if

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

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

На входе: нечетное число п. xi ^ Random

while gcd(x2i - xi, n) = 1 or gcd(x2i - xi, n) = n do xi ^ f(x ) (mod n) x2i ^ ff(x )) (mod n) end while

return gcd

Функция Random(n) возвращает случайное число от 1 до n. Функция f(xi ) выбирается в соответствии с шагом 1 алгоритма.

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

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

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

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

for r - простое, r ^ 2 to w do while rm<v+2Av+1 do m ^ m+1 end while k ^ k x rm m ^ 0 end for

d ^ compute(kP0) if 1<d<n then return d end if

Функция compute(kP) возвращает делитель числа n в ходе вычисления кратного к точки P. Возвращаемое значение FAIL в алгоритме означает, что метод эллиптических кривых является вероятностным, и попытка нахождения нетривиального делителя по вышеописанному алгоритму не всегда дает положительный результат.

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

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

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

FB ^ buildFactorBase(k) for i ^1 to k do

x ^ solveEquation(FB[i]) solutions.add(x, FB[i]) end for

for i < L to L do

W(i) ^(m+i)2 - n end for

for i ^ 1 to solutions.size() do sieving(solutions[i]) end for

M ^ createMatrix() if 1 < solveMatrix(M) < n then return solveMatrix(M) end if return FAIL

Функция buildFactorBase(k) возвращает факторную базу размерностью k.

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

(m + x)2 - п = 0 (mod FB[i]), где m = [Vn].

solutions - массив, в котором хранятся пары чисел (x,p), где x является решением сравнения (m + x)2 - п = 0 (mod p).

solutions.size - размер массива solutions.

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

solveMatrix(M) решает систему линейных уравнений и возвращает делитель (возможно тривиальный) числа п.

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

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

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

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

Все алгоритмы выполнялись на языке программирования Java с использованием Java SE 6 update 31. Для параллельной реализации алгоритмов использовалась адаптация для Java интерфейса передачи сообщений MPI (Message Passing Interface) - MPJ Express v0.38.

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

• ЦП - Dual Core E5200 2,5 ГГц;

• ОЗУ - 3,24 Гб;

• ОС - Mandriva Linux 2008;

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

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

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

• Факторизация чисел n фиксированной разрядности (80 бит) с последовательным увеличением расстояния между множителями p и q от двух до четырех миллиардов.

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

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

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

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

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

п1

п2

п4

п8

2 000 000 000

3 500 000 000

2 500 000 000 3 000 000 000

Дистанция

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

4 000 000 000

п1

п2

п4

п8

2 000 000 000

2 500 000 000

3 500 000 000

3 000 000 000 Дистанция

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

4 000 000 000

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

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

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

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

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

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

Для чисел второго типа была получена экспоненциальная зависимость времени

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

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

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

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

Была получена экспоненциальная зависимость времени работы алгоритма от раз-

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

Дистанция

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

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

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

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

Ввиду того, что алгоритм вероятностный и вычисления, связанные с нахождени-

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

12

10 -

ф

СП

0 -

2 000 000 000

п1

п2

п4

п8

2 500 000 000 3 000 000 000 3 500 000 000

Дистанция

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

4 000 000 000

8

6

4

2

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

Метод квадратичного решета. Для

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

Линейного ускорения достичь не удалось, ввиду того что метод квадратичного

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

2,5

2,0

° 1,5 -

СЕ

ф

Ш

1,0 -

п1

п2

п4

п8

0,5

0,0 ^------------------------'------------------------'------------------------1-----------------------

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

Дистанция

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

п1

п2

п4

п8

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

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

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

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

группы экспоненциальных является р-метод Полларда.

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

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

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

25

о

СЕ

S

ф

m

20

15

10

ECM

QS

5

0 т —1---------------------------------------------------------------------------1-1-1-1-1-1-1-

20 30 40 50 60 70 80 90 100 110

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

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

Заключение

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

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

Метод квадратичного решета может быть эффективно доработан с помощью так

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

ЛИТЕРАТУРА

[1] Brent R. P. Some parallel algorithms for integer factorisation // Lect. Notes in Comp. Sci. 1999. Vol. 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. Vol. 126 (1987). P. 649-674.

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

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

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

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