← Блог · 📐 Математика

Теорія чисел у криптографії: RSA просто

Чому прості числа захищають банківські перекази й переписку в месенджерах? Розбираємо, як модулярна арифметика та факторизація великих чисел лягли в основу алгоритму RSA — на маленькому, повністю обчислюваному прикладі.

1. Чому криптографія тримається на теорії чисел

Коли ви відкриваєте банківський застосунок або надсилаєте повідомлення в захищеному месенджері, дані на шляху до сервера шифруються. Значна частина сучасної криптографії з відкритим ключем — зокрема алгоритм RSA — спирається не на складні шифри-заміни, а на просту математичну ідею: перемножити два великих прості числа легко, а розкласти отриманий добуток назад на множники — надзвичайно важко, якщо числа достатньо великі (сотні десяткових цифр).

Ця асиметрія «легко в один бік, важко в інший» називається односторонньою функцією і є фундаментом безпеки багатьох криптосистем із відкритим ключем. Якби факторизація великих чисел була легкою задачею, вся сучасна інфраструктура захищеного зв'язку в інтернеті потребувала б перегляду.

Важливо: у реальних системах RSA числа p і q мають по 150–300 і більше десяткових цифр. У цій статті ми навмисно беремо крихітні числа — виключно щоб показати механіку обчислень вручну. Такий «іграшковий» приклад не є криптографічно стійким і в реальному шифруванні ніколи не використовується.

2. Модулярна арифметика — коротко

Модулярна арифметика («арифметика годинника») працює з остачами від ділення. Вираз a mod n означає остачу від ділення a на n: наприклад, 17 mod 5 = 2, бо 17 = 3×5 + 2. У криптографії всі обчислення виконуються за модулем деякого числа n, тому результати завжди залишаються в межах від 0 до n−1, незалежно від того, наскільки великими були проміжні числа.

Дві ключові операції RSA — піднесення до степеня за модулем (модулярне експоненціювання) та знаходження оберненого елемента за модулем — обидві є стандартними інструментами теорії чисел, детальніше про які можна прочитати в довіднику з теорії чисел.

3. Алгоритм RSA крок за кроком (навчальний приклад)

Використаємо класичний навчальний приклад із підручників з криптографії — числа p = 61 і q = 53.

Крок 1. Обираємо два прості числа

p = 61, q = 53 (обидва прості)

Крок 2. Обчислюємо модуль n

n = p × q = 61 × 53 = 3233

Число n стає частиною і публічного, і приватного ключа. У реальній системі саме n потрібно розкласти на p і q, щоб зламати шифр, — і саме це неможливо зробити за розумний час для великих n.

Крок 3. Обчислюємо функцію Ойлера φ(n)

φ(n) = (p − 1) × (q − 1) = 60 × 52 = 3120

Функція Ойлера φ(n) показує, скільки чисел від 1 до n є взаємно простими з n. Для n = p×q, де p і q — прості, вона обчислюється саме так — простим множенням (p−1)(q−1).

Крок 4. Обираємо відкритий показник e

Число e має задовольняти умову 1 < e < φ(n) та бути взаємно простим із φ(n) (тобто НСД(e, φ(n)) = 1). Традиційно обирають e = 17.

φ(n) = 3120 = 2⁴ × 3 × 5 × 13 e = 17 — просте число, і 17 не входить до множників 3120 ⇒ НСД(17, 3120) = 1 ✓

Крок 5. Обчислюємо приватний показник d

d — це число, обернене до e за модулем φ(n): d повинно задовольняти рівняння e × d ≡ 1 (mod φ(n)). Це знаходять за допомогою розширеного алгоритму Евкліда. Для наших чисел класичний результат:

d = 2753 Перевірка: 17 × 2753 = 46801 46801 ÷ 3120 = 15 (ціла частина), 15 × 3120 = 46800 46801 mod 3120 = 46801 − 46800 = 1 ✓

Отже, e × d mod φ(n) = 1 — умова виконана, пара ключів коректна.

ВеличинаЗначенняРоль
p, q61, 53секретні прості множники
n = p×q3233модуль (публічний)
φ(n)3120допоміжне число (секретне)
e17публічний показник шифрування
d2753приватний показник розшифрування

Крок 6. Шифрування та розшифрування

Публічний ключ — пара (n, e) = (3233, 17), її можна оприлюднити. Приватний ключ — число d = 2753, його ніхто, крім власника, не повинен знати.

Щоб зашифрувати повідомлення m (у навчальному прикладі часто беруть m = 65), відправник обчислює шифротекст c за формулою:

c = m^e mod n = 65^17 mod 3233

Вручну підносити 65 до 17-го степеня незручно — на практиці для цього використовують метод швидкого модулярного експоненціювання (послідовне піднесення до квадрата з узяттям остачі на кожному кроці), який виконує комп'ютер за долі секунди навіть для чисел у сотні цифр. У цьому класичному підручниковому прикладі результатом є c = 2790.

Отримавши шифротекст c, власник приватного ключа розшифровує його тим самим способом, але з показником d:

m = c^d mod n = 2790^2753 mod 3233 = 65

Результат — вихідне повідомлення m = 65 — повністю відновлюється. Це і є суть асиметричного шифрування: операція з e «замикає» повідомлення, а обернена операція з d, відома лише власнику ключа, «відмикає» його. Математично це працює завдяки теоремі Ейлера й тому, що e та d — взаємно обернені за модулем φ(n).

4. Чому факторизацію n так важко обернути

Щоб зламати RSA «в лоб», зловмиснику потрібно, маючи лише публічне n, знайти множники p і q. Для n = 3233 це тривіально (3233 = 61 × 53), і саме тому такий розмір ключа непридатний для реального захисту. Але коли n складається з двох простих чисел по 150–300 цифр кожне (реальні ключі RSA мають довжину 2048 або 4096 біт), найкращі відомі класичні алгоритми факторизації (наприклад, «решето числового поля») вимагають часу, що зростає суперполіноміально відносно кількості цифр — практично роки обчислень навіть на потужних кластерах.

Саме ця обчислювальна вартість, а не секретність самого алгоритму, і забезпечує безпеку RSA: алгоритм відкритий і добре вивчений, але без знання p і q обернути операцію шифрування неможливо за прийнятний час.

Про цю статтю

Ця стаття є частиною бази знань calculator.party — освітнього ресурсу, що поєднує теорію з практичними інструментами. Матеріал орієнтований на студентів, учнів і фахівців, що прагнуть глибокого розуміння теми. Тут зібрані ключові концепції, формули та реальні приклади застосування.

Теорія чисел вивчає властивості цілих чисел — подільність, прості числа, модулярну арифметику. Від криптографії до кодів корекції помилок — теорія чисел лежить в основі багатьох технологій XXI ст.

Навіщо читати цю статтю

Після прочитання ви зможете впевнено пояснити, як алгоритм RSA перетворює прості числа на криптографічний захист, самостійно повторити навчальний приклад обчислень та розуміти, чому довжина ключа має значення для безпеки.

Часті запитання (FAQ)

Що саме робить алгоритм RSA безпечним?
Безпека RSA спирається на обчислювальну складність факторизації: якщо перемножити два великі прості числа p і q, отримати добуток n = p×q легко, а от розкласти n назад на p і q без знання цих чисел — надзвичайно важко для класичних комп'ютерів, коли p і q мають сотні цифр. Саме ця асиметрія «легко помножити, важко розкласти» лежить в основі стійкості алгоритму.
Що таке пара публічного і приватного ключів?
У RSA публічний ключ — це пара чисел (n, e), яку можна вільно передавати будь-кому для шифрування повідомлень. Приватний ключ — це число d, відоме лише власнику, яке дозволяє розшифрувати повідомлення, зашифровані відповідним публічним ключем. Обидва ключі математично пов'язані через модуль n і функцію Ойлера φ(n), але отримати d, знаючи лише n та e, практично неможливо без факторизації n.
Чому саме прості числа мають таке значення у криптографії?
Прості числа не мають дільників, крім 1 і самих себе, тому добуток двох великих простих чисел не має «слідів», що полегшили б розкладання. Це робить факторизацію обчислювально дорогою задачею. Крім того, властивості простих чисел (наприклад, мала теорема Ферма та функція Ойлера) дають математичний апарат, необхідний для коректної роботи шифрування й розшифрування в RSA.
Чим асиметричне шифрування відрізняється від симетричного?
У симетричному шифруванні (наприклад, AES) той самий секретний ключ використовується і для шифрування, і для розшифрування, тому обидві сторони мають безпечно обмінятися цим ключем заздалегідь. В асиметричному шифруванні (RSA) використовуються два різні, але математично пов'язані ключі: публічний для шифрування і приватний для розшифрування, тому секретний ключ ніколи не потрібно передавати відкрито.
Що станеться з RSA, якщо квантові комп'ютери навчаться швидко факторизувати великі числа?
Теоретично алгоритм Шора, розроблений для квантових комп'ютерів, здатний факторизувати великі числа за поліноміальний час — набагато швидше, ніж будь-який відомий класичний алгоритм. Якщо буде побудовано достатньо потужний і стабільний квантовий комп'ютер, це підірве безпеку RSA. Тому криптографічна спільнота вже розробляє постквантові алгоритми, стійкі до атак на основі квантових обчислень.