Вы находитесь на странице: 1из 16

Алгоритми асиметричної криптографії

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

Название криптосистемы происходит от фамилий ее авторов (R.


Rivest, A. Shamir, L. Adleman), аспирантов Массачусетского
Технологического Института, которые предложили ее в 1977 году,
вскоре после открытия асимметричной криптографии У.Диффи и
М.Хэллманом (1976 г.). Позднее (1979) авторы запатентовали
криптосистему и создали фирму RSA.
Безопасность криптосистемы основана на сложности факторизации
больших чисел (более 200 десятичных знаков). Все операции
производятся в кольце целых чисел Z/NZ (сложение и умножение чисел
по модулю составного числа N), причем

N = PQ, P, Q > 10100.


(1)

где P, Q – простые числа. Числа P, Q явдяются секретами одного из


пользователей криптосистемы. Функция шифрования Ez(X) RSA (E -
encryption) с потайным ходом z

Y = Ez(X) = Xe mod N,
(2)

где e – секретный ключ шифрования (число е < (N)), X < N – открытый


текст (число). Показатели степени в (2) должны быть взаимно просты с
(N). Число всех чисел в последовательности 1,2,3,…, N-1, взаимно
простых с N, определяется функцией Эйлера

(N) = (P-1)(Q-1).
(3)

Ключ шифрования е должен отвечать условиям:

e < (N), НОД (e, (N)) = 1.


(4)

Согласно известной теоремы Эйлера (обобщение малой теоремы


Ферма), для всех Х, взаимно простых с N

X(N) = 1 mod N, НОД (Х, N) = 1.


(5)
Выберем число d так, чтобы

ed = 1 mod (N).
(6)

Тогда функция расшифрования Dz(Y) = X (D - decryption) может быть


построена как

Dz(Y) = Yd mod N = Xed mod N = X mod N.


(7)

Требования к ключу расшифрования d совпадают с (4)

d < (N), НОД (d, (N)) = 1.

Вся секретная (конфиденциальная) информация пользователя


содержится в секретном ключе

Z = (P, Q, e),

тогда как для расшифрования используется информация открытого ключа

W = (N, d).

Зная открытый ключ пользователя, практически невозможно (за приемлемое


время или приемлемую стоимость) рассчитать секретный ключ. На этой
практической необратимости односторонней функции экспоненцирования
основана безопасность (криптостойкость) криптосистемы RSA. На практике
ключ е выбирают достаточно большим, а d – сравнительно небольшим,
чтобы повысить скорость расшифрования.
В задаче направленного шифрования пользователь А шифрует текст
открытым ключом пользователя В, который своим секретным ключом его
расшифровывает. Наоборот, при заверении сообщения цифровой подпиью,
пользователь А зашифровывает подпись своим секретным ключом, при этом
все пользователи системы с помощью открытого ключа А могут прочитать
подпись.
Следует заметить, что расчет пары ключей согласно (5) приводит к
неоднозначному решению, т.е. для каждого ключа е можно найти несколько
различных значений d, что снижает безопасность системы. Для устранения
неоднозначности следует пользоваться вместо функции Эйлера (N)
обобщенной функцией Эйлера
L(N) = (N)/НОД (P-1,Q-1), (8)

которая дает более сильное по сравнению с (5) свойство

XL(N) = 1 mod N. (9)

Другими словами, обобщенная функция Эйлера определяет максимальный


мультипликативный порядок элемента Х мультипликативной группы кольца
ZN.

Вместо (8) часто полезным является более общее определение


обобщенной функции Эйлера. Пусть известна факторизация

n = p1m1p2m2….

Тогда
L(n) = НОК((p1m1 ), (p2m2),…). (10)

Однозначная пара ключей теперь может быть выбрана с помощью


равенства

ed = 1 mod L(N), e, d < L(N) (11)

вместо (6) и (4). Проиллюстрируем сказанное примерами.

Пример 1. Пусть Р = 5, Q = 11. Тогда cогласно (1), (3), (8)

N = 55, (N) = 40, L(N) = 20.

Ключевое пространство (числа, взаимно простые с L(N)) содержит элементы

е, d ∊ {3, 7, 9, 11, 13, 17, 19}

Примем d = 3, при этом

3е = 1 mod 20 = 20k +1, k = 1, 2 , 3, ….

Отсюда в пределах области определения (4) получим два решения е1 = 7 и е2


= 27, каждое из которых может быть принято в качестве пары для ключа d =
3. Например, зашифруем Х= 2 открытым ключом

Y = 23 mod 55 = 8.
Результаты расшифрования ключами е1 и е2 :

X = Ye1 = 87 mod 55 = 2,
X = Ye2 = 827 mod 55 = 87 mod 55 = 2.
В последнем случае использовалось равенство (9): 820 mod 55 = 1. В его
справедливости можно убедиться прямым вычислением: 230 mod 55 = 34, 342
mod 55 = 1. Для однозначного определения ключевой пары область
значений е и d следует сжать до L(N) = 20 (условие (10)), тогда (e,d) = (7,3).
Согласно (5) значение Х должно быть взаимно простым с N. При
невыполнении этого условия равенства (5) не выполняются. Например, при Х
=5 имеем
520 mod 55 = 45.

Пример 2. Пусть Р = 5, Q = 17, e = 21. Имеем

N = 85, (N) = 64, НОД (Р-1, Q-1) = 4, L(N) = 16.

Число различных ключей расшифрования равно НОД (Р-1, Q-1) = 4 и


определяется из

21d = kL(N) +1, k = 1, 2, 3, …


21d1 = 21*13 = 17*16 +1 = 273  d1 = 13,
21d2 = 21*29 = 38*16 +1 = 609  d2 = 29,
21d3 = 21*45 = 59*16 +1 = 945  d3 = 45,
21d4 = 21*61 = 80*16 +1 = 12881  d4 = 61.

Легко видеть, что dk+1 = dk + L(N), k = 1, 2, 3. В данном случае все ключи


определены в области значений d < (N) = 64. Примем е = 11, тогда
однозначная пара в области е, d < 16 определяется из 11*d = 2*16+1 = 33, d
= 3.Таким образом, однозначная пара ключей в нашем примере (e,d) = (11,3).

При больших значениях Р и Q следует использовать математические


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

Пример 3. Пусть Р = 13, Q =23. Имеем


N = 299, (N) = 264, L(N) = 132.
Здесь L(N) = 132 можно получить как с помощью формулы (8), так и (10).
Факторизация L(N) = 132 = 22311 Порядок мультипликативной группы
ключей е, d определяется как функция Эйлера

(L(N))=( 22)(3)(11) = 40 =235.


Итак, в мультипликативную группу ключей G40* входят все нечетные не
кратные 5 числа, не превышающие 131. Максимальный порядок элементов
этой группы определяется функцией L( L(N)) и равен согласно (10)

L(L(N))=НОК(( 22),(3),(11)) = НОК(2,2,10) =10.

Отсюда следует, что для любого ключа e G40* можно вычислить

d = e-1 = e9mod132.

Ниже приведен алгоритм вычисления ключевых пар в MATHCAD для нашего


примера.

ЗНАХОДЖЕННЯ КЛЮЧОВИХ ПАР В MATHCAD

Описання алгоритму знаходження ключових пар в Mathcad


1. Обчислюємо узагальнену функцію Ейлера L(N).
2. Створюємо програм-функцію R – вектору чисел 1..L(N)-1, які взаємно-прості з L(N). Це є
вектор значень усіх можливих ключів e і d. Для кожного значення е треба знайти
обернений за модулем L(N елемент e-1 =d. Для цього послідовно нарощуємо степені всіх
елементів R і отримуємо матрицю Gi,t.Значення t має бути достатнім, щоб правий стовпчик
був «всі одиниці»(в нашому прикладі t=10).
3. Елемент рядку матриці Gi,t, який є попереднім до 1, є оберненим до першого.

Таким чином, з рядків матриці G отримуємо ключові пари


(5,53), (7,19), (13,61), (17,101),……

Безопасность RSA

Стойкость криптосистемы RSA основана на проблеме факторизации


(разложения на множители) большого числа N = PQ. Если эта задача решена,
то аналитик определяет

(N) = (P-1)(Q-1). L(N) = (N)/НОД (P-1,Q-1),

после чего задача определения секретного ключа е из открытого d сводится к


вычислению обратного элемента в кольце Z/LZ

e = d-1 mod L(N).

Наибольшее распространение получили методы факторизации Полларда,


Ленстры и квадратичного решета. Число групповых операций для
факторизации N методом Ленстры оценивается как

O(N) = exp{2 (lnN)1/3 ln(lnN)2/3}.

Пример 3. Пусть N  2512,

 (ln N)1/3 = 3551/3 =7.08, (ln(ln N))2/3 = 5.92/3 =3.255 O(N) =


20
exp{2*7.08*3,255} 10
Для выполнения такого числа операций на самом быстром
суперкомпьютере производительностью 1015 flops потребуется

1020/1015*3600  30час.

Цифровая подпись по схеме RSA


Схема шифрования Эль Гамаля
Схема Эль Гамаля, предложенная в 1985 г., может быть использована как для
шифрования, так и для цифровых подписей. Безопасность схемы Эль Гамаля
обусловлена сложностью вычисления дискретных логарифмов в конечном
поле.
Для того чтобы генерировать пару ключей (открытый ключ - секретный
ключ), сначала выбирают некоторое большое простое число Р и большое
целое число g, причем g < Р. Числа Р и g могут быть распространены среди
группы пользователей.
Затем выбирают случайное целое число X, причем Х<Р. Число Х является
секретным ключом и должно храниться в секрете.
Далее вычисляют Y = gX mod P. Число Y является открытым ключом.
Напрямкове шифрування за схемою Ель Гамаля
Для того чтобы зашифровать сообщение М<P, выбирают случайное целое
число К, 1<К<Р -1, такое, что числа К и (Р-1) являются взаимно простыми.
Затем c помощью генератора g МГ поля Fp вычисляют числа
R=gKmodP,
S = YK М mod P.
Пара чисел (R,S) является шифртекстом. Заметим, что длина шифртекста
вдвое больше длины исходного открытого текста М.
Для того чтобы расшифровать шифртекст (R,S), вычисляют
М = SR-Xmod Р. (*)
Поскольку
S/RXYKM/RX gKXM/gKX M(mod P),
то соотношение (*) справедливо.
Пример. Выберем Р = 11, g = 2, секретный ключ X = 8. Вычисляем
Y = gXmodP = 28 mod 11 =256 mod 11=3.
Итак, открытый ключ Y = 3.
Пусть сообщение М = 5. Выберем некоторое случайное число К = 9.
Убедимся, что НОД (К,Р-1)=1. Действительно, НОД (9,10)=1. Вычисляем
пару чисел R и S:
R = GXmodP = 29 mod 11 =512 mod 11=6.
S = YXMmodP = 39 mod 11 =196835 mod 11=9.
Получим шифртекст (а, b) = (6, 9).
Выполним расшифрование этого шифртекста. Вычисляем сообщение М,
используя секретный ключ X:
M=S/RXmodP=9/б8mod11.
Выражение М = 9/б8mod11 можно представить в виде
68М  9 mod 11
или
1679616  M  9 mod 11.
Решая данное сравнение, находим М = 5.

Цифровий підпис за схемою Ель Гамаля


А. Формування ЦП
1. Обчислення хеш-коду повідомлення h = H(M) < P -1.
2. k < P – 1.
3. r = gk modP.
4. s = k-1 (h + XAr)nod(P - 1)
5. DS = (r, s).
B. Перевірка ЦП
1. Обчислення хеш-коду повідомлення h’ = H(M’) < P -1.
2. Обчислення u = s-1h mod(P - 1), v = s-1r mod(P - 1).
3. Обчислення r`= gu (YA)v
4. Порівняння r` = r ? Якщо рівність виконується підпис вірний. Інакше –
невірний.
В реальных схемах шифрования необходимо использовать в качестве модуля
Р большое целое простое число, имеющее в двоичном представлении длину
512... 1024 бит.
При программной реализации схемы Эль Гамаля скорость ее работы (на
SPARC-II) в режимах шифрования и рас-шифрования при 160-битовом
показателе степени для различных длин модуля Р определяется значениями,
приведенными в табл.2.
Таблица 2 Скорости работы схемы Эль Гамаля

Режим работы Длина модуля, бит

  512 768 1024

Шифрование 0,33с 0,80с 1,09с

Расшифрование 0,24с 0,58с 0,77с

Важливо відмітити, що при практичному використанні даної


криптосистеми для зашифрування/розшифрування повідомлень прості числа
P та Q являють собою унікальну (таємну) інформацію. Виключено повторне
використання даної пари значень P та Q абонентами телекомунікаційної
системи , так як в інакшому випадку , як правило , вдається відновити
відкриті повідомлення по відповідним шифртекстам без знання таємних
ключей абонентів.
Для обміну шифрованою інформацією з абонентом А абонент В обирає
пару (p, q) різних простих чисел, котрі зберігає в тайні. Тим самим, абонент В
задає (фіксує) криптосистему RSA p,q. Перемножуючи p та q, він знаходить
число n. За цим обирається число e(Z/(n))*, по якому шляхом рішення
зрівняння (2.8) визначається число d. Числа n та e складають відкритий
ключ , а число d – таємний ключ абонента В. Зашифрування відкритого
тексту xZn здійснюється абонентом А по формулі y = f(x, e) = xe
(mod n). Отримавши від А шифрований текст yZn, абонент В розшифровує
його на ключі d, вираховуючи x = g(y, d) = yd (mod n).
Припустимо, що пара чисел (p, q) використовується двічи для
зашифрування того ж самого відкритого повідомлення x на відкритих
ключах e1 та e2 відповідно. В цьому випадку супротивнику відомі n = pq, e1, e2
та шифровані тексти y1 = xe1 (mod n), y2 = xe2 (mod n). Якщо найбільший
загальний дільник чисел у1 (або у2) та n дорівнює 1, а e1 та e2 – взаємно прості
числа (що, як правило, має місце на практиці), то відкритий текст x може
бути легко відновлений наступним чином. З використанням розширеного
алгоритму Евкліда, неважко знайти натуральні r та s, що задовольняють
рівнянню re1  se2 = 1 (існування таких r та s рівнозначно взаємній простоті
чисел e1 та e2). Далі, в силу обертаємості у2 по модулю n існує рішення zZn
зрівняння zy2  1(mod n), яке також може бути отримано за допомогою
розширеного алгоритму Евкліда.

Тоді

(y1)r zs  ( xe1 )r( y2)s  ( xe1 )r( xe2 )s  x (mod n).

Існують і інші, більш тонкі методи дешифрування повідомлень,


отриманих за допомогою загальних для групи абонентів параметрів p та q
криптосистеми RSA. Таким чином, багаторазове використання тієї ж самої
пари (p, q) або (що те ж саме) одного й того ж значення n може істотно
знизити стійкість розглядаємої криптосистеми.
В загальному випадку стійкість криптосистеми p,q визначається
обчислювальною складністю задачі знахождення відкритого повідомлення
xZn по відомому шифр-тексту

y = xe (mod n) (2.13)

і відкритому ключу (n, e). Легко знайти рішення x зрівняння (2.13), як що


відомо розкладання числа n на прості множники, тобто відомі числа p та
q, добутком яких є n. Дійсно, знаючи p та q, неважко обчислити (n)=(p–
1)(q– 1), за цим знайти за допомогою розширеного алгоритму Евкліда
рішення d зрівняння (2.8) та, нарешті, визначити x по формулі x = yd
(mod n). Вказані обчислювання можуть бути реалізовані достатньо швидко
навіть в тому випадку, коли p та q є числами, що записуються декількома ста
десятичними знаками. Відомо, однак, що розкладання на множники
(факторизація) великих (порядку 10200) цілих чисел n є обчислювально
складною задачею, практично реалізуємі алгоритми рішення якої в
загальному випадку не знайдені.
Отже, факторизація числа n дозволяє легко знайти таємний ключ d та,
як наслідок, дешифрувати любе відкрите повідомлення. Таким чином,
практична стійкість криптосистеми RSA залежить від трудоємкості задачі
факторизації – разложення двоскладового модуля (добутку двох різних
простих чисел) на множники (число n називають інколи модулем або RSA-
модулем криптосистеми p,q).
Чим більше значення n, тим вище трудоємкість факторизації. Відомі
алгоритми факторизації можемо розділити на два типи: алгоритми, час
роботи яких залежить від розрядності простих дільників p та q, та алгоритми,
трудоємкість яких визначається лише разрядністю факторизуємого числа n.
Попередні алгоритми, що виконують пошук найменшого простого дільника
числа n, відносяться до першого типу. Час роботи сучасних алгоритмів не
залежить від розрядності простих дільників RSA-модуля.
Самим швидким алгоритмом факторизації першого типу рахується
метод еліптичних кривих, розроблений Х. Ленстрой в 1987 році.
Асимптотична оцінка часової складності алгоритму Ленстри (що отримана за
допомогою використання евристичних міркувань ) має вигляд
T(p)= exp{C1(ln p ln ln p)1/2}, де C1  2 при великих p. (Значення T(p) дорівнює
кількості операцій множення по модулю n, що виконуються в процесі
знаходження за допомогою даного алгоритму найменшого простого дільника
p числа n). Основним практичним недоліком алгоритмів факторизації
першого типу є обчислювальна трудоємкість базових операцій. На
сьогоднішній день найбільше число, що факторизовано методом еліптичних
кривих, містить 145 двійкових розрядів .
Алгоритми другого типу набагато швидше. В наш час найбільш
ефективним способом розкладання на множники великих цілих чисел є
метод решета числового поля (узагальненого числового решета),
запропонований Дж. Поллардом в 1988 році. При використанні даного
методу прогнозуємий порядок часової складності факторизації числа
n складає exp{C2(ln n)1/3(ln ln n)2/3} операцій множення по модулю n, де

4 .
при великих n C2  3
9 Відомо, що порогом, після якого “добре настроєний”
метод решета числового поля починає перевищувати по трудоємкості раніш
відомі алгоритми факторизації, є число n  10112. В лютому 1999 року цим
методом був факторизован RSA-модуль, що містить 140 десятичних розрядів.
Відмітимо, що можливість успішної атаки на криптосистему RSA з
512-бітним модулем ( 160 десяткових розрядів) можлива вже сьогодні. В
наш час мінімальна довжина модуля, що рекомендується, n – 768 біт
( 230 десяткових розрядів).
На практиці при виборі RSA-модуля необхідно виходити з реальних
оцінок росту працездатності комп’ютерів та досягнень в області
обчислювальної теорії чисел. При цьому неможливо повністю виключити
можливість криптоаналітичних атак на основі інших, відмінних від
факторизації методів. Відмітимо, що в наш час не доведено, що задача
рішення зрівняння (2.3) (находження відкритого тексту x по шифр-тексту y та
відкритому ключу (n, e)) рівнозначна (як обчислювальна складність) задачі
факторизації числа n . Головна мета при виборі модуля RSA – одночасне
забезпечення криптографічної стійкості та обчислювальної ефективності
процесу зашифрування/розшифрування. (Очевидно, що трудоємкість
операції возведення до степеню по модулю n – основної операції при
шифруванні – зростає з збільшенням розрядності n). Необхідно відмітити, що
підвищення працездатності комп’ютерів добре вплинуло на успіхах в області
факторизації, але стійкість криптосистеми RSA при цьому також виросла.
Пояснюється це різницею в трудоємності процесів факторизації та
шифрування: в наслідок чергового стрибка працездатності число, що
піддається факторизації, збільшується на два розряди, тоді як RSA-модуль, не
гублячи обчислювальної ефективності – на дванадцять розрядів .
В теперішній час практична стійкість криптосистеми RSA визначається
обчислювальною трудоємкістю кращих з відомих алгоритмів факторизації
модуля n = pq. Ця трудоємкість істотно залежить від вибору конкретних
значень простих чисел p та q. Для побудови криптосистеми p,q з
допустимою стійкістю необхідно обирати прості числа спеціального виду та
перевіряти для них ряд умов. Так, p та q не повинні виявитись “випадково”
близькими простими. Друга умова полягає в тому, що в числа p – 1 повинен
існувати як найменше один дуже великий простий співмножник f, при цьому
число f – 1 також повинно мати великий простий співмножник. Аналогічні
обмеження накладаються й на q. Вказана умова гарантує, що рішення
зрівняння (2.13) не може бути знайдено методом ітерацій ; якщо p – 1 не
містить великих простих співмножників, то n легко факторизується за
допомогою алгоритму, розробленного в 1974 році Дж. Поллардом.
Один з можливих підходів до дешифрування RSA полягає в
знаходженні (“вгадуванні”) числа (n) = (p – 1)(q – 1) (без факторизації n) та
подальшому визначенні таємного ключа d з співвідношення (2.8). Однак,
неважко показати, що цей підхід не простіше, ніж спроба розкласти n на
множники: якщо відомо (n), то числа p та q також легко можуть бути
знайдені .
На основі перерахованих вище та інших відомих в теперішній час атак
на криптосистему RSA можливо зформулювати наступні основні обмеження
при її використанні :
– значення відкритого ключа e та відповідаючому йому таємного
ключа d, дозволяє супротивнику факторизувати n;
– значення одної пари чисел (e, d), задовільняючих зрівняння
(2.8), дозволяє супротивнику знайти по довільному відкритому ключу
відповідний таємний ключ, не розкладаючи n на множники;
– виключено повторне використання одного й того ж значення n
для зашифрування/розшифрування повідомлень;
– числа p та q повинні вибиратися з дотриманням ряду умов;
– у випадку використання короткого відкритого ключа e
(наприклад, e = 3) відкриті повідомлення повинні бути доповнені
“випадковими” значеннями;
– таємний ключ d повинен бути великих.
Відмітимо, що, як правило, слідує віддавати перевагу адекватній
стійкості криптосистеми задаючи шкоди її практичній (обчислювальній)
ефективності.
2.4. Криптосистема Ель-Гамаля відкритого шифрування.

Розглянемо несиметричну криптосистему, запропоновану в 1985 році


Ель-Гамалем та основану на схемі відкритого розподілу ключей Діффі-
Хеллмана .
Зафіксуємо просте число p та примітивний елемент a поля
GF(p) = {0, 1, …, p – 1}. Припустимо в рівнянні (2.3)
X = GF(p), K = U = L = GF(p)*, Y = GF(p)*GF(p),

(k) = ak, f(x, u, l) = (al, ulx), g((y1, y2), k) = y2 ( y1)k , (2.14)

де kK, xX, lL, (y1, y2) = yY (операції множення та возведення в


степінь у виразах (2.14) виконуються по модулю p). Неважко бачити, що
def
алгебраїчна система   (X, K, Y, U, L, , f, g) задовольняє умовам а) та б)
сформульованого вище визначення несиметричної криптосистеми. Дійсно,
умова а) (сюр’єктивність відображення ) має місце в силу примітивності
елементу а поля GF(p), а справедливість умови б) виходить з співвідношення
(2.14) та наступних рівенств: g(f(x, (k), l), k) = g((al, ak lx), k) = aklx (al)k = x.
Назвемо криптосистему  системою відкритого шифрування (або
криптосистемою) Ель-Гамаля.
По міркуванням, викладеним вище, стійкість даної криптосистеми
залежить від обчислювальної складності задачі знаходження невідомого
таємного ключа kGF(p)* по відкритому ключу u = (k), тобто  від
складності рішення рівняння (2.2). Таким чином, практична стійкість
криптосистеми Ель-Гамаля (як й системи відкритого розподілу ключей
Діффі-Хеллмана) основується на трудоємкості обчислення дискретного
логарифму в полі GF(p).
Особливістю криптосистеми  є використання при зашифруванні
допоміжного параметру lL = GF(p)*. На практиці реалізуються “випадкова”
генерація чисел l великого розміру та їх знищення після вироблення
шифрованих повідомлень. Повторне використання даного значення l не
допускається, так як по відомим шифр-текстам y = f(x, (k), l) та y = f(x, (k),
l), отриманим шляхом зашифрування відкритих повідомлень x, x  X при
однакових значеннях k та l, неважко відновити невідомий таємний ключ k .
При програмній реалізації алгоритму зашифрування відкритих повідомлень
криптосистеми Ель-Гамаля забезпечує така схема формування шифр-тексту,
при якій число l зберігається лише в регістрах мікропроцесора та оперативній
пам’яті ЕВМ. Знищення l здійснюється шляхом запису нового значення
цього параметру в відповідні ячейки пам’яті.