我正在Fedora系统上使用OpenSSL,并且Fedora定义了OPENSSL_NO_EC2M
,因此EC_POINT_get_affine_coordinates_GF2m
之类的功能不可用。我已经编写了使用这些函数的代码,这些函数想在Fedora上编译和运行。 EC_POINT_get_affine_coordinates_GFp
是替代产品(可能更慢)吗?通常,名称中带有GFp
的函数是否会替换名称中带有GF2m
的同名函数?
如果没有,我应该怎么做才能将使用它们的代码移植到没有它们的OpenSSL安装中?
答案 0 :(得分:1)
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)
是否可以将支持二进制曲线的代码移植到库的版本中,该版本将不取决于所移植的代码是否依赖二进制曲线作为其操作的重要部分。在许多情况下,代码将同时支持质数曲线和二进制曲线。因此,您可以简单地使用素数场曲线,而只需注释掉支持二进制曲线的代码位。但是,如果它只能是二进制曲线,那么您就不走运了。