Skip to main content

1. Introduction (简介)

1. Introduction (简介)

DSA [FIPS-186-4] 和 ECDSA [X9.62] 是两种标准的数字签名方案。它们在各种协议中提供数据完整性和可验证的真实性。

DSA 和 ECDSA 的一个特点是, 对于每个签名生成, 它们需要产生一个新鲜的随机值 (以下称为 k)。为了实现有效的安全性, k 必须使用密码学安全的过程, 从一组模整数中随机且均匀地选择。该过程中的即使是轻微的偏差也可能被转化为对签名方案的攻击。

对密码学安全的随机性源的需求被证明是在某些架构中部署 DSA 和 ECDSA 签名方案的障碍, 在这些架构中, 安全随机数生成具有挑战性, 特别是嵌入式系统, 如智能卡。在这些系统中, 按照公钥密码学标准 (Public-Key Cryptography Standards, PKCS) #1 [RFC3447] 规定使用的 RSA 签名算法 (使用 "type 1" 填充, 而不是概率签名方案 (Probabilistic Signature Scheme, PSS)) 和 ISO 9796-2 [ISO-9796-2], 通常是首选, 尽管它在计算上更昂贵, 因为 RSA (使用此类填充方案) 是确定性的, 因此不需要随机性源。

DSA 和 ECDSA 的随机化性质也使得实现更难测试。自动测试无法可靠地检测实现是否使用了足够高质量的随机性源。这使得实现过程更容易受到灾难性故障的影响, 这些故障通常在系统部署并成功遭受攻击后才被发现。

可以通过使用确定性过程生成 "随机" 值 k 来将 DSA 和 ECDSA 转换为确定性方案。该过程必须满足某些密码学特性, 以便维持签名方案所期望的可验证性和不可伪造性属性; 也就是说, 对于不知道签名私钥的任何人来说, 从输入消息到相应 k 值的映射必须在计算上与随机且均匀选择的函数 (从消息集到可能的 k 值集) 返回的内容无法区分。

本文档描述了这样一个过程。它具有以下特性:

  • 产生的签名与普通 DSA 和 ECDSA 完全兼容。验证签名的实体不需要改变, 甚至不需要知道用于生成 k 的过程。

  • 密钥对生成不会改变。现有私钥可以与确定性 DSA 和 ECDSA 一起使用。

  • 使用确定性 DSA 和 ECDSA 不意味着对任何秘密值或公共值有额外的存储要求。

  • 确定性 DSA 和 ECDSA 可以应用于与普通 DSA 和 ECDSA 相同的输入, 即使用密码学安全哈希函数计算的待签名消息的哈希值。

在本文档中指定的确定性 (EC)DSA 定义中做出了一些相对任意的选择; 这样做是为了使其尽可能普遍适用, 以便最大化包含的测试向量的有用性。有关一些可能的变体的讨论, 请参见第 3.6 节。

应该注意的是, 密钥对生成仍然需要随机性源。在随机性质量是问题的嵌入式系统中, 通常可以安排密钥对生成在更受控的条件下发生 (例如, 在特殊的智能卡初始化过程中或在宣誓代理的物理控制下), 或者密钥甚至可能在其他地方生成并导入到设备中。确定性 DSA 和 ECDSA 仅处理签名生成时对随机性的需求。

1.1. Requirements Language (要求语言)

本文档中的关键词 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" 和 "OPTIONAL" 应按 RFC 2119 [RFC2119] 中描述的方式解释。