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

Введение в алгоритмы подписи EC и RSA в JWT

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

Charles
Charles
Developer

Предыстория

В цифровом мире стремление к улучшенной безопасности передачи данных остается постоянным и непрерывно развивающимся. Сегодня JSON Web Tokens (JWT) получили широкое распространение и играют важную роль в OAuth 2.0 и OIDC. Но как авторизационный сервер проверяет и доверяет JWT-токену, отправленному клиентом? Как токен выдается и подписывается издателем? В этом блоге мы поговорим об асимметричном шифровании и углубимся в плюсы и минусы различных алгоритмов подписи, которые Logto использует в своих JWT-токенах.

Понимание асимметричного шифрования

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

  • Открытый ключ: Открытый ключ, как следует из названия, предназначен для открытого обмена. В контексте JWT и подобных систем открытый ключ используется для проверки подписи, а не для шифрования. Когда данные подписываются закрытым ключом, а получатель обладает соответствующим открытыми ключом, он может подтвердить, что данные действительно подписаны владельцем закрытого ключа и не были изменены во время передачи. Однако в традиционном использовании асимметричного шифрования, таком как HTTPS, открытый ключ используется для шифрования, и зашифрованные данные могут быть расшифрованы только целевым сервером, который владеет сопряженным закрытым ключом.
  • Закрытый ключ: В отличие от этого, закрытый ключ является строго охраняемой тайной, которую должен знать только его законный владелец. В контексте JWT закрытый ключ используется для создания цифровых подписей, которые могут быть проверен каждым, у кого есть доступ к соответствующему открытому ключу. Кроме того, в контексте более традиционного асимметричного шифрования закрытый ключ действительно используется для дешифрования, что позволяет получить доступ к данным, которые были безопасно зашифрованы открытым ключом.

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

Асимметричные алгоритмы шифрования: RSA vs EC

Алгоритмы RSA (Ривест-Шамир-Адлеман) и EC (Эллиптическая кривая) являются двумя наиболее часто используемыми "математическими функциями" в асимметричном шифровании. Разработчикам часто приходится выбирать между этими алгоритмами при работе с фреймворком аутентификации и его JWT. Но какой будет вашим выбором? Давайте углубимся в плюсы и минусы каждого из них.

Алгоритм подписи RSA

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

Алгоритм подписи EC

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

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

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

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

В следующем выпуске Logto Cloud представит функцию "Ротация закрытых ключей", которая позволяет вам создать новый OIDC закрытый ключ и ключ cookie в вашем арендаторе. (Закрытый ключ используется для подписи ваших JWT-токенов, а ключ cookie — для подписи ваших cookies.)

Снимок экрана консольного интерфейса для вращения ключей OIDC

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

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

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

В двух словах

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

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