Русский

Инструменты разработчика · Декодер JWT

RFC 7519 и семейство JOSE: JWT, JWS, JWE, JWK и JWA Объяснение

· Фон

JWT криптография стандарты

Карта, соединяющая заявки JWT с подписанными и зашифрованными конвертами JOSE.
Оригинальная векторная иллюстрация ToolAcre

JWT — один из членов семейства спецификаций рабочей группы IETF JOSE. В этом посте объясняется, что определяет каждый RFC, как они сочетаются друг с другом и почему JWT обычно является JWS.

Пять аббревиатур, один токен — почему в документации упоминаются JWS и JWE, хотя вы спрашивали только о JWT

Документация токена перемещается между JWT, JWS, JWE, JWK и JWA, поскольку они описывают разные уровни одной и той же экосистемы. Путаница начинается, когда «JWT» используется в качестве сокращения для каждого компактного токена, состоящего из трех частей. Отделение утверждений от конверта и представления ключей упрощает рассмотрение реализации.

Декодер ToolAcre намеренно уже, чем семейство. Он обрабатывает входные данные в форме трех частей JWS, первые два декодированных сегмента которых являются объектами JSON. Он обнаруживает компактный ввод, зашифрованный пятью частями, и останавливается, поскольку чтение зашифрованного текста без ключей получателя не будет декодировать то же самое.

Документы JOSE определяют связанные форматы; этот репозиторий не устанавливает график работы рабочих групп

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

Практический вопрос заключается в том, какому уровню принадлежит каждое решение. Имена утверждений описывают операторы приложения, подписи защищают закодированный материал, шифрование защищает содержимое, ключевые объекты JSON представляют ключевую информацию, а идентификаторы алгоритмов именуют операции. Ни одна аббревиатура не заменяет другие.

JWS (RFC 7515) — подписывание произвольного контента и использование JWT компактной сериализации

JWS описывает подписанный или защищенный MAC контент. Его компактная форма имеет три сегмента: защищенный заголовок, полезные данные и подпись. Входные данные для подписи используют первые два закодированных сегмента, соединенные точкой. JWT обычно путешествует в этом конверте, который ToolAcre разделяет и проверяет.

Заголовок и полезные данные могут декодироваться в JSON, тогда как подпись представляет собой байты, а не третий объект. ToolAcre сообщает о наличии и размере подписи, но всегда отмечает ее как непроверенную. Таким образом, он может проиллюстрировать структуру JWS, не претендуя на какой-либо криптографический результат.

JWE (RFC 7516) — шифрование контента с сериализацией из пяти частей.

JWE описывает зашифрованный контент. Его компактная форма состоит из пяти сегментов, представляющих защищенный заголовок, материал зашифрованного ключа, значение инициализации, зашифрованный текст и тег аутентификации. Таким образом, четыре точки являются убедительным структурным признаком того, что декодер JWT, состоящий из трех частей, получил другую оболочку.

ToolAcre выдает особую ошибку JWE и объясняет, что содержимое невозможно прочитать без ключа дешифрования. Он не рассматривает зашифрованный текст как искаженный JSON и не пытается отображать случайные байты. Шифрование и подпись также могут быть объединены, но вложенная обработка находится за пределами этого маршрута.

JWK и JWA (RFC 7517 и 7518) — представление ключей как JSON и присвоение имен алгоритмам

JWK обеспечивает представление JSON для информации криптографического ключа, а JWA называет идентификаторы алгоритма и связанные параметры, используемые в JOSE. Их существование не означает, что токен может выбирать свой собственный доверенный ключ или алгоритм. Верификатор должен ограничивать как эмитента, так и политику приложения.

Примечания к алгоритму ToolAcre объясняют только конечный набор меток, присутствующих в исходном коде, и называют все остальное нераспознанным. Это описания, а не реализации. Декодер не импортирует JWK и не выполняет алгоритм из JWA, который сохраняет явную границу проверки.

JWT (RFC 7519) — формат утверждений, который используется на JWS или JWE

JWT определяет объект утверждений и зарегистрированные имена, такие как издатель, субъект, аудитория и NumericDates. Эти утверждения могут передаваться в подписанной или зашифрованной структуре JOSE. Таким образом, уровень полезной нагрузки отвечает на вопрос, «какие операторы представлены», а конверт отвечает на вопрос, как эти байты защищены или скрыты.

ToolAcre ожидает, что декодированные полезные данные будут объектом JSON, и перечисляет его утверждения. Массив, число или ноль не принимаются для этого инструмента. Даже объект правильной формы остается недоверенным до тех пор, пока соответствующий конверт не будет обработан настроенным проверяющим или получателем.

Чего это не касается — более поздние профили, такие как RFC 8725 лучшие практики и RFC 9068 токены доступа, которые имеют свои собственные сообщения.

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

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

Вывод: JWT — это утверждения, JWS — это конверт — декодер ToolAcre JWT считывает компактную форму JWS и показывает заголовок JWT и утверждения внутри

JWT называет слой утверждений; JWS и JWE обеспечивают защитные оболочки; JWK представляет ключевые данные; JWA называет варианты алгоритмов. ToolAcre считывает стандартную трехчастную подписанную форму и отображает заголовок и утверждения, отказываясь при этом проверять или расшифровывать.

Используйте эту карту, чтобы задать правильный следующий вопрос. Читаемый JSON идентифицирует уровень утверждения. Три или пять сегментов идентифицируют вероятные семейства конвертов. Доверие по-прежнему зависит от независимо настроенной криптографии и политики, а не от распознавания аббревиатуры декодером.