Обзор алгоритмов подписи JWT
Исследуйте алгоритмы подписи JSON Web Token (JWT), охватывающие два из самых популярных подходов к асимметричному шифрованию: RSA и EC. Узнайте о плюсах и минусах каждого алгоритма и о том, как Logto использует их для обеспечения безопасности ваших JWT-токенов.
Что такое JWT?
JSON Web Token (JWT) является компактным, безопасным для URL способом представления утверждений. Структура включает в себя заголовок, полезную нагрузку и подпись.
Сегодня JWT широко распространены и играют важную роль в OAuth 2.0 и OIDC. Но как сервер авторизации проверяет и доверяет JWT, отправляемому от клиента? Как выдается и подписывается токен издателем? В этом посте блога мы поговорим об асимметричном шифровании и углубимся в плюсы и минусы различных алгоритмов подписи, которые Logto использует в своих JWT-токенах.
Структура JWT
Logto подписывает все JWT-токены, включая как ID-токены, так и токены доступа. Подписанный JWT также известен как JWS (JSON Web Signature). Структура подписанного JWT состоит из трех частей: заголовка, полезной нагрузки и подписи, разделенных точками (.
).
Заголовок JOSE (JSON Object Signing and Encryption)
Заголовок обычно состоит из следующих частей:
- typ: Тип токена, который является JWT.
- alg: Алгоритм подписи, который используется, например, RS256 или ES384.
- kid: Подсказка, указывающая, какой ключ был использован для защиты JWT.
Полезная нагрузка
Полезная нагрузка содержит утверждения, которые являются заявлениями о сущности (обычно о пользователе) и дополнительными данными. Например, ID-токен может содержать следующие утверждения:
Подпись
Подпись используется для проверки того, что отправитель JWT не является самозванцем и что сообщение не было подделано. При использовании подписанного JWT необходимо проверить подпись токена, чтобы убедиться в его целостности. Ознакомьтесь с этим руководством о том, как проверять JWT-токены для защиты вашего API.
Что такое асимметричное шифрование?
Асимметричное шифрование, также известное как криптография с открытым ключом, являющееся основополагающей концепцией в компьютерной безопасности и криптографии, предполагает использование уникальной пары связанных ключей: открытого и закрытого ключа.
Определения открытого и закрытого ключей
- Открытый ключ: Открытый ключ, как следует из названия, предназначен для открытого использования. В контексте JWT и аналогичных систем, открытый ключ используется для проверки подписи, а не для шифрования. Когда данные подписываются закрытым ключом и получатель обладает соответствующим открытым ключом, он может подтвердить, что данные действительно были подписаны держателем закрытого ключа и не были подделаны во время передачи.
- Закрытый ключ: В отличие от этого, закрытый ключ является строго охраняемой тайной, которая должна быть известна только его законному владельцу. В контексте JWT, закрытый ключ используется для создания цифровых подписей, которые могут быть проверены любым, у кого есть доступ к соответствующему открытому ключу.
Эта уникальная комбинация ключей является основой для безопасной передачи данных и механизмов аутентификации пользователей в цифровом мире. Ознакомьтесь с этим постом в блоге для получения дополнительных сведений.
Популярные алгоритмы подписи JWT: RSA против EC
Алгоритмы RSA (Rivest-Shamir-Adelman) и EC (Elliptic Curve) — это два наиболее часто используемых "математических функций" в асимметричном шифровании.
Как разработчики, мы часто сталкиваемся с выбором между этими алгоритмами, работая с auth-фреймворком и его JWT. Но какой из них вы бы выбрали? Давайте углубимся в плюсы и минусы каждого.
Алгоритм подписи RSA (например, RSASHA256)
- Плюсы:
- Широкая поддержка: RSA широко поддерживается на различных платформах и в библиотеках, обеспечивая совместимость в широком спектре сред.
- Долгая история: RSA имеет долгую историю надежной безопасности, и его алгоритмы хорошо понимаются криптографическим сообществом.
- Минусы:
- Размеры ключей: Ключи RSA длиннее, чтобы достичь такого же уровня безопасности, как EC, что приводит к увеличению размеров токенов и увеличению вычислительных затрат.
- Производительность: Операции RSA, как правило, медленнее, чем EC, что может быть недостатком в высоконагруженных приложениях.
Алгоритм подписи EC (например, ECDSASHA384)
- Плюсы:
- Эффективность: EC обладает превосходной производительностью по сравнению с RSA, что делает его идеальным для приложений с ограниченными ресурсами или высокой нагрузкой.
- Компактные размеры ключей: Ключи EC значительно короче своих аналогов RSA, при этом обеспечивая эквивалентные уровни безопасности. Это приводит к снижению требований к хранению и сети, а также ускорению криптографических операций.
- Безопасность: EC высоко ценится за свою надежную безопасность, подкрепленную сложной математикой эллиптических кривых, что делает его устойчивым к атакам методом перебора.
- Минусы:
- Ограниченная поддержка: Некоторые старые системы и библиотеки могут не иметь полной поддержки EC, что может вызвать проблемы с совместимостью. Например, Cloudflare Zero Trust не поддерживает токены, подписанные EC.
- Сложность: Реализация EC может быть более сложной из-за математической сложности, связанной с ней.
Выбор алгоритмов подписи JWT в Logto
Logto всегда стремится к соблюдению высочайших стандартов безопасности и гибкости и склонен использовать самые современные и эффективные решения в своей основе. EC предлагает выигрышное сочетание надежной безопасности и вычислительной эффективности, что делает его идеальным для современных нужд аутентификации и авторизации. Поэтому EC является нашим алгоритмом подписи по умолчанию с ранней стадии нашего продукта.
Однако мы также признали, что токены с подписью EC несовместимы с некоторыми сторонними системами и фреймворками, особенно с устаревшими. Поэтому мы также внедрили возможность изменить ваш алгоритм подписи JWT, вращая ваши закрытые ключи.

Итак, если у вас возникла проблема с невозможностью подключения к сторонней платформе из-за неподдерживаемого алгоритма подписи JWT, пришло время вращать и выбирать алгоритм RSA для вашего нового закрытого ключа.
Эта функция также помогает снизить риски, связанные с долгосрочной утечкой или компрометацией ключей. Регулярное вращение закрытых ключей должно быть основным элементом стратегии безопасности любой организации и настоятельно рекомендуется Logto.
Резюме: широко используемые алгоритмы подписи JWT: RSA и EC
Подпись JWT-токенов обеспечивает целостность и подлинность передаваемых данных. Выбор алгоритма подписи может значительно повлиять на безопасность, производительность и совместимость вашего приложения.
Оба алгоритма, RSA и EC, являются важными и популярными алгоритмами в криптографии. Понимание плюсов и минусов и математических принципов, лежащих в основе этих алгоритмов, помогает принимать более обоснованные решения для вашего приложения при работе с фреймворком аутентификации и авторизации.
Logto продолжит исследовать и предлагать более безопасный и надежный пользовательский опыт.