OpenSSL使用固定值生成Diffie Hellman密钥

时间:2019-02-05 13:57:10

标签: c openssl diffie-hellman

根据该文档: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的openssl低级API?

PS我使用的是OpenSSL版本1.0.2g。

1 个答案:

答案 0 :(得分:1)

每个this man page内置RFC3526和RFC2409组的(外部)素数(ems)(如果是1.1.0+,也应以这些名称出现在您的系统上)实际上在代码中回到1.0.0之前,但是没有BN_前缀(尽管在bn.h标头中)并且以前没有记录。 (在1.1.0+中,如果设置了兼容性,则还会对旧名称进行#define。)

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+版本中可用。