• безопасность
  • шифрование
  • jws
  • асимметрия
  • ec
  • rsa
  • открытый ключ
  • закрытый ключ
  • токен
  • подпись jwt

Обзор алгоритмов подписи JWT

Исследуйте алгоритмы подписи JSON Web Token (JWT), охватывающие два из самых популярных подходов к асимметричному шифрованию: RSA и EC. Узнайте о плюсах и минусах каждого алгоритма и о том, как Logto использует их для обеспечения безопасности ваших JWT-токенов.

Charles
Charles
Developer

Что такое 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)

  • Плюсы:
    1. Широкая поддержка: RSA широко поддерживается на различных платформах и в библиотеках, обеспечивая совместимость в широком спектре сред.
    2. Долгая история: RSA имеет долгую историю надежной безопасности, и его алгоритмы хорошо понимаются криптографическим сообществом.
  • Минусы:
    1. Размеры ключей: Ключи RSA длиннее, чтобы достичь такого же уровня безопасности, как EC, что приводит к увеличению размеров токенов и увеличению вычислительных затрат.
    2. Производительность: Операции RSA, как правило, медленнее, чем EC, что может быть недостатком в высоконагруженных приложениях.

Алгоритм подписи EC (например, ECDSASHA384)

  • Плюсы:
    1. Эффективность: EC обладает превосходной производительностью по сравнению с RSA, что делает его идеальным для приложений с ограниченными ресурсами или высокой нагрузкой.
    2. Компактные размеры ключей: Ключи EC значительно короче своих аналогов RSA, при этом обеспечивая эквивалентные уровни безопасности. Это приводит к снижению требований к хранению и сети, а также ускорению криптографических операций.
    3. Безопасность: EC высоко ценится за свою надежную безопасность, подкрепленную сложной математикой эллиптических кривых, что делает его устойчивым к атакам методом перебора.
  • Минусы:
    1. Ограниченная поддержка: Некоторые старые системы и библиотеки могут не иметь полной поддержки EC, что может вызвать проблемы с совместимостью. Например, Cloudflare Zero Trust не поддерживает токены, подписанные EC.
    2. Сложность: Реализация EC может быть более сложной из-за математической сложности, связанной с ней.

Выбор алгоритмов подписи JWT в Logto

Logto всегда стремится к соблюдению высочайших стандартов безопасности и гибкости и склонен использовать самые современные и эффективные решения в своей основе. EC предлагает выигрышное сочетание надежной безопасности и вычислительной эффективности, что делает его идеальным для современных нужд аутентификации и авторизации. Поэтому EC является нашим алгоритмом подписи по умолчанию с ранней стадии нашего продукта.

Однако мы также признали, что токены с подписью EC несовместимы с некоторыми сторонними системами и фреймворками, особенно с устаревшими. Поэтому мы также внедрили возможность изменить ваш алгоритм подписи JWT, вращая ваши закрытые ключи.

Скриншот интерфейса Logto Console для вращения ваших закрытых ключей

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

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

Резюме: широко используемые алгоритмы подписи JWT: RSA и EC

Подпись JWT-токенов обеспечивает целостность и подлинность передаваемых данных. Выбор алгоритма подписи может значительно повлиять на безопасность, производительность и совместимость вашего приложения.

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

Logto продолжит исследовать и предлагать более безопасный и надежный пользовательский опыт.