包裝資料提供者 - AWS 資料庫加密 SDK

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

包裝資料提供者

注意

我們的客戶端加密庫被重命名為AWS數據庫加密 SDK。下列主題提供有關版本 1 的資訊。 X-2. Java 和版本 1 的動態驗證加密用戶端的 xX — 3. 適用於 Python 的 x 個加密用戶端。如需詳細資訊,請參閱適用於 DynamoDB 版本支援的資AWS料庫加密 SDK

包裝材料提供者 (包裝的 CMP) 可讓您透過 DynamoDB 加密用戶端使用來自任何來源的包裝和簽署金鑰。包裝的 CMP 不依賴於任何AWS服務。不過,您必須在用戶端以外產生及管理包裝和簽署金鑰,包括提供正確的金鑰來驗證和解密項目。

包裝 CMP 會為每個項目產生唯一的項目加密金鑰。其將使用您所提供的包裝金鑰來包裝項目加密金鑰,並將包裝的項目加密金鑰儲存至項目的資料描述屬性。因為您提供包裝和簽署金鑰,所以由您決定包裝和簽署金鑰的產生方式,以及要讓每個項目各有唯一的金鑰還是重複使用。

對於可以管理密碼編譯資料的應用程式而言,包裝 CMP 是安全的實作與理想的選擇。

包裝的 CMP 是 DynamoDB 加密用戶端支援的數個加密材料提供者 (CMP) 之一。如需其他 CMP 的相關資訊,請參閱密碼材料供應商

如需範例程式碼,請參閱:

使用方式

若要建立包裝 CMP,請指定包裝金鑰 (加密時需要)、取消包裝金鑰 (解密時需要) 以及簽署金鑰。您必須在加密和解密項目時提供金鑰。

包裝、取消包裝和簽署金鑰可以是對稱金鑰或非對稱金鑰對。

Java
// This example uses asymmetric wrapping and signing key pairs final KeyPair wrappingKeys = ... final KeyPair signingKeys = ... final WrappedMaterialsProvider cmp = new WrappedMaterialsProvider(wrappingKeys.getPublic(), wrappingKeys.getPrivate(), signingKeys);
Python
# This example uses symmetric wrapping and signing keys wrapping_key = ... signing_key = ... wrapped_cmp = WrappedCryptographicMaterialsProvider( wrapping_key=wrapping_key, unwrapping_key=wrapping_key, signing_key=signing_key )

運作方式

包裝 CMP 會為每個項目產生新的項目加密金鑰。如下圖所示,它會使用您所提供的包裝、取消包裝和簽署金鑰。

DynamoDB 加密用戶端中包裝材料提供者的輸入、處理和輸出

取得加密資料

本節將詳細說明包裝資料提供者 (包裝 CMP) 在接收到加密資料請求時的輸入、輸出和處理情形。

輸入 (從應用程式)

  • 包裝金鑰:進階加密標準 (AES) 對稱金鑰,或 RSA 公有金鑰。如有任何已加密的屬性值,則為必要。否則為選用並予以忽略。

  • 取消包裝金鑰:選用並予以忽略。

  • 簽署金鑰

輸入 (從項目加密程式)

輸出 (到項目加密程式):

  • 純文字項目加密金鑰

  • 簽署金鑰 (不變)

  • 實際資料描述:這些值會儲存在用戶端新增至項目的資料描述屬性中。

    • amzn-ddb-env-key:Base64 編碼的包裝項目加密金鑰

    • amzn-ddb-env-alg:用來加密項目的加密演算法。預設為 AES-256-CBC。

    • amzn-ddb-wrap-alg:包裝 CMP 用來包裝項目加密金鑰的包裝演算法。如果包裝金鑰是 AES 金鑰,則會使用未填補的 AES-Keywrap (如 RFC 3394 定義) 來包裝此金鑰。如果包裝金鑰是 RSA 金鑰,則會使用 RSA OAEP (MGF1 填補) 來加密此金鑰。

處理

當您加密項目時,您會傳入包裝金鑰和簽署金鑰。取消包裝金鑰為選用並予以忽略。

  1. 包裝 CMP 會為資料表項目產生唯一的對稱項目加密金鑰。

  2. 它會使用您指定的包裝金鑰來包裝項目加密金鑰。接著,它會盡快從記憶體中移除此金鑰。

  3. 其將傳回純文字項目加密金鑰、您所提供的簽署金鑰,以及包含包裝項目加密金鑰和加密與包裝演算法的實際資料描述

  4. 項目加密程式會使用純文字加密金鑰來加密項目。它會使用您所提供的簽署金鑰來簽署金鑰。接著,它會盡快從記憶體中移除這些純文字金鑰。它會將實際資料描述中的欄位 (包括包裝加密金鑰 (amzn-ddb-env-key)) 複製到項目的資料描述屬性。

取得解密資料

本節將詳細說明包裝資料提供者 (包裝 CMP) 在接收到解密資料請求時的輸入、輸出和處理情形。

輸入 (從應用程式)

  • 包裝金鑰:選用並予以忽略。

  • 取消包裝金鑰:相同的進階加密標準 (AES) 對稱金鑰,或與加密使用的 RSA 公有金鑰對應的 RSA 私有金鑰。如有任何已加密的屬性值,則為必要。否則為選用並予以忽略。

  • 簽署金鑰

輸入 (從項目加密程式)

  • DynamoDB 加密內容的副本,其中包含材料描述屬性的內容。

輸出 (到項目加密程式)

  • 純文字項目加密金鑰

  • 簽署金鑰 (不變)

處理

當您解密項目時,您會傳入取消包裝金鑰和簽署金鑰。包裝金鑰為選用並予以忽略。

  1. 包裝 CMP 會從項目的資料描述屬性取得包裝項目加密金鑰。

  2. 它會使用取消包裝金鑰和演算法來取消包裝項目加密金鑰。

  3. 它會將純文字項目加密金鑰、簽署金鑰以及加密和簽署演算法傳回給項目加密程式。

  4. 項目加密程式會使用簽署金鑰來驗證項目。如果成功,則會使用項目加密金鑰來將項目解密。接著,它會盡快從記憶體中移除這些純文字金鑰。