Инструменты
Руководства

RSA шифрование / подпись

Крипто

Шифрование RSA-OAEP и подпись RSASSA-PKCS1-v1_5 через Web Crypto. Генерация пары или вставка PEM-ключа.

100 % на клиенте Без бэкенда
Сообщение
Подпись
Ключ (PEM)
Вывод
Открытый ключ (PEM)
Закрытый ключ (PEM)
На этой странице

Что такое RSA?#

RSA — это асимметричная криптография: она работает с парой подобранных ключей, а не с одним общим секретом. Открытый ключ можно раздать кому угодно — его единственная задача: запирать данные и проверять подписи. Закрытый ключ остаётся у вас, и только он может расшифровать данные, зашифрованные открытым ключом, или создать подпись, которую проверит каждый. Именно это разделение позволяет двум сторонам, никогда не делившимся секретом, обмениваться конфиденциальными сообщениями и доказывать свою подлинность.

Страница покрывает четыре операции, для которых обычно применяют RSA, — всё через встроенный движок Web Crypto браузера:

  • Шифрование / Расшифровка используют RSA-OAEP с SHA-256 — современную схему с аутентифицированным паддингом. Короткое сообщение, зашифрованное открытым ключом, можно прочитать обратно только закрытым.
  • Подпись / Проверка используют RSASSA-PKCS1-v1_5 с SHA-256 — самую широко интероперабельную схему подписи, ту, что до сих пор применяют большинство JWT и цепочек X.509.
  • Генерация ключей создаёт пары 2048, 3072 или 4096 бит с публичной экспонентой 65537, экспортируемые в стандартном PEM (SubjectPublicKeyInfo для открытого ключа, PKCS#8 — для закрытого).

RSA намеренно ограничена короткими payload’ами. При RSA-2048 и SHA-256 самое длинное сообщение, которое можно зашифровать, — около 190 байт; для большшего используйте инструмент симметричного шифрования и защитите его ключ через RSA.

Как пользоваться#

  1. Сгенерируйте пару. Выберите размер ключа (2048 / 3072 / 4096) и нажмите Сгенерировать пару. Заполнятся два поля только для чтения: Открытый ключ (PEM) и Закрытый ключ (PEM). Скопируйте каждый в надёжное место — закрытый ключ нельзя никому отдавать.
  2. Выберите режим: Зашифровать, Расшифровать, Подписать или Проверить.
  3. Вставьте нужный ключ в поле «Ключ (PEM)» в зависимости от режима:
    • Зашифровать → вставьте открытый ключ.
    • Расшифровать → вставьте закрытый ключ.
    • Подписать → вставьте закрытый ключ.
    • Проверить → вставьте открытый ключ.
  4. Введите Сообщение. Для проверки вставьте также Подпись (Base64) в поле подписи.
  5. Запустите. Строка состояния сообщает результат — для проверки она явно указывает, действительна подпись или нет.

Ключевые возможности#

  • Два алгоритма, одна пара ключей. Один и тот же PEM работает и для шифрования OAEP, и для подписи PKCS#1, потому что Web Crypto принимает алгоритм при импорте.
  • Стандартный вывод PEM. Открытые ключи — SPKI, закрытые — PKCS#8; форматы, которые любой язык и платформа читают нативно.
  • Публичная экспонента 65537. Универсально выбранное значение: достаточно мало для скорости, достаточно велико, чтобы избежать известных слабостей.
  • Интероперабельные подписи. RSASSA-PKCS1-v1_5 — формат, которого ждут настоящие JWT, подпись кода и цепочки сертификатов.
  • Без отправки данных. Генерация, шифрование и подпись идут локально в браузере; закрытый ключ никогда не касается сервера.

Разбор примера#

Нажмите Сгенерировать пару с выбранным 2048. Поле открытого ключа заполнится PEM-блоком вида:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyY7v...(lines of base64)
-----END PUBLIC KEY-----

Поле закрытого ключа — более длинным блоком -----BEGIN PRIVATE KEY-----. Теперь переключитесь на Зашифровать, вставьте открытый ключ в поле «Ключ (PEM)», введите handshake: 0x4F2A как сообщение и запустите. На выходе — один Base64-блоб длиной около 344 символов: ровно 256 байт шифротекста RSA-2048 в кодировке Base64.

Переключитесь на Расшифровать, вставьте закрытый ключ в поле «Ключ (PEM)», бросьте этот блоб в поле сообщения и запустите: вернётся исходное handshake: 0x4F2A. Для подписи тот же поток через Подписать даёт 344-символьную Base64-подпись, которую режим Проверить подтвердит как действительную для открытого ключа — и признает недействительной, если вы заранее измените хотя бы один символ сообщения.

FAQ#

Почему RSA шифрует только короткие сообщения?#

RSA оперирует числами по модулю размера ключа. При RSA-2048 у вас 256-байтовый блок, и паддинг OAEP съедает 2 * hashLen + 2 байта из него (98 для SHA-256), оставляя 190 байт на само сообщение. Это сделано намеренно: RSA — для ключей и подписей, а не для объёмных данных. Стандартный шаблон — «гибридный»: объёмные данные шифруются AES (используйте инструмент симметричного шифрования), а затем через RSA шифруется только ключ AES.

2048, 3072 или 4096 бит?#

2048 — текущий базис, всё ещё считается достаточным для большинства задач. 3072 примерно соответствует 128-битной симметричной стойкости; 4096 — консервативный выбор для ключей, которые должны прожить десятилетие и дольше. Каждый шаг вверх реально замедляет генерацию и каждую операцию, а отдача по безопасности падает.

В чём разница между шифрованием и подписью?#

Шифрование — про секретность: открытый ключ запирает, закрытый отпирает. Подпись — про подлинность: закрытый ключ создаёт подпись, открытый её проверяет. Они используют одну и ту же пару, но разные алгоритмы (OAEP против PKCS#1) и отвечают на разные вопросы — «может ли кто-то это прочитать?» против «действительно ли владелец этого ключа это создал?».

Мой закрытый ключ куда-то отправляется при генерации или использовании?#

Нет. Генерация, шифрование, расшифровка, подпись и проверка выполняются на странице силами Web Crypto. PEM-блоки существуют только в вашей вкладке; ничего не передаётся. Если вы работаете с продакшен-закрытым ключом, генерируйте его в подконтрольной вам среде, а не вставляйте в какую-либо веб-страницу.