Logo Logo
GitHub Designed by Logto

什麼是 JSON 網路加密 (JWE)?

根據 RFC 7516 的定義,JSON 網路加密 (JWE) 是一種加密和解密 JSON 格式數據的機制。它為數據添加了一層保密性,特別是在不受信任的網絡上傳輸敏感信息時非常有用。

JWE 通常與 JSON 網路令牌 (JWT) 一起使用,以保護有效負載數據。例如,一個 ID token 或 存取權杖 (Access token) 可以使用 JWE 加密,以確保數據在傳輸過程中的安全性。

JWE 如何運作?

JWE 有兩種序列化格式:緊湊和 JSON。每種格式都有自己的方式來表示加密數據。

緊湊序列化

在緊湊序列化中,JWE 表示為一個由點 (.) 分隔的五段 Base64URL 編碼的字符串。這五段是:

{{header}}.{{encrypted-key}}.{{iv}}.{{ciphertext}}.{{tag}}

每段都有特定的目的:

  • header: 包含關於加密算法和密鑰管理的元數據。
  • encrypted-key: 用於加密有效負載的加密內容加密密鑰 (CEK)。
  • iv: 加密過程中使用的初始化向量。
  • ciphertext: 加密的有效負載數據。
  • tag: 用於驗證加密數據完整性的認證標籤。

JSON 序列化

JSON 序列化更詳細,提供了一種結構化的方式來表示 JWE。JWE 表示為具有以下屬性的 JSON 對象:

{
  "protected": "{{protected-header}}",
  "unprotected": "{{unprotected-header}}",
  "header": "{{header}}",
  "encrypted_key": "{{encrypted-key}}",
  "iv": "{{iv}}",
  "ciphertext": "{{ciphertext}}",
  "tag": "{{tag}}",
  "aad": "{{additional-authenticated-data}}"
}
  • protected: 包含 Base64URL 編碼的受保護標頭。
  • unprotected: 包含 JWE 共享的未保護標頭。
  • header: 包含 JWE 每個接收者的未保護標頭。
  • encrypted_key: 包含 Base64URL 編碼的加密內容加密密鑰 (CEK)。
  • iv: 包含 Base64URL 編碼的初始化向量。
  • ciphertext: 包含 Base64URL 編碼的密文 (加密的有效負載)。
  • tag: 包含 Base64URL 編碼的認證標籤。
  • aad: 包含 Base64URL 編碼的附加認證數據。

客戶端應能夠使用適當的密鑰和算法解密 JWE。可以使用預先協商的密鑰或通過密鑰協商協議導出的密鑰來解密 JWE。

例如,一個 ID token 可能會使用 JWE 加密,客戶端可以使用從 OpenID 供應商的 jwks_uri 端點獲得的適當密鑰來解密它。

另見