Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Криптография / ОБУЧАЮЩИЕ ПРОГРАММЫ / Пояснительная записка.doc
Скачиваний:
39
Добавлен:
01.05.2014
Размер:
411.65 Кб
Скачать
      1. Хранение ключей

Между сеансами работы программы ключи для всех алгоритмов сохранялись в заданном файле. Пример такого файла приведен в приложении 2. Ключи хранятся в файле в виде чисел в 10-чной – для асимметричных алгоритмов или 16-ричной – для симметричных алгоритмов системе и снабжаются текстовыми комментариями. Поэтому пользователь может легко проанализировать содержимое файла с ключами. Изменение файла вручную не предусмотрено, т.к. в противном случае приходилось бы проверять каждый ключ при считывании. Для предотвращения ручного изменения файла он подвергается процедуре электронной подписи. При загрузке будет выявлено любое изменение файла.

      1. Длина ключа

Максимальная длина для двухключевых алгоритмов, которую может задавать пользователь, определялась 2 условиями.

  1. Генерация ключа и работа алгоритма, использующая этот ключ не должна занимать слишком много времени.

  2. Пользователь должен иметь возможность задавать такую длину ключа, которая в настоящее время считается достаточной для защиты важной информации.

Минимально возможная длина ключа определялась, исходя из удобства реализации. Если длина модуля равна nбит, то сообщение должно рассматриваться как последовательность чисел длиной поn-1 бит. Но еслиn-1 не кратно 8, то реализация чтения данных становится очень неудобной, т.к. придется считывать отдельные биты. Поэтому длина считываемых данных определяется какn/8 – 1 байт. Единица вычитается для ситуации, когдаnкратно 8, что чаще всего и используется. Значит, необходимо, чтобыn/8 – 1>1.

Алгоритм

наименьшая длина модуля, бит

наибольшая длина модуля, бит

RSA

20

2048

DSA

32

1024

схема Эль-Гамаля

16

1024

ГОСТ 34.10-94

32

1024

Данные о длине ключа, при которой обеспечивается достаточная безопасность, взяты из [2] и [3].

    1. Особенности реализации асимметричных алгоритмов

      1. Модульная арифметика

Алгоритм вычисления ad mod m [1]

  1. Представить dв двоичной системе счисленияd=d02r+…+dr-12 +dr, гдеdi, цифры в двоичном представлении, равны 0 или 1,d0=1.

  2. Положить a0=aи затем дляi=1,…,rвычислить

ai = ai-12 * adi mod m.

  1. arбудет искомым значением.

Решение сравнения ax 1 (mod b) при условии, что (a, b)=1 [1]

Такое сравнение имеет единственное решение при (a,b)=1. Эта задача равносильна поиску целых решений уравненияax+by=1, а решение этого уравнения можно получить с помощью расширенного алгоритма Евклида.

      1. Представление многозначных чисел

При использовании асимметричных алгоритмов постоянно приходится использовать числа намного длиннее 32 и 64 бит. Поскольку язык C++, на котором велась разработка, непосредственно не поддерживает чисел такого размера, то все арифметические операции с этим типом данных приходится разрабатывать самостоятельно.

Многозначное число хранится в виде массива 32-битовых беззнаковых чисел std::vector. Знак числа хранится отдельно. При этом в элементах массива с меньшими индексами хранятся младшие разряды числа.

      1. Сложение многозначных чисел

Сложение происходит аналогично сложению в столбик, но вместо отдельных цифр выступают целые 32-битовые слова. При этом надо учитывать перенос. C++ не позволяет достаточно просто определить, произошел ли перенос. Но существует машинная командаadc– сложить с учетом флага переноса. Поэтому при определении арифметических операций над многозначными числами использовался встроенный вMSVisualC++ ассемблер.