10. 安全考虑因素 (Security Considerations)
本节包含有关本文档中描述的哈希到曲线机制的额外安全考虑。
10.1. 编码的性质 (Properties of Encodings)
每种编码类型(第 3 节)接受任意字节串并将其映射到从依赖于编码类型的分布中采样的曲线上的点。重要的是要注意,使用非均匀编码或直接评估第 6 节的映射之一会产生易于与均匀随机点区分的输出。使用非均匀编码的应用程序应该 (SHOULD) 仔细分析非均匀性的安全影响。当所需的编码不明确时,应用程序应该 (SHOULD) 使用均匀编码。
第 3 节中给出的两种编码都可以输出群 G 的单位元。任一编码函数输出单位元的概率对于随机输入大约为 1/r,对于密码学有用的椭圆曲线而言这是可以忽略的。此外,在计算上不可行找到其对应输出为单位元的任一编码函数的输入。使用这些编码函数的协议不应该 (SHOULD NOT) 添加特殊情况来检测和"修复"单位元。
当 hash_to_curve 函数(第 3 节)使用与随机预言机不可区分的 hash_to_field 函数(第 5 节)实例化时,结果函数与随机预言机不可区分。在许多情况下,这样的函数可以安全地用于其安全分析假设随机预言机在椭圆曲线上输出均匀随机点的密码学协议中。
10.2. 哈希密码 (Hashing Passwords)
当使用本文档中描述的任何函数哈希密码时,了解哈希函数输出(或可能是任何中间值,例如 hash_to_field 的输出)的对手可能能够进行字典攻击。为了减轻此类攻击,建议首先对密码执行成本更高的密钥派生函数(例如 PBKDF2 [RFC8018]、scrypt [RFC7914] 或 Argon2 [RFC9106]),然后将该函数的输出哈希到目标椭圆曲线。为了抗碰撞,密钥派生函数的基础哈希应根据第 5.3.1 节中列出的指南选择。
10.3. 常数时间要求 (Constant-Time Requirements)
强烈推荐 (STRONGLY RECOMMENDED) 对本文档中所有函数的常数时间实现用于所有用途,以避免通过侧信道泄露信息。当编码的输入是秘密值时,使用常数时间实现尤为重要;在这种情况下,常数时间实现对于防御时序攻击是必需的 (REQUIRED)(例如 [VR20])。当需要常数时间实现时,必须以常数时间实现所有基本操作和实用函数,如第 4 节所述。
在某些应用程序中(例如嵌入式系统),通过其他侧信道(例如功耗或电磁侧信道)的泄露可能是相关的。防御此类泄露超出了本文档的范围,因为泄露的性质和适当的防御取决于应用程序。
10.4. encode_to_curve:输出分布和不可区分性
encode_to_curve 函数(第 3 节)返回从统计上远离均匀的分布中采样的点。此分布大致界定如下:首先,它至少包括 G 中八分之一的点,其次,分布中点的概率变化最多为四倍。当使用第 6 节中的任何 map_to_curve 函数实例化 encode_to_curve 时,这些界限成立。
这些界限来自文献中的几项工作:
- Shallue 和 van de Woestijne [SW06] 以及 Fouque 和 Tibouchi [FT12] 推导了 Shallue-van de Woestijne 映射的界限(第 6.6.1 节)。
- Fouque 和 Tibouchi [FT10] 以及 Tibouchi [T14] 推导了简化 SWU 映射的界限(第 6.6.2 节和第 6.6.3 节)。
- Bernstein 等人 [BHKL13] 推导了 Elligator 2 映射的界限(第 6.7.1 节和第 6.8.2 节)。
10.5. hash_to_field 安全性
hash_to_field 函数(第 5 节中定义)在 expand_message(第 5.3 节)被建模为随机预言机时与随机预言机不可区分 [MRH04]。由于不可区分性证明是可组合的,当 expand_message 相对于被建模为随机预言机的基础原语被证明与随机预言机不可区分时,这也成立。当遵循第 5.3 节中的指南时,该节中定义的两个 expand_message 变体都满足此要求(另请参见第 10.6 节)。
10.6. expand_message_xmd 安全性
expand_message_xmd 函数(第 5.3.1 节中定义)在以下情况之一成立时与随机预言机不可区分 [MRH04]:
- H 与随机预言机不可区分,
- H 是基于海绵的哈希函数,其内部函数被建模为随机变换或随机置换 [BDPV08],或
- H 是 Merkle-Damgaard 哈希函数,其压缩函数被建模为随机预言机 [CDMP05]。
对于情况 (1) 和 (2),expand_message_xmd 的不可区分性直接来自 H 的不可区分性。
对于情况 (3),即 H 是 Merkle-Damgaard 哈希函数的情况,不可区分性来自 [CDMP05],定理 5。
10.7. expand_message 变体的域分离
如第 2.2.5 节所述,域分离的目的是确保查询多个独立随机预言机的密码学协议的安全分析即使所有这些随机预言机都基于一个基础函数 H 实例化也保持有效。
本文档中的 expand_message 变体(第 5.3 节)通过向 H 哈希的所有字符串附加无后缀编码的域分离标签 DST_prime 来确保域分离。
10.8. 目标安全级别 (Target Security Levels)
每个密码套件为基础曲线指定目标安全级别(以位为单位)。此参数确保相应的 hash_to_field 实例化是保守和正确的。我们强调此参数只是曲线安全级别的上限,既不是保证也不是对其适用于给定应用程序的认可。数学和密码学进步可能会降低任何曲线的有效安全级别。