Защищенный заголовок JWS

Я пытаюсь понять этот пост в блоге о Хосе. В части о JWS говорится следующее:

Включение открытого ключа в защищенный заголовок не только даст серверу возможность проверить подпись, мы также будем уверены, что он правильный, поскольку защищенный заголовок защищен целостностью!

Вот как выглядит пример объекта:

{
    "payload": "eyAKICAgICAgICAiZnJvbSI6ewogICAgICAgICAgICAibmFtZSI6ICJUaW0gWXNld3luIiwKICAgICAgICAgICAgImFjY291bnQiOiAiQ2hlY2tpbmcgYWNjb3VudCIKICAgICAgICB9LAogICAgICAgICJ0byI6ewogICAgICAgICAgICAibmFtZSI6ICJUaW0gWXNld3luIiwKICAgICAgICAgICAgImFjY291bnQiOiAiU2F2aW5ncyBhY2NvdW50IgogICAgICAgIH0sCiAgICAgICAgImFtb3VudCI6IDI1MAogICAgICAgICJjdXJyZW5jeSI6ICJFVVIiCiAgICB9",
    "protected": "eyAKICAgICAgICAiYWxnIjogIlJTMjU2IgogICAgfQ==",
    "header": {
        "signature": "DtEhU3ljbEg8L38VWAfUAqOyKAM6-Xx-F4GawxaepmXFCgfTjDxw5djxLa8ISlSApmWQxfKTUJqPP3-Kg6NU01Q"
    }
}

Защищенный заголовок base64url кодировка:

{ 
    "alg": "ES256"
}

Единственная ссылка, которую я могу найти для размещения открытого ключа, - это использование поля id ключа. kid вот так:

{"alg":"RSA1_5","kid":"2011-04-29"}

Это то, на что ссылается пост? Или это относится к чему-то другому (например, помещая весь открытый ключ в защищенный заголовок как:

{"alg":"RSA1_5","key":"somepublickeyhere"}

1 ответ

Решение

Вы на правильном пути. То, на что, вероятно, ссылается статья, это "jwk" Параметр заголовка определен в RFC-7515 следующим образом:

Параметр заголовка "jwk" (веб-ключ JSON) - это открытый ключ, который соответствует ключу, используемому для цифровой подписи JWS. Этот ключ представлен в виде веб-ключа JSON.

JSON Web Key (JWK) является еще одной частью JOSE, определенной в RFC-7517. Он определяет, как представлять криптографические ключи в формате JSON, чтобы их можно было передавать, например, в заголовке JWS. Ключ RSA в формате JWK может выглядеть примерно так:

{
  "kty":"RSA",
  "n": "0vx7 (...) DKgw",
  "e":"AQAB",
  "alg":"RS256",
  "kid":"2011-04-29"
}

Поэтому (защищенный) заголовок JWS, содержащий ключ, как описано в статье, может выглядеть следующим образом:

{
  "alg": "RS256",
  "jwk": {
    "kty":"RSA",
    "n": "0vx7 (...) DKgw",
    "e":"AQAB",
    "alg":"RS256",
    "kid":"2011-04-29"
  }
}
Другие вопросы по тегам