Существует ли какой-либо стандартный порядок для размещения токенов 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 могут применяться в любом порядке, но если необходимы как подпись, так и шифрование, обычно производители должны подписать сообщение и затем зашифровать результат (таким образом зашифровав подпись). Это предотвращает атаки, при которых подпись удаляется, оставляя только зашифрованное сообщение, а также обеспечивая конфиденциальность для подписывающего лица. Кроме того, подписи на зашифрованном тексте не считаются действительными во многих юрисдикциях.