数字签名是用于验证数据真实性的加密输出。数字签名算法支持两种不同的操作:
签名操作,使用签名密钥对原始数据生成签名
验证操作,通过此操作,签名可以由不知道签名密钥的一方验证
数字签名的主要用途包括:
- 验证签名数据的完整性
- 如果签名者声明签名不真实,则签名不可否认
数字签名依赖于非对称加密,也称为公钥加密。非对称密钥由公钥/私钥对组成。私钥用于创建签名,对应的公钥用于验证签名。
后量子加密 (PQC) 数字签名
量子计算机有可能解密使用传统加密算法(例如广泛使用的 RSA 和 ECDSA)加密的内容,这可能会使此类加密内容易遭破解。后量子加密算法旨在使用传统硬件和软件来抵御量子攻击,有助于确保数字签名的持续有效性。PQC 签名基于不同的数学问题,传统计算机和量子计算机都很难解决这些问题。
NIST 发布了两个 PQC 签名标准:ML-DSA (FIPS-204) 和 SLH-DSA (FIPS-205)。您可以将纯随机变体与 Cloud KMS 搭配使用:ML-DSA-65
和 SLH-DSA-SHA2-128s
。NIST 标准为密钥和签名定义了以下大小值(以字节为单位):
算法 | 私钥 | 公钥 | 签名 |
---|---|---|---|
SLH_DSA_SHA2_128s | 64 | 32 | 7856 |
ML_DSA_65 | 4032 | 1952 | 3309 |
数字签名的实际使用示例
您可以使用数字签名验证构建。例如,给定一个使用私钥进行数字签名的二进制文件,您可以使用与私钥对应的公钥来检查此二进制文件的有效性。如果二进制文件的签名无效,则二进制文件已遭篡改和/或损坏。
另一个示例是验证证书授权机构 (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 签名。