金鑰用途與演算法

每個 Cloud Key Management Service 金鑰都有「用途」,可定義金鑰的加密編譯功能。這個用途也可決定金鑰版本支援的演算法。每個「演算法」都會定義各加密編譯作業必須使用的參數。每個金鑰還有一個「防護等級」,指示加密編譯作業會在軟體還是硬體安全性模組 (HSM) 中執行。

金鑰用途

Cloud KMS 為下列情境提供金鑰用途:

情境 金鑰用途 (SDK) 金鑰用途 (API) 支援的方法
對稱式加密 encryption ENCRYPT_DECRYPT cryptoKeys.encryptcryptoKeys.decrypt
原始對稱式加密 raw-encryption RAW_ENCRYPT_DECRYPT cryptoKeys.rawEncryptcryptoKeys.rawDecrypt
非對稱式簽署 asymmetric-signing ASYMMETRIC_SIGN cryptoKeyVersions.asymmetricSigncryptoKeyVersions.getPublicKey
非對稱式加密 asymmetric-encryption ASYMMETRIC_DECRYPT cryptoKeyVersions.asymmetricDecryptcryptoKeyVersions.getPublicKey
MAC 簽署 mac MAC cryptoKeyVersions.macSigncryptoKeyVersions.macVerify

建立金鑰時,您可以定義該金鑰的用途與演算法。您可以在建立新金鑰版本時,根據其用途的範圍變更演算法。用途無法變更。

具有相同用途的兩個金鑰可使用不同的基礎演算法,但必須支援同一組加密編譯作業。

對稱式加密演算法

ENCRYPT_DECRYPT 金鑰用途可啟用對稱式加密。具有金鑰用途 ENCRYPT_DECRYPT 的所有金鑰都使用 GOOGLE_SYMMETRIC_ENCRYPTION 演算法。此演算法不使用任何參數。在 Galois 計數器模式 (GCM) 下,此演算法會使用 256 位元進階加密標準 (AES-256) 金鑰,且會填補 Cloud KMS 內部中繼資料。

非對稱式簽署演算法

ASYMMETRIC_SIGN 金鑰用途可啟用非對稱式簽署。具有金鑰用途 ASYMMETRIC_SIGN 的金鑰會使用不同的演算法,這取決於金鑰支援橢圓曲線簽署還是 RSA 簽署

針對具有用途 ASYMMETRIC_SIGN 的金鑰,您可以透過演算法在不同大小的金鑰和不同簽名配置之間切換。

橢圓曲線簽署演算法

橢圓曲線簽署演算法的格式如下

EC_SIGN_[ELLIPTIC_CURVE]_[DIGEST_ALGORITHM]

其中

  • [ELLIPTIC_CURVE] 是橢圓曲線
  • [DIGEST_ALGORITHM] 是摘要演算法

下表列出具有用途 ASYMMETRIC_SIGN 之橢圓曲線金鑰的可能演算法。使用 gcloud 指令時,請使用小寫的演算法名稱,使用 Cloud Key Management Service API 時,請使用大寫的演算法名稱。

演算法 (SDK) 演算法 (API) 說明
ec-sign-ed25519 EC_SIGN_ED25519 PureEdDSA 模式中,以 Curve25519 為基礎的 EdDSA,會將原始資料做為輸入資料,而非雜湊資料
ec-sign-p256-sha256 **(建議)** EC_SIGN_P256_SHA256 具有 SHA-256 摘要之 P-256 曲線的 ECDSA
ec-sign-p384-sha384 EC_SIGN_P384_SHA384 具有 SHA-384 摘要之 P-384 曲線的 ECDSA
ec-sign-secp256k1-sha256 EC_SIGN_SECP256K1_SHA256 具有 SHA-256 摘要的 Secp256k1 曲線 ECDSA

RSA 簽署演算法

RSA 簽署演算法的格式如下

RSA_SIGN_[PADDING_ALGORITHM]_[MODULUS_BIT_LENGTH]_[DIGEST_ALGORITHM]

其中

  • [PADDING_ALGORITHM] 是填充演��法
  • [MODULUS_BIT_LENGTH] 是金鑰的位元長度
  • [DIGEST_ALGORITHM] 是摘要演算法

請注意,部分演算法會以以下格式呈現:

RSA_SIGN_RAW_[PADDING_ALGORITHM]_[MODULUS_BIT_LENGTH]

並省略摘要演算法。這些演算法是 PKCS #1 簽署的變體,會省略編碼至 DigestInfo。在變化版本中:

  • 系統會針對要簽署的訊息計算摘要
  • 直接將 PKCS #1 填充字串套用至摘要
  • 使用 RSA 私密金鑰計算填補摘要的簽名

下表列出具有用途 ASYMMETRIC_SIGN 之 RSA 金鑰的可能演算法。使用 gcloud 指令時,請使用小寫的演算法名稱;使用 Cloud Key Management Service API 時,請使用大寫的演算法名稱。

演算法 (SDK) 演算法 (API) 說明
rsa-sign-pss-2048-sha256 RSA_SIGN_PSS_2048_SHA256 具有 SHA-256 摘要的 RSASSA-PSS 2048 位元金鑰
rsa-sign-pss-3072-sha256 (建議) RSA_SIGN_PSS_3072_SHA256 具有 SHA-256 摘要的 RSASSA-PSS 3072 位元金鑰
rsa-sign-pss-4096-sha256 RSA_SIGN_PSS_4096_SHA256 具有 SHA-256 摘要的 RSASSA-PSS 4096 位元金鑰
rsa-sign-pss-4096-sha512 RSA_SIGN_PSS_4096_SHA512 具有 SHA-512 摘要的 RSASSA-PSS 4096 位元金鑰
rsa-sign-pkcs1-2048-sha256 RSA_SIGN_PKCS1_2048_SHA256 具有 2048 位元金鑰和 SHA-256 摘要的 RSASSA-PKCS1 v1_5
rsa-sign-pkcs1-3072-sha256 RSA_SIGN_PKCS1_3072_SHA256 具有 3072 位元金鑰和 SHA-256 摘要的 RSASSA-PKCS1 v1_5
rsa-sign-pkcs1-4096-sha256 RSA_SIGN_PKCS1_4096_SHA256 具有 4096 位元金鑰和 SHA-256 摘要的 RSASSA-PKCS1 v1_5
rsa-sign-pkcs1-4096-sha512 RSA_SIGN_PKCS1_4096_SHA512 具有 4096 位元金鑰和 SHA-512 摘要的 RSASSA-PKCS1 v1_5
rsa-sign-raw-pkcs1-2048 RSA_SIGN_RAW_PKCS1_2048 使用 2048 位元金鑰,以不含編碼的 RSASSA-PKCS1-v1_5 簽名
rsa-sign-raw-pkcs1-3072 RSA_SIGN_RAW_PKCS1_3072 使用 3072 位元金鑰,以不含編碼的 RSASSA-PKCS1-v1_5 簽名
rsa-sign-raw-pkcs1-4096 RSA_SIGN_RAW_PKCS1_4096 使用 4096 位元金鑰,以不含編碼的 RSASSA-PKCS1-v1_5 簽名

針對概率簽名配置 (PSS),使用的 salt 長度與摘要演算法的長度相等。例如,RSA_SIGN_PSS_2048_SHA256 將使用 salt 長度為 256 位元的 PSS。此外,針對 PSS,演算法名稱中指定的摘要演算法也適用於遮罩產生函式 (MGF1)。例如,如果您使用 RSA_SIGN_PSS_2048_SHA256,將會提交要簽署之資料的 SHA-256 雜湊,當計算簽名時,Cloud KMS 會在內部使用 SHA-256 做為 MGF1 的雜湊演算法。

PQC 簽署演算法

後量子密碼編譯 (PQC) 簽署演算法開頭為 PQ_SIGN_。下表列出 Cloud KMS 可用於用途 ASYMMETRIC_SIGN 的金鑰所使用的 PQC 演算法。這兩種演算法都會將原始資料做為輸入內容。

演算法 (SDK) 演算法 (API) 說明
pq-sign-ml-dsa-65 PQ_SIGN_ML_DSA_65 以模組格狀結構為基礎的數位簽章演算法。
pq-sign-slh-dsa-sha2-128s PQ_SIGN_SLH_DSA_SHA2_128S 無狀態雜湊數位簽章演算法。

非對稱式加密演算法

ASYMMETRIC_DECRYPT 金鑰用途可啟用 RSA 加密。ASYMMETRIC_DECRYPT 演算法的格式如下

RSA_DECRYPT_[PADDING_ALGORITHM]_[MODULUS_BIT_LENGTH]_[DIGEST_ALGORITHM]

其中

  • [PADDING_ALGORITHM] 是填充演算法
  • [MODULUS_BIT_LENGTH] 是金鑰的位元長度
  • [DIGEST_ALGORITHM] 是摘要演算法

下表列出具有用途 ASYMMETRIC_DECRYPT 之 RSA 金鑰的可能演算法。使用 gcloud 指令時,請使用小寫的演算法名稱,使用 Cloud Key Management Service API 時,請使用大寫的演算法名稱。

演算法 (SDK) 演算法 (API) 說明
rsa-decrypt-oaep-2048-sha1 RSA_DECRYPT_OAEP_2048_SHA1 具有 SHA-1 摘要的 RSAES-OAEP 2048 位元金鑰
rsa-decrypt-oaep-2048-sha256 RSA_DECRYPT_OAEP_2048_SHA256 具有 SHA-256 摘要的 RSAES-OAEP 2048 位元金鑰
rsa-decrypt-oaep-3072-sha1 RSA_DECRYPT_OAEP_3072_SHA1 具有 SHA-1 摘要的 RSAES-OAEP 3072 位元金鑰
rsa-decrypt-oaep-3072-sha256 (建議) RSA_DECRYPT_OAEP_3072_SHA256 具有 SHA-256 摘要的 RSAES-OAEP 3072 位元金鑰
rsa-decrypt-oaep-4096-sha1 RSA_DECRYPT_OAEP_4096_SHA1 具有 SHA-1 摘要的 RSAES-OAEP 4096 位元金鑰
rsa-decrypt-oaep-4096-sha256 RSA_DECRYPT_OAEP_4096_SHA256 具有 SHA-256 摘要的 RSAES-OAEP 4096 位元金鑰
rsa-decrypt-oaep-4096-sha512 RSA_DECRYPT_OAEP_4096_SHA512 具有 SHA-512 摘要的 RSAES-OAEP 4096 位元金鑰

所有這些演算法都會將最佳非對稱加密填充演算法 (OAEP) 與遮罩產生函式 MGF1 搭配使用。MGF1 需要摘要演算法。在 Cloud KMS 中,會將要與 MGF1 搭配使用的摘要函式指定為金鑰演算法名稱的一部分。例如,如果您使用 RSA_DECRYPT_OAEP_3072_SHA256 演算法,加密資料時,應將 SHA-256 與 MGF1 搭配使用。

MAC 簽署演算法

MAC 金鑰用途可啟用對稱式 MAC 簽署。金鑰用途為 MAC 的金鑰目前僅支援HMAC 簽署

HMAC 簽署演算法

HMAC 簽署演算法的格式如下

HMAC_[HASH_ALGORITHM]

其中

  • [HASH_ALGORITHM] 是雜湊演算法

下表列出目前可用於用途為 MAC 的金鑰的 HMAC 演算法。使用 gcloud 指令時,請使用小寫的演算法名稱,使用 Cloud Key Management Service API 時,請使用大寫的演算法名稱。

演算法 (SDK) 演算法 (API) 說明
hmac-sha1 HMAC_SHA1 含 SHA-1 摘要的 HMAC
hmac-sha224 HMAC_SHA224 使用 SHA-224 摘要的 HMAC
hmac-sha256 (建議) HMAC_SHA256 含有 SHA-256 摘要的 HMAC
hmac-sha384 HMAC_SHA384 使用 SHA-384 摘要的 HMAC
hmac-sha512 HMAC_SHA512 使用 SHA-512 摘要的 HMAC

演算法建議

針對數位簽署,建議使用橢圓曲線簽署演算法。對於橢圓曲線演算法,建議使用 EC_SIGN_P256_SHA256。如邀您要使用 RSA 簽署演算法,建議使用 RSA_SIGN_PSS_3072_SHA256。

針對非對稱式加密,建議使用 RSA_DECRYPT_OAEP_3072_SHA256 演算法。

針對 MAC 簽署,建議使用 HMAC_SHA256 演算法。

如需與 gcloud CLI 搭配使用的支援演算法值清單,請參閱 --default-algorithm

防護等級

防護等級會指示執行加密編譯作業的方式。建立金鑰之後,就無法變更防護等級。

防護等級 說明
SOFTWARE 加密編譯作業會在軟體中執行。
HSM 加密編譯作業會在 HSM 中執行。
EXTERNAL 加密編譯作業會以儲存在外部金鑰管理工具中的金鑰執行,該工具會透過網際網路連線至 Google Cloud。僅限對稱式加密和非對稱式簽署。
EXTERNAL_VPC 加密編譯作業會以儲存在外部金鑰管理工具中的金鑰執行,該金鑰是透過虛擬私有雲 (VPC) 連線至 Google Cloud。僅限對稱式加密和非對稱式簽署。

防護等級為 SOFTWAREHSM 的金鑰支援���有金鑰用途