Объединение JWE и JWS

Просто узнаю о JOSE, и я понимаю, что JWE для шифрования, а JWS для подписи. Чего я, кажется, не могу найти, так это полезной нагрузки, которая зашифрована и подписана.

Давайте представим, что у меня есть полезная нагрузка hello world. Правильно ли делать что-то подобное? JWS(JWE('hello world') с зашифрованным JWE в качестве полезной нагрузки JWS?


person aroooo    schedule 11.10.2018    source источник
comment
Да, это правильно, но порядок важен. Вы должны сначала подписать, а затем зашифровать (JWE(JWS(payload))). Подробности см. на странице tools.ietf.org/html/rfc7519#section-11.2. .   -  person Spomky-Labs    schedule 12.10.2018


Ответы (1)


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

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

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

JWT, JWS и JWE
Изображение было извлечено из этого страница.


Правильно ли делать что-то подобное? JWS(JWE('hello world') с зашифрованным JWE в качестве полезной нагрузки JWS?

Это вложенный JWT, и его концепция определена в RFC 7519. :

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

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

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

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

person cassiomolin    schedule 11.10.2018
comment
Понятно, у меня сложилось впечатление, что JWT обычно используется для аутентификации. Если бы я хотел зашифровать весь абзац и отправить его как полезную нагрузку JSON, JWT по-прежнему подходит для этого? - person aroooo; 11.10.2018
comment
Предпочтительно сначала подписать, а затем зашифровать (см. Порядок важен. Вы должны сначала подписать, а затем зашифровать. См. tools.ietf.org/html/rfc7519#section-11.2 для подробностей) - person Spomky-Labs; 12.10.2018
comment
@FlorentMorselli Это цитата, которую я искал :) - person cassiomolin; 12.10.2018