使用受信任的金鑰 AWS CloudHSM - AWS CloudHSM

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

使用受信任的金鑰 AWS CloudHSM

AWS CloudHSM 支援受信任的金鑰包裝,以保護資料金鑰免受內部威脅。本主題說明如何建立可信任金鑰來保護資料安全。

了解可信任金鑰

可信任金鑰是用來包裝其他金鑰的金鑰,管理員和加密管理員 (COs) 會使用屬性 CKA_TRUSTED 明確識別為可信任。此外,管理員和加密管理員 (CO) 會使用 CKA_UNWRAP_TEMPLATE 和相關屬性來指定可信任金鑰取消資料金鑰包裝後可執行的動作。由可信任金鑰取消資料金鑰包裝也必須包含這些屬性,取消包裝的操作才能成功,其有助於確保只允許已取消包裝的資料金鑰用於您想要的用途。

使用屬性 CKA_WRAP_WITH_TRUSTED 來識別您要使用可信任金鑰包裝的所有資料金鑰。這樣做可讓您限制資料金鑰,讓應用程式只能使用可信任金鑰來取消包裝。一旦您在資料金鑰上設定此屬性,屬性就會變成唯讀,而且無法變更。設定這些屬性後,應用程式只能使用您信任的金鑰來取消資料金鑰包裝,並且取消包裝一律會產生具有會限制這些金鑰使用方式屬性的資料金鑰。

可信任的金鑰屬性

下列屬性可讓您將金鑰標示為可信任、指定資料金鑰只能使用可信任金鑰進行包裝和取消包裝,以及控制資料金鑰在取消包裝後可執行的操作:

  • CKA_TRUSTED:將此屬性 (除 CKA_UNWRAP_TEMPLATE 外) 套用於將會包裝資料金鑰的金鑰,以表明管理員或加密管理員 (CO) 已完成必要的盡職調查並信任此金鑰。只有管理員或 CO 可以設定 CKA_TRUSTED。加密使用者 (CU) 擁有金鑰,但只有 CO 可以設置其 CKA_TRUSTED 屬性。

  • CKA_WRAP_WITH_TRUSTED:將此屬性套用於可匯出的資料金鑰,以表明只能使用標記為 CKA_TRUSTED 的金鑰包裝此金鑰。一旦設定 CKA_WRAP_WITH_TRUSTED 為 true,屬性就會變成唯讀,而且您無法變更或移除屬性。

  • CKA_UNWRAP_TEMPLATE:將此屬性套用於包裝金鑰 (除 CKA_TRUSTED 外),以指定服務必須自動套用於服務取消包裝資料金鑰的屬性名稱和值。當應用程式提交金鑰以取消包裝時,還可提供自有的取消包裝範本。如果您指定取消包裝範本,且應用程式提供了自有的取消包裝範本,則 HSM 會使用這兩個範本將屬性名稱和值套用於金鑰。但是,如果用於包裝金鑰的 CKA_UNWRAP_TEMPLATE 中的值與應用程式在取消包裝請求期間提供的屬性衝突,取消包裝請求會失敗。

如需關於屬性的詳細資訊,請參閱下列主題:

如何使用可信任金鑰來包裝資料金鑰

若要使用可信任金鑰來包裝資料金鑰,您必須完成三個基本步驟:

  1. 對於您計劃使用可信任金鑰包裝的資料金鑰,請將其 CKA_WRAP_WITH_TRUSTED 屬性設定為 true。

  2. 對於您計劃用來包裝資料金鑰的可信任金鑰,請將其 CKA_TRUSTED 屬性設定為 true。

  3. 使用可受信任金鑰來包裝資料金鑰。

步驟 1:將資料金鑰的 CKA_WRAP_WITH_TRUSTED 設定為 true

對於要包裝的資料金鑰,選擇以下選項之一以將金鑰的 CKA_WRAP_WITH_TRUSTED 屬性設定為 true。這樣做會限制資料金鑰,因此應用程式只能使用可信任金鑰來包裝。

選項 1:如果產生一個新的金鑰,將 CKA_WRAP_WITH_TRUSTED 設定為 true

使用 PKCS #11JCECloudHSM CLI 產生金鑰。如需詳細資訊,請參閱下列範例。

PKCS #11

若要使用 PKCS #11 產生金鑰,您需要將金鑰的 CKA_WRAP_WITH_TRUSTED 屬性設定為 true。為此,請先將此屬性包含在金鑰的 CK_ATTRIBUTE template 中,然後將屬性設定為 true,如下列範例所示:

CK_BYTE_PTR label = "test_key"; CK_ATTRIBUTE template[] = { {CKA_WRAP_WITH_TRUSTED, &true_val, sizeof(CK_BBOOL)}, {CKA_LABEL, label, strlen(label)}, ... };

如需詳細資訊,請參閱使用 PKCS #11 產生金鑰的公開示範範例

JCE

若要使用 JCE 產生金鑰,您需要將金鑰的 WRAP_WITH_TRUSTED 屬性設定為 true。為此,請先將此屬性包含在金鑰的 KeyAttributesMap 中,然後將屬性設定為 true,如下列範例所示:

final String label = "test_key"; final KeyAttributesMap keySpec = new KeyAttributesMap(); keySpec.put(KeyAttribute.WRAP_WITH_TRUSTED, true); keySpec.put(KeyAttribute.LABEL, label); ...

如需詳細資訊,請參閱使用 JCE 產生金鑰的公開示範範例

CloudHSM CLI

若要使用 CloudHSM CLI 產生金鑰,您需要將金鑰的 wrap-with-trusted 屬性設定為 true。為此,請將 wrap-with-trusted=true 包含在適合金鑰產生命令的引數:

  • 對於對稱金鑰,請將 wrap-with-trusted 新增至 attributes 引數中。

  • 對於公有金鑰,請將 wrap-with-trusted 新增至 public-attributes 引數中。

  • 對於私有金鑰,請將 wrap-with-trusted 新增至 private-attributes 引數中。

如需關於產生金鑰對的詳細資訊,請參閱 關鍵 generate-asymmetric-pair

如需關於產生對稱金鑰的詳細資訊,請參閱 產生對稱金錀

選項 2:如果使用現有金鑰,請使用 CloudHSM CLI 將其 CKA_WRAP_WITH_TRUSTED 設定為 true

若要將現有金鑰的 CKA_WRAP_WITH_TRUSTED 屬性設定為 true,請依照下列步驟執行:

  1. 使用 登入 命令以加密使用者 (CU) 身分登入。

  2. 使用 設定金錀屬性 命令將金鑰的 wrap-with-trusted 屬性設定為 true。

    aws-cloudhsm > key set-attribute --filter attr.label=test_key --name wrap-with-trusted --value true { "error_code": 0, "data": { "message": "Attribute set successfully" } }

步驟 2:將可信任金鑰的 CKA_TRUSTED 設定為 true

若要讓金鑰成為可信任金鑰,其 CKA_TRUSTED 屬性必須設定為 true。您可以使用 CloudHSM CLI 或 CloudHSM 管理公用程式 (CMU) 來執行此操作。

步驟 3。使用可受信任金鑰來包裝資料金鑰

若要使用您在步驟 2 中設定的可信任金鑰來包裝步驟 1 所述的資料金鑰,請參閱下列連結以取得程式碼範例。每個都示範如何包裝金鑰。

如何使用可信任金鑰取包裝消資料金鑰

若要解開資料金鑰,您需要 CKA_UNWRAP 設定為 true 的可信任金鑰。若要成為金鑰,其還必須滿足下列條件:

  • 金鑰的 CKA_TRUSTED 屬性必須設定為 true。

  • 金鑰必須使用 CKA_UNWRAP_TEMPLATE 和相關屬性來指定資料金鑰在取消包裝後可以執行的動作。例如,如果您希望取消包裝的金鑰不可匯出,您可以將 CKA_EXPORTABLE = FALSE 設定為 CKA_UNWRAP_TEMPLATE 的一部分。

注意

CKA_UNWRAP_TEMPLATE 僅可與 PKCS #11 一同使用。

當應用程式提交要取消包裝的金鑰時,應用程式也可以提供自有的取消包裝範本。如果您指定取消包裝範本,且應用程式提供了自有的取消包裝範本,則 HSM 會使用這兩個範本將屬性名稱和值套用於金鑰。但是,如果在取消包裝請求期間,可信任金鑰中的值與應用程式提供的屬性 CKA_UNWRAP_TEMPLATE 衝突,則取消包裝請求會失敗。

若要查看關於使用可信任金鑰取消包裝金鑰的範例,請參閱此 PKCS #11 範例