

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

# 密碼編譯基本元素
<a name="crypto-primitives"></a>

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

## 熵和隨機數字產生
<a name="entropy-and-random-numbers"></a>

AWS KMS 金鑰產生會在 AWS KMS HSMs上執行。HSM 會實作混合式隨機數字產生器，其使用[採用 AES-256 的 NIST SP800-90A 決定性隨機位元產生器](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-90Ar1.pdf)。它植入了具有 384 位元熵的非決定性隨機位元產生器，並使用額外的熵進行更新，以便在每次呼叫加密材料時提供預測阻力。

## 對稱金鑰操作 (僅限加密)
<a name="symmetric-key-0ps"></a>

HSM 中使用的所有對稱金鑰加密命令都會使用[進階加密標準 (AES)](http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf)，採用 256 位元金鑰的 [Galois 計數器模式 (GCM)](http://csrc.nist.gov/publications/nistpubs/800-38D/SP-800-38D.pdf)。要解密的類似呼叫使用反函數。

AES-GCM 是經過驗證的加密配置。除了加密純文字以產生加密文字，它還會針對加密文字和需要身分驗證的任何其他資料 (另外驗證的資料或 AAD) 運算身分驗證標籤。身分驗證標籤有助於確保資料來自所宣稱的來源，而且加密文字和 AAD 尚未修改。

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

AWS KMS 可讓您選擇將金鑰材料匯入 ， AWS KMS key 而不是依賴 AWS KMS 產生金鑰材料。此匯入的金鑰材料可以使用 [RSAES-OAEP](https://datatracker.ietf.org/doc/html/rfc8017#section-7.1) 或 [RSAES-PKCS1-v1\$15](https://datatracker.ietf.org/doc/html/rfc8017#section-7.2) 加密，以在傳輸到 AWS KMS HSM 期間保護金鑰。RSA 金鑰對會在 AWS KMS HSM 上產生。匯入的金鑰材料會在 AWS KMS HSM 上解密，並在服務儲存之前在 AES-GCM 下重新加密。

## 非對稱金鑰操作 (加密、數位簽章和簽章驗證)
<a name="asymmetric-key-ops"></a>

AWS KMS 支援對加密和數位簽章操作使用非對稱金鑰操作。非對稱金鑰操作依賴於數學相關的公有金鑰和私有金鑰對，可用於加密和解密或簽署和簽章驗證，但不能同時用於兩者。私有金鑰永遠不會讓 AWS KMS 處於未加密狀態。您可以透過 AWS KMS 呼叫 AWS KMS API 操作來使用 中的公有金鑰，或下載公有金鑰並在 外部使用 AWS KMS。

AWS KMS 支援三種類型的非對稱密碼。
+ **RSA-OAEP (用於加密) 與 RSA-PSS 和 RSA-PKCS-\$11-v1\$15 (用於簽署和驗證)** – 針對不同的安全要求，支援 RSA 金鑰長度 (以位元為單位)：2048、3072 和 4096。
+ **橢圓曲線 (ECC)** – 專用於簽署和驗證。支援 ECC 曲線：NIST P256、P384、SECP 256k1。
+ **後量子密碼編譯** - 可抵抗量子運算的新公有金鑰密碼編譯演算法。支援具有 ML\$1DSA\$14[4、ML\$1DSA\$165 和 ML\$1DSA\$187 金鑰大小的 NIST FIPS 204 Module-Lattice 數位簽章演算法 (ML-DSA)](https://csrc.nist.gov/pubs/fips/204/final)。

## 金鑰衍生函數
<a name="key-derivation-functions"></a>

密鑰衍生函數用於從初始機密或金鑰衍生額外的金鑰。 AWS KMS 使用金鑰衍生函數 (KDF) 來衍生 AWS KMS key下每次加密的每個呼叫金鑰。所有 KDF 操作均會使用 [計數器模式中的 KDF](https://nvlpubs.nist.gov/nistpubs/legacy/sp/nistspecialpublication800-108.pdf) (使用 HMAC [[FIPS197]](http://csrc.nist.gov/publications/fips/fips198-1/FIPS-198-1_final.pdf) 與 SHA256 [[FIPS180]](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf))。256 位元衍生金鑰與 AES-GCM 搭配使用，以加密或解密客戶資料和金鑰。

## AWS KMS 數位簽章的內部使用
<a name="digital-signatures"></a>

數位簽章也可用來對命令和 AWS KMS 實體之間的通訊進行身分驗證。所有服務實體都有橢圓曲線數位簽章演算法 (ECDSA) 金鑰對。其執行[密碼編譯訊息語法 (CMS) 中橢圓曲線密碼編譯 (ECC) 演算法的使用](https://datatracker.ietf.org/doc/html/rfc5753/)和 X9.62-2005：*金融服務業的公有金鑰密碼編譯：橢圓曲線數位簽章演算法 (ECDSA)*中所定義的 ECDSA。實體使用[聯邦資訊處理標準出版物 FIPS PUB 180-4 (稱為 SHA384)](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf) 中所定義的安全雜湊演算法。金鑰於曲線 secp384r1 (NIST-P384) 產生。

## 封套加密
<a name="envelope-encryption"></a>

在許多密碼編譯系統中使用的基本結構是信封加密。信封加密使用兩個或多個密碼編譯金鑰來保護訊息。通常，一個金鑰是從較長期的靜態金鑰 *k*，另一個金鑰是每條訊息金鑰 *msgKey* (這是為了加密訊息而產生的)。信封是透過加密訊息：*ciphertext = Encrypt(msgKey, message) * 形成的。然後訊息金鑰使用長期靜態金鑰：*encKey = Encrypt(k, msgKey) * 進行加密。最後，將這兩個值* (encKey, ciphertext) *封裝成單一結構或信封加密訊息。

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

AWS KMS 可讓您管理這些長期靜態金鑰，並自動化資料的信封加密程序。

除了 AWS KMS 服務內提供的加密功能之外，[AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html) 還提供用戶端信封加密程式庫。您可以使用這些程式庫來保護您的資料和用來加密該資料的加密金鑰。