Повышение эффективности выполнения

advertisement
ИНФОРМАЦИОННАЯ БЕЗОПАСНОСТЬ
АХБОРОТ ХАВФСИЗЛИГИ
Повышение эффективности выполнения арифметических операций в алгебре с параметром
Расулов О.Х., ГУП «UNICON.UZ»
В статье предложены методы повышения эффективности выполнения арифметических операций алгебры с параметром, таких как модульное
умножение и возведение в степень больших чисел.
Мақолада параметрли алгебрада катта сонларни модулли кўпайтириш ва даражага ошириш каби арифметик амалларни бажарилиш эффективлигини ошириш усуллари таклиф қилинган.
In this article methods of rising effectiveness of execution of arithmetic operations in algebra with parametr such as modular multiplication and exponentiation of
big numbers are proposed.
Актуальность вопроса:
Исследования методов реализации криптографических алгоритмов формирования и проверки электронной цифровой подписи (ЭЦП) показали, что наиболее трудоемкими операциями в этих алгоритмах являются модульные операции над большими
числами – умножение и возведение в степень по модулю большого простого числа [1].
При реализации криптографических функций на практике применяются специальные
алгоритмы, повышающие эффективность выполнения этих операций, наиболее известными из которых являются алгоритм Монтгомери [2] и алгоритм Баррета [3]. Вместе с тем, национальный алгоритм формирования и проверки ЭЦП [4] (далее – алгоритм ЭЦП) основан на так называемой алгебре с параметром, которая требует дополнительных вычислительных (а соответственно и временных) затрат на выполнение
и неизбежно приводит к необходимости поиска либо новых методов выполнения
арифметических операций над большими числами, либо усовершенствования существующих методов применительно к конкретным функциям алгоритма ЭЦП.
Так, операция умножения двух чисел X и Y по модулю N в алгебре с параметром обозначается как
X ® Y (mod N)
и соответствует сравнению
X ® Y ≡ X + Y + X Y R (mod N)
(1),
где, X, Y – множители, R – параметр алгебры и N – модуль (простое число). Все аргументы формулы – большие числа.
Таким образом, операция умножения в алгебре с параметром фактически сводится к необходимости выполнения двух модульных умножений и двух модульных
сложений, что теоретически по сравнению с обычным (одиночным) умножением приведет к увеличению трудоемкости больше чем в два раза.
В поисках способов уменьшения вычислительных затрат автором настоящей
статьи произведена гармонизация существующих эффективных алгоритмов модульного умножения с функциями алгебры с параметром. В качестве базового алгоритма
умножения выбран алгоритм Монтгомери.
Постановка задачи:
С целью уменьшения вычислительных затрат на выполнение операций с большими числами в алгебре с параметром, необходимо:
- рассмотреть возможность оптимизации выполнения операций умножения и
возведения в степень с параметром;
- оптимизацию операций выполнять на основе использования алгоритма Монтгомери;
- из всех арифметических операций максимально исключить операции деления
и вычитания, как наиболее трудоемкие;
- обеспечить возможность выполнения операций в базисе 216, что соответствует
двухбайтовому представлению чисел и позволит портировать алгоритм практически на
любую процессорную платформу или реализовать алгоритм на базе программируемой
логической интегральной схемы (ПЛИС) [1].
Решение задачи:
Оптимизацию будем проводить на основе операций MonPro(A, B, N), MonExp(A,
B, N), а так же дополнительных операций MonProX(A, B, C, N) и MonExpX(A, B, R, N),
присущих только для алгебры с параметром. Рассмотрим подробно каждую из этих
операций.
1. MonPro(A, B, N) – операция модульного умножения по алгоритму Монтгомери
[2], вычисляющая
S = MonPro(A, B, N) = A B r -1 (mod N)
(2)
Вычисления данной операции можно произвести по классическому алгоритму
Монтгомери [1]:
Шаг 1. Принять S = 0, d = 216
Шаг 2. Принять i = 0.
Шаг 3. Вычислить q = (s0 + ai b0) (d – n0)-1 (mod d).
Шаг 4. Вычислить S = (S + ai B + q N) / d.
Шаг 5. Если i < m/16, принять i = i + 1 и перейти на шаг 3.
Шаг 6. Если S ≥ N вычислить S = S – N.
Шаг 7. Выдать результат «S = A B r -1 (mod N)». Конец алгоритма.
2. MonProX(A, B, C, N) – операция модульного умножения со сложением, основанная на алгоритме Монтгомери, вычисляющая
S = MonProX(A, B, N) = (A B + C) r -1 (mod N)
(3)
Данная операция до настоящего времени практического применения не находила, однако анализ алгоритма ЭЦП показал, что ее можно эффективно применять
при вычислениях в алгебре с параметром. Вычисления операции целесообразно производить по алгоритму Монтгомери, изменив начальное присвоение S на слагаемое C:
Шаг 1. Принять S = С, d = 216
Шаг 2. Принять i = 0.
Шаг 3. Вычислить q = (s0 + ai b0) (d – n0)-1 (mod d).
Шаг 4. Вычислить S = (S + ai B + q N) / d.
Шаг 5. Если i < m/16, принять i = i + 1 и перейти на шаг 3.
Шаг 6. Если S ≥ N вычислить S = S – N.
Шаг 7. Выдать результат «S = (A B + С) r -1 (mod N)». Конец алгоритма.
Вычитания больших чисел на шагах 6 алгоритмов MonPro( ) и MonProX( ) можно исключить, заменив вычитание сложением с аддитивно обратным числом вычитаемого в соответствии с выражением:
S – N = S + (– N) = S + (D – N) (mod D)
(4)
где, D – 2m, m – длина модуля N в битах.
Так как D является степенью двойки, аддитивно обратную величину N по модулю D можно вычислить путем простого представления (– N) в дополнительном коде.
Тогда, операцию вычитания можно выразить как «перевести (– N) в дополнительный
код и сложить с S без учета переноса» и в базисе 216 реализовать по следующему
алгоритму («not» – унарная операция побитовой инверсии):
Шаг 1. Принять с = 1, i = 0.
Шаг 2. Вычислить si = si + (not ni) + c, сохранить перенос в с.
Шаг 3. Если i < m/16, принять i = i + 1 и перейти на шаг 2.
Шаг 4. Выдать результат «S = S – N». Конец алгоритма.
Такой подход к операции вычитания позволяет исключить понятие «заем», присущий классическому алгоритму вычитания больших чисел «столбиком». При реализации на базе ПЛИС, каждая итерация алгоритма (шаги 2-3) будет выполняться за один
системный такт, что в базисе 216 обеспечит выполнение вычитания ровно за m/16 тактов.
3. MonExp(A, B, N) – операция модульного возведения в степень по алгоритму
Монтгомери [2], вычисляющая
S = MonExp(A, B, N) = A B (mod N)
(5)
Вычисления данной операции можно произвести по алгоритму возведения в
степень Монтгомери [2], используя предварительно вычисленную величину r2 (mod N)
[1] и операцию модульного умножения MonPro( ) (2):
Шаг 1. Принять A1 = 1.
Шаг 2. Вычислить A2 = MonPro(r2, A, N).
Шаг 3. Если B (mod 2) = 1 вычислить
B = B – 1;
A1 = MonPro(A1, A2, N).
Иначе вычислить
B = B/2;
A2 = MonPro(A2, A2, N).
Шаг 4. Если B > 0 перейти к шагу 3.
Шаг 5. Вычислить S = MonPro(A1, 1, N).
Шаг 6. Выдать «S = AB (mod N)». Конец алгоритма.
4. MonExpX(A, B, R, N) – операция модульного возведения в степень с параметром R, вычисляющая:
S = MonExpX(A, B, R, N) = A \B (mod N)
(6)
Данная операция свойственна только для алгебры с параметром и до настоящего времени эффективные способы реализации данной операции не разрабатывались. Предлагается способ вычисления данной операции на основе алгоритма возведения в степень Монтгомери, используя предварительно вычисленную величину r2
(mod N) [1], а также операции модульного умножения MonPro( ) (2) и MonProX( ) (3).
В основу предлагаемого способа положено итерационное разложение степени
на числа, кратные степеням двойки. Так, для B = 37 с параметром R имеем разложение:
A\37 => A\32+4+1 (mod p) ≡ (((((A\2)\2)\2)\2)\2 ® (A\2)\2) ® A (mod p),
где, «\2» и «®» - операторы промежуточных операций:
A\2 (mod p) ≡ A (2 + AR) (mod p) – возведение в квадрат с параметром;
A1 ® A2 (mod p) ≡ A1 + A2(1 + A1R) (mod p) – умножение с параметром.
Используя предварительно вычисленную константу r2, обе эти промежуточные
операции можно реализовать с помощью операций MonPro( ) и MonProX( ).
Примем A1r = A1 r (mod p), A2r = A2 r (mod p), Rr = R r (mod p).
Тогда, произведение с параметром
С = A1 ® A2 (mod p)
можно вычислить по следующему алгоритму:
Шаг 1. Вычислить A1r’ = MonPro(A1r, r2, p) = A1 r r2 r -1 (mod p) =
= A1 r2 (mod p).
Шаг 2. Вычислить A’ = MonProX(A1r, Rr, r2, p) =
= (r2 + A1 r R r) r -1 (mod p) = (1 + A1 R) r (mod p).
Шаг 3. Вычислить С = MonProX(A’, A2r, A1r’, p) =
= (A1r’ + A’ A2r) r -1 (mod p) =
= (A1 r2 + (1 + A1 R) r A2 r) r -1 (mod p) =
= (A1 + (1 + A1 R) A2) r (mod p),
что соответствует искомому результату. Дополнительный множитель r в последнем
выражении необходим для обеспечения возможности использования промежуточного
результата в последующих итерациях операции возведения в степень. При необходимости, множитель r всегда можно исключить, используя умножение по Монтгомери на
единицу, аналогично шагу 5 алгоритма MonExp( ).
Важным показателем предлагаемого способа умножения является тот факт, что
вычисления на шагах 1 и 2 являются взаимно независимыми и при реализации алгоритма на базе ПЛИС могут выполняться параллельно. С учетом этого, можно считать,
что алгоритм модульного умножения с параметром фактически состоит из двух шагов.
Таким образом, предлагаемый способ позволяет производить два умножения
вместо двух умножений и двух сложений с последующим приведением результата к
представлению Монтгомери.
Итоговый алгоритм операции MonExpX(A, B, R, N) (6) состоит из следующих шагов:
Шаг 1. Принять A1 = 1.
Шаг 2. Вычислить A2 = MonPro(r2, A, N) || Rr = MonPro(r2, R, N).
Шаг 3. Если B (mod 2) = 1 вычислить
B = B – 1;
A3 = MonPro(A1, r2, N) || A1 = MonProX(A1, Rr, r2, N);
A1 = MonProX(A1, A2, A3, N).
Иначе вычислить
B = B/2;
A3 = MonPro(A2, r2, N) || A2 = MonProX(A2, Rr, r2, N);
A2 = MonProX(A2, A2, A3, N).
Шаг 4. Если B > 0 перейти к шагу 3.
Шаг 5. Вычислить S = MonPro(A1, 1, N).
Шаг 6. Выдать «S = A\B (mod N)». Конец алгоритма.
Здесь: «||» - признак параллельного выполнения,
Выводы
Рассмотренные алгоритмы оптимизации выполнения арифметических операций
позволяют существенно снизить трудоемкость арифметических операций модульного
умножения м модульного возведения в степень с параметром, лежащих в основе
национальных алгоритмов формирования и проверки ЭЦП.
Литература
1. О. Расулов. Исследование и анализ арифметических операций современной
криптографии и способы их аппаратной реализации. «ИНФОКОММУНИКАЦИИ: СЕТИТЕХНОЛОГИИ-РЕШЕНИЯ» №1 (17) 2011.
2. P.L. Montgomery. Modular Multiplication without Trial Division. Mathematics of
Computation, Vol. 44, No. 170, 1985.
3. P.D.Barrett. Implementing the Rivest Shamir Adleman public key encryption algorithm on standard digital signal processor. In Advances in Cryptology-Crypto’86, Springer,
1987.
4. O’z DSt 1092: 2009 Информационная технология. Криптографическая защита
информации. Процессы формирования и проверки электронной цифровой подписи.
Download