網頁

2020/6/4

JWK (JSON Web Key) 是什麼?

JSON Web Key,簡稱JWK,是以JSON物件表示,用來驗證JWT的signature(簽章)的公開金鑰(cryptographic key)。


JWK定義用來驗證(verify) JWS及JWE的金鑰JSON物件的格式(JSON object format)。

下面是JWK公鑰的內容範例,一把代表橢圓曲線加密的JWK公鑰,用於驗證JWE的signature。

{
    "kty":"EC",
    "crv":"P-256",
    "x":"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
    "y":"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
    "use":"enc",
    "kid":"1"
}

下面則是JWKS(JWK Set)公鑰內容範例。

{
  "keys":[
    {
      "kty":"EC",
      "crv":"P-256",
      "x":"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
      "y":"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
      "use":"enc",
      "kid":"1"
    },
    {
      "kty":"RSA",
      "n":"0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw",
      "e":"AQAB",
      "alg":"RS256",
      "kid":"2011-04-29"
    }
  ]
}

下面是JWK規範中共通的屬性簡介。有的屬性為選填(Optional)。

  • kty:Key Type,金鑰類型。定義使用的加密演算法類型,例如RSA加密或橢圓曲線加密EC
  • use:Public Key Use,公鑰用途。定義公鑰用途,例如用於加密資料(encrypt data)或驗證簽章(verify signature),所以此屬性的值包括:
    • sig:驗證簽章
    • eng:加密資料
  • key_ops:Key Operations,金鑰操作。定義金鑰使用時的各項操作:
    • sign:計算數位簽章或MAC
    • verify:驗證數位簽章或MAC
    • encrypt:加密
    • decrypt:解密
    • wrapKey:加密金鑰
    • unwrapKey:解密金鑰
    • deriveKey:衍生金鑰
    • deriveBits:衍生非用於金鑰的bits
    此屬性不應與use同時使用。
  • alg:Algorithm,演算法。金鑰使用的演算法。
  • kid:Key ID,金鑰ID。定義JWKS (JWK Set)的JWK ID。
  • x5u:X.509 URL。指向X.509 certificate或certificate chain的URI。
  • x5c:X.509 Certificate Chain。 一串在JSON array中的base64編碼字串,表示DER PKIX certificates的值。
  • x5t:X.509 Certificate SHA-1 Thumbprint。X.509 certificate的DER base64url編碼的SHA-1指印
  • x5t#S256:X.509 Certificate SHA-256 Thumbprint。X.509 certificate的DER base64url編碼的SHA-256指印


沒有留言:

張貼留言