Бесплатный генератор пары ключей RSA — ECDSA и Ed25519
Генератор ключей RSA онлайн — закрытый ключ не покидает браузер. RSA 2048/4096, ECDSA и Ed25519, в PEM PKCS#8 или PKCS#1, с JWK и отпечатком.
PKCS#8 (BEGIN PRIVATE KEY) — современный вариант по умолчанию и то, чего ждёт JDK. PKCS#1 (BEGIN RSA PRIVATE KEY) — традиционная форма OpenSSL, которую до сих пор требуют некоторые шлюзы. Переключение перекодирует тот же самый ключ.
Держите его в секрете. Любой, у кого он есть, сможет выдать себя за вас.
Создать такой же ключ в OpenSSL
Наша команда побайтово сверяет преобразование PKCS#8 в PKCS#1 с эталонным выводом модуля crypto в Node, поэтому экспортированный здесь ключ идентичен тому, который OpenSSL выдал бы для того же материала.
Что такое генератор ключей RSA?
Генератор ключей RSA создаёт математически связанную пару: закрытый ключ, который остаётся у вас, и открытый ключ, который вы раздаёте. Всё, что подписано закрытой половиной, проверяется открытой, и публиковать безопасно только открытую. Эта асимметрия и есть весь смысл — именно она позволяет проверяющему сверять ваши подписи, не получая возможности их подделать, чего общий секрет не даёт никогда.
Этот генератор работает внутри браузера через Web Crypto API, поэтому закрытый ключ создаётся во вкладке, а страница во время генерации не отправляет ни одного сетевого запроса. Помимо RSA он создаёт пары ECDSA и Ed25519, которые служат той же цели при гораздо более коротких ключах: закрытый ключ Ed25519 занимает 48 байт в PKCS#8, тогда как 2048-битный ключ RSA переваливает за 1,2 КБ.
Спотыкаются обычно не о математику, а об упаковку. Один и тот же ключ записывается как PKCS#8, PKCS#1, SPKI или JWK, и библиотека, отвергшая одну форму, часто примет другую, не сказав ничего внятнее ошибки разбора. Таблица ниже сопоставляет каждый контейнер с экосистемами, которые его ждут.
// Verify a downloaded key pair matches, using OpenSSL: openssl pkey -in rsa-2048-private.pem -pubout | diff - rsa-2048-public.pem // No output means the public key really belongs to that private key.
Ключевые возможности
Создаётся в вашем браузере
Ключи приходят из Web Crypto API в вашей же вкладке, и страница во время генерации не отправляет ни одного сетевого запроса. Отключите соединение — она продолжит работать, а это показывает, что для своей работы инструменту не нужен сервер.
RSA, ECDSA и Ed25519
RSA 2048, 3072 и 4096; ECDSA на кривых P-256, P-384 и P-521; и Ed25519 — всё на одной странице с одинаковыми вариантами экспорта.
Вывод в PKCS#8 и PKCS#1
Переключайтесь между BEGIN PRIVATE KEY и традиционной раскладкой BEGIN RSA PRIVATE KEY, не притрагиваясь к OpenSSL. Переключатель перекодирует ключ, который уже на экране, так что это остаётся тот же самый ключ.
Экспорт в JWK
Обе половины доступны как JSON Web Key. Открытый JWK — это то, что кладут в документ JWKS или в проверяющий JOSE; закрытый JWK предназначен только вашему подписывающему модулю и публиковаться не должен никогда.
Отпечаток SHA-256
К каждой паре прилагается отпечаток её открытого ключа, чтобы по отдельному каналу убедиться, что у обеих сторон один и тот же ключ.
Готовые команды OpenSSL
Эквивалентные команды, создающие локально ключ того же рода, показаны под выводом, так что перейти в командную строку можно в любой момент.
Скачивание с внятными именами
Файлы сохраняются как rsa-2048-private.pem и rsa-2048-public.pem, а не под общим именем, которое потом приходится переименовывать.
Без аккаунта и без лимитов
Сервер здесь не участвует, поэтому регистрироваться негде и исчерпывать нечего.
Разобранные примеры
Пара Ed25519 целиком
Алгоритм: Ed25519
-----BEGIN PRIVATE KEY----- MC4CAQAwBQYDK2VwBCIEIA2HJVU1qChbOJN8XksXVhyD0IjYVt0UU6Mwz814rOFf -----END PRIVATE KEY----- -----BEGIN PUBLIC KEY----- MCowBQYDK2VwAyEAV5uB7UaPJrtncx3SXNtNzn1ZXjF1ApwvzBZ8nFzT5eU= -----END PUBLIC KEY-----
Закрытый ключ Ed25519 занимает 48 байт в PKCS#8, а открытый — 44 байта, поэтому в каждом блоке PEM помещается одна строка base64. Это одноразовая демонстрационная пара — создайте свою, а не копируйте эту.
Заголовки PKCS#8 и PKCS#1 различаются
Алгоритм: RSA 2048, структура переключена
PKCS#8: -----BEGIN PRIVATE KEY----- PKCS#1: -----BEGIN RSA PRIVATE KEY-----
Один ключ, две обёртки. PKCS#8 добавляет вокруг структуры RSA идентификатор алгоритма — поэтому он подходит любому алгоритму, тогда как PKCS#1 существует только для RSA. Переключение перекодирует ключ, который уже на экране, поэтому отпечаток не меняется.
Открытый ключ RSA 2048
Алгоритм: RSA 2048
-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuvUHLjyK9zje2aaNIni eSccN1uleXFRBb1g2TN6bk/fbpPCGDyh71m73oB9Bk8+fKVkSThXyWTtpgblB7pX iQBtTvSWVZGHprkLgMGkU2Yw8Z43m1WpoRuYyXNFe92S5viIdVuKTj/VEUuEpzHd ffWMIUw70LaUdTP04iQdkNVeS3M6VHkpTwsPSQfsFSwObtLVNy2Lf+ODwJRqCk2r C749hgKqBdJqkcIj49R7UP4SMQ/9V3yy8DFMrIcgsjC4tHwlQSCGeXNxTNlapGSa ke55LUR83FASryVJRbUs678SCZSFkyGcT0qLZ/olu/e7Jj2lB0Qy/SJawkrs9hPE 4QIDAQAB -----END PUBLIC KEY-----
Префикс MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A — это идентификатор алгоритма rsaEncryption, по которому SPKI-ключ RSA узнаётся с первого взгляда.
Открытый ключ в виде JWK
Алгоритм: Ed25519, панель JWK
{
"key_ops": [
"verify"
],
"ext": true,
"alg": "Ed25519",
"crv": "Ed25519",
"x": "V5uB7UaPJrtncx3SXNtNzn1ZXjF1ApwvzBZ8nFzT5eU",
"kty": "OKP"
} Это дословный результат экспорта, включая поля key_ops и ext, которые Web Crypto добавляет всегда. Записи в JWKS они не нужны — удалите оба, а вместо них добавьте kid и use, чтобы проверяющие могли выбрать нужный ключ во время ротации. Ed25519 попадает в тип ключа OKP; ключи RSA выглядят как kty RSA с полями n и e.
Отпечаток SHA-256
Алгоритм: Ed25519
SHA256(SPKI) = KAXVxapxpG4zLsTVMpPafovT+X1NLWc8fsOXqtrb59o=
Дайджест SHA-256 структуры открытого ключа, достаточно короткий, чтобы продиктовать по телефону. Учтите: это не то значение, которое печатает ssh-keygen, — OpenSSH считает дайджест от собственного формата передачи, поэтому для одного и того же ключа они никогда не совпадают.
Как пользоваться генератором ключей RSA
- 1
Выберите алгоритм
RSA покрывает самый широкий круг устаревших систем. ECDSA даёт сопоставимую стойкость при куда меньших ключах. Ed25519 — современный выбор по умолчанию для новых задач подписи.
- 2
Задайте длину ключа
RSA 2048 отвечает текущим рекомендациям; 3072 и 4096 добавляют запас для долгоживущих ключей. У ECDSA есть кривые P-256, P-384 и P-521. У Ed25519 длина одна и фиксированная.
- 3
Выберите структуру PEM
PKCS#8 выдаёт заголовок BEGIN PRIVATE KEY и работает почти везде, в том числе в JDK. Переключайтесь на PKCS#1 только тогда, когда что-то прямо требует BEGIN RSA PRIVATE KEY.
- 4
Скопируйте или скачайте обе половины
Закрытый ключ отправляется в хранилище секретов. Открытый ключ уходит тому, кто проверяет ваши подписи. Закрытую половину не отправляйте никуда.
- 5
Сверьте отпечаток
Сравните отпечаток SHA-256 по отдельному каналу, чтобы убедиться: другая сторона установила именно тот открытый ключ, который здесь создан.
Частые ошибки в форматах ключей
Вставили открытый ключ туда, где нужен закрытый
Для подписи нужна закрытая половина. Библиотека, получившая BEGIN PUBLIC KEY вместо закрытого ключа, обычно сообщает о невнятной ошибке разбора, а не называет настоящую причину.
-----BEGIN PUBLIC KEY-----
-----BEGIN PRIVATE KEY-----
Неподходящая структура PEM для библиотеки
Лишь несколько экосистем читают только традиционную раскладку RSA — собственный вывод OpenSSL с флагом -traditional, часть SDK платёжных шлюзов, старые инструменты Ruby и Perl. Большинство современных библиотек, и JDK в особенности, ждут PKCS#8. Переключите структуру PEM вместо поиска команды конвертации.
-----BEGIN RSA PRIVATE KEY-----
-----BEGIN PRIVATE KEY-----
Потеряли завершающий перевод строки
Файлы PEM заканчиваются переводом строки после последнего разделителя. Копирование через поле формы, обрезающее пробельные символы, даёт файл, который часть библиотек отвергает сразу, — а поскольку пропавший символ невидим, в редакторе файл выглядит правильным.
-----END PRIVATE KEY-----[EOF]
-----END PRIVATE KEY-----↵[EOF]
Символ, потерянный по дороге
PEM ломает потерянный, вставленный или подменённый символ, а не ширина строки — большинство библиотек принимают любой перенос. Копирование через мессенджер или поле формы способно тихо превратить перенос строки в пробел, а base64 не подскажет, какой символ испортился; ключ просто не загрузится. Пользуйтесь кнопкой копирования, а не выделением вручную.
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuvUHLjyK9zje2aaNIni eSccN1uleXFRBb1g2TN6bk
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuvUHLjyK9zje2aaNIni eSccN1uleXFRBb1g2TN6bk
Использовали секрет HS256 там, где настроен RS256
HS256 берёт один общий секрет; RS256 берёт пару ключей. Передача случайной строки подписывающему RS256 падает уже на разборе. Создайте пару здесь или воспользуйтесь нашим генератором JWT-секрета, если вам нужен именно HS256.
alg: RS256, key: 8f3a9c2e1b7d
alg: RS256, key: -----BEGIN PRIVATE KEY-----
Вставили блок PEM в authorized_keys
Открытый ключ SSH — это однострочный формат OpenSSH ssh-ed25519 AAAA…, а не блок PEM, поэтому вставка открытого ключа с этой страницы в authorized_keys не сработает. Для ключа RSA нужную строку можно получить локально командой ssh-keygen -y; а для доступа по SSH вообще лучше создать ключ на целевой машине.
-----BEGIN PUBLIC KEY-----
ssh-keygen -y -f rsa-2048-private.pem > id_rsa.pub
Кто пользуется этим инструментом
- Подпись JWT алгоритмом RS256 или EdDSA
- Асимметричным алгоритмам JWT нужна пара ключей, а не общий секрет. Подписывайте закрытым ключом, публикуйте открытый — и у проверяющих не окажется ничего, чем можно выпускать токены. Наш JWT-кодировщик принимает ключи, созданные на этой странице.
- Подпись вебхуков и релизов
- Опубликуйте открытый ключ один раз, подписывайте каждый payload закрытым — и потребители проверят подлинность без общего секрета, который может утечь.
- Локальная разработка и тесты
- Наборам тестов, проверяющим верификацию подписи, нужна одноразовая пара ключей. Создать её здесь быстрее, чем вспоминать синтаксис вызова OpenSSL.
- Понять, как выглядит пара ключей
- Переключение алгоритмов и структур PEM бок о бок делает различия наглядными так, как чтение спецификации не делает.
- Подготовка эндпоинта JWKS
- Открытый JWK ложится прямо в массив keys документа discovery OpenID Connect. Добавьте kid, чтобы проверяющие могли выбрать его во время ротации, и держите закрытый JWK вне этого файла.
- Уход от RSA к современным кривым
- Создайте замену на Ed25519 рядом с исходным ключом RSA и сравните размеры, прежде чем решаться на переход.
- Устранение несовпадения форматов
- Когда библиотека отвергает ключ с ошибкой разбора, повторный вывод его в другой структуре PEM обычно и есть всё решение.
Форматы PEM и как работает генератор
- Какой контейнер куда подходит
- Один ключ, пять упаковок. Выбор не той — самая частая причина отказа принять ключ, а сообщение об ошибке редко бывает конкретнее, чем «не удалось разобрать».
Чтобы преобразовать файлы, которые уже есть,Контейнер Заголовок PEM Что хранит Где встречается PKCS#8 BEGIN PRIVATE KEY Любой алгоритм Web Crypto, JDK, Go, .NET — большинство современных библиотек PKCS#1 BEGIN RSA PRIVATE KEY Только RSA Традиционный вывод OpenSSL, часть платёжных шлюзов, старые инструменты Ruby и Perl SPKI / X.509 BEGIN PUBLIC KEY Любой алгоритм, открытая половина Открытый ключ, который ждёт почти каждая библиотека PKCS#1 открытый BEGIN RSA PUBLIC KEY Только RSA, открытая половина Устаревшие инструменты RSA JWK нет — это JSON Любой алгоритм Эндпоинты JWKS, discovery OIDC, библиотеки JOSE openssl pkcs8 -topk8 -nocrypt -in pkcs1.pem -out pkcs8.pemведёт в одну сторону, аopenssl rsa -traditional -in pkcs8.pem -out pkcs1.pem— в другую. - Случайность берётся у операционной системы
- Web Crypto питает генерацию ключей от источника энтропии платформы — getrandom в Linux и системный CSPRNG в Windows и macOS. Это источник того же класса, из которого черпает OpenSSL, а не псевдослучайный генератор JavaScript.
- Генерация не подвешивает страницу
- crypto.subtle.generateKey асинхронен, и в основных браузерных движках поиск простых чисел идёт вне главного потока, поэтому интерфейс остаётся отзывчивым, пока подбирается 4096-битный модуль. Индикатор страница показывает в любом случае, потому что длительность поиска зависит от везения.
- PKCS#8 оборачивает PKCS#1
- PrivateKeyInfo из PKCS#8 — это номер версии, идентификатор алгоритма и OCTET STRING. Для незашифрованного ключа rsaEncryption внутри этой OCTET STRING лежит полноценный RSAPrivateKey из PKCS#1 — именно так страница переходит между двумя формами, ничего не вычисляя заново.
- Открытые ключи используют SubjectPublicKeyInfo
- BEGIN PUBLIC KEY — это SubjectPublicKeyInfo из X.509: идентификатор алгоритма плюс BIT STRING. Что лежит в этих битах, зависит от алгоритма — для RSA это RSAPublicKey из PKCS#1, поэтому BEGIN RSA PUBLIC KEY короче; для ECDSA это несжатая точка кривой, а для Ed25519 — сырой 32-байтный ключ.
- Открытая экспонента равна 65537
- Каждый ключ RSA здесь использует e = 65537, записываемое как 0x010001. Она достаточно велика, чтобы исключить атаки на малую экспоненту, и содержит всего два единичных бита, поэтому проверка обходится в 16 возведений в квадрат и одно умножение.
- Отпечаток считается по DER, а не по PEM
- Отпечаток SHA-256 берётся от двоичной структуры SubjectPublicKeyInfo. Если считать его от текста base64, значение менялось бы при каждой смене переноса строк. Локальный эквивалент —
openssl pkey -in private.pem -pubout -outform DER | openssl dgst -sha256 -binary | openssl base64.
Лучшие практики управления ключами
- Создавайте ключи там, где они будут работать
- Закрытый ключ, прошедший по сети, был доступен каждому узлу на пути. Генерация в браузере держит сам ключ вне сети, хотя код страницы по ней всё же приходит; генерация прямо на целевом хосте убирает даже шаг копирования. Для ключа, защищающего продакшен, выбирайте хост.
- Предпочитайте Ed25519, если только RSA не обязателен
- Ed25519 даёт высокую стойкость в 32-байтном ключе, быстро подписывает и не имеет параметров, которые можно выставить неверно. К RSA обращайтесь, когда контрагент или старая библиотека не оставляют выбора.
- Считайте 2048 бит нижней границей
- NIST SP 800-131A с 2013 года запрещает RSA короче 2048 бит для создания подписей, и ни один публичный удостоверяющий центр не выпустит сертификат на меньший ключ. Для ключей, которым предстоит работать много лет, выбирайте 3072 или 4096.
- Никогда не храните закрытый ключ в репозитории
- Держите закрытые ключи в менеджере секретов или в переменной окружения, читаемой во время выполнения. Как только ключ попал в репозиторий, единственный безопасный ответ — ротация.
- Ротируйте по расписанию, а не только после инцидента
- Публикуйте новые открытые ключи с идентификатором ключа до того, как выводить старые, чтобы проверяющие принимали оба в период перекрытия. Ротация, отработанная рутинно, — это ротация, которая сработает под давлением.
Частые вопросы
Безопасно ли создавать закрытый ключ на сайте?
В чём разница между PKCS#8 и PKCS#1?
Как преобразовать ключ PKCS#1 в PKCS#8 и обратно?
Как получить открытый ключ из закрытого ключа RSA?
Что выбрать — RSA или Ed25519?
Достаточно ли ещё 2048-битного RSA?
Можно ли этими ключами подписывать JWT?
Можно ли здесь создать SSH-ключ?
Можно ли защитить закрытый ключ парольной фразой?
Зачем нужен отпечаток?
Похожие инструменты
Все инструменты →Инструмент расшифровки AES — совместим с OpenSSL и CryptoJS
Безопасность
Расшифровывайте AES онлайн — GCM/CBC/CTR, парольная фраза или необработанный ключ, автоматическое определение формата OpenSSL и CryptoJS «U2FsdGVkX1». Работает на 100% в браузере, ключи никогда не покидают страницу.
Инструмент шифрования AES — GCM, CBC и CTR
Безопасность
Бесплатное онлайн-шифрование AES — AES-128/192/256, GCM/CBC/CTR, парольная фраза (PBKDF2) или необработанный ключ. Работает на 100% в браузере, ничего не загружается на сервер.
Генератор и проверка bcrypt-хешей
Безопасность
Создавайте и проверяйте bcrypt-хеши паролей онлайн — настраиваемый фактор стоимости, префиксы $2b$/$2a$/$2y$. 100% в браузере; пароль никуда не отправляется.
HMAC генератор и проверка подписи
Безопасность
Бесплатный онлайн-генератор и верификатор HMAC. Вычисляйте HMAC-SHA256/SHA1/SHA384/SHA512 с ключами в Text, Hex или Base64 и выводом в Hex/Base64/Base64URL. Всё в браузере — ключи не покидают страницу.
Декодер JWT
Безопасность
Декодируйте JWT-токены онлайн бесплатно. Просмотр header, payload, signature, срока действия, алгоритма и claims. 100% в браузере — токен не покидает устройство. Без регистрации.
JWT-энкодер и генератор
Безопасность
Бесплатный онлайн-генератор и энкодер JWT. Соберите header и payload, подпишите с HS256, RS256 или ES256 мгновенно. 100% в браузере — ваш секрет и ключ не покидают устройство.