gpt4 book ai didi

c - 如何提供 OpenSSL 随机数据以用于 ECDSA 签名?

转载 作者:太空狗 更新时间:2023-10-29 15:25:20 25 4
gpt4 key购买 nike

我想在使用 EC key 对数据签名期间提供 OpenSSL 特定数据以用作随机种子。我这样做是为了将我的应用程序与另一个引用应用程序(闭源)进行比较。该实用程序将带有私钥的文件、带有要签名的数据的文件和带有随机数据的文件作为参数。

我已经生成了 EC key 并签署了数据,但无法比较这两个应用程序,因为我没有共同点。 OpenSSL 生成用于签署数据的随机数据(可能来自/dev/random),因此每次运行都会给我不同的签名。

我尝试将 RAND_clear()RAND_add() 结合使用,但签名不断变化。要么我不理解整个 ECDSA 概念,要么我做错了什么。

我比较应用程序的第二个选择是导入公钥并验证引用程序生成的签名。这是更好的选择,但我无法导入给定的示例公钥(83 个字符的十六进制字符串)。 EC_POINT_oct2point() 一直给我空结果。

任何帮助/指针/引用将不胜感激。

char * key_as_binary_data;  //369368AF243193D001E39CE76BB1D5DA08A9BC0A63307AB352338E5EA5C0E05A0C2531866F3E3C2702
int data_size; //Size of the key buffer
EC_POINT * ecpoint = NULL;
EC_GROUP * ecgroup = NULL;
EC_KEY * eckey = NULL;
point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED;
int asn1_flag = OPENSSL_EC_NAMED_CURVE;

eckey = EC_KEY_new();
ecpoint = EC_POINT_new(ecgroup);
ecgroup = EC_GROUP_new_by_curve_name(OBJ_sn2nid("sect163k1"));
EC_GROUP_set_asn1_flag(ecgroup, asn1_flag);
EC_GROUP_set_point_conversion_form(ecgroup, form);
EC_KEY_set_group(eckey,ecgroup);
EC_KEY_generate_key(eckey);

//This gives me a null ecpoint
EC_POINT_oct2point(ecgroup,ecpoint,key_as_binary_data,data_size-1,ctx);
EC_KEY_set_public_key(eckey,ecpoint);

最佳答案

这是加载公钥的方式:

  EC_KEY    *key = NULL;
EC_POINT *pub_key;
const EC_GROUP *group;

SSL_library_init();
SSL_load_error_strings();

key = EC_KEY_new_by_curve_name(NID_sect163k1);
group = EC_KEY_get0_group(key);
pub_key = EC_POINT_new(group);

EC_POINT_hex2point(group,
"369368AF243193D001E39CE76BB1D5DA08A9BC0A63307AB352338E5EA5C0E05A0C2531866F3E3C2702", pub_key, NULL);

EC_KEY_set_public_key(key, pub_key);

if (!EC_KEY_check_key(key)) {
printf("EC_KEY_check_key failed:\n");
printf("%s\n",ERR_error_string(ERR_get_error(),NULL));
} else {
printf("Public key verified OK\n");
}

看起来验证OK,所以它应该可以用于检查签名。

我认为您的错误可能只是将 NULL(在 ecgroup 中)传递给 EC_POINT_new()。

关于c - 如何提供 OpenSSL 随机数据以用于 ECDSA 签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1171207/

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