什麼是 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
端點獲得的適當密鑰來解密它。