8 Лекция. Основы криптографии. Криптография с асимметричными ключами.
Алгоритм Диффи — Хеллмана
http://ru.wikipedia.org/wiki/Алгоритм_Диффи-Хеллмана
Алгоритм, позволяющий двум сторонам получить общий секретный ключ, используя незащищенный от прослушивания, но защищенный от подмены канал связи.
Рис. Получение симметричного ключа на алгоритме Диффи — Хеллмана
Алгоритм:
- генерируются закрытые ключи a и b (случайное натуральное число)
- генерируются открытые параметры p и g и передаются другой стороне
- p - случайное простое число
- g - первообразный корень по модулю p (находится из условия gφ(p) mod p ≡1 где φ(p) функция Эйлера, существует множество корней)
- вычисление открытых ключей A и B
- A = ga mod p
- B = gb mod p
- обмен открытыми ключами
- вычисляется общий секретный ключ K
- K = Ba mod p
- K = Ab mod p
ключ К равный с обеих сторон, потому что:
- Ba mod p = (gb mod p)a mod p = gab mod p = (ga mod p)b mod p = Ab mod p
Пример:
Ева - криптоаналитик. Она читает пересылку Боба и Алисы, но не изменяет содержимого их сообщений.
открытая - закрытая
- K = секретный ключ. K = 2
- g = открытое простое число. g = 5
- p = открытое простое число. p = 23
- a = секретный ключ Алисы. a = 6
- A = открытый ключ Алисы. A = ga mod p = 8
- b = секретный ключ Боба. b = 15
- B = открытый ключ Боба. B = gb mod p = 19
В случае (56 mod 23 = 8) , 8-это остаток деления 56/23
|
|
|
Получив симметричные ключи шифруются сообщения симметричным алгоритмом.
Рис. Получение симметричных ключей из ассиметричных
Алгоритм RSA
http://ru.wikipedia.org/wiki/RSA
Алгоритм генерации пары ассиметричных ключей RSA:
- генерируются два различных случайных простых числа p и q заданного размера (например, 1024 бита каждое).
- вычисляется их произведение n=pq , которое называется модулем.
- вычисляется значение функции Эйлера от числа n:
φ(n)=(p-1)(q-1) - p и q уничтожаются.
- выбирается целое число (открытая экспонента) e(1<e<φ(n)) , взаимно простое со значением функции φ(n).
-
вычисляется число (закрытая экспонента) d,
d это первообразный корень по модулю φ(n) e·d mod φ(n) ≡1 .
d находится с помощью расширенного алгоритма Евклида (http://ru.wikipedia.org/wiki/Расширенный_алгоритм_Евклида)
как коэффициент уравнения φ(n)·s+e·d=1
Расширенный алгоритм Евклида для нахождения НОД и коэффициентов s и d.
r1 = φ(n) − q0e
r2 = e − q1 r1 = e − q1 (φ(n) − q0 e) = −q1 φ(n) + (1 + q1 q0 )e
r3 = r1 − q2 r2 = φ(n) − q0 e − q2 (−q1 φ(n) + (1 + q1 q0 )e) = (1 + q1 q2 )φ(n) − (q0 + q2 (1 + q1 q0 ))e..........................................................................................................................
ri - остатки от деления.
В случае если r2=1 (найден НОД), получимd=(1 + q1 q0 )
В случае если r3=1 (коэффициент со знаком "-"), получим
d=− (q0 + q2 (1 + q1 q0 )+φ(n)
- число φ(n) - уничтожается.
- пара e, n публикуется в качестве открытого ключа RSA
- пара d, n играет роль секретного ключа RSA
Предположим, сторона B хочет послать стороне A сообщение M.
Алгоритм шифрования:
- взять открытый ключ (e,n) стороны A
- взять открытый текст M
- зашифровать сообщение PA(M)=Memod n .
Алгоритм расшифровки:
- принять зашифрованное сообщение С=PA(M)
- применить свой секретный ключ (d,n) для расшифровки сообщения SA(C)=Cdmod n .
Рис. Шифрование и расшифровка RSA
Пример:
- генерируем два числа p и q
p=61 и q=53. - вычислим n=pq
n = 61 · 53 = 3233. - вычислим φ(n)
φ(3233)=φ(n)=(p-1)(q-1)=(61-1)(53-1)=3120. - выберем число из 1<e<3120
e=17. - вычислим d
r1 = φ(n) − q0e= 3120-183*17=9
r2 = e − q1 r1 = e − q1 (φ(n) − q0 e) = −q1 φ(n) + (1 + q1 q0 )e=17-9*1=-3120*1+(183*1+1)*17=8
r3 = r1 − q2 r2 = φ(n) − q0 e − q2 (−q1 φ(n) + (1 + q1 q0 )e) = (1 + q1 q2 )φ(n) − (q0 + q2 (1 + q1 q0 ))e=9-8*1=3120*(1+1*1)-(183+1*(1+1*183))*17=3120*2-367*17=1
коэффициенты уравнения φ(n)·s+e·d=1
s=2 и d=-357
d = -367+φ(n)=-367+3120= 2753 - открытый ключ (n=3233, e=17)
- закрытый ключ (n=3233, d=2753)
- зашифруем текст m=65
- зашифруем C=PA(M)=Memod n=6517mod 3233=2790 .
- расшифруем SA(C)=Cdmod n=27902753mod 3233=65