- •Московский технический университет связи и информатики
- •«Комплексное обеспечение информационной безопасности инфокоммуникационных сетей и систем»
- •210700 «Инфокоммуникационные технологии и системы связи»
- •Введение в современные криптографические алгоритмы Предисловие
- •Математические основы (теория чисел)
- •1.1 Простые числа
- •1.2 Наибольший общий делитель
- •1.3 Модулярная арифметика
- •2. Криптография с открытым ключом
- •2.1 Алгоритм rsa
- •2.2 Электронная цифровая подпись (эцп)
- •2.2.1 Алгоритм формирования подписи Эль-Гамаля
- •2.2.2 Алгоритм dsa (Digital Signature Algorithm)
- •2.3 Алгоритм формирования общего ключа по схеме Диффи-Хеллмана
- •3. Симметричная система шифрования
- •3.1 Потоковые шифры
- •3.2 Генераторы псевдослучайных чисел
- •3.3 Блочные шифры
- •3.4 Сети Файстеля
- •3.5 Режимы шифрования
- •3.5.1 Электронная кодовая книга (ecb)
- •3.5.2 Сцепление блоков по шифротексту (cbc)
- •3.5.3 Обратная загрузка шифротекста (cfb)
- •1. Задания по теории чисел
- •2.Задания по алгоритмам с открытыми ключами
- •3.Задания по симметричной системе шифрования генераторы псевдослучайных чисел
- •Задание по блочным шифрам
- •Задание по хэш-функциям
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:
Алиса генерирует случайное число k, меньшее q.
Алиса генерирует:
r=(gk MOD p) MOD q
s=(k-1(H(m)+xr)) MOD q
Ее подписью служат параметры r и s, которые она посылает Бобу.
Проверка подписи
Боб проверяет подпись, вычисляя
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.
