Существует ли какой-либо стандартный порядок для размещения токенов JWS и JWE?

Мне нужно передать подписанные (и иногда дополнительно зашифрованные) объекты в кодировке JSON между несколькими экземплярами моего программного обеспечения. Очевидный выбор здесь - JWT.

Тем не менее, JWT позволяет явно подписывать и шифровать токен (JWS и JWE) или вкладывать JWS в JWE (вложенный JWE).

Хотя оба подхода кажутся мне разумными, существует ли "стандартный" способ сделать это? Я не нашел никаких подробностей по этому вопросу.

1 ответ

Решение

Короткий ответ

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

Длинный ответ

JSON Web Token (JWT) - это открытый стандарт, который определяет компактный и автономный способ безопасной передачи информации между сторонами в виде объекта JSON. JWT - это общее имя для следующих типов токенов:

  • JSON Web Signature (JWS): полезная нагрузка кодируется и подписывается, чтобы можно было проверить целостность утверждений.

  • JSON Web Encryption (JWE): их полезная нагрузка зашифрована, поэтому претензии скрыты от других сторон.


Изображение было извлечено с этой страницы.

JWT позволяет явно подписывать и шифровать токен (JWS и JWE) или вкладывать JWS в JWE (вложенный JWE).

Хотя оба подхода кажутся мне разумными, существует ли "стандартный" способ сделать это? Я не нашел никаких подробностей по этому вопросу.

Концепция вложенного JWT определена в RFC 7519:

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

Что касается порядка операций, желательно сначала подписать сообщение, а затем зашифровать результат, как указано в том же документе:

11.2. Порядок подписи и шифрования

Хотя синтаксически операции подписания и шифрования для вложенных JWT могут применяться в любом порядке, но если необходимы как подпись, так и шифрование, обычно производители должны подписать сообщение и затем зашифровать результат (таким образом зашифровав подпись). Это предотвращает атаки, при которых подпись удаляется, оставляя только зашифрованное сообщение, а также обеспечивая конфиденциальность для подписывающего лица. Кроме того, подписи на зашифрованном тексте не считаются действительными во многих юрисдикциях.

Другие вопросы по тегам