OpenSSL使用Diffie Hellman Key生成的固定值

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

根据那篇文件:https://wiki.openssl.org/index.php/Diffie_Hellman#Using_the_Low_Level_APIs

使用Diffie Hellman的低级API(需要执行组密钥协议)。

为简单起见,我需要为Diffie Hellman pg值提供固定值,现在我使用函数DH_generate_parameters_ex,但使用这些选项的任何解决方案都可能增加通信开销,并且对于Diffie Hellman提供良好安全性的pg有固定值。

因此,使用方法约定优于配置,我如何设置固定值,特别是在这个RFC中指定的固定值,以及openssl低级别api前面的diffie hellman instyead,即时生成?

PS我使用OpenSSL版本1.0.2g。

c openssl diffie-hellman
1个回答
1
投票

RFC3526和RFC2409组的(外部)素数是内置的,每个this man page(如果1.1.0+,也应该在你的系统下这些名称) - 它们实际上在代码中回到1.0.0之前但没有BN_前缀(虽然在bn.h标题中)和以前没有记录。 (在1.1.0+中,如果设置了兼容性,则旧名称另外为#define'd。)

AFAICS你必须自己添加生成器,例如:

DH *dh = DH_new(); BIGNUM *two = BN_new(); 
if( !dh || !two ) /* error */;
BN_set_word(two,2); 

// corrected AGAIN!
DH_set0_pqg (dh, BN_dup(BN_get_rfc3526_prime_2048(NULL)), NULL, two);

// added: below 1.1.0 many API structs were not opaque, just
dh->p = BN_dup(/*not BN_*/ get_rfc3526_prime_2048(NULL));
dh->g = two; 
// leave q as unspecified

注意RFC5114 modp参数是以DH*格式预先构建的,但仅限于1.1.0+。

© www.soinside.com 2019 - 2024. All rights reserved.