根据那篇文件: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低级别api前面的diffie hellman instyead,即时生成?
PS我使用OpenSSL版本1.0.2g。
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+。