OpenSSL GFp 函数是否在 GF2m 函数的替代品中缓慢下降?

Are the OpenSSL GFp functions slow drop in replacements for the GF2m functions?

我在 Fedora 系统上使用 OpenSSL,Fedora 定义了 OPENSSL_NO_EC2M,因此 EC_POINT_get_affine_coordinates_GF2m 等功能不可用。我有一些代码是为使用这些函数而编写的,我想在 Fedora 上编译和 运行。 EC_POINT_get_affine_coordinates_GFp 是直接(可能更慢)的替代品吗?一般来说,名称中带有 GFp 的函数是否会替换名称中带有 GF2m 的同名函数?

如果不是,我应该如何将使用它们的代码移植到没有它们的 OpenSSL 安装?

GFp 函数适用于使用质数域的曲线,而 GF2m 函数适用于二元曲线(有关详细信息,请参阅 https://wiki.openssl.org/index.php/Elliptic_Curve_Cryptography)。换句话说,基础曲线类型不同。为使用这些 GF2m 函数而编写的任何行为良好的代码都应该只在有意义的上下文中调用它们,即它知道曲线类型是二元曲线的地方。由于使用 OPENSSL_NO_EC2M 定义构建的 OpenSSL 库中没有任何可用的二进制曲线,因此永远不会出现这些代码路径被命中的情况。

事实证明,在 API 中具有这些不同功能的需求无论如何都有些虚假。库本身可以自己弄清楚底层曲线类型是什么并做正确的事情,而且大多数 GFp/GF2m 函数的不同实现无论如何都是相同的。出于这个原因,其中许多功能最近计划在未来弃用(参见 https://github.com/openssl/openssl/commit/50db81633ec

您是否可以将支持二进制曲线的代码移植到不支持二进制曲线的库版本将取决于您移植的代码是否依赖于二进制曲线作为其操作的重要部分。在许多情况下,代码将同时支持质数曲线和二元曲线。因此,您可以简单地使用质数场曲线来代替,并简单地注释掉支持二进制曲线的代码位。但是,如果它只能是一条二元曲线,那你就不走运了。