0Pricing
Cryptology Academy · Урок

HS256 и RS256: симметричные и асимметричные JWT

Выберите подходящий алгоритм подписи для своей системы аутентификации

«HS256 и RS256: симметричные и асимметричные JWT» — бесплатный урок Cryptology Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cryptology Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cryptology Academy содержит 4 уроков всего.

Семейства алгоритмов

Для подписи JWT используются симметричные алгоритмы (HMAC) или асимметричные алгоритмы (RSA, ECDSA). HS256 = HMAC-SHA256. RS256 = RSA-PKCS1v1.5-SHA256. ES256 = ECDSA-P256-SHA256. Выбор влияет на распространение ключей и модель доверия.

HS256: симметричный HMAC

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

Сценарии применения HS256

HS256 подходит, когда издатель и проверяющий являются одной службой, например монолитное приложение подписывает и проверяет собственные токены. Никогда не используйте HS256, если токены должны проверять несколько независимых служб: всем им потребуется секрет.

RS256: асимметричный RSA

RS256 использует закрытый ключ для подписи и открытый ключ для проверки. Только сервер аутентификации хранит закрытый ключ. Все серверы ресурсов получают открытый ключ из конечной точки JWKS и проверяют подписи локально — передавать общий секрет не требуется.

Сценарии применения RS256

RS256 идеально подходит для микросервисных архитектур: поставщик удостоверений подписывает токены, а каждый последующий сервис проверяет их с помощью открытого ключа без обращения к IDP для каждого запроса. Такая схема хорошо масштабируется по горизонтали без риска, связанного с распространением ключей.

ES256: альтернатива на основе ECDSA

ES256 использует ECDSA на основе P-256. Размер подписи составляет 64 байта против 256 байт у RS256 для ключа длиной 2048 бит. Проверка примерно в 10 раз быстрее, чем у RS256. Этот вариант предпочтителен, когда критичны пропускная способность или скорость проверки, например в мобильных API и устройствах Интернета вещей.

Смена ключей

Для RS256/ES256: выполняйте ротацию ключей, публикуя новый ключ (новый kid) в JWKS, подписывая новые токены новым ключом, оставляя льготный период для истечения срока действия старых токенов, а затем удаляя старый ключ. При ротации HMAC необходимо заново распространить новый секрет.

Сравнение производительности

Проверка HS256: ~1 мкс. Проверка RS256: ~100 мкс (2048 бит). Проверка ES256: ~50 мкс (P-256). HS256 работает быстрее всего, но требует совместного использования секрета. ES256 лучше всего сочетает безопасность и производительность для распределённых систем.

Предварительный обзор атаки через заголовок alg

Критическая уязвимость: если проверяющая сторона слепо доверяет заголовку alg, злоумышленник может изменить alg с RS256 на HS256 и подписать токен открытым ключом сервера (который является общедоступным), используя его как секрет HMAC. Исправление: никогда не доверяйте заголовку alg.

Выбор алгоритма

Решение: один сервис → HS256. Несколько сервисов или микросервисы → RS256 или ES256. Мобильные приложения с большим объёмом запросов → ES256. Если сомневаетесь, используйте ES256 (P-256) или RS256 с ключами длиной не менее 2048 бит. Никогда не используйте RS512 на чувствительных к производительности участках.

Библиотеки и стандарты

Используйте PyJWT (Python), jose (Node.js) или auth0/java-jwt. Всегда явно фиксируйте ожидаемый алгоритм в вызове проверки: jwt.decode(token, secret, algorithms=["HS256"]). Никогда не передавайте algorithms=None и не пропускайте этот параметр.

Быстрая проверка

Почему в архитектурах микросервисов предпочтителен RS256, а не HS256?

Итоги

HS256 — симметричный алгоритм (общий секрет), а RS256/ES256 — асимметричные (закрытый ключ используется для подписи, открытый — для проверки). Используйте асимметричные алгоритмы в системах с несколькими участниками. Далее: эксплуатация уязвимостей JWT.

Часто задаваемые вопросы

Урок «HS256 и RS256: симметричные и асимметричные JWT» бесплатный?

Да — полный текст урока «HS256 и RS256: симметричные и асимметричные JWT» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cryptology Academy, подпишись на CoddyKit PRO. Курс Cryptology Academy содержит 4 уроков всего.

Чему я научусь в уроке «HS256 и RS256: симметричные и асимметричные JWT»?

Выберите подходящий алгоритм подписи для своей системы аутентификации Ты практикуешь Cryptology Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cryptology Academy?

Предыдущий опыт не требуется. Cryptology Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «HS256 и RS256: симметричные и асимметричные JWT»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cryptology Academy?

Да. Каждый урок Cryptology Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Устройство JWT: заголовок, полезная нагрузка, подпись
  2. HS256 и RS256: симметричные и асимметричные JWT
  3. Уязвимости JWT: alg=none и путаница ключей
  4. Рекомендации по безопасной реализации JWT
← Назад к Cryptology Academy