Открытое распределение ключей

 

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

Первое практическое применение криптосистем с открытым ключом – организация обмена ключами между удаленными пользователями через открытые каналы связи.

Рассмотрим практическую реализацию (протокол обмена ключами).

Необходима определенная подготовительная работа:

· получить p – большое простое число;

· получить полное разложение числа (p –1) на множители;

· вычислить первообразный корень r по модулю p (r mod p)

 
 

Всякое составное число можно разложить на простые множители (множители – простые числа или их положительные целые степени, возможно нулевые).

где pi– простые числа; bi – степени простых чисел.

Первообразный корень – любое число из интервала , для которого выполняется условие: . Если выполняется это условие, то любое целое число с можно представить в виде , где х – некоторое положительное целое число из интервала . Пару чисел (p,r) используют в качестве общих данных (открытого ключа).

Протокол обмена ключами Диффи–Хеллмана

1. А генерирует элемент , вычисляет и отправляет результат В.

2. Вгенерирует элемент , вычисляет и отправляет результатА.

3. А вычисляет значение .

4. В вычисляет значение .

Замечание: после получения значения и должны быть уничтожены.

В результате выполнения протокола каждый из абонентов А и Вполучает общий ключ , который может быть использован в симметричных системах шифрования, причем противник, которому известен открытый ключ (p,r) и который перехватил числа и не сможет вычислить значение .

Пример Пусть p = 43 (простое число), r = 3 – первообразный корень по ; пара чисел (43,3) – открытый ключ для выработки секретного ключа .

 

Пусть в результате выполнения протокола А генерирует элемент , и вычисляет .

Аналогичные действия В дают следующий результат: элемент , и вычисление . После выполнения пунктов 3, 4 протокола результат следующий: .

 

Рекомендации для практической реализации

1 Простое число p необходимо выбирать так, чтобы число p -1 имело достаточно большой сомножитель pmax >2160 .

2 r – не обязательно должен быть первообразным корнем; достаточно следующего:

r ≠ 1; и .

 

 

Криптосистема RSA

RSA –система ассиметричного шифрования, в которой для кодирования сообщения используется один ключ, а для расшифровки другой. Названа в честь математиков-криптологов Рона Ривеста (Rivest), Ади Шамира (Shamir) и Лена Адельмана (Adelman) из Масачуссетского Технологического Института, разработавших алгоритм в 1977 году.

Система RSA используется для защиты программного обеспечения и в схемах цифровой подписи. Также она используется в открытой системе шифрования PGP. Из-за низкой скорости шифрования (около 30 кбит/с при 512 битном ключе на процессоре 2ГГц), сообщения обычно шифруют с помощью более производительных симметричных алгоритмов со случайным ключом, а с помощью RSA шифруют только этот ключ, который в зашифрованном виде помещают в начало шифротекста.

В связи со схемой RSA возникает ряд алгоритмических задач.

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

2. Для взламывания ключа в RSA нужно уметь раскладывать целое число на множители (или, что практически то же самое, уметь вычислять функцию Эйлера). Взлом ключа может интересовать только преступников, но, с другой стороны, те, кто пытаются защитить информацию, должны быть уверены, что задача разложения на множители достаточно сложна.

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

1. Выбрать два случайных простых числа pи q , причем |p|≈ |q| (т.е. числа примерно одинаковой длины).

2. Вычислить N = p q.

3. Вычислить функцию Эйлера φ(N)= (p-1) (q-1) (см. примечание).

4. Выбрать случайное целое число e < φ (N)взаимно простое с φ(N)

т.е. НОД(e , Ф (N)) = 1 и найти число d обратное e по модулю φ (N)(e-1 = d)

e d≡ 1 mod (φ (N)) = 1 + φ (N) ∙n(n – любое целое число).

5. В качестве параметров открытого ключа сообщить пару (e , N) всем, кто будет передавать ему зашифрованную информацию; секретный ключ dне разглашать и надежно хранить; числа p, q , φ (N)– уничтожить.

ПримечаниеФункция Эйлера φ(N)равна количеству целых чисел, взаимно простых с N. Вычислить эту функцию в общем виде для любого N можно через его разложение на простые сомножители. Пусть N= p1b1p2b2p3b3 …pnbn , тогда функция Эйлера вычисляется по формуле φ(N) = N (1- 1/ p1)(1- 1/ p2) (1- 1/ p3) …(1- 1/ pn) .

Шифрование

В хочет зашифровать сообщение m и переслать его А по открытому каналу причем (m < N); для получения шифротекста В выполняет следующее преобразование:

m e (mod N) → c,

где c – шифротекст, который передается А по открытому каналу.

Замечание: Если В утратил исходное сообщениеm, то по c он не сможет восстановить m.

Расшифрование

Для восстановления исходного сообщения m А с полученным шифротекстом cвыполняет следующее преобразование:

C d (mod N) → m.

Математически убедимся в этом:

c d (mod N)= m e d (mod N)= m(1 + φ (N)n) (mod N)= m mφ (N)n(mod N) =

= m (mφ (N) (mod N)) n = m.

Последнее преобразование выполнено в соответствии с теоремой Эйлера.

Теорема Если НОД ( m,N) = 1, то m φ (N)≡ 1(mod N ). (это в нашем случае всегда так за исключением двух совпадений m = p и m = q ).Предполагается, что вероятность таких совпадений ничтожно мала при больших p и q в реальных криптосистемах.

Пример(учебный)

ПустьАвыбрал N = p ∙q = 7х13 = 91 и e= 5; тогда φ(N)∙= 6х12 = 72 . Открытый ключ (91,5) . Для вычисления секретного ключа dнеобходимо решить уравнение

5 d≡ 1(mod 72) ;или . 72 n +5 d =1

Подставляя в это уравнение числа = 0, ± 1, ± 2 и т.д. получим единственное целочисленное решение при n = –2 d = 29 (секретный ключ).

Пусть В решил отправить А сообщение m =3. Используя открытый ключ (91,5) он получил шифротекст 3 5 (mod 91) →61. Шифротекст 61 В передает по открытому каналу А. Для восстановления исходного сообщения А выполняет следующее вычисление:

61 29 (mod 91) →3.