Общие
принципы выбора алгоритмов в экосистеме JOSE
Спецификации JOSE (JSON Object Signing and Encryption) объединяют три
ключевых стандарта: JWS (подпись), JWE (шифрование) и JWK (формат
ключей). В библиотеке JavaScript JOSE выбор алгоритма не является
формальностью — он напрямую определяет устойчивость системы к
компрометации, масштабируемость и совместимость между сервисами.
Современный подход к выбору алгоритмов строится вокруг нескольких
базовых критериев:
- отказ от устаревших и криптографически ослабленных схем;
- приоритет асимметричных алгоритмов для распределённых систем;
- использование AEAD-режимов для шифрования;
- минимизация поверхности атак через упрощение набора поддерживаемых
алгоритмов;
- соответствие требованиям современных стандартов (NIST, IETF
RFC).
Алгоритмы
подписи JWS: что использовать в 2024 году
EdDSA (Ed25519) —
современный стандарт де-факто
Алгоритм EdDSA на кривой Ed25519 стал наиболее предпочтительным
выбором для новых систем.
Ключевые свойства:
- высокая скорость генерации и проверки подписи;
- устойчивость к боковым атакам;
- компактные ключи и подписи;
- отсутствие необходимости в параметрах (deterministic signature
scheme).
В контексте JOSE он реализуется как EdDSA и используется
с кривой Ed25519.
Рекомендуется как основной вариант для:
- микросервисной архитектуры;
- API-аутентификации;
- токенов доступа с коротким сроком жизни.
ES256 / ES384 / ES512 —
ECDSA на P-256 и выше
ECDSA остаётся широко используемым стандартом, особенно в совместимых
экосистемах.
На практике:
- ES256 (P-256 + SHA-256) — баланс совместимости и безопасности;
- ES384 — повышенный уровень криптостойкости;
- ES512 — используется реже, из-за производительности.
Особенности:
- требует корректного генерации nonce (частая точка уязвимостей при
ошибках реализации);
- хуже по производительности, чем EdDSA;
- широко поддерживается в enterprise-системах и внешних
провайдерах.
ES256 остаётся стандартом для интеграций, где EdDSA ещё не
поддерживается.
RS256 и PS256 — RSA в
современном контексте
RSA остаётся актуальным только по причинам совместимости.
- RS256 (RSA + SHA-256) — классический вариант, но не рекомендован для
новых систем;
- PS256 (RSA-PSS) — более современный и безопасный вариант
RSA-подписей.
Проблемы RSA:
- большие ключи (2048–4096 бит);
- медленная генерация и проверка;
- устаревшая модель безопасности по сравнению с эллиптическими
кривыми.
Рекомендация:
- использовать только PS256, если требуется RSA;
- избегать RS256 в новых разработках.
HS256 / HS512 — HMAC и
симметричная подпись
HMAC-алгоритмы (HS256, HS512) часто используются из-за простоты, но
имеют архитектурные ограничения.
Проблемы:
- общий секрет между всеми сторонами;
- невозможность безопасного масштабирования в распределённых
системах;
- риск компрометации всей системы при утечке ключа.
Когда допустимо:
- монолитные приложения;
- внутренние сервисы без распределённой доверенной модели.
В 2024 году HS256 считается допустимым только в ограниченных
сценариях.
Алгоритмы
шифрования JWE: современные рекомендации
A256GCM — основной
стандарт шифрования
AES-GCM с 256-битным ключом является базовым выбором для JWE.
Преимущества:
- встроенная аутентификация данных (AEAD);
- высокая производительность;
- аппаратное ускорение на большинстве CPU;
- устойчивость к широкому классу атак на режимы шифрования.
В JOSE используется как A256GCM.
Это основной рекомендуемый алгоритм для всех новых систем.
ECDH-ES —
современный механизм обмена ключами
Elliptic Curve Diffie-Hellman Ephemeral Static используется для
согласования ключей в JWE.
Преимущества:
- отсутствие необходимости в передаче симметричного ключа;
- forward secrecy при правильной реализации;
- хорошая производительность на эллиптических кривых.
Используется вместе с A256GCM как основной гибридный механизм
шифрования.
RSA-OAEP-256
— безопасный вариант RSA для шифрования
Если требуется RSA-совместимость, предпочтение отдаётся OAEP с
SHA-256:
- RSA-OAEP-256 заменяет устаревший RSA1_5;
- снижает риск атак на паддинги;
- является минимальным безопасным вариантом RSA для JWE.
Использование RSA1_5 считается небезопасным и устаревшим.
PBES2 —
парольное шифрование (ограниченное применение)
PBES2 (например PBES2-HS256+A128KW) используется для сценариев, где
ключ выводится из пароля.
Минусы:
- высокая вычислительная стоимость;
- слабее модель безопасности по сравнению с асимметричной
криптографией;
- чувствительность к качеству пароля.
Применяется только в:
- резервном шифровании;
- локальных сценариях;
- системах без инфраструктуры ключей.
Критерии выбора
алгоритмов в реальных системах
1. Уровень доверенной модели
- централизованная система → возможен HS256 или RSA;
- распределённая система → EdDSA или ES256;
- межорганизационные API → ES256 или PS256.
2. Требования к
производительности
- высоконагруженные API: EdDSA, A256GCM;
- совместимость важнее скорости: ES256;
- legacy-системы: RS256.
3. Уровень совместимости
- OpenID Connect / OAuth2 чаще требует RS256 или ES256;
- современные сервисы постепенно переходят на EdDSA;
- криптографические шлюзы обычно поддерживают гибридный набор.
4. Политика безопасности
Современный минимальный безопасный набор:
- подпись: EdDSA (Ed25519) или ES256;
- шифрование: A256GCM;
- key exchange: ECDH-ES;
- RSA только как fallback (PS256 + RSA-OAEP-256).
Практика использования
в библиотеке jose
В библиотеке jose для JavaScript выбор алгоритма
фиксируется на уровне операций:
SignJWT / jwtVerify → алгоритмы JWS;
CompactEncrypt / jwtDecrypt → алгоритмы
JWE;
importJWK, importPKCS8 → определяют тип
ключа.
Типичная конфигурация для современного API:
- подпись:
EdDSA
- шифрование:
A256GCM
- обмен ключами:
ECDH-ES
Такой набор минимизирует зависимость от устаревших механизмов и
обеспечивает устойчивость к современным атакам.
Устаревшие и нежелательные
алгоритмы
Следующие алгоритмы считаются нежелательными в новых системах:
- RSA1_5 (в JWE) — уязвим к padding oracle атакам;
- HS384/HS512 в распределённых системах — избыточны и опасны при
утечке секрета;
- ES256 с некорректной генерацией nonce — потенциально критическая
уязвимость;
- любые схемы на SHA-1.
Баланс совместимости и
безопасности
Практическая проблема в реальных системах заключается не в выборе
«самого сильного» алгоритма, а в поддержке разных клиентов и
сервисов.
Типичная стратегия:
- внутренние сервисы → EdDSA + A256GCM;
- внешние интеграции → ES256;
- legacy-клиенты → RS256 (временно);
- шифрование данных → всегда A256GCM независимо от окружения.
Такой подход позволяет постепенно мигрировать инфраструктуру без
полной перестройки протоколов.
Архитектурные тенденции 2024
года
Современные системы смещаются в сторону:
- полного отказа от RSA в новых разработках;
- перехода на Ed25519 как стандарт подписи;
- обязательного использования AEAD-режимов;
- сокращения набора поддерживаемых алгоритмов до минимально
необходимого.
JOSE-экосистема в JavaScript следует этой тенденции особенно быстро,
так как библиотека jose активно ориентирована на
современные RFC и безопасные дефолты.