
Алгоритм rsa
Діффі й Хеллман визначили новий підхід до шифрування, що викликало до життя розробку алгоритмів шифрування, що задовольняють вимогам систем з відкритим ключем. Одним з перших результатів був алгоритм, розроблений в 1977 році Роном Ривестом, Ади Шамиром і Льоном Адлеманом і опублікований в 1978 році. З того часу алгоритм Rivest-Shamir-Adleman (RSA) широко застосовується практично у всіх додатках, що використовують криптографію з відкритим ключем.
Алгоритм заснований на використанні того факту, що задача факторизації (тобто розкладення числа на множники) є важкою, тобто легко перемножити два числа, у той час як не існує поліноміального алгоритму знаходження простих співмножників великого числа.
Алгоритм RSA являє собою блоковий алгоритм шифрування, де зашифровані й незашифровані дані є цілими між 0 і n -1 для деякого n.
Опис алгоритму
Алгоритм RSA використовує вираження з експонентами. Дані шифруються блоками, кожний блок розглядається як число, менше деякого числа n. Шифрування й дешифрування мають такий вигляд для деякого незашифрованого блоку М и зашифрованого блоку С.
С = Ме (mod n)
M = Cd (mod n) = (Me)d (mod n) = Med (mod n)
Як відправник, так і одержувач повинні знати значення n. Відправник знає значення е, одержувач знає значення d. Таким чином, відкритий ключ є KU = {e, n} і закритий ключ є KR = {d, n}. При цьому повинні виконуватися наступні умови:
Можливість знайти значення е, d і n такі, що Med = M mod n для всіх М < n .
Відносна легкість обчислення Ме й Сd для всіх значень М < n.
Неможливість визначити d, знаючи е и n.
Тепер розглянемо сам алгоритм RSA.
Нехай p і q - прості.
n = p · q.
Варто
вибрати e
і d
такі, що е
· d
1
mod Φ (n), де Φ (n)
– функція Ейлера, й у даному випадку:
Φ (n) = (р-1)( q-1)
або e d 1 mod Φ(n)
e і d є взаємнозворотними по множенню по модулі Φ(n). Помітимо, що відповідно до правил модульної арифметики, це вірно тільки в тому випадку, якщо d (і отже, е) є взаємнопростыми з Φ(n). Таким чином, НЗД (Φ(n), d) = 1, де НЗД – найбільший загальний дільник.
Тепер розглянемо всі елементи алгоритму RSA.
p, q - два простих цілих числа |
- відкрито, розраховується. |
n = p · q |
- закрито, розраховується. |
d, НЗД (Φ(n), d) = 1; |
- відкрито, обирано. |
1 < d < Φ(n) |
|
е d 1 mod Φ(n) |
- закриті, обирані. |
Закритий ключ складається з {d, n}, відкритий ключ складається з {e, n}. Припустимо, що користувач А опублікував свій відкритий ключ, і що користувач В хоче послати користувачеві А повідомлення М. Тоді В обчислює З = Ме (mod n) і передає С. При одержанні цього зашифрованого тексту користувач А дешифрує обчисленням М = С d (mod n).
Підсумуємо алгоритм RSA:
Створення ключів
Вибрати прості р и q |
Обчислити n = p · q |
Вибрати d НЗД (Φ(n), d) = 1; 1 < d < Φ(n) |
Обчислити е е = d-1 mod Φ(n) |
Відкритий ключ KU = {e, n} |
Закритий ключ KR = {d, n} |
Шифрування
Незашифрований текст: М < n |
Зашифрований текст: З = М е (mod n) |
Дешифрування
Зашифрований текст: З |
Незашифрований текст: М = Сd (mod n) |
Розглянемо конкретний приклад:
Вибрати два простих числа: р = 7, q = 17. |
Обчислити n = p · q = 7 · 17 = 119. |
Обчислити Φ(n) = (p - 1) · (q - 1) = 96. |
Вибрати е так, щоб е було взаємопростим з Φ(n) = 96 і менше, ніж Φ(n): е = 5. |
Визначити d так, щоб d · e 1 mod 96 и d < 96. |
d = 77, тому що 77 · 5 = 385 = 4 · 96 + 1. |
Результуючі ключі: відкритий KU = {5, 119} і закритий KR = {77, 119}. |
Наприклад, потрібно зашифрувати повідомлення М = 19. |
195 = 66 (mod 119); С = 66. |
Для дешифрування обчислюється 6677 (mod 119) = 19. |