Уфа : УГАТУ, 2013
Ъыьмт QjrAQnQj
Т. 17, № 5 (58). С. 245-251
УДК 519.688
Использование модулярной арифметики
для ускорения выполнения операций над числами большой разрядности
1 2 М. А. Дерябин , А. А. Зайцев
1 [email protected], 2 [email protected] ФГАОУ ВПО «Северо-Кавказский федеральный университет» (СКФУ) Поступила в редакцию 22.01.2013
Аннотация. Описывается один из методов ускорения вычислений над числами большой разрядности, основанный на применении системы остаточных классов. Рассмотрены современные методы и алгоритмы модулярной арифметики. Приведен пример использования модулярной арифметики для ускорения работы алгоритма RSA. Представлены результаты тестирования разработанных на основе исследования программ.
Ключевые слова: параллельные вычисления; модулярная арифметика; система остаточных классов.
Решение современных задач науки и техники влечет за собой необходимость работы с большими объемами данных. Например, чем выше вычислительная мощность, тем проще злоумышленнику взламывать различные криптографические алгоритмы. Для повышения их криптостойкости необходимо увеличивать длину ключей и тем самым - величину операндов математических преобразований. Это приводит к замедлению выполнения операций, лежащих в основе рассматриваемых алгоритмов, что отрицательно сказывается на скорости работы для легальных пользователей. Возникает необходимость поиска путей ускорения выполняемых преобразований. Часто для этого используется декомпозиция и распараллеливание прямых последовательных алгоритмов выполнения операций. Но в некоторых случаях стандартные способы распараллеливания вычислений малоэффективны.
Одним из перспективных путей решения задач сокращения времени обработки данных и повышения надежности вычислительных средств является применение различных форм параллельной обработки данных на основе числовых систем с параллельной структурой. Среди современных подходов к созданию высокопроизводительных средств обработки данных можно отметить использование системы остаточных классов (СОК).
1. ОСНОВЫ МОДУЛЯРНОЙ АРИФМЕТИКИ
Система остаточных классов (Residue number system) является непозиционной системой представления чисел [1]. Пусть задана некоторая система взаимно-простых модулей [pl,p2, pn}. Число A в СОК по данным модулям представляется в виде кортежа чисел (al, a2, ..., an), где a, = A modph b, = B modp, для i = I, 2, ..., n. В соответствии с Китайской теоремой об остатках, такое представление числа A является единственным, если 0 < A < P = = pl p2 ... pn , где P называется диапазоном СОК. При этом операции C = A + B mod P и D = = A'B mod P для чисел A = (al, a2, ..., an) и B = (bl, b2, ..., bn), представленных в СОК, определяются следующим образом:
С = A + B mod P =
= (al + bl modpl, a2 + b2 modp2,
an + bn mod pn),
D = A • B mod P = = (albl modpl. a2b2 modp2, ..., a„bn modpn).
Описанное представление эффективно использовать при выполнении операций умножения и сложения, так как числа a, и bt имеют гораздо меньшее число разрядов, чем исходные числа A и B. При этом обработка данных происходит по параллельным каналам связи. Таким образом, модулярная арифметика позволяет проводить декомпозицию системы большого
динамического диапазона на ряд параллельных независимых каналов меньшей разрядности. Использование такого подхода увеличивает эффективность вычислений.
Ввиду малости остатков СОК эффективно использовать табличные методы реализации. В ряде случаев бывает удобно внести результат операции в таблицу, строки и столбцы в которой определяются операндами. В таких случаях операция поиска по таблице должна быть эффективнее непосредственно арифметических операций в данной архитектуре.
СОК находит применение во многих теоретико-числовых системах. Например, специальным образом преобразованный код СОК можно использовать для организации помехоустойчивых вычислений. Похожие принципы применяются в криптографической схеме разделения секрета. Некоторые свойства кода СОК полезны при цифровой обработке сигналов и при проектировании пороговых схем. Кроме того, модель данных СОК все чаще используется при построении относительно нового вида структур, сочетающих в себе модели нейронных сетей и модулярной арифметики, - модулярных нейрокомпьютеров.
2. МОДУЛЬНЫЕ И НЕМОДУЛЬНЫЕ ОПЕРАЦИИ В СОК
Операции, выполняемые над данными, представленными в системе остаточных классов, принято разделять на два класса: модульные и немодульные. Модульные характеризуются тем, что при их выполнении не происходит переносов между разрядами. Это позволяет осуществлять такие операции параллельно относительно каждого разряда, что увеличивает быстродействие всего алгоритма в целом. Примерами таких операций служат элементарные сложение и умножение. Однако деление в СОК имеет иной характер. Его можно отнести к немодульным операциям, имеющим позиционную природу.
Основная сложность выполнения немодульных операций заключается в том, что СОК есть непозиционная система. Здесь операция сравнения приравнивается по сложности к переводу в непозиционную систему счисления. Так, если число А делится нацело на число В, то деление можно реализовать достаточно легко. Однако если заранее неизвестно, разделимо ли число А без остатка на В, то стратегия поиска частного и остатка резко усложняется. Для преодоления сложившихся сложностей можно пользоваться
различными точными и приближенными методами [2, 3].
Одной из наиболее часто используемых операций при работе с большими целыми числами является модульное возведение в степень. Алгоритмы, реализующие данную операцию, используются в различных областях, одним из примеров которых является шифрование и расшифрование передаваемой информации в схеме RSA.
Модульное возведение в степень представляет собой последовательное повторение операций умножения. Так как операция умножения выполняется по каждому модулю параллельно, то возведение в степень по модулю P можно представить как n независимых возведений в степень по модулям p1, p2, ..., pn. Таким образом, возведение в степень - модульная операция.
Рассмотрим один из алгоритмов быстрого модульного возведения в степень. Пусть требуется вычислить z = a mod p. Число s может быть записано как
h-1 S = 7 S
= 1 S, 2' .
(1)
¿=0
Положим старший разряд 5п-1 = 1 по определению. Числа Si могут принимать значения 0 и 1. Число к является длиной бинарного представления числа 5. Из выражения (1) следует следующая формула для возведения в степень:
,fa=0 s, 2' )
h-1
z = a ^'=0 Si 'mod p = 2 I mod p. (2)
¿=0 ^ '
Формула (2) лежит в основе алгоритма быстрого модульного возведения в степень [4].
Еще один способ ускорения операции возведения в степень в СОК заключается в сокращении показателя степени. Такая возможность следует из Малой теоремы Ферма. При этом требуется, чтобы все модули системы являлись простыми числами. В Малой теореме Ферма говорится, что для любого числа, не делящегося на простое число, верно равенство a^1 = = 1 mod p.
Данная теорема является очень полезной для расчета мультипликативной обратной величины для целого числа а, потому что ap-2 = = a"1 mod p. Но более интересным для нас является следствие из данной теоремы: если целое число а не делится на p и если n = m mod (p - 1), то an = am mod p. В следствии говорится, что при работе по простому модулю p показатели могут быть снижены до mod (p - 1).
s
Принимая во внимание вышеизложенные факты, выражение Z = AB mod P, где P = pl, p2, ..., pn иpt - простые числа (i = I, 2, ..., n) можно заменить вычислениями в СОК по модулям pi,
p2, ..., pn:
Z = (aB mod,a^2 modp2,...,aj3' modp„), где Bi = B mod pi - i.
3. ПЕРЕВОД ЧИСЕЛ ИЗ СОК В ПОЗИЦИОННОЕ ПРЕДСТАВЛЕНИЕ И ОБРАТНО
Особенностью адаптации алгоритмов для СОК является необходимость перевода данных из позиционной системы в СОК и обратно. Прямые преобразования из позиционной системы и обратно в случае обработки больших целых чисел являются непараллельными, что увеличивает сложность реализации преобразуемого алгоритма. В [5] предлагается эффективный метод преобразования двоичного числа в СОК на основе разбиения исходного двоичного числа на отдельные форматы, для которых отводится заранее известное количество двоичных разрядов B. Тогда n-битное двоичное число может быть выражено как комбинация n IB взвешенных (позиционных) форматов размерностью B бит (разрядов). При этом позициям каждого формата n I B присваивается определенный вес 2j, где j = 0, B, 2B, ...,MB.
Прямое преобразование двоичного числа в модулярное осуществляется с помощью модульного суммирования остатков по модулю pi (i = 1, 2, ., n) для B разрядов и n I B форматов с учетом их весов.
На основании сказанного любое двоичное число может быть записано в виде
M f B-1 \
XjB+i 2
jB
j=0 V г=0
где В - количество разрядов выбранного формата; М - степень формата; х, - коэффициент 0 или 1; у = 0, В, 2В, ..., МВ - позиция формата; 1 - позиция разряда в формате. Основываясь на этом выражении, можно записать формулу для вычисления остатка по модулю р:
X =
I ip
м
M f B-1
I (I
j=0 V i=0
X 2'
XjB+i 2
jB
I
j=0
B-1
I XjB+, 2' i=0
|2 B
При выполнении операций следует учитывать, что ©г = |2jB| есть заранее вычисленные
константы. Нахождение остатка от деления для каждого формата можно находить независимо относительно остальных форматов. После чего вычисленные остатки по каждому из форматов складываются по модулю р. При таком подходе к нахождению остатков операции проводятся над числами гораздо меньшей разрядности.
Пример. Пусть дано число X = 2460034527 и модуль р = 7.
Для решения представим X в двоичной системе:
X = 1001 0010 1010 0001 0010 0101 1101 1111.
Разобьем двоичное представление числа X на 4 формата по В = 8 бит в каждом. Для дальнейших вычислений, найдем константы ю:
©о = 2Т = 1;
©i = 2* = 4;
©
2 = 216 = 2; ©3 = 224 = 1. 2 I 17 3 I 17
Дальнейшие вычисления представлены в виде следующей схемы (рис. 1).
||11011111 |7-ю0| ^ ||223|7-1|7 ^ 6 1^00100101 ||37|7-4|? ^ 1
|10100001 |7 -ю2| ^ ||161|7-2|? ^ 0 —
I
|13|7 = 6
|10010010 |7-ю3| ^ |146|7-1| ^ 6
Рис. 1. Пример параллельного вычисления вычета по модулю
Согласно данным вычислениям, |х|7 = 6,
что соответствует действительности.
Из рассмотренного примера видно, что данный способ вычисления остатка от деления хорошо подходит для работы с числами большой разрядности. В данном случае за счет параллельной обработки данных в несколько раз сокращается разрядность операндов математических преобразований. Такой подход позволяет ускорить вычислительные операции и, кроме того, упрощает представление чисел большой разрядности за счет использования более коротко разрядной сетки.
Обратное преобразование числа из модулярного представления в двоичную форму базируется на классической теореме из теории чисел, которая называется Китайской теоремой об остатках (КТО). На основании известного пред-
p
p
p
ч
/
p
ставления чисел в СОК (аь а2, ..., ап) КТО делает возможным определение числа в позиционную систему счисления (ПСС) \х\ , если наибольший общий делитель любой пары модулей равен 1.
Китайская теорема об остатках имеет вид
IX. =
Ip
а
Pi
(3)
р
где р = —, Р = П р, для (р,, р) = 1 для I Ф ].
Рг Ы
Такая форма КТО предполагает лишь последовательные вычисления по модулю Р, который является достаточно большим. Снизить разрядность модуля можно с помощью применения позиционной системы со смешанными основаниями. Под обобщенной позиционной системой счисления (ОПСС) понимается такая система, в которой целое число N представляется в виде
N = ап-1Лп-1Лп-2 .•• П2П1 + ап-2Пп-2Пп-3 ... П2Л1 + ... +
+ а2п2п1 + а1п1 +а0,
где а} - цифры 0, 1, ..., ( = 1, 2, ..., п). Отображение из СОК в ОПСС может быть определено рекурсивно с помощью операций по малым модулям р¡. Для перехода от вычислений по модулю Р к вычислению по модулям р, предлагается метод восстановления чисел на основе совместного использования КТО и обобщенной позиционной системы счисления (ОПСС) [5]. Цифры ОПСС можно искать, например,
пользуясь формулой: a, =
Я,
для
i = 0, 1, ..., n—1 и положив п0 = 1. Так, для N = 758 и системы модулей {2, 5, 7, 11} ОПСС представления будет выглядеть следующим образом: N = [0, 4, 5, 10]. В случае если имеется представление числа N в СОК по модулям {п} i = 1, n, то перевод в ОПСС можно проводить более оптимизированным способом, представленным в [6].
Пусть задана система оснований pi, p2,..., pn с диапазоном P = pip2...pn и ортогональными базисами B1, B2, ..., Bn, которые определяются как
B = m,P ^ i p^,, = 1, n,
Р,
где mi - веса ортогональных базисов. Представим ортогональные базисы Bi в ОПСС, тогда
В, = + b,2Pl + b,2PlP2 + ••• + bmPlP2 -Pn, (4) где bij - коэффициенты ОПСС, i, j = 1, 2, ..., n. Из (4) и (3) следует Хопсс = «i[bii, bi2, ..., bin] +
+ O2[0, b22, ..., b2n] + ... + an[0, 0, ..., bnn].
Так как Вi modp, = 0, V/ > i, то перед первым значащим разрядом будет i - 1 нулей. Для удобства вычислений базисы можно представить в виде матрицы. Тогда ХОПСС можно вы-
n
числить следующим образом: Tt = lab / для
/=1
i = 1, 2,
a =
, n, ai = Ti modpi,
Pi-
mod Pt для i = 2, 3, ., n,
где ai - коэффициенты ОПСС числа X; ai - вычеты числа X по mod pi, by - ортогональные базисы, представленные в ОПСС. Получение позиционного представления числа осуществляется по формуле
X = anPlP2 • •••• Pn-1 + an-lPlP2 • •••• Pn-2 +
n—1
+... + а2 Р1 + а1 = а1 + ^ дкак+1,
к=1
к
где рг,для к = 1, 2, ..., п-1 являются
г=1
константами.
Пример. Пусть дано число X = (0, 3, 2, 10) в системе классов с основаниями {2, 5, 7, 11}. Требуется найти позиционное представление числа X. В данном случае ортогональные базисы равны В1 = (1, 0, 0, 0) = 358; В2 = (0, 1, 0, 0) = = 616, В3 = (0, 0, 1, 0) = 330, В4 = (0, 0, 0, 1) = = 210. В обобщенной позиционной системе:
В1 = [Ь„, Ьи, Ь13, М = [1, 2, 3, 5], В2 = [Ь21, Ь22, Ь23, Ь24] = [0, 3, 5, 8], В3 = [Ь31, Ь32, Ь33, Ь34] = [0, 0, 5, 4], В4 = [Ь41, Ь42, Ь43, Ь44] = [0, 0, 0, 3].
Умножим каждую строку матрицы (Ьу) на соответствующие цифры числа X:
X ^ (b/) ^
После этого сложим числа в столбцах и, учитывая переносы разрядов и отбросив избыточные, получим представление X в ОПСС. Получаем, что X = [0, 4, 5, 10], откуда X = 0 + 4-2 + 5-2-5 + + 10-2-5-7 = 758. Таким образом найден ответ:
Г 0 1 X Г1 2 3 5 1 Г 0 0 0 0 1
3 X 0 3 5 8 0 9 15 24
2 X 0 0 5 4 0 0 10 8
X ,0 0 0 3 ) ,0 0 0 3°,
Pi
p
n
i—1
7i +
1
я
X = 758. Рассмотренный пример демонстрирует основные преимущества данного алгоритма: частичная параллельность и работа с небольшими модулями.
Следует отметить: использование усовершенствованных алгоритмов перевода в СОК и обратно эффективно лишь в определенных условиях. Например, для нахождения остатка от деления числа с использованием разбиения на форматы необходимо, чтобы число форматов (т. е. параллельных потоков) было достаточно большим, чтобы уменьшить время выполнения элементарных операций компенсировало увеличение их количества.
Многоразрядное число
Pi Перевод чисел в СОК P2 ... Pn
лг
Возведение в степень Возведение в степень Возведение в степень
* *
Перевод чисел в позиционную систему счисления
Результат возыедения
Рис. 2. Алгоритм возведения в степень с применением СОК
На основе рассмотренных выше алгоритмов было разработано две программы. Первая реализует алгоритм быстрого модульного возведения в степень над числами различной разрядности. Вторая реализует тот же алгоритм, но с применением СОК, схема которого приведена на рис. 2. На рис. 3 приведена сравнительная диаграмма ускорения, получаемого при использовании СОК на основе тестовых данных разработанных программ для системы оснований, состоящей из двух, трех и четырех модулей по 100, 150 и 200 бит каждый. Из диаграммы видно, что при увеличении числа задействованных оснований и их разрядности ускорение резко возрастает. Причем оно превосходит количество используемых параллельных каналов.
Например, при использовании двух оснований ускорение в среднем составляет примерно 3,6 раз, при использовании трех оснований оно
уже превышает 4 раза. Таким образом, если даже последовательный алгоритм выполняется параллельно над независимыми данными, использование СОК все равно приведет к значительному ускорению.
Однако использование СОК целесообразно только при соблюдении ряда условий. Например, если общий модуль системы есть простое число или его разложение на простые множители неизвестно, то применение СОК невозможно.
12
10
СО
а Ci 8
au
и 6
н
е
Ci
о
с 4
>
2
0
Количество оснований СОК
Рис. 3. Среднее ускорение операции умножения с использованием СОК относительно последовательной реализации
4. ПРИМЕНЕНИЕ СОК ДЛЯ УСКОРЕНИЯ АЛГОРИТМА РАСШИФРОВАНИЯ В СХЕМЕ RSA
Модульные операции с большими целыми числами требуются во многих алгоритмах, классическим примером которых является схема шифрования RSA. Основной отличительной чертой RSA является тот факт, что модуль, используемый в схеме шифрования RSA, представляет собой произведение двух простых чисел. Это позволяет использовать двухмодуль-ную СОК для ускорения операций с закрытым ключом.
Для простых P и Q любое сообщение M < N, где N = PQ, единственным образом представляется парой [MP, Mq], где MP = M mod P и Mq = M mod Q. Таким образом можно получить M по вычислениям с MP, MQ и с их последующей «сборкой», а не обычным возведением M = CD mod N. С помощью следствия Малой теоремы Ферма размер показателя может быть уменьшен:
2
3
4
MP = M modP = (cd mod N )modP =
= CD modP = CDmod(P-1) modP = CD modP.
Со значениями CP = C mod P и Cq = C mod Q, а также DP = D mod (P - l) и Dq = = D mod (Q - 1), мы получаем следующие выражения для MP и Mq: MP = Cp^ modP и
Щ = CsDq modQ.
Если предположить, что показатели DP = = D mod (P - 1) и Dq = D mod (Q - 1) были предварительно вычислены, RSA расшифрование, основанное на использовании СОК, может иметь место в соответствии со следующими шагами:
1. Вычислить CP = C mod P и Cq = = C mod Q.
2. Возвести в степень MP = CpDp modP и MQ = CqDq modQ.
3. Перевести полученные результаты из СОК в ПСС.
8
7
(l>
с 6
,я
и
н (1) 5
н
c; о 4
с
_0 m 3
я
^ (1) 2
р
m 1
1 1 1 1 ^^^ Последователь - -СОК о
—
50 150 250 350
Разрядность, бит
450
Рис. 4. Время выполнения обычного алгоритма RSA и RSA с применением СОК
Два возведения в степень (шаг 2) можно вычислить независимо друг от друга и параллельно. На рис. 4 представлены результаты тестов предложенного алгоритма и его последовательной версии. При этом достигается ускорение, в среднем равное четырем.
ВЫВОД
Современные достижения модулярной арифметики делают ее крайне эффективным средством для ускорения алгоритмов, использующих целые числа большой разрядности. При
увеличении числа модулей ускорение выполнения операций возрастает, что ставит этот способ представления чисел в ряду наиболее перспективных методов в данной области.
СПИСОК ЛИТЕРАТУРЫ
1. Omondi A., Premkumar B. Residue number systems. Theory and Implementation. London: Imperial College Press, 2007.
2. Червяков Н. И., Лавриненко И. Н, Лавринен-ко С. В., Мезенцева О. С. Методы и алгоритмы округления, масштабирования и деления чисел в модулярной арифметике. // 50 лет модулярной арифметике : матер. Между-нар. науч.-техн. конф. Зеленоград: МИЭТ, 2005. C. 291-310.
3. Червяков Н. И. Методы, алгоритмы и техническая реализация основных проблемных операций, выполняемых в системе остаточных классов // Инфокоммуникаци-онные технологии. Самара: ПГУТиИ, 2011. № 4. С. 4-12.
4. Schneier B. Applied Cryptography: Protocols, Algorithms, and Source Code in C. 2nd Ed. New York: John Wiley & Sons, 1995. 662 p.
5. Червяков Н. И. Реализация высокоэффективной модулярной цифровой обработки сигналов на основе программируемых логических интегральных схем // Нейрокомпьютеры: разработка и применение. 2006. № 10. С. 2436.
6. Червяков Н. И., Сахнюк П. А., Шапошников А. В., Макоха А. Н. Нейрокомпьютеры в остаточных классах. М.: Радиотехника, 2003. 272 с.
ОБ АВТОРАХ
ДЕРЯБИН Максим Анатольевич, асп. каф. высш. алгебры и геометрии Ин-та математики и естеств. наук. Дипл. магистр математики (СКФУ, 2013). Иссл. в обл. модулярной арифметики, параллельных вычислений.
ЗАЙЦЕВ Александр Александрович, асп. той же каф. Дипл. магистр математики (СКФУ, 2013) . Иссл. в обл. модулярной арифметики, параллельных вычислений.
METADATA
Title: Using of the modular arithmetic for acceleration of execution operations on high numbers.
Authors: M. A. Deryabin, A. A. Zaytsev.
Affiliation: North-Caucasian Federal University (NCFU), Russia.
Email: [email protected], [email protected].
Language: Russian.
Source: Vestnik UGATU (scientific journal of Ufa State Aviation Technical University), vol. 17, no. 5 (58), pp. 245-251, 2013. ISSN 2225-2789 (Online), ISSN 1992-6502 (Print).
Abstract: The paper describes one of the methods to accelerate calculations on numbers of larger capacity, based on the application of the residue number system. Modern methods and algorithms for modular arithmetic are discussed. In paper given an example of using modular arithmetic to speed up the algorithm RSA. Presented the
0
results of the tests of programs developed through research.
Key words: parallel computing; modular arithmetic; residue number system.
References (English transliteration):
1. A. Omondi and B. Premkumar, Residue Number Systems. Theory and Implementation. London: Imperial College Press, 2007.
2. N. I. Chervyakov, I. N. Lavrynenko, S. V. Lavrynenko, and O. S. Mesentseva, "Methods and algorithms to rounding, scaling, and divide numbers in modular arithmetic," (in Russian), in Proc. Int. Sci. Conf. "50 years of modular arithmetic," MIET, Zelenograd, Moscow region, 2005, pp. 291-310.
3. N. I. Chervyakov, "Methods, algorithms and technical implementation of the basic problem of operations performed in the remaining classes," (in Russian), Info-communikatsionnye Tekhnologii, no. 4, pp. 4-12, 2011.
4. B. Schneier, Applied Cryptography: Protocols, Algorithms, and Source Code in C, 2nd Ed. New York: John Wiley & Sons, 1995.
5. N. I. Chervyakov, "Modular implementation of highperformance digital signal processor-based programmable logic integrated circuits," Neyrokomputery: Razrabotka i Primenenie, no. 10, pp. 24-36, 2006.
6. N. I. Chervyakov, P. A. Cakhniuk, A. V. Shaposhnikov, and A. N. Makokha, Neurocomputers in Residual Classes, (in Russian). Moscow: Radiotekhnika, 2003.
About authors:
DERYABIN, Maxim Anatolievich, postgraduate student of Department of Algebra and geometry of the Institute of Mathematics and Natural Sciences, a certified master of mathematics (NCFU, 2013).
ZAYTSEV, Alexander Alexandrovich, postgraduate student of Department of Algebra and geometry of the Institute of Mathematics and Natural Sciences, a certified master of mathematics (NCFU, 2013).