本主题介绍了如何使用 RSA 密钥创建和使用非对称加密密钥。如果要使用非对称密钥创建和验证签名,请参阅创建和验证数字签名。如果要使用对称密钥进行加密和解密,请参阅加密和解密数据。
非对称加密使用非对称密钥的公钥部分,非对称解密使用该密钥的私钥部分。Cloud Key Management Service 提供检索公钥以及对使用该公钥加密的密文进行解密的功能。Cloud KMS 不允许直接对私钥进行访问。
准备工作
本主题提供在命令行运行的示例。要简化示例的使用,请使用 Cloud Shell。加密示例使用预先安装在 Cloud Shell 上的 OpenSSL。
创建一个非对称密钥(密钥用途为
ASYMMETRIC_DECRYPT)。 如需查看密钥用途ASYMMETRIC_DECRYPT支持哪些算法,请参阅非对称加密算法。您不能使用用途为ASYMMETRIC_SIGN的密钥执行此程序。如果您要使用命令行,请安装 OpenSSL(如果尚未安装)。如果您使用 Cloud Shell,则 OpenSSL 已安装。
对密钥的访问权限控制
对于将检索公钥的用户或服务,向非对称密钥授予
cloudkms.cryptoKeyVersions.viewPublicKey权限。对数据进行加密时需要该公钥。对于将对使用公钥加密的数据进行解密的用户或服务,向非对称密钥授予
cloudkms.cryptoKeyVersions.useToDecrypt权限。
如需了解 Cloud KMS 中的权限和角色,请参阅权限和角色。
加密数据
要使用非对称加密密钥加密数据,请检索公钥并使用公钥加密数据。
gcloud
此示例要求在本地系统上安装 OpenSSL 。
下载公钥
下载公钥:
gcloud kms keys versions get-public-key key-version \
--key key \
--keyring key-ring \
--location location \
--output-file public-key-path
将 key-version 替换为具有公钥的密钥版本。将 key 替换为密钥的名称。将 key-ring 替换为密钥所在的密钥环的名称。将 location 替换为密钥环的 Cloud KMS 位置。将 public-key-path 替换为要在本地系统上保存公钥的位置。
加密数据
使用刚才下载的公钥加密数据,并将输出保存到文件中:
openssl pkeyutl -in cleartext-data-input-file \
-encrypt \
-pubin \
-inkey public-key-path \
-pkeyopt rsa_padding_mode:oaep \
-pkeyopt rsa_oaep_md:sha256 \
-pkeyopt rsa_mgf1_md:sha256 \
> encrypted-data-output-file
将 cleartext-data-input-file 替换为要加密的路径和文件名。
将 public-key-path 替换为下载公钥的路径和文件名。
将 encrypted-data-output-file 替换为用于保存加密数据的路径和文件名 。
C#
要运行此代码,请先设置 C# 开发环境并 安装 Cloud KMS C# SDK。