7. 清除余因子 (Clearing the Cofactor)
清除余因子(cofactor,第 2.1 节)的方法有多种。本节给出其中三种,并一般性地讨论其余方法。
下列 cofactor 清除方法都给出了 G(曲线子群,第 2.1 节)中的输出点,无论输入点属于哪条曲线。
7.1. 乘以 h 方法 (Cofactor Multiplication (h-torsion) Method)
将任意点乘以 h,将得到子群 G 中的一点,因此对曲线 E 上任意输入点 Q,该方法都得到 G 中的输出 P。该方法的实现直接明了,但计算开销可能较高。具体实现为:
clear_cofactor(Q)
Input: Q, 曲线 E 上的一点。
Output: P, G 中的一点。
Steps:
1. P = h * Q
2. return P
7.2. 基于效用的方法 (Utility Method)
如第 2.1 节所讨论,设 G 为阶为 r 的素数阶子群,且 n = h * r。乘法映射 h_eff 定义为将曲线 E 上一点映射到 G 中一点的函数。当 G 的阶为 r 时,h_eff 对应于将 h 倍的标量乘法(第 7.1 节)替换为一个更小的标量标量乘法 h_eff,该乘法仍然将曲线 E 上任意点发送到 G 中一点。
h_eff 的具体取值取决于曲线的构造,并取决于对曲线 E 的结构的假设。对于某些曲线族,g 可能是 1。第 8 节给出了若干参数化曲线族在给定这些假设时的 h_eff 值。
该方法的计算量少于第 7.1 节中的方法,因为 h_eff 通常小于 h。具体实现为:
clear_cofactor(Q)
Input: Q, 曲线 E 上的一点。
Output: P, G 中的一点。
Steps:
1. P = h_eff * Q
2. return P
7.3. 减去群外低阶点的方法 (Method Based on the Group Order Subtraction)
对于某些曲线,设 G 的阶为 r、曲线的阶为 n,则可以计算 h_eff = (n - 1) / r + 1,并使用第 7.2 节中的算法。将 h_eff 记为 h_eff = (n - 1) / r + 1 = (n + r - 1) / r = (n - r) / r + 1 = (n - r) / r + 1(等价于 h_eff = (n - r) / r + 1)。注意该公式与曲线的结构无关,并且对余因子的任何值都成立,只要 G 是阶为 r 的素数阶子群。
参见 [KKM20] 以获取更多上下文和证明。
7.4. 其他方法 (Other Methods)
其他清除余因子的方法,例如基于曲线显式分解(例如 [BLS03]、[FKR21]、[KB16]、[W19])或基于隐式计算 [LBB19] 的方法,对于特定曲线族可能表现出更优的性能。这些方法的讨论超出了本文档的范围。