无法使用来自“加密”包 openssl 后端的特定 EC_KEY 操作

问题描述 投票:0回答:0

我正在尝试通过使用

cryptography
python 包的
default_backend
.

在 OpenSSL 中使用 EC 算术运算

我需要对

cryptography
使用的公钥进行点乘、加法等操作。我根本不熟悉 OpenSSL API,所以我找到了这个旧的存储库,它试图做我需要做的事情:https://github.com/tuxxy/hazmat-math

不幸的是,上面的回购已经死了,作者不活跃所以我不期待他们的回答,因此我在这里问这个问题。

不幸的是,当我尝试执行以下代码时

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import ec, utils
from hazmat_math import operations as ops

nist256 = ec.SECP256R1()
priv = ec.generate_private_key(nist256, default_backend())
pub = priv.public_key()

pub2 = ops.EC_POINT_MUL(pub, priv)

我收到以下错误:

Traceback (most recent call last):
  File "/home/gidavid/Documents/eVoting/test_bench/test_arithmetic.py", line 11, in <module>
    pub2 = ops.EC_POINT_MUL(pub, priv)
  File "/home/gidavid/Documents/eVoting/test_bench/venv/lib/python3.8/site-packages/hazmat_math/operations.py", line 190, in EC_POINT_MUL
    return _point_to_public_key(backend, group, prod)
  File "/home/gidavid/Documents/eVoting/test_bench/venv/lib/python3.8/site-packages/hazmat_math/utils.py", line 53, in _point_to_public_key
    res = backend._lib.EC_KEY_set_group(ec_key, group)
AttributeError: module 'lib' has no attribute 'EC_KEY_set_group'

我怀疑这可能与 openSSL 版本有关,因为根据文档https://www.openssl.org/docs/man3.0/man3/EC_KEY_set_public_key.html,EC_KEY_set_group 函数在 v3.0.0 中已弃用 但是,打开 python shell 并获取 openssl 版本号返回:

>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 1.1.1f  31 Mar 2020'

试图辨别加密库是否以某种方式使用与我的 python 安装不同版本的 openssl:

>>> from cryptography.hazmat.backends import default_backend
>>> d = default_backend()
>>> d._binding.lib.CRYPTOGRAPHY_OPENSSL_300_OR_GREATER
1

这意味着它实际上是 3.0.0 或更高版本,因此该功能已被弃用。

根据我的估计,这给我留下了两个选择:

  • 尝试追踪加密包使用的 openssl 安装并弄乱它,以便我可以使用已弃用的功能
  • 尝试将其恢复到较早的 openssl 版本
  • 采用完全不同的方法在 EC 曲线上获得常数时间点乘法

非常感谢任何输入

python python-3.x openssl cryptography elliptic-curve
© www.soinside.com 2019 - 2024. All rights reserved.