了解 JWE:結構、操作、優點、缺點以及如何創建 JWE
1. 什麼是JWE(JSON Web加密)?
JSON Web 加密 (JWE) 是 RFC 7516 定義的標準,它使用基於 JSON 的資料結構表示加密內容。它允許您加密任意有效負載以確保機密性和完整性(如果需要)。此加密內容可以包括任何類型的數據,例如敏感的使用者資訊、安全性令牌甚至文件。
1.1 為什麼要使用JWE?
JWE 廣泛用於 Web 應用程式和 API,以安全地傳輸敏感數據,例如令牌、使用者資訊和財務詳細資訊。它確保資訊即使被攔截也無法被未經授權的實體讀取。加密的有效負載只能由擁有正確解密金鑰的預期接收者解密並使用。
1.2 JWE 的主要特點
- 保密性:JWE 的首要目標是確保內容的機密性。
- 完整性:保證資料在傳輸過程中不會被竄改。
- 互通性:JWE 與不同的加密演算法和環境相容。
- 緊湊性:JWE 提供了一種緊湊的表示形式,易於透過 HTTP 傳輸。
2. JWE的結構
JSON Web 加密 (JWE) 是一種以 JSON 物件的形式在各方之間安全地傳輸資訊的標準。 JWE 使用加密來確保其保護的資料的機密性和完整性。典型的 JWE 結構由五個部分組成,這些部分連接在一起並以句點 (.) 分隔。這五個部分是:
- 標題(何塞標題)
- 加密金鑰
- 初始化向量
- 密文
- 驗證標籤
JWE 的每個部分在加密和解密過程中都扮演著特定的角色。讓我們詳細研究每個部分。
2.1 JOSE 標頭(JSON 物件簽名與加密標頭)
JOSE(JSON 物件簽署和加密)標頭是 JWE 的第一部分,包含加密過程的元資料。它是一個 base64url 編碼的 JSON 對象,其中包括:
- alg (演算法):指定用於加密內容加密金鑰 (CEK) 的演算法。常見演算法包括 RSA-OAEP 、 RSA1_5 、 A128KW 、 A256KW 等 、
- A256KW 等 enc(加密演算法):表示用於加密有效負載(明文)的加密演算法。例如 A128GCM 、 A256GCM 、
- A128CBC-HS256 等
- typ(類型):可選擇性地指示令牌的類型,通常是 JWT。
:如果加密負載不是預設的 application/json,則可以選擇指示加密負載的內容類型。
{ "alg": "RSA-OAEP", "enc": "A256GCM" }
此標頭指定使用 RSA-OAEP 演算法對內容加密金鑰進行加密,並使用 AES GCM 和 256 位元金鑰對有效負載進行加密。
2.2 加密金鑰
- JWE 的第二部分是加密金鑰,它是用於加密實際資料(有效負載)的金鑰。此金鑰使用 JOSE 標頭的 alg 參數中指定的演算法進行加密。 如果 alg 是 RSA-OAEP ,則內容加密金鑰
- (CEK) 使用 RSA-OAEP 演算法和收件者的公鑰進行加密。 如果 alg 是 A128KW 或
,則使用對稱金鑰包裝。
加密金鑰採用 base64url 編碼。
2.3 初始化向量(IV)
初始化向量 (IV)
是 JWE 結構中的第三個組成部分。它是一個 base64url 編碼的隨機值,與加密演算法一起使用,以確保相同的明文每次都會進行不同的加密。 IV 可防止加密資料中出現模式,從而增強安全性。對於 AES GCM 模式,IV 通常為 96 位元(12 位元組)長。
2.4 密文 密文是使用內容加密金鑰(CEK)和加密演算法(enc 參數)對明文(有效負載資料)進行加密的結果。密文採用 base64url 編碼,是 JWE 的核心部分,因為它保存受保護的內容。
- 加密過程包括填充、加密以及將加密輸出轉換為base64url格式。
- 如果包含額外的驗證資料 (AAD),則用於確保 JOSE 標頭和密文的真實性和完整性。
2.5 認證標籤
驗證標籤(也稱為標籤)是一個base64url 編碼值,為密文、初始化向量(IV) 和附加驗證資料提供完整性和真實性( AAD)。它是在使用 AES GCM 等演算法的加密過程中產生的。
如果加密後 JWE 結構的任何部分被更改,解密過程將失敗,因為身份驗證標籤不匹配。
3. JWE 範例
考慮一個場景,我們想要加密訊息「Hello, World!」使用 JWE。這是一個簡化的細分:
- 受保護的標頭 : {"alg":"RSA-OAEP","enc":"A256GCM"}
- 加密金鑰 : Base64Url(加密(與接收者公鑰的對稱金鑰))
- 初始化向量(IV):Base64Url(隨機產生的IV)
- 密文 : Base64Url(用對稱金鑰加密("Hello, World!"))
- 驗證標籤:Base64Url(GCM標籤)
最終的 JWE 可能看起來像這樣:
{ "alg": "RSA-OAEP", "enc": "A256GCM" }
4. JWE 如何運作?
JWE 的工作原理是結合使用公鑰加密(用於加密對稱金鑰)和對稱加密(用於加密實際負載)。過程的工作原理如下:
金鑰產生與管理
- 傳送者和接收者就公鑰加密標準(例如 RSA 或橢圓曲線)達成協議。
- 發送者產生一個隨機對稱金鑰來加密訊息。
- 然後使用接收者的公鑰對對稱金鑰進行加密。
加密過程
- 傳送者建立指定加密演算法的 JWE 標頭。
- 有效負載(資料)使用對稱金鑰和初始化向量 (IV) 進行加密。
- 對稱金鑰使用接收者的公鑰進行加密。
- 產生的組件被連接起來形成最終的 JWE。
解密過程
- 接收者使用他們的私鑰來解密加密的對稱金鑰。
- 解密後的對稱金鑰隨後用於解密密文。
- 接收者使用身分驗證標籤驗證資料的完整性。
5. JWE的優缺點
5.1 優點
- 保密性:提供端對端加密,確保資料隱私。
- 互通性:跨不同系統和平台相容。
- 完整性與安全性:確保資料免遭竄改。
- 支援多位收件者:允許使用不同的金鑰將資料加密到多個收件者。
5.2 缺點
- 複雜性:加密和解密的過程可能很複雜且容易出錯。
- 效能開銷:加密/解密過程會增加計算開銷。
- 更大的有效負載大小:由於加密元數據,JWE 有效負載比純數據或 JWT 更大。
6. 如何用 Java 建立 JWE
建立 JWE 涉及選擇支援 JWE 標準的函式庫。 Nimbus JOSE JWT 是 Java 中最受歡迎的程式庫之一。以下是一個簡單的範例,示範如何建立 JWE:
設定依賴關係
如果您使用 Maven,請將以下依賴項新增至 pom.xml:
{ "alg": "RSA-OAEP", "enc": "A256GCM" }
建立並加密 JWE
這是一個 Java 程式碼片段,示範了 JWE 的創建:
eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZHQ00ifQ. g_hE3pPLiSs9C60_WFQ-VP_mQ1BU00Z7Xg. 48V1_ALb6US04U3b. 5eym8mytxoXCBlYkhjBtkmmI. XFBoMYUZodetZdvTiFvSkQ
代碼說明
- 金鑰產生 :產生 RSA 金鑰對來加密和解密 JWE。
- Header 和 Payload : header 指定加密演算法,Payload 包含要加密的資料。
- 加密:RSAEncrypter 用於加密有效負載。
- 解密:RSADecrypter 將有效負載解密回其原始形式。
結果
運行上面的程式碼將產生一個加密的JWE字串,然後將其解密回原始訊息:
<dependency> <groupId>com.nimbusds</groupId> <artifactId>nimbus-jose-jwt</artifactId> <version>9.22</version> </dependency>
七、結論
JSON Web 加密 (JWE) 是現代 Web 應用程式中安全資料傳輸的重要工具。了解其結構、工作原理及其優缺點將幫助您就何時以及如何在應用程式中使用它做出明智的決定。如果您有任何疑問或需要進一步說明,請隨時在下面發表評論!
閱讀更多文章:了解 JWE:結構、操作、優點、缺點以及如何建立一個
以上是了解 JWE:結構、操作、優點、缺點以及如何創建 JWE的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

在使用IntelliJIDEAUltimate版本啟動Spring...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...
