7. 清除余因子 (Clearing the Cofactor)
第 6 节的映射总是输出椭圆曲线上的一个点,即阶为 h * r 的群中的一个点(第 2.1 节)。获得 G 中的一个点可能需要最后的操作,通常称为"清除余因子" (clearing the cofactor),它接受曲线上的任意点作为输入,并产生素数阶(子)群 G 中的一个点作为输出(第 2.1 节)。
余因子总是可以通过标量乘以 h 来清除。对于 h = 1 的椭圆曲线,即具有素数个点的曲线,不需要任何操作。例如,这适用于 NIST 曲线 P-256、P-384 和 P-521 [FIPS186-4]。
在某些情况下,可以通过比标量乘以 h 更快的方法来清除余因子。这些方法等效于(但通常快于)乘以某个标量 h_eff,其值由方法和曲线确定。快速清除余因子方法的示例包括:
-
对于在扩展域上具有子群 G2 的某些配对友好曲线 (pairing-friendly curves),Scott 等人 [SBCDK09] 描述了一种利用可高效计算的自同态的快速余因子清除方法。Fuentes-Castañeda 等人 [FKR11] 提出了一种有时更高效的替代方法。Budroni 和 Pintore [BP17] 为 Barreto-Lynn-Scott 配对友好曲线 [BLS03] 给出了这些方法的具体实例。附录 G.3 中描述了 BLS12-381 的具体情况。
-
Wahby 和 Boneh([WB19],第 5 节)描述了 Scott 的一个技巧,用于在任何椭圆曲线上快速清除余因子,前提是 h 的素因数分解和椭圆曲线群的结构满足某些条件。
clear_cofactor 函数由标量 h_eff 参数化。具体来说,
clear_cofactor(P) := h_eff * P
其中 * 表示标量乘法。当曲线不支持快速余因子清除方法时,h_eff = h,余因子必须 (MUST) 通过标量乘法来清除。
当曲线允许快速余因子清除方法时,clear_cofactor 可以 (MAY) 通过该方法或通过标量乘以等效的 h_eff 来评估;这两种方法给出相同的结果。请注意,在这种情况下,标量乘以余因子 h 通常不会给出与快速方法相同的结果,不得 (MUST NOT) 使用。