AWS KMS 密碼編譯基礎知識 - AWS Key Management Service

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

AWS KMS 密碼編譯基礎知識

AWS KMS 使用可設定的密碼編譯演算法,讓系統可以快速地從一個核准的演算法或模式遷移到另一個演算法。密碼編譯演算法的初始預設集,已從聯邦資訊處理標準 (FIPS核准) 演算法中選取,用於其安全屬性和效能。

熵和隨機數字產生

AWS KMS 金鑰產生會在 中執行 AWS KMS HSMs。HSMs 實作使用 NIST SP800-90A Deterministic Random Bit Generator (DRBG) CTR_DRBG using AES-256 的混合隨機數字產生器。它植入了具有 384 位元熵的非決定性隨機位元產生器,並使用額外的熵進行更新,以便在每次呼叫加密材料時提供預測阻力。

對稱金鑰操作 (僅限加密)

在 Galois 計數器模式 () 中使用 使用 256 位元金鑰的所有對稱金鑰加密命令HSMs會使用進階加密標準 ()。 AES GCM要解密的類似呼叫使用反函數。

AES-GCM 是已驗證的加密方案。除了加密純文字以產生密碼文字之外,它還會透過密碼文字和任何需要身分驗證的其他資料 (另外經過身分驗證的資料,或 AAD) 來計算身分驗證標籤。身分驗證標籤有助於確保資料來自聲稱的來源,以及加密文字和 AAD 尚未修改。

通常, AWS 會省略在我們的描述AAD中包含 ,特別是在參考資料金鑰加密時。在這些情況下,周圍文字暗示要加密的結構會在要加密的純文字和AAD要保護的純文字之間進行分割。

AWS KMS 提供可讓您將金鑰材料匯入 的選項, AWS KMS key 而不必依賴 AWS KMS 產生金鑰材料。此匯入的金鑰材料可以使用 RSAES-OAEP 加密,以在傳輸到 期間保護金鑰 AWS KMS HSM。RSA 金鑰對會在 上產生 AWS KMS HSMs。匯入的金鑰材料會在 上 AWS KMS HSM解密,並在 GCM下重新加密,AES然後再由 服務存放。

非對稱金鑰操作 (加密、數位簽章和簽章驗證)

AWS KMS 支援在加密、數位簽章和金鑰協議操作中使用非對稱金鑰操作。非對稱金鑰操作依賴數學上相關的公有金鑰和私有金鑰對,可用於加密和解密、簽署和簽章驗證,衍生共用密碼。私有金鑰永遠不會保留 AWS KMS 未加密的金鑰。您可以透過 AWS KMS 呼叫 AWS KMS API操作來使用 中的公有金鑰,或下載公有金鑰並在 外部使用 AWS KMS。

AWS KMS 支援下列非對稱密碼。

  • RSA-OAEP (用於加密) 和 RSA-PSS 和 RSA-PKCS-#1-v1_5 (用於簽署和驗證) – 支援RSA金鑰長度 (以位元為單位):2048、3072 和 4096 適用於不同的安全需求。

  • 橢圓曲線 (ECC) – 用於簽署和驗證或衍生共用密碼,但不能同時用於兩者。支援ECC曲線:NISTP256, P384, P521、SECP256k1。

  • SM2 (僅限中國區域) – 用於加密和解密、簽署和驗證,或衍生共用密碼,但您必須選擇一個金鑰用量。支援SM2PKE加密和SM2DSA簽署。

金鑰衍生函數

金鑰衍生函數用於從初始秘密或金鑰衍生其他金鑰。 AWS KMS 使用金鑰衍生函數 (KDF) 來衍生 下每個加密的每呼叫金鑰 AWS KMS key。所有KDF操作都會在KDF計數器模式下使用 ,使用 HMAC【FIPS197】 搭配 SHA256【FIPS180】。256 位元衍生金鑰與 AES-GCM 搭配使用,以加密或解密客戶資料和金鑰。

AWS KMS 數位簽章的內部使用

數位簽章也可用來對命令和 AWS KMS 實體之間的通訊進行身分驗證。所有服務實體都有橢圓曲線數位簽章演算法 (ECDSA) 金鑰對。其執行方式定義ECDSA如使用橢圓曲線密碼編譯 (ECC) 密碼編譯訊息語法 (CMS) 和 X9.62-2005:金融服務產業的公有金鑰密碼編譯:橢圓曲線數位簽章演算法 (ECDSA)。實體使用聯邦資訊處理標準出版物 FIPS PUB 180-4 中定義的安全雜湊演算法,稱為 SHA384。金鑰會在曲線 secp384r1 (NIST-P384) 上產生。

封套加密

加密資料後,您的資料會受到保護,但您需要保護您的加密金鑰。一個策略是把它加密。封套加密是使用資料金鑰來加密純文字資料,然後再透過另一個金鑰來加密資料金鑰的實務做法。

您甚至可以透過另一個加密金鑰來加密資料加密金鑰,並透過另一個加密金鑰來加密該加密金鑰。但是,最終必須有一個金鑰保留在純文字中,以便您可以解密金鑰和您的資料。這個最上層的純文字金鑰加密金鑰稱為根金鑰

封套加密

AWS KMS 可協助您安全地儲存和管理加密金鑰,以保護您的加密金鑰。儲存在 中的根金鑰 AWS KMS,稱為 AWS KMS keys,永遠不會讓 AWS KMS FIPS經過驗證的硬體安全模組處於未加密狀態。若要使用KMS金鑰,您必須呼叫 AWS KMS。

在許多密碼編譯系統中使用的基本結構是信封加密。信封加密使用兩個或多個密碼編譯金鑰來保護訊息。通常,一個金鑰衍生自長期靜態金鑰 k,另一個金鑰是每訊息金鑰 msgKey,會產生此金鑰來加密訊息。信封是透過加密訊息來形成:ciphertext = Encrypt(msgKey, message) 。接著會使用長期靜態金鑰加密訊息金鑰:encKey = Encrypt(k, msgKey) 。最後,這兩個值 (encKey, 密碼文字) 會封裝成單一結構或信封加密訊息。

收件人 (可存取 k) 可以先解密加密的金鑰,然後解密訊息,以開啟封住的訊息。

AWS KMS 提供管理這些長期靜態金鑰的能力,並自動化資料信封加密的程序。

除了 AWS KMS 服務內提供的加密功能之外,AWS 加密SDK還提供用戶端信封加密程式庫。您可以使用這些程式庫來保護您的資料和用來加密該資料的加密金鑰。

使用多個金鑰加密金鑰的封套加密

封套加密提供多種優勢:

  • 保護資料金鑰

    加密資料金鑰時,您不需要擔心如何存放加密的資料金鑰,因為這份資料金鑰本質上已獲得加密保護。加密的資料金鑰可以安全地跟加密資料一起存放。

  • 在多個金鑰下加密相同的資料

    加密操作可能極為耗時,特別是要加密的資料屬於大型物件時,更為明顯。這時您可以捨棄使用不同金鑰來多次重新加密原始資料的做法,改成只重新加密負責保護原始資料的資料金鑰。

  • 結合多種演算法的優勢

    一般而言,比起公開金鑰演算法,對稱金鑰演算法速度較快,產生的加密文字較小。但是,公開金鑰演算法本質上就會區隔角色,因此金鑰管理較為方便。封套加密可讓您結合每個策略的優點。

密碼編譯操作

在 中 AWS KMS,密碼編譯操作是使用KMS金鑰來保護資料的API操作。由於KMS金鑰會保留在 內 AWS KMS,因此您必須在密碼編譯操作中呼叫 AWS KMS 以使用KMS金鑰。

若要使用KMS金鑰執行密碼編譯操作,請使用 AWS SDKs、 AWS Command Line Interface (AWS CLI) 或 AWS Tools for PowerShell。您無法在 AWS KMS 主控台中執行密碼編譯操作。如需以數種程式設計語言呼叫密碼編譯操作的範例,請參閱AWS KMS 使用 的程式碼範例 AWS SDKs

下表列出 AWS KMS 密碼編譯操作。它還顯示操作中使用的金鑰的金鑰類型和KMS金鑰使用需求。

作業 Key type 金鑰用途
解密 對稱或不對稱 ENCRYPT_DECRYPT
DeriveSharedSecret 非對稱 KEY_AGREEMENT
加密 對稱或不對稱 ENCRYPT_DECRYPT
GenerateDataKey 對稱 ENCRYPT_DECRYPT
GenerateDataKeyPair 對稱 [1]

自訂KMS金鑰存放區中的金鑰不支援 。

ENCRYPT_DECRYPT
GenerateDataKeyPairWithoutPlaintext 對稱 [1]

自訂KMS金鑰存放區中的金鑰不支援 。

ENCRYPT_DECRYPT
GenerateDataKeyWithoutPlaintext 對稱 ENCRYPT_DECRYPT
GenerateMac HMAC GENERATE_VERIFY_MAC
GenerateRandom 不適用。 此操作不使用KMS金鑰。 N/A
ReEncrypt 對稱或不對稱 ENCRYPT_DECRYPT
符號 非對稱 SIGN_VERIFY
確認 非對稱 SIGN_VERIFY
VerifyMac HMAC GENERATE_VERIFY_MAC

【1】 產生受到對稱加密金鑰保護的非對稱資料KMS金鑰對。

如需密碼編譯操作許可的詳細資訊,請參閱AWS KMS 許可

為了讓所有使用者都能 AWS KMS 快速回應且發揮高度功能, 會 AWS KMS 建立每秒呼叫之密碼編譯操作數量的配額。如需詳細資訊,請參閱密碼編譯操作的共用配額