Вперед: 9.2.3 Методы ускорения операции сложения
Вверх: 9.2 Алгоритмические проблемы реализации и применения криптографических протоколов на интеллектуальных карточках
Назад: 9.2.1 Представление чисел
  Содержание
  Предметный указатель
Традиционное выполнение операции
выглядит
как последовательное выполнение умножения (что
приводит к размерности , равной ) и модульной
редукции
. Однако, этот процесс не следует
считать ни быстрым, ни экономичным и лучше прибегнуть к
выполнению операции методом "цифра-за-цифрой": сначала
вычисляется (где размерность равна
), а затем
. Процесс организуется по
всем цифрам . Рассмотрим несколько возможных
алгоритмов для этого метода. На рис. 1 приведен псевдокод
алгоритма модулярного умножения, предложенного в [HDVC].
Рис. 1.
Алгоритм модулярного умножения
, использующий операции умножения/деления
(алгоритм 1)
|
И хотя авторы признаются, что это не самый эффективный
алгоритм из-за наличия в нем операций
,
и
, тем не менее при аппаратной
реализации за счет введения небольшой заранее вычисленной
таблицы (так как частное
принимает значения
только 0, 1, 2 и 3) быстродействие данного
алгоритма может быть повышено. Действительно, скорость
одного RSA-шифрования при использовании такого
алгоритма для 512-битовой экспоненты составляет
17 Кбитов/сек, однако платой за это служат размеры схемы,
которые соответствуют размерам карманного калькулятора --
см, что не позволяет использовать
данный метод для интеллектуальных карточек. Есть несколько
разновидностей подобного алгоритма, каждая из которых
удобна для программной реализации. Однако для -разрядных
параллельных процессоров лучше свести операцию модулярного
умножения к чередованию операций сложения/вычитания/сдвига.
Это приведет к большей асимптотической эффективности
алгоритма, что " можно интуитивно объяснить тем,
что умножение выполнить труднее, чем сложение и для
достаточно больших любое фиксированное число
-разрядных сложений требует меньше времени, чем
-разрядное умножение, независимо от того, какой из
(известных) алгоритмов
применяется" [АХУ, стр. 79-80].
Опишем несколько схем реализации такого
процесса [ORSPT].
Рис. 2.
Алгоритм модулярного умножения
(алгоритм 2)
|
Достоинства алгоритма 2 в том, что и
положительны, однако текущий результат может требовать
два последовательных сложения на 1 бит множителя.
Рис. 3.
Алгоритм модулярного умножения
(алгоритм 3)
|
Достоинства алгоритма 3 в том, что требуются
только два слагаемых, но, как и в алгоритме 2,
необходимы два последовательных сложения на 1 бит множителя.
Рис. 4.
Алгоритм модулярного умножения
(алгоритм 4)
|
Скорость вычислений по алгоритму 4 выше чем у
алгоритмов 2, 3, однако требуется
дополнительная память для хранения , , .
Существует еще несколько способов повышения быстродействия
рабочих алгоритмов вычисления
. Так, в
[ORSPT] даны два из них. Один заключается во
введении в алгоритм асимметричных временных фаз. Например, в
алгоритме 2 во время формирования очередного
текущего результата , в случае, если , выполняется
; а если , то
. Время
выполнения каждой из ветвей алгоритма в таком случае будет
неодинаково, что требует асинхронного управления. Другой
способ заключается в использовании на каждом шаге не одного
бита , а сразу двух разрядов множителя . За счет
этого вдвое сокращается число временных периодов, хотя
требуется две последовательные операции сложения в каждом
периоде. Техника этого алгоритма, который известен под
названием Modified Booth's Algorithm (MBA) изложена в
[ORSPT]. Следует отметить еще один немаловажный
момент -- во всех приведенных выше алгоритмах выполняется
сравнение вида или или . Однако, не
следует забывать, что мы имеем дело с числами большой
размерности, и на такое сравнение уйдет достаточно много
времени. В то же время для некоторых алгоритмов в [Se]
показано, что для сравнения при выполнении модульной
редукции достаточно 10 старших битов операндов. А в
[Bak] для сравнения и используются лишь
3 старших бита и 6 старших битов .
Алгоритм, который предложил Бейкер в [Bak], и который
является, в сущности, модификацией
алгоритма 3, -- один из наиболее удачных
алгоритмов для быстрого вычисления
, что
обусловлено эффективной реализацией сравнения многоразрядных
чисел и применением сложения CSAs.
Поскольку операция
носит
фундаментальный арифметический характер и вряд ли в
ближайшее время найдется какое-то принципиально новое
решение, резко увеличивающее быстродействие подобных
операций, то при условии удачной реализации алгоритма Бейкера
в технические решения на хорошем технологическом уровне,
такая СБИС будет вполне конкурентоспособна на рынке
аналогов, по крайней мере с точки зрения пространственно-временных
характеристик. Временная сложность алгоритма и количество
логических элементов, необходимых для его реализации,
оцениваются как .
Выбор какого-то конкретного
из описанных алгоритмов для реализации его в
интеллектуальных карточках зависит от
многих факторов. В частности, должны учитываться:
наличие асинхронного устройства управления,
установленные временные критерии, уровень
технологической базы, стоимостные ограничения и др.
-алгоритм B
[Bak]
Пусть , и -- три -битовых положительных
двоичных числа, где достаточно большое и . Пусть
представлено как двоичное частичное произведение в
избыточной форме с явным представлением сохраняемого
переноса (CARRY-SAVE REDUNDANT FORM). Операнд состоит из
2 компонент: суммы и переноса . Для каждой из
компонент ( и ) необходимо бита. Вычисление
требует повторения сложения и ,
одновременно с вычитанием (или )
из или сложением (или ) и , где
ограничено абсолютным значением в конце каждой итерации.
Выбор одной из ветвей алгоритма B осуществляется на основе
операции сравнения, для которой используются 3 старших бита
, называемых
и 6 старших, образованных в
каждой итерации, битов P, называемых
. На
рис. 5 показаны размерности операндов, а на
рис. 6 -- псевдокод алгоритма B.
Рис. 5.
Размерности
,
и ,
для алгоритма B
|
Рис. 6.
Алгоритм модулярного умножения
--
алгоритм B
|
Алгоритм
-- алгоритм P
Ниже описывается оригинальный алгоритм выполнения операции
модулярного умножения.
Операнды многократной точности для данного алгоритма
представляются в виде одномерного массива целых чисел (см. рис. 7). Для знака можно зарезервировать элемент
с нулевым индексом. Размер элемента обсуждался в
п. 9.2.1, а особенности представления чисел при
организации взаимодействия алгоритма с другими рабочими
программами, при организации ввода-вывода и т. д. рассматриваются, например, в [Hu]. Нижеописанный
алгоритм является, по существу, модификацией
алгоритма 1 за счет введения некоторых
оригинальных приемов. В алгоритме использован известный
вычислительный метод "разделяй и властвуй" и
реализован способ вычисления "цифра-за-цифрой". Прямое
умножение не следует делать по нескольким причинам:
во-первых, произведение требует в два раза больше
памяти, чем при методе "цифра-за-цифрой"; во-вторых,
умножение двух многоразрядных чисел труднее организовать,
чем умножение числа многократной точности на число
однократной точности. Так, в [BW] приводятся расчеты на
супер-ЭВМ "CRAY-2" для 100-разрядных десятичных чисел:
модулярное умножение методом
"цифра-за-цифрой" выполняется примерно на 10%
быстрее, чем прямое умножение и следующая за ним модульная
редукция.
Рис. 7.
Размерности
,
и
,
для алгоритма P
|
Рис. 8.
Алгоритм модулярного умножения
--
алгоритм P
|
Алгоритм P приведен на рис. 8, на рис. 9 представлен псевдокод процедуры ADDK.
Рис. 9.
Алгоритм вычисления
(процедура ADDK)
|
Так как
, то проверку
"if
" в алгоритме P можно не
вводить
потому, что вероятность того, что
будет
равняться
0 достаточно мала, если значение не слишком
мало. Ошибка затем все равно будет алгоритмом обнаружена.
Проверка "if
" позволяет представлять числом однократной точности и
работать с наименьшими абсолютными остатками в каждой
итерации. Значение операнда
на каждом шаге
итерации должно быть ограничено величиной
.
Теорема 1.
Пусть
-- частичное произведение
в конце -ой итерации (т. е. в конце -ого
цикла FOR алгоритма P). Тогда для любого ,
,
.
В алгоритме P используется известный метод, когда для
получения частного от деления двух многоразрядных чисел,
используются только старшие цифры этих чисел (см.,
например, алгоритм D в [Кнут, стр. 291-295]). Чем
больше основание системы счисления , тем ниже вероятность
того, что пробное частное () от деления первых цифр
больших чисел не будет соответствовать действительному
частному.
Вперед: 9.2.3 Методы ускорения операции сложения
Вверх: 9.2 Алгоритмические проблемы реализации и применения криптографических протоколов на интеллектуальных карточках
Назад: 9.2.1 Представление чисел
  Содержание
  Предметный указатель
|