Алгоритм Монтгомери

Алгоритм Монтгомери

Алгоритм Монтгомери — приём, позволяющий ускорить выполнение операций умножения и возведения в квадрат, необходимых при возведение числа в степень по модулю, когда модуль велик (порядка сотен бит). Был предложен в 1985 году Питером Монтгомери.

По данным целым числам a, b < n, r, НОД(r,n)=1 алгоритм Монтгомери вычисляет

MonPro(a,b) = a \cdot b \cdot r^{-1} \mod{n}

Умножение Монтгомери

Положим r=2^k.

Определим n-остаток (n-residue) числа a < n как \bar{a} = a \cdot r \mod{n}.

Алгоритм Монтгомери использует свойство, что множество \{ a \cdot r \mod{n} \mid 0 \leqslant a \leqslant n-1 \} является полной системой вычетов, то есть содержит все числа от 0 до n-1.

MonPro вычисляет \bar{c} = \bar{a} \cdot \bar{b} \cdot r^{-1} \mod{n}. Результат является n-остатком от c = a \cdot b \mod{n}, так как

\bar{c} = \bar{a} \cdot \bar{b} \cdot r^{-1} \mod{n} = a \cdot r \cdot b \cdot r \cdot r^{-1} \mod{n} = c \cdot r \mod{n}

Определим n' так, что r \cdot r^{-1} - n \cdot n' = 1. r^{-1} и n' можно вычислить с помощью расширенного алгоритма Евклида.

Функция MonPro(\bar{a},\bar{b})

1. t = \bar{a} \cdot \bar{b}
2. u = (t + (t \cdot n' \mod{r} ) \cdot n ) / r
3. while (u<0) u=u+n
4. return  u \mod n

Операции умножения и деления на r выполняются очень быстро, так как при r=2^{k} представляют собой просто сдвиги бит. Таким образом алгоритм Монтгомери быстрее обычного вычисления a \cdot b \mod{n}, которое содержит деление на n. Однако вычисление n' и перевод чисел в n-остатки и обратно — трудоёмкие операции, вследствие чего применять алгоритм Монтгомери при вычислении произведения двух чисел представляется неразумным.

Возведение в степень Монтгомери

Использование алгоритма Монтгомери оправдывает себя при возведении числа в степень по модулю a^{e} \mod{n}.

Функция ModExp(a,e,n)

1. \bar{a} = a \cdot r \mod{n}
2. \bar{x} = 1 \cdot r \mod{n}
3. for i=j-1 downto 0
     \bar{x} = MonPro(\bar{x},\bar{x})
     if e_{i}=1 then \bar{x}=MonPro(\bar{x},\bar{a})
4. return x = MonPro(\bar{x},1)

Возведение числа в степень битовой длины k алгоритмом «возводи в квадрат и перемножай» включает в себя от k до 2k умножений, где k имеет порядок сотен или тысяч бит. При использовании алгоритма возведения в степень Монтгомери объём дополнительных вычислений фиксирован (вычисления n', \bar{a}, \bar{x} в начале и MonPro(\bar{x},1) в конце), а операция MonPro выполняется быстрее обычного умножения по модулю[1], поэтому алгоритм возведения в степень Монтгомери даст выигрыш в производительности по сравнению с алгоритмом «возводи в квадрат и перемножай».

Литература

  1. Analyzing and Comparing Montgomery Multiplication Algorithms

Analyzing and Comparing Montgomery Multiplication Algorithms



Wikimedia Foundation. 2010.

Игры ⚽ Нужен реферат?

Полезное


Смотреть что такое "Алгоритм Монтгомери" в других словарях:

  • Алгоритм Шенкса — (англ. Baby step giant step; также называемый алгоритм больших и малых шагов)  в теории групп, детерминированный алгоритм дискретного логарифмирования в кольце вычетов по модулю простого числа. Для модулей специального вида данный… …   Википедия

  • Алгоритм Фюрера — (англ. Fürer’s algorithm)  быстрый метод умножения больших целых чисел. Алгоритм был построен в 2007 году швейцарским математиком Мартином Фюрером[1] из университета штата Пенсильвания как асимптотически более быстрый алгоритм, чем его… …   Википедия

  • Монтгомери, Питер — Питер Монтгомери в июле 2009 в Microsoft Research. Питер Лоренс Монтгомери  американский математик, известный благодаря своим публикациям в математической части криптографии. В текущее время входит …   Википедия

  • Список алгоритмов — Эта страница информационный список. Основная статья: Алгоритм Ниже приводится список алгоритмов, группированный по категориям. Более детальные сведения приводятся в списке структур данных и …   Википедия

  • Программируемые алгоритмы —       Служебный список статей, созданный для координации работ по развитию темы.   Данное предупреждение не устанавл …   Википедия

  • Метод квадратичных форм Шенкса — метод факторизации целых чисел, основанный на применении квадратичных форм, разработанный Даниелем Шенксом (англ. Daniel Shanks).[1] в 1975 году, как развитие метода факторизации Ферма. Для 32 разрядных компьютерах алгоритмы, основанные на… …   Википедия

  • Тест простоты Люка — В теории чисел тест простоты Люка это тест простоты натурального числа n; для его работы необходимо знать разложение на множители. Для простого числа n простые множители числа вместе с некоторым основанием a составляют сертификат Пратта, который… …   Википедия

  • Тест простоты — Тест простоты  алгоритм, который по заданному натуральному числу определяет, простое ли это число. Различают детерминированные и вероятностные тесты. Определение простоты заданного числа в общем случае не такая уж тривиальная задача. Только… …   Википедия

  • Тест Миллера (теория чисел) — У этого термина существуют и другие значения, см. Тест Миллера. Не следует путать с «Тестом Миллера Рабина»  вероятностным полиномиальным тестом простоты. Тест Миллера  детерминированный полиномиальный тест простоты. В 1976 году Миллер… …   Википедия

  • Тест Ферма — Тест простоты Ферма в теории чисел  это тест простоты натурального числа n, основанный на малой теореме Ферма. Содержание Если n  простое число, то оно удовлетворяет сравнению для любого a, где n не делит a. Выполнение сравнения… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»