Использование систем с открытым распределением ключей для абонентских сетей
Лабораторная работа 6
Исследование криптографической системы RSA
Цель работы: Ознакомиться с классической криптосистемой с открытым ключом RSA и вариантами ее использования.
Теоретическая часть
Идея криптосистемы RSA
Наиболее широко распространенной системой с открытым ключом является криптосистема RSA (Rivest, Shamir, Adleman). Идея системы состоит в том, что очень сложно разложить произведение двух простых чисел на сомножители, т.е. найти эти сомножители. Сама же идея системы RSA исключительно проста.
Пусть p и q – два случайно выбранных простых числа (каждое примерно по 100 десятичных разрядов). Обозначим: n = pq и j(n) = (p-1)(q-1), где j (n) – функция Эйлера от n. Случайно выбирается большое число d >1, такое, что (d, j(n)) = 1, и вычисляется e,
1 < e < j(n), удовлетворяющее сравнению: ed º 1 mod j(n).
Числа n, e и d называются соответственно модулем, экспонентой зашифрования и экспонентой расшифрования.
Числа n и e образуют открытый ключ, а p,q, j(n) и d секретную лазейку. При этом секретная лазейка включает в себя взаимозависимые величины. Так, если известно p (и, конечно, n и e), то остальные числа лазейки вычисляются просто:
q = n/p; j(n) = (p-1)(q-1); d находится из условия: ed º 1 mod j(n).
Зашифрование обеспечивается возведением числового фрагмента текста S в степень e по модулю n. Расшифрование достигается возведением результата предыдущего шага в степень d.
При зашифровании получаем Se º C mod n. Здесь C – зашифрованный фрагмент текста. При расшифровании
Cd = Sed = S1+j(n)k = Sj(n)k S º S mod n. (*)
Справедливость (*) легко видна, так как из сравнения ed º 1 mod j(n) следует, что
ed = 1 + j(n)k, где k – некоторое целое.
Пример. Пусть p = 11, q = 13. Тогда n = 143, j(n) = 120.
Выберем d из условия: ( d, j(n)) = 1, например, d = 37, тогда из сравнения: ed º 1 mod j(n) находим e = 13. Действительно, 13*37 = 481 º 1 mod 120.
Для зашифрования возьмем фрагмент текста, который закодирован, например, числом S = 42. 4213 º 3 mod 143, т.е. шифр фрагмента C = 3.
Для расшифрования возведем число 3 в степень 37: 337 º 42 mod 143. Таким образом, легальный получатель вычисляет значение исходного кода фрагмента.
Использование систем с открытым распределением ключей для абонентских сетей
Рассмотрим несколько близких задач, в которых абоненты обмениваются секретной информацией по открытому каналу.
1). Пусть несколько абонентов A, B, C, договорились об обмене информацией. Они могут выбрать некоторое общее простое число p, такое, что p-1 раскладывается на простые сомножители в первой степени. Число вида N = p1p2p3…pk называется эвклидовым числом. Каждый из участников выбирает два числа меньших и взаимно простых с p-1 так, чтобы:
a1a2 º b1b2 º c1c2 º 1 mod (p-1).
Пусть абонент A хочет передать сообщение S абоненту B. Он кодирует свое сообщение возведением в степень a1: Sa1 º S1 mod p и передает его B. Тот в свою очередь кодирует полученное сообщение возведением в степень b1: S1b1 º S2 mod p и возвращает его A. A возводит его в степень a2 и передает его B: S2a2 º S3 mod p. B возводит его в степень b2 и читает сообщение. Справедливость результата следует из сравнения: a1b1a2b2 º 1 mod (p – 1).
Пример. Пусть абоненты A, B и C выбрали число p = 103. Это число простое, причем 103-1 = 102 – эвклидово число, так как представляется в виде произведения простых чисел в первых степенях: 102 = 2*3*17. Каждый из участников выбирает пару секретных ключей:
A: a1 = 25, a2 = 49,
B: b1 = 19 , b2 = 43,
C: c1 = 35, c2 = 35.
Пусть теперь A посылает к B сообщение S = 67. Он возводит его в степень 25 и находит остаток по модулю 103: 6725 º 86 mod 103. B возводит его в степень b2 = 19 и отправляет результат к A: 8619 º 96 mod 103. A возводит полученное сообщение в степень 49 и передает его B: 9649 º 21 mod 103. B получив сообщение, возводит его в степень 43 и читает исходный текст: 2143 º 67 mod 103. Таким образом, S = 67.
Открытым ключом в этой системе является модуль p. Недостатком такой системы является большое число передач от одного абонента к другому.
2). Пусть имеется абонентская сеть и требуется обеспечить связь между любой парой пользователей. Если из одного центра заранее передать открытые ключи g и p каждому пользователю, то они могут выработать общий ключ следующим образом. Пусть абонент A сам придумал ключ k1, а абонент B ключ k2 (это индивидуальные секретные ключи абонентов). A посылает к B сообщение gk1 mod p, а B посылает к A сообщение gk2 mod p. B возводит полученное сообщение в степень k2, а А в степень k1. В результате они выработают одинаковый общий ключ: gk1k2 = gk2k1 º K mod p, после чего возможен обмен информацией по открытому каналу с использованием любой классической (симметричной) криптосистемы.
Банки и клиенты
Рассмотрим задачу, в которой клиенты банка v1,v2,…vk передают шифрованное распоряжение ответственному работнику банка B (банкиру). При этом кроме конфиденциальности должна обеспечиваться узнаваемость клиента, чтобы по полученному сообщению банкир B сумел идентифицировать автора сообщения и выполнить именно его распоряжение.
Банкир B выбирает некоторое число N = PQ, где P и Q – большие простые числа. Каждый из клиентов vi (i = 1,2,3,…,k) также выбирают свои значения ni = piqi, причем желательно, чтобы N > ni. Затем как банкир, так и клиенты находят значения j (N) – банкир и j (ni) – все клиенты.
После чего каждый выбирает свой открытый ключ D - ,банкир и di – клиенты из условий:
0 < D < j (N) , ( D, j (N) ) = 1 – банкир и
0 < di < j (ni), (di, j (ni))= 1 – клиенты.
Затем банкир и клиенты находят свои секретные ключи T и ti из сравнений:
DT º 1 mod j (N), 0 < T < j (N) – банкир,
dt º 1 mod j (ni), 0 < t < j (ni) – клиенты.
После этих операций открыто публикуется телефонная книга с открытыми ключами:
B: N, D
vi: ni, di.
Пусть теперь некоторый клиент vi хочет передать распоряжение m банкиру B. Он шифрует его сначала своим секретным ключом (возводя m в степень ti по mod ni, а затем открытым ключом банкира: m1 º mti mod ni, m2 º m1D mod N. Сообщение m2 передается по открытому каналу связи. Банкир, получив сообщение m2 сначала расшифровывает его своим секретным ключом T, а затем открытым ключом di клиенты vi. В результате получает:
m3 º m2T mod N, m4 º m3di mod ni. При этом m4 = m, т.е. банкир B расшифровывает переданное ему распоряжение, при этом заодно и идентифицирует (узнает) клиента. Это похоже на проверку подписи клиента и иногда называется “электронная подпись”. Если клиент из открытой телефонной книги узнает, что банкир выбрал число N < ni, то изменив порядок шифровки получит тот же результат, если банкир также изменит порядок расшифровки.
Пример.Пусть банкир выбрал простые числа P = 23, Q = 11; клиент v: p = 13, q = 7. После чего и банкир и клиент вычисляют сначала функции Эйлера: j(23*11) = 220; j (13*7) = 72, затем выбирают открытые и вычисляют секретные ключи, например: D = 71, T = 31; d = 29, t = 5. Открыто публикуются числа: P*Q = 253, p*q = 91, D = 71, d = 29. Секретным ключом банкира является число T = 31, а секретным ключом клиента t = 5.
Пусть клиент решил дать секретное поручение банкиру в виде числа m = 41. Он шифрует его своим секретным ключом t, а затем открытым ключом банкира D:
415 º 6 mod 91, 671 º 94 mod 253. Это сообщение (число 94) по открытому каналу передается банкиру. Банкир расшифровывает сообщение сначала своим секретным ключом T, а затем открытым ключом клиента d: 94 31 º 6 mod 253, 629 º 41 mod 77. Банкир принимает указание клиента в виде числа 41.
Практическое задание
1. Запустите программу RSA. Введите номер Вашего задания (число от 1 до 30). Выберите первый режим: “Общий ключ для двух пользователей”. Выберите некоторое простое число p и число g – примитивный корень по модулю p. Примитивным корнем g по модулю p называется число, все степени которого g1,g2,…gn-1 различны. Придумайте некоторые произвольные числа k1 и k2 (ключи). На ЭВМ будет выведен протокол, обеспечивающий выработку общего ключа K. Вручную проверьте правильность вычислений.
2. Выберите следующий режим ”Передача шифрованных сообщений”. Возьмите два простых числа p и q, найдите их произведение n= pq и функцию Эйлера j(n). Выберите d из условия (d, j(n)) = 1 и введите в ЭВМ все данные. Посмотрите, какой закрытый ключ будет вычислен ЭВМ. Выберите некоторый символ, ЭВМ переведет его в код ASCII и выведет на экран. Нажмите указание “Зашифровать” и запишите полученное сообщение. Это сообщение будет отправлено к Вашему абоненту. Затем нажмите команду “Расшифровать” и убедитесь, что расшифрование выполнено правильно. При ошибках (Ваших) в выборе простых чисел и вычислении j(n) и d зашифрование будет невозможным. В этом случае проанализируйте свои ошибки.
3. Выберите режим “Сообщение от клиентов банку”. Представив себя банкиром B, выберите простые числа P и Q; затем представив себя клиентами vi , выберите несколько пар простых чисел pi и qi , вычислите и за банкира и за клиентов значения функций Эйлера и все открытые ключи. Введите все данные в ЭВМ. Выберите некоторый символ, введите номер клиента и выбранный символ. ЭВМ переведет символ в код ASCII и выведет на экран. Зашифруйте его и передайте банку. В ответ получите протокол с этапами зашифрования и расшифрования. Проанализируйте этот протокол и запишите, какие действия выполняются им. Если результат положительный, то Вам будет предложено использовать сформированные Вами данные для посимвольной передачи неизвестного Вам сообщения от выбранного Вами клиента банку. Запишите полученное после расшифровки сообщение.
Контрольные вопросы
1. Опишите алгоритм RSA.
2. Опишите алгоритм использования систем с открытым распределением ключей для абонентских сетей.
3. Опишите алгоритм использования систем с открытым распределением ключей для систем банков и клиентов.
Использованные источники
1. Ерош И.Л., Дискретная математика. Математические вопросы криптографии. Учебное пособие. СПбГУАП. 2001г.
2. Ерош И.Л. Дискретная математика. Теория чисел. Учебное пособие. СПбГУАП.2001г.