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 — локальная установка не требуется.
Все уроки этого курса
- Устройство JWT: заголовок, полезная нагрузка, подпись
- HS256 и RS256: симметричные и асимметричные JWT
- Уязвимости JWT: alg=none и путаница ключей
- Рекомендации по безопасной реализации JWT