gpt4 book ai didi

cryptography - OpenSSL gost 引擎问题

转载 作者:行者123 更新时间:2023-12-04 04:59:55 27 4
gpt4 key购买 nike

我正在尝试使用 OpenSSL 1.0.0d 实现 ECDH key 交换 GOST 34.10-2001。我正在像这样加载 gost 引擎:

    ENGINE * e = ENGINE_by_id("gost");

if(!e)
{
e = ENGINE_by_id("dynamic");
if (!e)
{
ENGINE_load_dynamic();
e = ENGINE_by_id("dynamic");
}

if (e && (!ENGINE_ctrl_cmd_string(e, "SO_PATH", "gost", 0) || !ENGINE_ctrl_cmd_string(e, "LOAD", NULL, 0)))
return 1;
}

if(!ENGINE_init(e))
return 1;

ENGINE_set_default(e, ENGINE_METHOD_ALL);
OpenSSL_add_all_algorithms();

此时 GOST 引擎已加载并且工作正常(我认为是这样)。我用散列和加密算法做了一些测试。

但是当我尝试实现 ECDH(通过导入另一方公钥生成共享 key )时,我得到了不正确的结果(共享 key 与另一方不同)。

我已经检查了 a, b, p, q, x, y 参数,检查了代码流,但无法找出问题所在。

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD94
a6
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD97
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C611070995AD10045841B09B761B893
1
8D91E471E0989CDA27DF505A453F2B7635294F2DDF23E3B122ACC99C9E9F1E14

有一件事:VKO 34.10-2001 算法在 openssl\engines\ccgost\gost2001_keyx.c(函数 VKO_compute_key)中实现,但是当我调用通用函数 ECDH_compute_key 时,它不会导致 VKO_compute_key(由在 VKO_compute_key 的开头设置 int3)。

我是不是误会了什么?或者有人可以展示使用来自 openssl 的 gost 引擎生成共享 key 的示例吗?

最佳答案

我知道这是一个老问题,但对于某些人来说它可能仍然是热门话题。

以下代码在使用 GOST 引擎时会生成一个共享 key 。

int get_shared_key(
EVP_PKEY *priv,
EVP_PKEY *peer,
unsigned char *ukm,
int ukm_size,
unsigned char *secret,
size_t *secret_len)
{
int result = 0;
EVP_PKEY_CTX *ctx = NULL;
int key_size = 0;

if((ctx = EVP_PKEY_CTX_new(priv, NULL)) == NULL)
goto err;
if(EVP_PKEY_derive_init(ctx) != 1)
goto err;
if(EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_DERIVE, EVP_PKEY_CTRL_SET_IV, ukm_size, ukm) != 1)
goto err;
if(EVP_PKEY_derive_set_peer(ctx, peer) != 1)
goto err;
key_size=EVP_PKEY_derive(ctx, NULL, secret_len);
if(key_size != GOST_R_34_12_2015_KEY_SIZE)
goto err;
if(EVP_PKEY_derive(ctx, secret, secret_len) != 1)
goto err;

result = 1;
goto end;
err:
ERR_print_errors_fp(stderr);
end:
if(ctx)
EVP_PKEY_CTX_free(ctx);
return result;
}

关于cryptography - OpenSSL gost 引擎问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8815246/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com