Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
116.doc
Скачиваний:
14
Добавлен:
30.04.2022
Размер:
898.56 Кб
Скачать

Воронежский институт мвд России

УДК 681.322

В. В. Зыков

АЛГОРИТМЫ ДЛЯ ВЫЧИСЛЕНИЯ ЧИСЕЛ БОЛЬШОГО РАЗМЕРА

И ИНФОРМАЦИОННЫЕ СИСТЕМЫ УПРАВЛЕНИЯ

Высокие запросы к скорости реакции на то или иное событие в мире, ставят сегодня перед руководителями крупных предприятий, главами регионов, просто бизнесменами задачи по повышению эффективности их работы. Одним из способов решения является работа через Интернет.

Интернет дает огромный выигрыш в скорости работы, позволяет получать самую полную и свежую информацию, проводить платежи, обмениваться документацией и даже заключать договора. На фоне всех этих плюсов, существует один существенный минус – это отсутствие гарантий достоверности того или иного документа, операции и т.п. В обычных документах, таким гарантом являются подпись и печать. Для решения подобной проблемы вводится понятие электронной цифровой подписи (далее - ЭЦП).

В январе 2001 года Государственная Дума приняла решение создать комитет, отвечающий за подготовку законопроекта об ЭЦП. Таким образом, в скором времени будет сформирована законодательная база, нам осталось позаботиться о математической.

Еще в 1995 году был выработан российский стандарт ЭЦП – ГОСТ Р. 34.10-94. Его отличие от зарубежных аналогов заключается в более высокой скорости работы и повышенной криптостойкости, достигаемой за счет увеличения длины ключа до 256 бит. К сожалению, с повышением надежности идет увеличение времени работы. Это происходит из-за того, что алгоритм проверки/установки ЭЦП работает с «большими» числами (>200 бит), для работы с которыми, стандартных средств обработки не предусмотрено. Таким образом, для повышения быстродействия следует создать аппарат для работы с такими числами.

Сначала определимся с форматом ключей: ключи должны быть представлены в шестнадцатеричном виде. Это обуславливается тем, что шестнадцатеричные числа легче всего приводить к двоичному виду. В процессе загрузки ключей в память, программа разбивает их на блоки размером в двойное слово (32-бит). С данными в таком виде легче всего работать программе не только по соображениям скорости обработки (т.к. механизм доступа к элементам массива давно отработан), но и исходя из соображений экономии памяти.

Теперь выделим основные операции над числами. Это сложение, вычитание, умножение, взятие степени, вычисление модуля. Очевидно, что наиболее часто используемой является взятие модуля, из чего следует, что она должна быть наиболее быстрой. На схеме 1 представлен алгоритм вычисления выражения вида: A mod B.

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

Схема 1:

  1. Ввести A, B;

  2. Записать в D инвертированное B;

  3. D = D + 1, C = A;

  4. Если C < B, тогда идти на 6, иначе идти на 7;

  5. C = C + D и идти на 5;

  6. Вывод C.

Сложение и умножение в этой статье рассматриваться не будут из-за их простоты. Вычитание выполняется аналогично описанному выше методу – через дополнительный код. Нам осталось рассмотреть наиболее сложный случай – возведение в степень.

Совершенно очевидно, что рассматривать возведение в степень, как череду перемножений и одно приведение по модулю, будет не рационально.

Р ассмотрим тогда формулу (1)

где B.bit(i) – это i-ый бит двоичного числа B, и следует также отметить, что операцию взятия модуля необходимо проводить после каждого произведения.

По формуле (1) легко строится алгоритм, который, несмотря на громоздкость, будет обеспечивать существенный выигрыш в скорости вычислений.

Описанные выше алгоритмы легко реализуются не только на языках высокого уровня, но и на языке ассемблера, что само по себе очень важно, так как это позволяет достичь где-то 10% увеличения скорости.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]