数字签名

数字签名是用于验证数据真实性的加密输出。数字签名算法支持两种不同的操作:

  • 签名操作,使用签名密钥对原始数据生成签名

  • 验证操作,通过此操作,签名可以由不知道签名密钥的一方验证

数字签名的主要用途包括:

  • 验证签名数据的完整性
  • 如果签名者声明签名不真实,则签名不可否认

数字签名依赖于非对称加密,也称为公钥加密。非对称密钥由公钥/私钥对组成。私钥用于创建签名,对应的公钥用于验证签名。

数字签名的实际使用示例

您可以使用数字签名验证构建。例如,给定一个使用私钥进行数字签名的二进制文件,您可以使用与私钥对应的公钥来检查此二进制文件的有效性。如果二进制文件的签名无效,则二进制文件已遭篡改和/或损坏。

另一个示例是验证证书授权机构 (CA) 颁发的证书的主体。CA 根据主体对公钥/私钥的私钥部分的所有权向主体颁发证书。证书包含使用主体的私钥创建的数字签名。 证书还包含主体在公钥/私钥中的公钥部分。 与主体交互的实体使用主体的公钥和其他证书验证规则来验证签名。如果签名与相关数据不对应,或者违反了证书规定的验证规则,则签名将被视为无效。

数字签名工作流

下文介绍了创建和验证签名的流程。此工作流中的两个参与者包括数据签名者和数据接收者。

  1. 签名者创建一个支持数字签名的非对称密钥。

    签名者可以使用此密钥创建多个签名。

  2. 签名者对数据执行私钥操作以创建数字签名。

  3. 签名者向数据接收者提供数据和数字签名。

  4. 接收者使用签名者的公钥/私钥对的公钥部分来验证数字签名。如果验证不成功,则数据已被更改。

签名算法

Cloud Key Management Service 支持将椭圆曲线 (EC) 算法和 RSA 算法用于数字签名。这两种行业标准算法都可以让您选择密钥大小和摘要算法。

椭圆曲线加密依赖单向哈希函数和点乘法,辅以确定某个点(给定其原点)的被乘数的难度,计算椭圆曲线上的点。 这种确定被乘数的难度是 EC 加密的加密优势。 曲线的大小越大,计算被乘数就越难。EC 加密的优势是,与提供相同加密强度的 RSA 密钥相比,EC 密钥具有更小的密钥大小。

RSA 加密依赖于将较大整数分解为两个或更多因子的难度。密钥大小越大,分解整数就越难。

Cloud KMS 数字签名功能

Cloud KMS 提供以下与创建和验证数字签名相关的功能。

您无法直接通过 Cloud KMS 来验证数字签名。而是使用公开提供的 SDK 和工具(例如 OpenSSL)验证数字签名。这些 SDK 和工具需要您从 Cloud KMS 中检索的公钥。如需了解如何使用开放式 SDK 和工具,请参阅验证椭圆曲线签名验证 RSA 签名