密钥用途和算法

每个 Cloud Key Management Service 密钥都有其相应用途,用于定义密钥的加密功能。用途还确定密钥的各版本支持哪些算法。各个算法都定义了每个加密操作必须使用哪些参数。每个密钥还具有相应保护级别,以指示加密操作是在软件或硬件安全模块 (HSM) 中执行。

密钥用途

Cloud KMS 为以下场景提供了相应密钥用途:

情况 密钥用途 (SDK) 密钥用途 (API) 支持的方法
对称加密 encryption ENCRYPT_DECRYPT cryptoKeys.encrypt cryptoKeys.decrypt
原始对称加密 raw-encryption RAW_ENCRYPT_DECRYPT cryptoKeys.rawEncrypt cryptoKeys.rawDecrypt
非对称签名 asymmetric-signing ASYMMETRIC_SIGN cryptoKeyVersions.asymmetricSign cryptoKeyVersions.getPublicKey
非对称加密 asymmetric-encryption ASYMMETRIC_DECRYPT cryptoKeyVersions.asymmetricDecrypt cryptoKeyVersions.getPublicKey
密钥封装机制 key-encapsulation KEY_ENCAPSULATION cryptoKeyVersions.decapsulate cryptoKeyVersions.getPublicKey
MAC 签名 mac MAC cryptoKeyVersions.macSign cryptoKeyVersions.macVerify

创建密钥时,可以定义该密钥的用途和算法。您可以在创建新密钥版本时更改算法,具体取决于其用途。用途无法进行改变。

具有相同用途的两个密钥可以使用不同的基础算法,但它们必须支持同一组加密操作。

对称加密算法

ENCRYPT_DECRYPT 密钥用途可启用对称加密。具有密钥用途 ENCRYPT_DECRYPT 的所有密钥都使用 GOOGLE_SYMMETRIC_ENCRYPTION 算法。此算法不使用任何参数。此算法使用 256 位高级加密标准 (AES-256) 密钥(采用伽罗瓦计数器模式 (GCM)),使用 Cloud KMS 内部元数据进行填充。

AES-256 等对称加密算法通常被认为是量子安全的。您可以继续使用对称加密。

非对称签名算法

ASYMMETRIC_SIGN 密钥用途可启用非对称签名。具有密钥用途 ASYMMETRIC_SIGN 的密钥使用不同的算法,具体取决于密钥是否支持椭圆曲线签名RSA 签名

对于具有用途 ASYMMETRIC_SIGN 的密钥,您可以通过更改算法在不同大小的密钥和不同的签名方案之间切换。

使用椭圆曲线和 RSA 的非对称签名算法容易受到未来量子计算机的攻击。如需长期不可否认的签名,请改用后量子非对称签名算法

椭圆曲线签名算法

椭圆曲线签名算法的格式如下

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 无编码的 RSASSA-PKCS1-v1_5 签名,具有 2048 位密钥
rsa-sign-raw-pkcs1-3072 RSA_SIGN_RAW_PKCS1_3072 无编码的 RSASSA-PKCS1-v1_5 签名,具有 3072 位密钥
rsa-sign-raw-pkcs1-4096 RSA_SIGN_RAW_PKCS1_4096 无编码的 RSASSA-PKCS1-v1_5 签名,具有 4096 位密钥

对于概率签名方案 (PSS),使用的盐长度等于摘要算法的长度。例如,RSA_SIGN_PSS_2048_SHA256 将使用盐长度为 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 Pure 基于模块格的数字签名算法。
pq-sign-slh-dsa-sha2-128s PQ_SIGN_SLH_DSA_SHA2_128S Pure 基于哈希的无状态数字签名算法。
pq-sign-hash-slh-dsa-sha2-128s-sha256 PQ_SIGN_HASH_SLH_DSA_SHA2_128S_SHA256 预哈希 基于哈希的无状态数字签名算法。

非对称加密算法

ASYMMETRIC_DECRYPT 密钥用途可启用 RSA 加密。ASYMMETRIC_DECRYPT 算法的格式如下

RSA_DECRYPT_PADDING_ALGORITHM_MODULUS_BIT_LENGTH_DIGEST_ALGORITHM

其中

  • PADDING_ALGORITHM 是填充算法
  • MODULUS_BIT_LENGTH 是密钥的位长度
  • DIGEST_ALGORITHM 是摘要算法

使用 RSA 算法的非对称加密容易受到量子计算的攻击,包括“现在收集,日后解密”(HNDL) 攻击。在 HNDL 攻击中,恶意攻击者会拦截无法解密的密文,然后将其存储起来,希望最终能够使用量子计算技术解密该密文。如果您传输的数据即使在量子计算取得进展后也必须长期保密,请选择密钥封装算法

下表列出了用途为 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 307 位密钥
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 位密钥

所有这些算法都使用具有掩码生成函数 MGF1 的最优非对称加密填充 (OAEP)。MGF1 需要摘要算法。在 Cloud KMS 中,要与 MGF1 搭配使用的摘要函数将在密钥算法名称中进行指定。例如,如果您使用的是 RSA_DECRYPT_OAEP_3072_SHA256 算法,则在加密数据时应当将 SHA-256 和 MGF1 搭配使用。

密钥封装算法

KEY_ENCAPSULATION 密钥用途用于通过密钥封装机制建立共享密钥。

下表列出了具有 KEY_ENCAPSULATION 用途的密钥的可能算法。所有这些算法都旨在实现后量子安全。在 gcloud 命令中使用小写的算法名称,而在 Cloud Key Management Service API 中使用大写的名称。

算法 (SDK) 算法 (API) 说明
ml-kem-768 ML_KEM_768 基于模块网格的密钥封装机制,采用 ML-KEM-768 参数集 (FIPS 203)
ml-kem-1024 ML_KEM_1024 基于模块网格的密钥封装机制,采用 ML-KEM-1024 参数集 (FIPS 203)
kem-xwing KEM_XWING 将 ML-KEM-768 与 X25519 相结合的 X-Wing 混合 KEM

MAC 签名算法

MAC 密钥用途可启用对称 MAC 签名。密钥用途为 MAC 的密钥仅支持 HMAC 签名

HMAC 签名算法

HMAC 签名算法的格式如下

HMAC_HASH_ALGORITHM

其中

  • HASH_ALGORITHM 是哈希算法

大多数对称算法通常被认为是量子安全的。不过,HMAC-SHA1 算法不是量子安全算法。如果您希望对称签名在量子计算发展的情况下仍能长期保持可信度,请选择摘要大小更大的 HMAC 密钥。

下表列出了用途为 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 签名算法为 RSA_SIGN_PSS_3072_SHA256

对于非对称加密,推荐使用 RSA_DECRYPT_OAEP_3072_SHA256 算法。

对于 MAC 签名,建议使用 HMAC_SHA256 算法。

对于密钥封装,我们建议使用 KEM_XWING,这是一种混合算法,可针对传统对手和潜在的量子对手提供分层防御。

如需查看要与 gcloud CLI 搭配使用的受支持的算法值列表,请参阅 --default-algorithm

保护级别

保护级别指示加密操作的执行方式。创建密钥后,无法更改其保护级别。

保护级别 说明
SOFTWARE 在软件中执行加密操作。
HSM 在 HSM 中执行加密操作。
HSM_SINGLE_TENANT 在专用
               : cluster of HSM partitions, exclusively created for a
               : single-tenant Cloud HSM instance.

EXTERNAL | 使用存储在外部密钥管理器中的密钥执行加密操作, : Google Cloud 该密钥管理器通过互联网连接。限制为对称加密和非对称签名。 EXTERNAL_VPC | 使用存储在连接到 Google Cloud 的外部密钥管理器中的密钥执行加密操作 : Virtual Private Cloud (VPC)。限制为对称加密和非对称签名。

SOFTWAREHSM 保护级别的密钥均支持所有密钥用途