每个 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 |
MAC 签名 | mac |
MAC |
cryptoKeyVersions.macSign、cryptoKeyVersions.macVerify |
创建密钥时,可以定义该密钥的用途和算法。您可以在创建新密钥版本时更改算法,具体取决于其用途。用途无法进行改变。
具有相同用途的两个密钥可以使用不同的基础算法,但它们必须支持同一组加密操作。
对称加密算法
ENCRYPT_DECRYPT 密钥用途可启用对称加密。具有密钥用途 ENCRYPT_DECRYPT 的所有密钥都使用 GOOGLE_SYMMETRIC_ENCRYPTION 算法。此算法不使用任何参数。此算法使用 256 位高级加密标准 (AES-256) 密钥(采用伽罗瓦计数器模式 (GCM)),使用 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 |
EdDSA on the Curve25519 (PureEdDSA) 模式,它会将原始数据(而不是经过哈希处理的数据)作为输入 |
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 的哈希算法。
非对称加密算法
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 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 搭配使用。
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 签名算法为 RSA_SIGN_PSS_3072_SHA256。
对于非对称加密,推荐使用 RSA_DECRYPT_OAEP_3072_SHA256 算法。
对于 MAC 签名,建议使用 HMAC_SHA256。
如需查看要与 gcloud CLI 搭配使用的受支持算法值的列表,请执行以下操作: 请参阅 --default-algorithm。
保护级别
保护级别指示加密操作的执行方式。创建密钥后,无法更改其保护级别。
保护级别 | 说明 |
---|---|
SOFTWARE | 在软件中执行加密操作。 |
HSM | 在 HSM 中执行加密操作。 |
外部 | 使用存储在外部密钥管理器中的密钥(通过互联网连接到 Google Cloud)来执行加密操作。限制为对称加密和非对称签名。 |
EXTERNAL_VPC | 使用存储在通过 Virtual Private Cloud (VPC) 连接到 Google Cloud 的外部密钥管理器中的密钥执行加密操作。限制为对称加密和非对称签名。 |
SOFTWARE
或 HSM
保护级别的密钥均支持所有密钥用途。