首頁 > Java > java教程 > 了解 JWE:結構、操作、優點、缺點以及如何創建 JWE

了解 JWE:結構、操作、優點、缺點以及如何創建 JWE

Mary-Kate Olsen
發布: 2024-12-31 03:36:17
原創
363 人瀏覽過

1. 什麼是JWE(JSON Web加密)?

Understanding JWE: Structure, Operations, Advantages, Disadvantages, and How to Create One

JSON Web 加密 (JWE) 是 RFC 7516 定義的標準,它使用基於 JSON 的資料結構表示加密內容。它允許您加密任意有效負載以確保機密性和完整性(如果需要)。此加密內容可以包括任何類型的數據,例如敏感的使用者資訊、安全性令牌甚至文件。

1.1 為什麼要使用JWE?

Understanding JWE: Structure, Operations, Advantages, Disadvantages, and How to Create One

JWE 廣泛用於 Web 應用程式和 API,以安全地傳輸敏感數據,例如令牌、使用者資訊和財務詳細資訊。它確保資訊即使被攔截也無法被未經授權的實體讀取。加密的有效負載只能由擁有正確解密金鑰的預期接收者解密並使用。

1.2 JWE 的主要特點

  • 保密性:JWE 的首要目標是確保內容的機密性。
  • 完整性:保證資料在傳輸過程中不會被竄改。
  • 互通性:JWE 與不同的加密演算法和環境相容。
  • 緊湊性:JWE 提供了一種緊湊的表示形式,易於透過 HTTP 傳輸。

2. JWE的結構

Understanding JWE: Structure, Operations, Advantages, Disadvantages, and How to Create One

JSON Web 加密 (JWE) 是一種以 JSON 物件的形式在各​​方之間安全地傳輸資訊的標準。 JWE 使用加密來確保其保護的資料的機密性和完整性。典型的 JWE 結構由五個部分組成,這些部分連接在一起並以句點 (.) 分隔。這五個部分是:

  • 標題(何塞標題)
  • 加密金鑰
  • 初始化向量
  • 密文
  • 驗證標籤

JWE 的每個部分在加密和解密過程中都扮演著特定的角色。讓我們詳細研究每個部分。

2.1 JOSE 標頭(JSON 物件簽名與加密標頭)

JOSE(JSON 物件簽署和加密)標頭是 JWE 的第一部分,包含加密過程的元資料。它是一個 base64url 編碼的 JSON 對象,其中包括:

  • alg (演算法):指定用於加密內容加密金鑰 (CEK) 的演算法。常見演算法包括 RSA-OAEPRSA1_5A128KWA256KW
  • A256KW enc(加密演算法):表示用於加密有效負載(明文)的加密演算法。例如 A128GCMA256GCM
  • A128CBC-HS256
  • typ(類型):可選擇性地指示令牌的類型,通常是 JWT。
cty(內容類型)

:如果加密負載不是預設的 application/json,則可以選擇指示加密負載的內容類型。

範例:
{
  "alg": "RSA-OAEP",
  "enc": "A256GCM"
}
登入後複製
登入後複製
登入後複製

此標頭指定使用 RSA-OAEP 演算法對內容加密金鑰進行加密,並使用 AES GCM 和 256 位元金鑰對有效負載進行加密。

2.2 加密金鑰
  • JWE 的第二部分是加密金鑰,它是用於加密實際資料(有效負載)的金鑰。此金鑰使用 JOSE 標頭的 alg 參數中指定的演算法進行加密。 如果 algRSA-OAEP
  • ,則內容加密金鑰
  • (CEK) 使用 RSA-OAEP 演算法和收件者的公鑰進行加密。 如果 algA128KW
A256KW

,則使用對稱金鑰包裝。

加密金鑰採用 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中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板