Рекомендации по выбору алгоритмов в 2024 году

Общие принципы выбора алгоритмов в экосистеме 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 и безопасные дефолты.