Это не официальный сайт wikipedia.org 01.01.2023

Алгоритмы быстрого возведения в степень по модулю — Википедия

Алгоритмы быстрого возведения в степень по модулю

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

Метод с использованием Китайской теоремы об остаткахПравить

Описание методаПравить

Пусть требуется вычислить S = x a mod n  , где числа x , a , n   достаточно большие и пусть модуль может быть разложен на простые делители n = p 1 p 2 . . . p j  . Тогда для быстрого возведения в степень по модулю можно воспользоваться китайской теоремой об остатках и решить систему уравнений (предварительно посчитав вычеты x a r i ( mod p i )   с использованием теоремы Ферма, где i = 1 , 2 , . . . , j  ):

{ x a r 1 ( mod p 1 ) , 0 r 1 < p 1 x a r 2 ( mod p 2 ) , 0 r 2 < p 2 . . . . . . . . . . . . x a r j ( mod p j ) , 0 r j < p j  

Заменив x a   на t   для удобства, решаем систему относительно t   и получаем S  .

ПрименениеПравить

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

Вычислительная сложностьПравить

Данный метод позволяет сократить количество вычислений в 3 4   раза. Пусть a   имеет длину k   бит. При обычном возведении в степень затратится около 3 k / 2   умножений по модулю. Пусть мы хотим вычислить ( x a mod p , x a mod q )  . Сокращая a   на p 1   и q 1   задача сводится к вычислению ( x a mod ( p 1 ) mod p , x a mod ( q 1 ) mod q )  . Каждая степень в данной записи имеет длину k / 2  . Поэтому каждая операция возведения в степень потребует 3 k / 4   операций. Итого потребуется 2 3 k / 4 = 3 k / 2   умножений по модулю простого числа p   или q   вместо изначального умножения по модулю n  .

Метод повторяющихся возведения в квадрат и умноженияПравить

 
Пример блок-схемы метода повторяющихся возведения в квадрат и умножения

Описание методаПравить

Пусть требуется вычислить x a mod n  . Представим степень a = a j 1 2 j 1 + a j 2 2 j 2 + . . . + a 2 2 2 + a 1 2 1 + a 0  , где a j = ( 0 , 1 )  

Представим x a mod n   в виде:

x a mod n = x a j 1 2 j 1 + a j 2 2 j 2 + . . . + a 2 2 2 + a 1 2 1 + a 0 mod n =  

= ( x 2 ) a j 1 2 j 2 + a j 2 2 j 3 + . . . + a 1 2 0 x a 0 mod n =  

= ( ( x 2 ) 2 ) a j 1 2 j 3 + a j 2 2 j 4 + . . . + a 2 2 0 ( x 2 ) a 1 x a 0 mod n =  

= ( . . . ( ( x 2 ) 2 . . . ) 2 ) a j 1 . . . ( x 8 ) a 3 ( x 4 ) a 2 ( x 2 ) a 1 x a 0 mod n  

Далее высчитывается значение выражения x 2 mod n   и проводится замена в преобразованном выражении.

Данная операция производится до тех пор пока не будет найден результат.

ПрименениеПравить

Если n   — простое или является произведением двух больших простых чисел, то обычно используют метод повторяющихся возведения в квадрат и умножения. Однако, если n   — составное, то обычно используют это метод вместе с китайской теоремой об остатках.

Вычислительная сложностьПравить

Средняя сложность данного алгоритма равна 1 , 5 a   операций умножения двух a  -битовых чисел плюс 1 , 5 a   операций деления 2 a  -битовых чисел на a  -битовое число. Для 1000  -битовых и более длинных чисел данный алгоритм выполняется на ЭВМ достаточно быстро.

Метод Монтгомери возведения в степеньПравить

ИсторияПравить

Данный метод был предложен 1985 году Питером Монтгомери для ускорения выполнения модульного возведения в степень.

Описание методаПравить

В этом методе каждому числу x   ставится в соответствие некоторый образ F ( x )   и все вычисления производятся с F ( x )  , а в конце производится переход от образа к числу.

Теорема(Монтгомери).

Пусть N , R   — взаимно простые положительные целые числа, а N = ( N 1 ) mod R  . Тогда для любого целого x   число y = x + N ( ( x N ) mod R )   делится на R  , причем y / R x R 1 ( mod N )  . Более того, если 0 x < R N  , то разность y / R ( ( x R 1 ) mod N )   равна либо 0  , либо N  .

Данная теорема позволяет вычислить оптимальным способом величину ( x R 1 ) mod N   для некоторого удобно выбранного R  .

Определение 1. Для чисел R   , N   , x   , таких что НОД ( R , N ) = 1   и 0 x < N  , назовем ( R , N )   — остатком числа x   величину x ¯ = ( x R ) mod N  .

Определение 2. Произведением Монтгомери двух целых чисел a   , b   называется число M ( a , b ) = a b R 1 mod N  

Теорема (правила Монтгомери). Пусть числа R   , N   взаимно просты, и 0 a , b < N  . Тогда a mod N = M ( a ¯ , 1 )   и M ( a ¯ , b ¯ ) = a b ¯  

То есть, для наглядности, запишем выражение для возведения x   в 3   степень: M ( M ( M ( x ¯ , x ¯ ) , x ¯ ) , 1 ) = x 3 mod N  

Алгоритм(Произведение Монтгомери). Пусть заданы целые числа 0 c , d < N  , где N   нечетно, а R = 2 s > N  . Этот алгоритм возвращает M ( c , d )  .

1.[Функция M Монтгомери]
M ( c , d )  {
x = c d  ;
z = y / z  ;
//В соответствии с теоремой(Монтгомери).
2.[Поправить результат]
if ( z N ) z = z N  ;
return z  ;
}

Алгоритм(Метод Монтгомери возведения в степень). Пусть заданы числа 0 x < N  , y > 0  , и R   выбрано так же, как для алгоритма(Произведение Монтгомери). Этот алгоритм возвращает x y mod N  . Через ( y 0 , . . . , y D 1 )   мы обозначаем двоичные биты y  .

1.[Начальная установка]
x ¯ = ( x R ) mod N  ;
//С помощью какого-либо метода деления с остатком.
p ¯ = R mod N  ;
//С помощью какого-либо метода деления с остатком.
2.[Схема возведения в степень]
for ( D 1 j 0 )  {
p ¯ = M ( p ¯ , p ¯ )  ;
//с помощью алгоритма(произведение Монтгомери).
if ( y i == 1 ) p ¯ = M ( p ¯ , x ¯ )  ;
}
//Теперь p ¯   равняется x ¯ y  .
3.[Окончательное получение степени]
M ( p ¯ , 1 )  ;

В итоге получаем образ x ¯ = x R mod N  , от которого мы можем получить конечный результат x = x ¯ R 1 mod N  , причем выражение R 1 mod N   вычислено заранее. Для произведения двух чисел результат будет выглядеть как z = z ¯ R 1 mod N = x ¯ y ¯ R 1 mod N x ¯ y ¯ ( x ¯ y ¯ ( N 1 mod R ) mod R ) N R mod N  

ПрименениеПравить

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

Вычислительная сложностьПравить

Данный метод позволяет уменьшить (при больших значения N  ) вычисления функции mod   до одного умножения двух чисел размером N  . Сложность умножения Монтгомери оценивается как O ( n 2 )  .

Алгоритм с использованием «школьного» методаПравить

Описание методаПравить

Для наглядности рассмотрим метод для основания B = 2  , то есть будем проводить вычисления в B   — ичной (или двоичной, так как B = 2  ) системе счисления. Основание B = 2   имеет плюс, в том что выполнение операции деления на 2   происходит сдвигом вправо, а умножение на 2   — сдвигом влево.

Определение 1. Представлением неотрицательного целого числа x   в системе счисления с основанием B   (или B  -ичной записью числа x  ) называется кратчайшая последовательность целых чисел ( x i )  , называемых цифрами записи, такая что каждая из этих цифр удовлетворяет неравенству 0 x i < B  , и выполнено равенство x = i = 0 D 1 x i B i  

Для примера, рассмотрим двоичный алгоритм взятия mod   от произведения x y  .

Алгоритм (двоичный алгоритм умножения и взятия остатка). Пусть заданы положительные целые числа x  , y   такие что 0 x  , y < N  . Этот алгоритм возвращает результат составной операции ( x y ) mod N  . Мы предполагаем, что задано двоичное представление числа x   согласно определению 1, так что биты числа x   имеют вид ( x 0 , . . . , x D 1 )  , и x D 1 > 0   — самый старший бит.

1.[Начальная установка]
s = 0  ;
2.[Преобразовать все D   битов]
for ( D 1 j 0 )   {
s = 2 s  ;
if ( s N ) s = s N  ;
if ( x j == 1 ) s = s + y  ;
if ( s N ) s = s N  ;
}
return s  ;

Данный метод имеет один недостаток: он не использует преимущество многобитовой арифметики, доступной на любой современной ЭВМ. Поэтому обычно используют основания B   большие 2  .

Вычислительная сложность «школьного» методаПравить

Выражения вида a b ( mod n )   имеет оценку вычислительной сложности — O s ( ( log n ) 3 )  

См. такжеПравить

ПримечанияПравить

ЛитератураПравить

  • Крэндалл Ричард, Померанс Карл. Простые числа: Криптографические и вычислительные аспекты / Под ред. и с предисл. В. Н. Чубарикова.. — М.: УРСС:: Книжный Дом «ЛИБРОКОМ», 2011. — 664 с. — ISBN 978-5-453-00016-6, 978-5-397-03060-2.
  • Молдовян Н. А. Теоретический минимум и алгоритмы цифровой подписи. — СПб.: БВХ-Петербург: Книжный Дом «ЛИБРОКОМ», 2010. — 304 с. — ISBN 978-5-9775-0585-7.
  • Фергюнсон, Нильс, Шнайер, Брюс. Практическая криптография. — M.: Издательский дом «Вильямс», 2004. — 432 с. — ISBN 5-8459-0733-0.
  • Мао В. Современная криптография: Теория и практика / пер. Д. А. КлюшинаМ.: Вильямс, 2005. — 768 с. — ISBN 978-5-8459-0847-6