根据该文档:https://wiki.openssl.org/index.php/Diffie_Hellman#Using_the_Low_Level_APIs
使用Diffie Hellman的低级API(需要执行组密钥协议)。
为简单起见,我需要为Diffie Hellman p
和g
值提供固定值,现在我使用函数DH_generate_parameters_ex
,但是使用这些选项的任何解决方案都可能会增加通信开销,对于提供良好安全性的Diffie Hellman,p
和g
是固定值。
因此,使用配置之上的方法约定,如何设置固定值,尤其是在此RFC中指定的固定值,以即时生成openssl的openssl低级API?
PS我使用的是OpenSSL版本1.0.2g。
答案 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+版本中可用。