Инструмент Шифрования и Дешифрования RSA
Онлайн-RSA асимметричное шифрование с генерацией ключевой пары, шифрованием открытым и дешифрованием закрытым ключом
Управление Ключами
Что такое шифрование RSA?
RSA (Rivest-Shamir-Adleman) — первый широко используемый алгоритм асимметричного шифрования, изобретённый в 1977 году тремя математиками MIT. В отличие от симметричных алгоритмов вроде AES, RSA использует пару ключей: открытый для шифрования и закрытый для дешифрования. Безопасность RSA основана на математической сложности факторизации больших целых чисел. Рекомендуются ключи длиной 2048 бит и более. RSA используется в HTTPS/TLS, цифровых подписях, шифровании электронной почты (PGP/GPG) и блокчейн-транзакциях. Инструмент использует нативный Web Crypto API браузера. При работе с RSA важно различать генерацию ключей, шифрование, подпись и проверку подписи. Размер ключа, padding scheme, формат PEM/DER и безопасное хранение private key напрямую влияют на безопасность. Инструмент полезен для обучения и тестов, но production-ключи должны создаваться и храниться в доверенной среде, а устаревшие схемы padding не следует использовать.
Как использовать
Как использовать
- Выберите размер ключа (рекомендуется 2048 бит и выше)
- Выберите схему заполнения (для лучшей безопасности рекомендуется OAEP)
- Выберите алгоритм хеширования (рекомендуется SHA-256)
- Нажмите «Сгенерировать пару ключей» для создания открытого и закрытого ключей
- Для шифрования: вставьте открытый ключ в область открытого ключа, введите открытый текст — шифротекст генерируется автоматически
- Для расшифровки: вставьте закрытый ключ в область закрытого ключа, введите шифротекст — открытый текст генерируется автоматически
- Скопируйте результаты или нажмите «Поменять местами» для обмена входных и выходных данных
Руководство по параметрам
- Для новых тестов шифрования используйте RSA-OAEP с SHA-256 или выше; PKCS#1 v1.5 следует использовать только для совместимости со старыми системами.
- RSA может шифровать только небольшие объёмы данных. Для больших данных зашифруйте случайный ключ AES с помощью RSA, а для основного содержимого используйте AES.
- Закрытые ключи нельзя передавать в чатах, тикетах, скриншотах и общих логах. Открытыми ключами можно делиться, но закрытые должны оставаться в секрете.
Применение
Технический принцип
RSA — криптосистема с открытым ключом, созданная в 1977 году Райвестом, Шамиром и Адлеманом. Генерация ключей выбирает два больших случайных простых числа p и q, задаёт модуль n = p · q, вычисляет функцию Эйлера φ(n) = (p-1)(q-1), выбирает открытую экспоненту e, взаимно простую с φ(n) (e = 65537 = 2^16 + 1 является де-факто стандартом благодаря низкому весу Хэмминга, что ускоряет модулярное возведение в степень), и вычисляет закрытую экспоненту d ≡ e^-1 (mod φ(n)) с помощью расширенного алгоритма Евклида. Шифрование: c = m^e mod n; дешифрование: m = c^d mod n. Безопасность основана на предполагаемой сложности факторизации n на p и q при достаточно большом n. Чистый RSA детерминирован и допускает манипуляции, поэтому каждое реальное развёртывание оборачивает сообщение в схему заполнения. RSA-OAEP, определённая в RFC 8017 (PKCS#1 v2.2) с функцией генерации маски MGF1 поверх SHA-256 (или SHA-1/384/512), обеспечивает семантическую безопасность: один и тот же открытый текст шифруется в разный шифротекст при каждом вызове, а проверка целостности заполнения предотвращает атаки с подбором шифротекста. Старое заполнение PKCS#1 v1.5 по-прежнему распространено для обратной совместимости, но уязвимо к атаке Бляйхенбахера с миллионным оракулом. Для подписей RSASSA-PSS предпочтительнее подписи PKCS#1 v1.5 по тем же причинам. Выбор размера ключа ограничен как производительностью, так и последними рекордами факторизации. NIST SP 800-57 предписывает ≥ 2048 бит сегодня и ≥ 3072 бит после 2030 года. Криптография на эллиптических кривых соответствует RSA 3072 при всего 256 битах (NIST P-256, Curve25519), поэтому большинство новых TLS-подключений предпочитают ECDHE + ECDSA. RSA-OAEP на ключе 2048 бит может обернуть не более ⌊keysize/8⌋ − 2·hashLen − 2 байт открытого текста (≈ 190 байт для SHA-256), поэтому производственные системы используют RSA только для обёртки свежего симметричного сессионного ключа, а полезную несёт AES-GCM — гибридный паттерн за каждым TLS-хэндшейком. В браузере Web Crypto API (window.crypto.subtle) обеспечивает генерацию, импорт, шифрование и дешифрование ключей с PEM/DER (SPKI для открытого, PKCS#8 для закрытого) или JWK в качестве форматов передачи.
- Математика: выбрать простые p, q; n = p·q; φ(n) = (p-1)(q-1); выбрать e (обычно 65537 = 2^16+1); вычислить d = e^-1 mod φ(n); зашифровать c = m^e mod n; расшифровать m = c^d mod n.
- Заполнение: RSA-OAEP по RFC 8017 (PKCS#1 v2.2) с MGF1+SHA-256 для нового кода; PKCS#1 v1.5 только для обратной совместимости, уязвим к Bleichenbacher (CVE-2017-13099 и др.).
- Размеры ключей: NIST SP 800-57 устанавливает минимум 2048 бит сегодня и 3072 бит с 2030 года; 1024-битный RSA считается взломанным, а 4096-битный заметно дороже по CPU.
- Лимит полезной нагрузки: RSA-OAEP может обернуть не более ⌊k/8⌋ − 2·hashLen − 2 байт (≈ 190 байт для 2048-битного ключа + SHA-256); для больших данных RSA оборачивает сессионный ключ AES-GCM.
- Сравнимая стойкость: RSA 3072 ≈ ECC 256 (NIST P-256 или Curve25519) при ~128-битной симметричной стойкости; ECC выигрывает по размеру ключа и скорости подписи, RSA — по скорости проверки.
- Браузерный API и форматы: window.crypto.subtle.generateKey('RSA-OAEP'); экспорт как SPKI PEM (открытый) и PKCS#8 PEM (закрытый), или JWK; закрытые ключи никогда не должны покидать локальное окружение в открытом виде.
Примеры
Базовое шифрование
1. Сгенерируйте пару ключей 2048 бит
2. Скопируйте открытый ключ
3. Введите открытый текст: Hello, RSA!
4. Выберите OAEP + SHA-256
5. Выход: шифртекст в Base64
RFC: RFC 8017 (PKCS#1 v2.2) определяет схему шифрования RSAES-OAEPТипичный сценарий
Отправитель:
1. Получите открытый ключ получателя
2. Зашифруйте сообщение открытым ключом
3. Отправьте шифртекст
Получатель:
1. Расшифруйте закрытым ключом
2. Прочитайте исходное сообщение
Примечание: шифрование RSA обеспечивает конфиденциальность; для подлинности комбинируйте с подписями RSA (RSASSA-PSS в RFC 8017)Гибридное шифрование (RSA + AES)
RSA подходит для малых данных (например, сеансовых ключей)
Для больших данных используйте гибридное шифрование:
1. Сгенерируйте случайный ключ AES-256
2. RSA шифрует ключ AES (макс. ~190 байт с OAEP-SHA256)
3. AES-GCM шифрует сами данные
4. Отправьте зашифрованный RSA ключ + шифртекст AES + IV + тег аутентификации
Это сочетает распределение ключей RSA со скоростью AES и является стандартным шаблоном в TLS, PGP и S/MIME.
RFC: RFC 8017 раздел 7.1 описывает RSAES-OAEP для инкапсуляции ключейЧасто задаваемые вопросы
Какой размер ключа выбрать?
RSA-2048 — практический минимум на сегодня; именно его много лет используют сертификаты TLS. RSA-3072 — консервативный текущий стандарт по NIST SP 800-57. RSA-4096 для большинства задач избыточен (намного медленнее), но подходит для долгоживущих ключей подписи. RSA-1024 считается скомпрометированным по политике и для новых задач генерироваться не должен.
Открытый и закрытый ключ — какой шифрует, какой расшифровывает?
Для конфиденциальности: шифруют открытым ключом, расшифровывают закрытым. Зашифровать сообщение для вас может любой, а прочитать его — только владелец закрытого ключа. С подписями всё наоборот: подписывают закрытым ключом, проверяют открытым.
Почему при шифровании одного и того же текста получается разный шифротекст?
RSA-OAEP (рекомендуемая схема дополнения) добавляет случайность, поэтому одинаковые открытые тексты дают разный шифротекст. Это сделано намеренно — так предотвращаются атаки на основе подобранного шифротекста. RSA без дополнения («учебный» RSA) детерминированный и небезопасный, использовать его нельзя.
Почему RSA настолько медленнее, чем AES?
RSA выполняет модульное возведение в степень больших чисел; AES — фиксированные битовые операции над маленьким блоком. Шифрование RSA-2048 в тысячи раз медленнее, чем AES-128. На практике RSA используют только для шифрования небольшого сеансового ключа AES, а сами данные шифруют уже AES.
Каков максимальный объём данных, который можно зашифровать одним ключом RSA?
RSA-OAEP с SHA-256 оставляет около (размер_ключа_в_битах / 8 − 66) байт под одно шифрование: 190 байт для 2048-битного ключа, 318 — для 3072, 446 — для 4096. Чтобы зашифровать что-то крупнее, шифруйте RSA ключ AES, а сами данные — этим ключом AES.
Генерация ключей действительно случайная и локальная?
Да. Ключи создаются через crypto.subtle.generateKey из Web Crypto API, который берёт энтропию из CSPRNG операционной системы. Ключи никуда не уходят из браузера. Чтобы избавиться от ключа, обновите страницу и сгенерируйте новый; не вставляйте боевой закрытый ключ ни в какие веб-страницы.
Устойчив ли RSA к квантовым атакам?
Нет. Достаточно мощный квантовый компьютер, выполняющий алгоритм Шора, ломает RSA при любом практическом размере ключа. NIST в 2024 году стандартизировал постквантовые альтернативы (ML-KEM, ML-DSA). Для данных, которые должны оставаться конфиденциальными десятилетиями, планируйте миграцию; для коротких TLS-сессий RSA пока подходит.