Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задания для самостоятельной работы Криптография...doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
543.74 Кб
Скачать

2.2.2 Алгоритм dsa (Digital Signature Algorithm)

В августе 1991 года американский Национальный институт стандартов и технологии (NIST) предложил алгоритм DSA. В 1993 году DSA стал американским федеральным стандартом обработки информации №186, назвали его DSS (Digital Signature Standard).

Механизм создания подписи использует хэш-функцию h. DSS явно использует алгоритм SHA-1 (Secure Hash Algorithm).

Генерация ключа

В алгоритме используются следующие параметры:

p= простое число длиной L битов от 512-1024 и кратное длине блока

q=160-битовый простой множитель p-1

g=h(p-1)/q MOD p, где h любое число , меньшее p-1, для которого h(p-1)/q MOD p> 1

x= число, меньшее q.

y=gx MOD p

В алгоритме также используется однонаправленная хэш-функция H(m).

Первые три параметра: p, q и g – открыты и могут быть общими для пользователей сети. Закрытым ключом является x , открытым y.

Генерация подписи

Чтобы подписать сообщение m:

  1. Алиса генерирует случайное число k, меньшее q.

  2. Алиса генерирует:

r=(gk MOD p) MOD q

s=(k-1(H(m)+xr)) MOD q

  1. Ее подписью служат параметры r и s, которые она посылает Бобу.

Проверка подписи

  1. Боб проверяет подпись, вычисляя

w=s-1 MOD q

u1=(H(m)*w )MOD q

u2=(rw) MOD q

v=((gu1 * yu2)MOD p) MOD q

Если v=r, то подпись правильная.

Пример:

Пусть p=31 - простое число и

q=5-битовый простой множитель p-1=30=5*2*3

выберем h =3,

тогда g=h(p-1)/q MOD p=330/5 MOD 31=36 MOD 31=16

Выберем секретный ключ x=4, т.к он должен быть меньше q=5,

Вычислим открытый ключ y=gx MOD p=164 MOD 31=2

Для генерации подписи генерируем случайное целое число k<q, например, пусть k=3. Далее вычисляем r=(gk MOD p) MOD q=(163 MOD 31) MOD5=4.

Затем вычисляем s=(k-1(H(m)+xr)) MOD q

Предварительно надо вычислить обратный элемент для k такой, что k*k-1 MOD q=1. Определяем, что k-1 =7.

Предположим, что хэш сообщения, которое надо подписать, уже вычислено и равно

H(m)=18, тогда s=(k-1(H(m)+xr)) MOD q=7(18+4*4)MOD 5=3

Подписью для сообщения, имеющего H(m)=18, является пара чисел (r,s). В данном случае это пара (4,3).

Для проверки подписи на принимающей стороне вычисляют:

w=s-1 MOD q, предварительно находят обратный элемент для s такой, что

s*s-1 MOD q=1. Отсюда следует, что s-1 =7.

w=7 MOD 5=2

Затем вычисляют:

u1=(H(m)*w )MOD q= (18*2) MOD 5=1

u2=(rw) MOD q=(4*2) MOD 5=3

v=((gu1 * yu2)MOD p) MOD q =((16 * 23)MOD 31) MOD 5=4

В данном случае v=r=4, следовательно, подпись правильная.

.

2.3 Алгоритм формирования общего ключа по схеме Диффи-Хеллмана

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

Эффективность алгоритма Диффи-Хеллмана опирается на трудность вычисления дискретных логарифмов. Формально дискретный алгоритм можно определить следующим образом. Сначала определяется примитивный корень простого числа P как число, степени которого порождают все целые числа от 1 до P-1. Это означает, что если число α является примитивным корнем простого числа P, то все числа

(α) MOD p 2) MOD p P-1) MOD p

должны быть разными и представлять все числа от 1 до P-1 в некоторой перестановке.

Для любого целого числа B и любого примитивного корня α простого числа P однозначно определяется показатель степени I, при котором:

B= α I MOD P где 1<=I <=P-1

Этот показатель степени обычно называется дискретным логарифмом.

Теперь рассмотрим обмен ключами по схеме Диффи-Хеллмана.

В этой схеме имеются два открытых для всех числа: простое число Q и целое число α , являющееся первообразным корнем Q.

Если пользователи i и j захотят установить секретную связь с использованием какого-либо алгоритма с симметричным ключом, то формирование этого ключа происходит следующим образом:

Пользователь i выбирает случайное целое число Xi < Q и вычисляет

Yi= α Xi MOD Q

Аналогично, пользователь j независимо выбирает случайное целое число Xj < Q и вычисляет Yj= α XjMOD Q.

Каждая сторона сохраняет свои значения X в тайне, а значения Y делает свободно доступным другой стороне. Пользователь i вычисляет ключ по формуле

K= Yj Xi MOD Q , а пользователь j – по формуле K= Yi Xj MOD Q

Эти две формулы при вычислении дают одинаковые результаты:

K= Yj Xi MOD Q

= (α XjMOD Q) Xi MOD Q

= (α Xj) Xi MOD Q

= α Xj Xi MOD Q

= (α Xi) Xj MOD Q

= (α XiMOD Q) Xj MOD Q

= Yi Xj MOD Q

Итак, обе стороны обменялись секретным ключом. Поскольку при этом значения Xi и Xj остались в тайне, противнику придется работать с Q, α, Yi, Yj

Таким образом, ему придется вычислять дискретный логарифм, чтобы определить ключ.

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

Пример:

Обмен ключами строится на использовании простого числа Q=71 и его первообразного корня α=7.

Пользователи i и j выбирают секретные ключи Xi = 5 и Xj =12, соответственно.

Каждый вычисляет свой открытый ключ:

Yi= 7 5 MOD 71 = 51,

Yj= 7 12MOD 71 = 4.

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

K= 4 5 MOD 71 = 30

K= 51 12 MOD 71 =30

Имея 51 и 4, противнику не удастся с легкостью вычислить 30.