4. Security Considerations (安全考虑)
4. Security Considerations (安全考虑)
正确实现和使用密码学签名算法需要考虑许多参数。特别是, 私钥生成、存储、访问控制和处置是敏感操作, 本文档不以任何方式解决这些问题。确定性 (EC)DSA 展示了如何在消除签名生成期间对强随机性源或甚至任何随机性源的需求的同时, 实现标准 DSA 或 ECDSA 签名方案的安全特性。
然而, 私钥生成绝对需要这样一个强随机源。在由于缺乏适当的随机性源而使用确定性 (EC)DSA 的情况下, 必须假设私钥已在外部生成并导入到签名生成系统中, 或者在随机性可用的环境中生成。例如, 可以想象一张智能卡在工厂中仍处于受控环境条件下时生成其私钥, 但一旦部署到现场, 当物理上处于潜在攻击者手中时, 无法保证随机数据生成。
消除随机源要求和能够针对测试向量测试实现都增强了 DSA 和 ECDSA 签名者实现的安全性, 因为它们有助于避免难以测试的故障条件。确定性签名方案也可能在其他情况下有所帮助, 例如, 当使用相同密钥多次签名相同数据元素时避免虚假重复: 使用确定性签名方案, 每次都会生成相同的签名, 使重复检测更加容易。
相反, 在某些高级协议中, 缺乏随机化可能会产生不利影响, 例如, 在某些投票方案中与匿名性相关。作为经验法则, 如果整体协议可以容忍另一个确定性签名方案, 特别是 PKCS #1 [RFC3447] 中指定的 RSA (使用 "type 1" 填充, 而不是 PSS) 或 ISO 9796-2 [ISO-9796-2], 则可以使用确定性 DSA 或 ECDSA 代替真正的 DSA 或 ECDSA, 而没有额外的安全问题。适合使用确定性 DSA 或 ECDSA 的协议列表包括传输层安全性 (Transport Layer Security, TLS) [RFC5246]、安全外壳 (Secure SHell, SSH) 协议 [RFC4251]、密码学消息语法 (Cryptographic Message Syntax, CMS) [RFC5652] 及其衍生物、X.509 公钥基础设施 [RFC5280] 以及许多其他协议。
本文档中描述的构造被称为 "去随机化"。这已被提出用于各种签名方案。安全性取决于 k 的生成是否与随机预言机的输出无法区分。粗略地说, 只要 HMAC 表现为 PRF (伪随机函数), HMAC_DRBG 在该角色中就是安全的。有关 HMAC 和 HMAC_DRBG 的安全性的详细信息, 请参阅 [H2008] 和 [B2006]。有关去随机化的更正式处理, 请参阅 [LN2009]。
本文档中提出的确定性 (EC)DSA 的一个剩余问题是私钥 x 的 "双重使用", 既作为签名生成算法本身中的私钥, 又作为基于 HMAC_DRBG 的伪随机预言机的输入以产生 k 值。这要求 HMAC_DRBG 继续成为随机预言机, 即使公钥 (从 x 计算) 也是已知的。鉴于 HMAC 和离散对数之间缺乏共同结构, 这似乎是一个合理的假设。
每当攻击者可以准确测量实现的各个方面 (例如执行签名操作所需的时间长度或签名操作每个点消耗的功率) 时, 侧信道攻击都是一个重要的考虑因素。本文档中描述的算法的确定性在某些形式的侧信道攻击中可能对攻击者有用, 因此实现应使用防御措施以避免通过侧信道泄漏私钥。