ToolActToolAct

Инструмент Шифрования и Дешифрования RSA

Онлайн-RSA асимметричное шифрование с генерацией ключевой пары, шифрованием открытым и дешифрованием закрытым ключом

Управление Ключами

Открытый Ключ
Закрытый Ключ
Ввод
Символов: 0
Байт: 0
Результат
Символов: 0
Байт: 0

Что такое шифрование 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 не следует использовать.

Как использовать

Как использовать

  1. Выберите размер ключа (рекомендуется 2048 бит и выше)
  2. Выберите схему заполнения (для лучшей безопасности рекомендуется OAEP)
  3. Выберите алгоритм хеширования (рекомендуется SHA-256)
  4. Нажмите «Сгенерировать пару ключей» для создания открытого и закрытого ключей
  5. Для шифрования: вставьте открытый ключ в область открытого ключа, введите открытый текст — шифротекст генерируется автоматически
  6. Для расшифровки: вставьте закрытый ключ в область закрытого ключа, введите шифротекст — открытый текст генерируется автоматически
  7. Скопируйте результаты или нажмите «Поменять местами» для обмена входных и выходных данных

Руководство по параметрам

  • Для новых тестов шифрования используйте RSA-OAEP с SHA-256 или выше; PKCS#1 v1.5 следует использовать только для совместимости со старыми системами.
  • RSA может шифровать только небольшие объёмы данных. Для больших данных зашифруйте случайный ключ AES с помощью RSA, а для основного содержимого используйте AES.
  • Закрытые ключи нельзя передавать в чатах, тикетах, скриншотах и общих логах. Открытыми ключами можно делиться, но закрытые должны оставаться в секрете.

Применение

Генерация пар ключей RSA-OAEP в браузереВыберите длину модуля 512, 1024, 2048, 3072 или 4096 бит и хеш SHA-1, SHA-256, SHA-384 или SHA-512, затем сгенерируйте экспортируемые PEM-ключи открытый и закрытый через Web Crypto. Пара ключей остаётся во вкладке браузера и экспортируется как блоки SPKI (открытый) и PKCS#8 (закрытый) PEM — удобно для проектирования тестов совместимости без развёртывания сервера ключей.
Шифрование и дешифрование коротких текстовых payloadВставьте открытый ключ для шифрования открытого текста в Base64 или hex, либо вставьте закрытый ключ для дешифрования шифротекста в выбранном формате. Счётчики байт на входе и выходе помогают выявить проблемы с размером payload, что важно, поскольку RSA-OAEP(SHA-256) на ключе 2048 бит может обернуть лишь около 190 байт открытого текста. Закрытый ключ и сообщение остаются в локальной вкладке на протяжении всей операции.
Тестирование работы с ключами без внешних инструментовКопируйте PEM-блоки открытого или закрытого ключа, меняйте панели местами при экспериментах и переключайте режим шифрования/дешифрования, оставаясь на одной странице. Это полезно для изучения семантики RSA-OAEP, проверки совместимости с openssl и локальных прототипов, где материал ключей не должен покидать машину.
Выбор хеша OAEP для проверки совместимостиПереключайтесь между SHA-1, SHA-256, SHA-384 и SHA-512 в настройках OAEP, чтобы соответствовать хешу, который использует приложение-партнёр. Несовпадение хешей вызывает ошибку дешифрования с общим «OperationError» от Web Crypto, поэтому проверка пары здесь экономит время отладки при подключении ключей между Node crypto, Python cryptography или Java javax.crypto.
Определение лимита размера payload перед шифрованиемRSA-OAEP может шифровать только сообщения короче, чем модуль ключа минус 2*hashLen - 2 байта служебных данных, поэтому попытки зашифровать многокилобайтные блоки вызовут InvalidAccessError. Используйте счётчик байт на входе и длину шифротекста (она равна модулю ключа в байтах для OAEP), чтобы убедиться, что тест не превышает лимит, а затем перенесите большие данные на AES с сессионными ключами, обёрнутыми через RSA.

Технический принцип

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 пока подходит.

Связанные инструменты

Шифратор/Дешифратор AES

Онлайн-инструмент AES шифрования/дешифрования. Поддержка AES-128/192/256, режимов CBC/GCM/ECB, PKCS7 padding. Локальная обработка в браузере защищает конфиденциальность данных.

Инструмент Шифрования и Дешифрования DES

Бесплатный онлайн-инструмент шифрования и дешифрования DES/3DES. Поддерживает режимы ECB и CBC с дополнением PKCS7. Вся обработка происходит в браузере.

Генератор хэшей

Бесплатный онлайн-генератор хэшей: MD5, SHA-1, SHA-256 и SHA-512. Мгновенно вычисляйте хэш текста для проверки целостности данных и хранения паролей.

Генератор паролей

Бесплатный онлайн-генератор надёжных паролей с настраиваемой длиной и наборами символов. Создавайте случайные пароли локально в браузере.

Инструмент анализа JWT

Бесплатный онлайн-инструмент для декодирования и проверки JSON Web Token. Просматривайте Header и Payload и отлаживайте аутентификацию API в браузере.

Генератор JWT

Бесплатный онлайн-генератор JWT: создавайте токены с произвольными Header и Payload. Поддержка разных алгоритмов подписи для быстрых тестовых токенов.