Таблица совместимости алгоритмов и типов ключей

Библиотека Jose реализует работу с JSON Web Tokens (JWT), JSON Web Signature (JWS), JSON Web Encryption (JWE) и JSON Web Keys (JWK) в соответствии со спецификациями JOSE (JSON Object Signing and Encryption). Одним из ключевых аспектов её использования является корректный выбор криптографического алгоритма и типа ключа.

В экосистеме Jose алгоритмы делятся на несколько категорий:

  • симметричные (HMAC)
  • асимметричные на базе RSA
  • асимметричные на эллиптических кривых (EC)
  • алгоритмы EdDSA (Edwards-curve Digital Signature Algorithm)

Тип ключа напрямую определяет, какие алгоритмы могут быть использованы. Ошибочный выбор приводит либо к ошибке выполнения, либо к криптографически небезопасной конфигурации.


Типы ключей в JOSE

В контексте Jose используются следующие основные типы ключей:

1. Symmetric key (oct)

  • Один общий секрет для подписи и проверки
  • Используется в HMAC алгоритмах (HS*)

2. RSA key pair

  • Пара: приватный и публичный ключ
  • Используется в RS* и PS* алгоритмах

3. EC (Elliptic Curve) key pair

  • Основан на эллиптических кривых
  • Используется в ES* алгоритмах

4. OKP (Octet Key Pair)

  • Используется в Ed25519 / Ed448
  • Применяется в EdDSA

Таблица совместимости алгоритмов и типов ключей

Алгоритм Тип ключа Поддерживаемые операции Особенности
HS256 oct (симметричный) Подпись / проверка одним секретом Быстрый, но требует безопасного хранения общего секрета
HS384 oct (симметричный) Подпись / проверка одним секретом Увеличенная длина хэша
HS512 oct (симметричный) Подпись / проверка одним секретом Максимальная стойкость среди HMAC
RS256 RSA Подпись (private), проверка (public) Широко используется, поддерживается везде
RS384 RSA Подпись / проверка Более длинный хэш SHA-384
RS512 RSA Подпись / проверка Повышенная криптостойкость
PS256 RSA-PSS Подпись / проверка Более современный и безопасный вариант RSA
PS384 RSA-PSS Подпись / проверка Усиленная версия PSS
PS512 RSA-PSS Подпись / проверка Максимальная стойкость RSA-PSS
ES256 EC (P-256) Подпись / проверка Компактные подписи, высокая эффективность
ES384 EC (P-384) Подпись / проверка Повышенная криптостойкость
ES512 EC (P-521) Подпись / проверка Максимальная стойкость EC
EdDSA OKP (Ed25519 / Ed448) Подпись / проверка Современный стандарт, высокая скорость и безопасность

Сопоставление алгоритмов с требованиями к ключам

Симметричные алгоритмы (HMAC)

Алгоритмы HS256, HS384 и HS512 требуют единого секрета:

  • ключ должен быть строкой или буфером
  • одинаковый ключ используется для подписи и проверки
  • безопасность зависит от случайности и длины секрета

HMAC(K, m) = H((K opad) H((K ipad) m))

Использование таких алгоритмов оправдано в доверенной среде, где отсутствует необходимость распределения публичных ключей.


RSA алгоритмы

RS256, RS384 и RS512 используют классическую схему с асимметричной криптографией:

  • приватный ключ: используется для подписи
  • публичный ключ: используется для проверки

RSA требует большего размера ключей (2048 бит минимум, часто 3072 или 4096).

Преимущество — широкая совместимость с системами, включая устаревшие.


RSA-PSS алгоритмы

PS256, PS384 и PS512 являются улучшенной версией RSA:

  • используют вероятностное заполнение (PSS)
  • более устойчивы к атакам на структуру подписи
  • считаются предпочтительными в современных системах

В Jose они требуют RSA ключей, но отличаются схемой подписи.


Алгоритмы на эллиптических кривых

ES256, ES384, ES512 используют EC ключи:

  • меньший размер ключа при той же стойкости
  • высокая производительность
  • компактные подписи

E = kG

где:

    1. — приватный ключ
    1. — генератор точки на кривой

EC алгоритмы часто используются в мобильных и высоконагруженных системах.


EdDSA (Ed25519 / Ed448)

EdDSA — современный стандарт подписи:

  • использует OKP ключи
  • высокая скорость генерации и проверки
  • устойчивость к боковым атакам
  • детерминированная подпись (в отличие от ECDSA)

Jose поддерживает EdDSA как предпочтительный вариант для новых систем.


Практическая совместимость в Jose

Некоторые ограничения, которые важно учитывать:

  • HS* нельзя использовать с RSA/EC ключами
  • RS* и PS* требуют именно RSA ключи
  • ES* требует EC ключи строго определённого типа кривой
  • EdDSA работает только с OKP (Ed25519 / Ed448)

Несовместимость проявляется на этапе выполнения:

  • ошибка alg not supported
  • ошибка invalid key type
  • ошибка invalid algorithm/key combination

Сводная логика выбора алгоритма

При проектировании системы на Jose выбор обычно определяется требованиями:

  • если нужна простота → HS256
  • если нужна совместимость → RS256
  • если важна безопасность и современность → PS256
  • если критична производительность и компактность → ES256
  • если нужен современный стандарт → EdDSA

Каждый из вариантов требует строгого соответствия типа ключа и алгоритма, иначе криптографическая модель теряет корректность.