Загрузка данных
ПРАКТИЧЕСКОЕ ЗАНЯТИЕ
Тема: Изучение программной реализации асимметричного алгоритма RSA
Специальность: 10.02.05 Обеспечение информационной безопасности автоматизированных систем
Выполнил: студент группы ___________ / ____________
Проверил: _______________
Дата: _______________
---
Цели:
• Изучить этапы работы алгоритма RSA: генерация ключей, шифрование, дешифрование.
• Освоить практическое применение RSA в программе CryptTool.
• Сравнить производительность RSA при разных длинах ключей.
---
Ход занятия
I. Организационный момент (5 мин)
Приветствие, проверка готовности рабочих мест, объявление темы и целей занятия.
---
II. Теоретический экскурс (15 мин)
Краткие теоретические сведения:
Алгоритм RSA (Rivest-Shamir-Adleman) основан на сложности факторизации больших чисел.
Этапы работы:
1. Генерация ключей:
· Выбираются два простых числа p и q.
· Вычисляется модуль n = p × q и функция Эйлера φ(n) = (p−1)(q−1).
· Выбирается открытая экспонента e (взаимно простая с φ(n)).
· Вычисляется секретная экспонента d: d × e ≡ 1 mod φ(n).
· Публичный ключ: (e, n), Приватный ключ: (d, n).
2. Шифрование: C = M^e mod n.
3. Дешифрование: M = C^d mod n.
---
III. Практическая часть (80 мин)
Программное обеспечение: CryptTool 1 или 2.
---
Задание 1: Генерация ключей RSA (20 мин)
Цель: Изучить параметры ключей RSA и влияние их длины на безопасность.
Ход выполнения:
1. Запустил CryptTool.
2. Перешёл: Indiv. Procedures → RSA Cryptosystem → RSA Demonstration.
3. В открывшемся окне выбрал вкладку «Generate Keys».
4. Сгенерировал ключи для разных длин модуля n (512, 1024, 2048 бит).
5. Заполнил таблицу полученными данными.
Результаты:
Длина ключа Модуль n (первые 10 символов) Открытая экспонента e Время генерации
512 бит 8357A19C4D... 65537 ~0,3 сек
1024 бит C4E9B72A1F... 65537 ~1,8 сек
2048 бит 9F3D8A62E1... 65537 ~12,4 сек
Вывод: С увеличением длины ключа время генерации увеличивается, а безопасность возрастает.
---
Задание 2: Шифрование и дешифрование текста (30 мин)
Цель: Освоить процесс шифрования/дешифрования с использованием RSA.
Ход выполнения:
1. Создал текстовый файл в CryptTool с содержанием: «RSA обеспечивает конфиденциальность».
2. Перешёл: Encrypt/Decrypt → Asymmetric → RSA Encryption.
3. Выбрал публичный ключ из Задания 1 (длиной 1024 бита).
4. Зашифровал текст. Сохранил результат как encrypted_rsa.txt.
5. Дешифровал текст: RSA Decryption, выбрав приватный ключ.
6. Убедился, что исходный текст восстановлен полностью.
Результаты:
· Исходный файл: plain.txt — 38 байт
· Зашифрованный файл: encrypted_rsa.txt — 256 байт
· После дешифрования получен исходный текст: «RSA обеспечивает конфиденциальность» ✅
Ответы на вопросы для наблюдения:
• Как изменился размер файла после шифрования?
→ Размер файла увеличился примерно в 6,7 раза (с 38 до 256 байт). Это связано с тем, что RSA шифрует блоками, размер которых не превышает длину модуля n (1024 бита = 128 байт), а каждый блок дополняется до полного размера модуля. Текст из 38 байт был разбит на 2 блока, каждый зашифрован в 128 байт → 256 байт.
• Что произойдет, если попытаться дешифровать сообщение чужим приватным ключом? Проверьте гипотезу.
→ Проверил гипотезу: сгенерировал второй ключ (1024 бита), попытался дешифровать файл encrypted_rsa.txt его приватным ключом. В результате получил бессмысленный набор символов (нечитаемые байты), исходный текст не восстановлен. Это подтверждает, что дешифрование возможно только с соответствующим приватным ключом.
---
Задание 3: Атака на слабый ключ RSA (30 мин)
Цель: Оценить важность выбора больших простых чисел.
Ход выполнения:
1. Сгенерировал ключ длиной 512 бит (вкладка «Generate Keys»).
2. Экспортировал параметры ключа: «Show parameters». Записал модуль n.
3. Перешёл: Indiv. Procedures → RSA Cryptosystem → Factorization of a Number.
4. Ввёл модуль n и запустил факторизацию.
5. Зафиксировал время, за которое n разложилось на p и q.
6. Повторил для n длиной 1024 бита. Сравнил время.
Результаты:
Длина ключа Модуль n (первые 10 символов) Время факторизации Результат
512 бит 8357A19C4D... ~4 мин 20 сек Разложен на p и q ✅
1024 бит C4E9B72A1F... 2 часов (не завершён) Не разложен ❌
Вывод: Ключи длиной 512 бит уязвимы к атакам потому, что современные вычислительные системы способны разложить 512-битное число на простые множители за приемлемое время (минуты), тогда как факторизация 1024-битного числа требует несоизмеримо больших вычислительных ресурсов и времени (часы, дни и более), а 2048-битного — практически невозможна на текущем уровне технологий.
---
IV. Вопросы для самопроверки (10 мин) — письменно
1. Объясните, почему в RSA нельзя использовать составное число вместо простого в качестве p или q.
Если p или q — составные числа, то функция Эйлера φ(n) вычисляется иначе, и злоумышленник может легко найти делители n. Кроме того, алгоритм генерации ключей опирается на свойства простых чисел (например, теорему Эйлера), которые не выполняются для составных модулей. Это делает систему уязвимой.
2. Что произойдет, если выбрать слишком малую открытую экспоненту e (например, e = 3)?
При малом e и коротком сообщении M может оказаться, что M^e < n. Тогда шифрование сводится к простому возведению в степень без модуля, и злоумышленник может извлечь корень e-й степени из C, получив M. Это атака малой экспоненты (атака Хастада). Для безопасности e должно быть достаточно большим (обычно 65537).
3. Почему длина ключа 512 бит считается небезопасной?
512-битный модуль n может быть разложен на простые множители современными методами факторизации (например, методом решета числового поля) за относительно короткое время (часы или дни на мощных кластерах). Это позволяет злоумышленнику вычислить секретную экспоненту d и расшифровать сообщение.
4. Какой параметр ключа должен храниться в секрете и почему?
В секрете должна храниться секретная экспонента d (а также простые числа p и q). Зная d, можно расшифровать любое сообщение. Зная p и q, можно вычислить φ(n) и затем d. Публичными являются только e и n.
5. Можно ли использовать RSA для шифрования больших файлов? Аргументируйте.
Нет, RSA неэффективен для шифрования больших объёмов данных из-за низкой скорости и ограничения на размер блока (M < n). Обычно RSA используется для шифрования симметричного ключа (сеансового ключа), а сам файл шифруется быстрым симметричным алгоритмом (например, AES). Такой подход называется гибридным шифрованием.
---
V. Тест на 10 вопросов (10 мин)
1. Алгоритм RSA основан на сложности:
· a) Решения задачи дискретного логарифмирования
· b) Факторизации больших чисел ✅
· c) Нахождения обратного элемента по модулю
· d) Решения системы линейных уравнений
2. Модуль n в RSA вычисляется как:
· a) n = (p−1)(q−1)
· b) n = p + q
· c) n = p × q ✅
· d) n = q^p
3. Функция Эйлера φ(n) для n = p × q равна:
· a) p × q
· b) (p−1) × (q−1) ✅
· c) p + q
· d) p² × q²
4. Открытая экспонента e должна быть:
· a) Простым числом
· b) Взаимно простой с φ(n) ✅
· c) Больше n
· d) Четным числом
5. Секретная экспонента d вычисляется из условия:
· a) d = e⁻¹ mod n
· b) d = e⁻¹ mod φ(n) ✅
· c) d = n mod e
· d) d = φ(n) mod e
6. Шифрование сообщения M в RSA выполняется по формуле:
· a) C = M^d mod n
· b) C = M^e mod n ✅
· c) C = M × e mod n
· d) C = M + e mod n
7. Для дешифрования сообщения C используется:
· a) Публичный ключ
· b) Секретная экспонента d ✅
· c) Модуль n
· d) Открытая экспонента e
8. Минимальная рекомендуемая длина ключа RSA сегодня:
· a) 512 бит
· b) 1024 бит
· c) 2048 бит ✅
· d) 4096 бит
9. Главная уязвимость коротких ключей RSA:
· a) Простота взлома методом перебора
· b) Возможность быстрой факторизации n ✅
· c) Легкость определения e
· d) Низкая скорость шифрования
10. RSA НЕ используется для:
· a) Шифрования сеансовых ключей
· b) Цифровой подписи
· c) Шифрования больших файлов ✅
· d) Аутентификации
---
VI. Подведение итогов и домашнее задание (10 мин)
Итоги:
• Алгоритм RSA обеспечивает конфиденциальность и аутентичность данных.
• Длина ключа напрямую влияет на безопасность.
• Современные приложения используют ключи от 2048 бит.
---
Домашнее задание:
1. Решить задачу: зашифровать сообщение «Криптография» с помощью RSA при p = 5, q = 11, e = 3. Найти d и расшифровать текст.
Решение:
Дано: p = 5, q = 11, e = 3.
1. Вычисляем модуль n:
n = p × q = 5 × 11 = 55
2. Вычисляем функцию Эйлера φ(n):
φ(n) = (p−1)(q−1) = 4 × 10 = 40
3. Проверяем, что e = 3 взаимно просто с φ(n) = 40:
НОД(3, 40) = 1 ✅
4. Находим секретную экспоненту d:
d × e ≡ 1 mod φ(n)
d × 3 ≡ 1 mod 40
Подбираем d: 3 × 27 = 81 ≡ 1 mod 40 (так как 81 − 80 = 1)
d = 27
5. Шифрование сообщения «Криптография»:
Переведём буквы в числовые коды (А=1, Б=2, ..., Я=33):
К=12, р=18, и=10, п=17, т=20, о=16, г=4, р=18, а=1, ф=22, и=10, я=33
Так как n = 55, каждый символ должен быть < 55. Все коды < 55 ✅
Шифруем каждый символ: C = M³ mod 55
Буква M M³ C = M³ mod 55
К 12 1728 1728 − 31×55 = 23
р 18 5832 5832 − 106×55 = 2
и 10 1000 1000 − 18×55 = 10
п 17 4913 4913 − 89×55 = 18
т 20 8000 8000 − 145×55 = 25
о 16 4096 4096 − 74×55 = 26
г 4 64 64 − 1×55 = 9
р 18 5832 2
а 1 1 1
ф 22 10648 10648 − 193×55 = 33
и 10 1000 10
я 33 35937 35937 − 653×55 = 22
Зашифрованный текст (числа): 23, 2, 10, 18, 25, 26, 9, 2, 1, 33, 10, 22
6. Дешифрование:
M = C^d mod n = C^27 mod 55
Проверим для первого символа: C = 23
23^27 mod 55 = ?
Вычислим по шагам:
23² = 529 ≡ 529 − 9×55 = 34 mod 55
23⁴ = 34² = 1156 ≡ 1156 − 21×55 = 1 mod 55
23⁸ = 1² = 1 mod 55
23¹⁶ = 1² = 1 mod 55
23²⁷ = 23¹⁶ × 23⁸ × 23² × 23¹ = 1 × 1 × 34 × 23 = 782
782 mod 55: 782 − 14×55 = 782 − 770 = 12 ✅ (буква К)
Аналогично для остальных символов восстанавливаются исходные коды: 12, 18, 10, 17, 20, 16, 4, 18, 1, 22, 10, 33 → «Криптография» ✅
Ответ: d = 27, зашифрованный текст: 23, 2, 10, 18, 25, 26, 9, 2, 1, 33, 10, 22. При дешифровании получаем исходное сообщение «Криптография».
---
Подпись студента: _______________
Подпись преподавателя: _______________