相比对称加密,非对称密钥通常用于在信任程度不对等的系统之间,实现数字签名验签或者加密传递敏感信息。

非对称密钥由一对公钥和私钥组成,他们在密码学上互相关联,其中的公钥可以被分发给任何人,而私钥必须被安全的保护起来,只有受信任者可以使用。阿里云支持主流的非对称密钥算法并且提供足够的安全强度,保证数据加密和数字签名的安全性。

KMS支持对非对称密钥类型的用户主密钥生成证书签名请求CSR(Certificate Signing Request)文件,证书申请者提交CSR给证书颁发机构后,证书颁发机构使用其CA私钥为用户签发数字证书。签发的数字证书可以用于安全电子邮件、安全终端保护、代码签名保护、可信网站服务、身份授权管理等。

非对称密钥的类型

KMS支持的非对称密钥算法类型如下:
算法 密钥规格 说明 用途
RSA RSA_2048 RSA非对称密码
  • 数据的加解密运算
  • 数字签名
ECC
  • EC_P256:NIST推荐的椭圆曲线P-256
  • EC_P256K:SECG椭圆曲线secp256k1
椭圆曲线密码(Elliptic Curve Cryptography) 数字签名
SM2 EC_SM2 标准GBT32918定义的椭圆曲线密码
  • 数据的加解密运算
  • 数字签名

数据加密

非对称密钥用于数据加密,通常适用于传递敏感信息,典型场景如下:
  1. 信息接收者将加密公钥分发给信息传送者。
  2. 信息传送者使用公钥对敏感信息进行加密保护。
  3. 信息传送者将敏感信息的密文传递给信息接收者。
  4. 信息接收者使用私钥将敏感信息的密文解密。

由于解密的私钥只有信息接收者可以使用,因此可以确保敏感信息的明文在传递过程中不被恶意者截获。这种敏感信息传递的方式,被广泛用于各类密钥交换场景。例如在TLS中交换会话密钥、在不同的密码机之间导入导出加密密钥。

详情请参见非对称数据加密

数字签名

非对称密钥更广泛的用途是数字签名,即使用私钥对消息或者信息产生签名。由于私钥受到严格保护,只有受信者可以使用私钥来产生签名,使用公钥验证签名可以实现以下目的:
  • 验证数据的完整性(integrity):如果数据和签名不匹配,数据可能受到了篡改。
  • 验证消息的真实性(authenticity):如果消息和签名不匹配,消息传送者不是真实持有私钥的用户。
  • 为签名提供不可抵赖性(non-repudiation):如果数据和签名能够匹配,签名者不可以否认此签名。
典型的签名验签场景如下:
  1. 签名者将验签公钥分发给消息接收者。
  2. 签名者使用签名私钥,对数据产生签名。
  3. 签名者将数据以及签名传递给消息接收者。
  4. 消息接收者获得数据和签名后,使用公钥针对数据验证签名的合法性。

数字签名被广泛用于数据防篡改、身份认证等相关技术领域。

  • 案例1:数字签名用于对二进制代码提供完整性保护,代码执行者可以验证代码未被篡改,以提供可信的执行环境。
  • 案例2:数字证书系统中,证书机构(CA)对颁发的数字证书提供签名,证明数字证书的主体信息、公私钥信息、密钥用途、有效期、签发者等信息。证书私钥持有者使用私钥对消息进行签名,消息接收者使用证书中包含的公钥对消息签名进行验证,同时使用证书签发者的公钥,验证证书本身的合法性。

详情请参见非对称数字签名

密钥版本

由于公私钥使用场景的特殊性,KMS不支持对非对称的用户主密钥进行自动轮转。您可以调用CreateKeyVersion接口,在指定用户主密钥中创建新的密钥版本,生成全新的一对公钥和私钥。如果您使用新的版本进行数字签名或者数据加密,则需要重新分发新版本的公钥。

除此之外,和对称类型的用户主密钥不同,非对称的用于主密钥没有主版本(PrimaryKeyVersion)的概念,因此使用非对称密码运算的接口除需指定用户主密钥标志符(或别名)之外,还需指定密钥版本。

公钥运算的方式

大多数情况下,公钥加密、公钥验签的操作,都可以调用GetPublicKey接口获取公钥,之后分发给公钥使用者。使用者在业务端通过OpenSSL、Java JCE等常用的密码运算库进行本地计算。

KMS也提供公钥运算的接口AsymmetricEncryptAsymmetricVerify,满足您的业务需求。和在业务端使用公钥本地运算相比,调用KMS的公钥运算接口可以帮助您更方便的记录调用日志,或者通过访问控制服务对公钥的使用场景进行一些限制,满足您的特定需求。

私钥运算的方式

您仅能通过KMS提供的私钥运算的接口AsymmetricDecryptAsymmetricSign,来使用私钥进行数据解密或者数字签名。