Моделирование
С.А. Желтов
АДАПТАЦИЯ р-МЕТОДА ПОЛЛАРДА РЕШЕНИЯ ЗАДАЧИ ДИСКРЕТНОГО ЛОГАРИФМИРОВАНИЯ К ВЫЧИСЛИТЕЛЬНОЙ АРХИТЕКТУРЕ СИБА
Статья посвящена некоторым аспектам организации параллельных вычислений и использования технологии ОРОРИ для решения задач дискретного логарифмирования в конечном поле. Основные разделы посвящены обзору адаптации р-метода Полларда к параллельным вычислениям на устройствах с гетерогенной архитектурой.
Ключевые слова: параллельные вычисления, дискретное логарифмирование, архитектура СИБА.
Введение
Одной из задач, сложность решения которой определяет стойкость целого ряда асимметричных систем защиты1, является задача дискретного логарифмирования во вполне определенных алгебраических структурах.
Формально задачу дискретного логарифмирования в конечном поле можно сформулировать следующим образом.
Пусть - кольцо вычетов по простому модулю р.
Для заданных а, Ь е ¥р требуется найти х е Гр :
ах = Ь(той р). (1)
Целое число х, удовлетворяющее (1), называется дискретным логарифмом числа Ь по основанию а.
© Желтов С.А., 2013
Задача относится к классу NP, и на сегодняшний день неизвестны методы ее решения полиномиальной сложности.
Появление полиномиального алгоритма решения рассматриваемой задачи, так же как интенсивное развитие информационных технологий, в частности разработка новых вычислительных архитектур и устройств, могут представлять угрозу информационной безопасности, так как организация эффективных вычислений и их применение может повлечь снижение фактических временных затрат на решение задачи и снизить уровень стойкости систем защиты. Риски реализации описанных угроз безопасности можно оценить только по результатам численных экспериментов.
Одним из способов снижения практических временных затрат на решение указанного класса вычислительных задач является выбор эффективной модели вычислений на существующих классах архитектур (в том числе и специализированных) вычислительных систем, что требует соответствующей адаптации методов и алгоритмов к выбранной модели вычислений2. При использовании вычислительных архитектур в рамках классической модели вычислений А. Тьюринга-Дж. Неймана основным направлением снижения фактических временных затрат является организация параллельных вычислений3.
В настоящее время все большее развитие получает параллельное программирование на графических процессорах (GPU).
I. Технология GPGPU. Архитектура CUDA
GPGPU (General-purpose graphics processing units) - технология использования графического процессора для выполнения расчетов в приложениях для общих вычислений. Это стало возможным благодаря добавлению программируемых шейдерных блоков и более высокой арифметической точности растровых контейнеров, что позволяет использовать потоковые процессоры для неграфических вычислений.
На сегодняшний день технология GPGPU реализована несколькими производителями.
Khronos Group: OpenCL - язык программирования задач общего назначения, связанных с вычислениями на различных графических и центральных процессорах.
Microsoft: DirectCompute - интерфейс программирования приложений, который входит в состав DirectX.
Advanced Micro Devices: AMD FireStream - технология GPGPU, позволяющая реализовывать вычислительные алгоритмы, выполняемые на графических процессорах ускорителей ATI.
Компания Nvidia: CUDA - технология GPGPU, позволяющая реализовывать на языке Си вычислительные алгоритмы, выполняемые на графических процессорах ускорителей GeForce восьмого поколения и старше.
Наиболее удобные средства для организации параллельных вычислений на графических ускорителях предлагает последняя технология.
Nvidia CUDA (Compute Unified Device Architecture) - это архитектура, т. е. совокупность программных и аппаратных средств, которые позволяют производить на графических процессорах компании Nvidia, поддерживающих технологию GPGPU, вычисления общего назначения4.
Особенностью архитектуры CUDA является блочно-сеточная организация, необычная для многопоточных приложений. Она основана на концепции «одна команда на множество данных» (Single Instruction Multiple Data) или SIMT (Single Instruction, Multiple Thread).
Стоит отметить следующие особенности использования архитектуры CUDA:
• GPU (device) выступает в роли сопроцессора для CPU (host) и представляет собой массив из отдельных вычислительных ядер;
• GPU обладает собственной памятью (device memory);
• GPU способен одновременно обрабатывать множество процессов данных (threads) одним и тем же алгоритмом;
• интерфейс программирования приложений CUDA основан на стандартном языке программирования, например Си, с расширениями;
• масштабируемость CUDA - код запускается на всех устройствах, поддерживающих технологию CUDA.
Основные преимущества CUDA по сравнению с другими реализациями GPGPU обусловлены тем, что эта архитектура спроектирована для эффективного использования неграфических вычислений на GPU и использует язык программирования Си, не требуя переноса алгоритмов в удобный для концепции графического конвейера вид. Данная технология использует разделяемую память, недоступную из графических API (Application Programming Interface), и оптимизированный обмен данными между CPU и GPU.
Рассматриваемая архитектура не использует графические API и лишена недостатков, характерных для других технологий GPGPU.
II. Адаптация р-метода Полларда к вычислительной архитектуре CUDA
Проанализируем каждый шаг алгоритма р-метода Полларда5 на возможность применения параллельных вычислений и последующего сокращения фактических затрат на время работы алгоритма при использовании архитектуры CUDA. Наиболее удобным для распараллеливания является шаг 2, который следует разбить на независимые подзадачи, которые возможно было бы выполнить в параллельном режиме. За одну такую подзадачу возьмем задачу генерации наборов (х, а, в) и (х2, а , в ) для фиксированного значения индекса i. Так как алгоритм не требует хранения и использования значений, вычисленных на предыдущих этапах шага 2 алгоритма, то нет необходимости обмена данными между различными подзадачами, что также положительно скажется на сокращении времени работы.
С учетом особенностей архитектуры CUDA, модифицированный для параллельной реализации алгоритм р-метода Полларда будет выглядеть следующим образом:
Входные данные:
a, b е Fp, p - простое число.
Выход: х е Fp, такое, что ax = b(mod p), если он существует.
Шаг 1: (выполняется на CPU).
Определение значения N, задание начального параметра i = 1.
Шаг 2: (выполняется для значений i, i + 1, i + 2, ..., i + N параллельно на GPU).
Задание начальных параметров а0 = 0, в0 = 0, x0 = 1. _
Генерация последовательности наборов (х, а, в), гдеj = 1, 2i по правилу:
Если 0 < х . <1 p, то а.^. = а, в. + 1, х, = bx..
' 3 i+1 i i i+1 i
1 2
Если -p < x. < — p, то а.^. = 2а., в-^ = 2в-, x.^t = x2.
3 r . 3 i+1 i i+1 i i+1 i
2
Если -p < x. < p, то а.^. = а. + 1, в-^ = в•, x.^. = ax..
3 ^ i i+1 i ' Z^i+1 ^ V i+1 i
Положить: м = а2 . - а (modp- 1), v = в. - в (modp- 1).
Шаг 3: (выполняется на CPU).
Сравнить полученные в результате шага 2 значения x. и x2i для значений i, i+1, i+2, ..., i+N.
Если x. = x2i, то перейти к шагу 4.
Если x. Ф x , то перейти к шагу 1 и положить i = i+N.
Шаг 4: (выполняется на CPU).
Если V = 0, то алгоритм завершает работу.
Если V Ф 0, то вычислить НОД d = (v, p - 1) = vv + (p - 1)и.
Шаг 5: (выполняется на CPU).
Вычислить x:
Если d = 1, то x = uv (modp - 1).
uv + o) (p - 1) —-
Если d Ф 1, то x =---, o = 1, d.
d
Число N - это количество параллельно выполняющихся подзадач. Это число зависит от конкретного графического ускорителя и определяется на начальном этапе работы программы.
Количество вычисляемых наборов на каждом последующем этапе второго шага алгоритма увеличивается. В параллельной реализации все операции выполняются одновременно, и шаг 2 будет завершен, когда вычислится набор с наибольшим индексом. В силу вышесказанного время выполнения второго шага алгоритма равно времени генерации набора с максимальным индексом, т. е. для параллельного вычисления к штук наборов с индексами 1, 2, ..., к будет затрачено то же время, что и на генерацию одного набора с индексом к при последовательных вычислениях. При реализации на CPU необходимо вычислить к + к2 штук наборов.
III. Экспериментальная апробация
Для проведения численных экспериментов р-метод Полларда был программно реализован в классическом варианте для последовательного исполнения на CPU, на стандартном языке Си и выполнялся на центральных процессорах различных мощностей. Модифицированный к архитектуре CUDA, параллельный алгоритм р-метода Полларда программно реализован на расширении языка Си для CUDA и выполнялся на различных графических ускорителях компании Nvidia.
Для проведения численных экспериментов были задействованы следующие технологические платформы CPU:
• Intel core i5-2400;
• Intel Core 2 Duo E7500.
И GPU компании Nvidia:
• GeForce GTX 560;
• GeForce 9600
под управлением операционной системы Windows 7. Результаты приведены в табл. 1.
Таблица 1
Результаты вычислительных экспериментов
p бит Время работы, с.
Nvidia GeForce 9600 Nvidia GeForce GTX 560 Intel Core 2 Duo Intel core i5-2400
7 3 0,032 0,041 0,028 0,016
13 4 0,031 0,040 0,028 0,014
41 5 0,032 0,047 0,030 0,016
61 6 0,032 0,042 0,031 0,016
113 7 0,031 0,042 0,029 0,015
197 8 0,030 0,041 0,031 0,016
379 9 0,033 0,038 0,032 0,015
659 10 0,032 0,045 0,035 0,016
1153 11 0,032 0,039 0,031 0,016
2551 12 0,032 0,042 0,046 0,019
6961 13 0,034 0,040 0,047 0,031
11719 14 0,033 0,043 0,031 0,031
23159 15 0,034 0,041 0,047 0,047
61001 16 0,033 0,045 0,141 0,078
67651 17 0,032 0,047 0,156 0,109
921637 20 0,066 0,047 1,453 0,936
6878407 23 0,132 0,094 11,047 7,110
88004533 27 0,288 0,203 84,343 50,716
926403853 30 0,349 0,282 109,265 56,320
Зависимость времени работы программных реализаций для центрального и графических процессоров от размерности модуля p представлены на следующих графиках (рис. 1, 2).
Стоит отметить, что при использовании более мощных GPU устройств или специализированных решений Nvidia (Quadro и Tesla) следует ожидать дальнейшего роста производительности в несколько раз и снижения временных затрат еще на несколько порядков.
Рис. 1. Зависимость времени работы от размерности модуля (p<17)
Рис. 2. Зависимость времени работы от размерности модуля (p>17)
Выводы
Анализ вычислительных операций р-метода Полларда показал, что алгоритм обладает выраженным свойством параллелизма данных, так как одни и те же операции могут выполняться сразу над несколькими элементами из различных наборов (х , а, ß), эти значения могут обрабатываться независимо на разных вычислительных устройствах, что подходит для эффективной параллельной реализации на архитектуре CUDA и позволяет сократить время вычислений.
Результаты числовых экспериментов показали, что р-метод Полларда допускает эффективную параллельную реализацию с использованием вычислений на GPGPU компании Nvidia. Распараллеливание вычислений при решении задачи дискретного логарифмирования р-методом Полларда дает сокращение фактических временных затрат до двух порядков относительно последовательной реализации.
Стоит отметить, что на практике в системах защиты используются ключи не менее 512 бит, а программные средства CUDA не имеют реализации библиотеки для работы с «большими» числами. Один из способов организации вычислений с «длинными» числами, которые выходят за диапазон значений стандартных типов данных современных языков программирования, описан автором в одной из работ6.
Автор выражает глубокую благодарность проф. А.Е. Барановичу за ценные рекомендации и помощь при проведении исследований.
Примечания
См: Смарт Н. Криптография. М.: Техносфера, 2006. 528 с. См.: Баранович А.Е. Введение в предметно ориентированные анализ, синтез и оптимизацию элементов архитектур потоковых систем обработки данных (Introduction in the object-oriented analysis, synthesis and optimization of elements of architecture data flow processing systems) [Электронный ресурс] 3-е изд., стереотип., испр. Электрон. дан. [М., НТЦ «Информрегистр», 2010]. См.: Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. СПб.: БХВ-Петербург, 2002. 600 с.
См.: Боресков А.В., Харламов А.А. Основы работы с технологией CUDA. М.: ДМК Пресс, 2010. 232 с.
См.: Guan D. J. Pollard's Algorithm for Discrete Logarithm [Электронный ресурс] URL: http://guan.cse.nsysu.edu.tw/note/pollard.pdf (дата обращения: 30.04.2013). Желтов С.А. Реализация арифметических операций с «длинными» числами на устройствах GPGPU // Вопросы защиты информации. 2012. № 3. С. 2-4.
3
4
5