数字签名是用于验证数据真实性的加密输出。数字签名算法支持两种不同的操作:
签名操作,使用签名密钥对原始数据生成签名
验证操作,通过此操作,签名可以由不知道签名密钥的一方验证
数字签名的主要用途包括:
- 验证签名数据的完整性
- 如果签名者声明签名不真实,则签名不可否认
数字签名依赖于非对称加密,也称为公钥加密。非对称密钥由公钥/私钥对组成。私钥用于创建签名,对应的公钥用于验证签名。
数字签名的实际使用示例
您可以使用数字签名验证构建。例如,给定一个使用私钥进行数字签名的二进制文件,您可以使用与私钥对应的公钥来检查此二进制文件的有效性。如果二进制文件的签名无效,则二进制文件已遭篡改和/或损坏。
另一个示例是验证证书授权机构 (CA) 颁发的证书的主体。CA 根据主体对公钥/私钥的私钥部分的所有权向主体颁发证书。证书包含使用主体的私钥创建的数字签名。 证书还包含主体在公钥/私钥中的公钥部分。 与主体交互的实体使用主体的公钥和其他证书验证规则来验证签名。如果签名与相关数据不对应,或者违反了证书规定的验证规则,则签名将被视为无效。
数字签名工作流
下文介绍了创建和验证签名的流程。此工作流中的两个参与者包括数据签名者和数据接收者。
签名者创建一个支持数字签名的非对称密钥。
签名者可以使用此密钥创建多个签名。
签名者对数据执行私钥操作以创建数字签名。
签名者向数据接收者提供数据和数字签名。
接收者使用签名者的公钥/私钥对的公钥部分来验证数字签名。如果验证不成功,则数据已被更改。
签名算法
Cloud Key Management Service 支持将椭圆曲线 (EC) 算法和 RSA 算法用于数字签名。这两种行业标准算法都可以让您选择密钥大小和摘要算法。
椭圆曲线加密依赖单向哈希函数和点乘法,辅以确定某个点(给定其原点)的被乘数的难度,计算椭圆曲线上的点。 这种确定被乘数的难度是 EC 加密的加密优势。 曲线的大小越大,计算被乘数就越难。EC 加密的优势是,与提供相同加密强度的 RSA 密钥相比,EC 密钥具有更小的密钥大小。
RSA 加密依赖于将较大整数分解为两个或更多因子的难度。密钥大小越大,分解整数就越难。
Cloud KMS 数字签名功能
Cloud KMS 提供以下与创建和验证数字签名相关的功能。
能够创建非对称密钥,并将密钥用途设为
ASYMMETRIC_SIGN
。用于非对称签名的 Cloud KMS 密钥同时支持椭圆曲线签名算法和 RSA 签名算法。能够创建数字签名。
能够检索非对称密钥的公钥。
您无法直接通过 Cloud KMS 来验证数字签名。而是使用公开提供的 SDK 和工具(例如 OpenSSL)验证数字签名。这些 SDK 和工具需要您从 Cloud KMS 中检索的公钥。如需了解如何使用开放式 SDK 和工具,请参阅验证椭圆曲线签名和验证 RSA 签名。