openssl dhparam(密钥交换)

openssl系列文章:http://www.lztongyong.com/f-ck-need-u/p/7048359.html


openssl dhparam 用于生成和管理 dh 文件。 dh(Diffie-Hellman)是一种著名的密钥交换协议,或者说密钥协商协议,它可以保证通信双方安全地交换密钥。但需要注意的是,它不是加密算法,因此不提供加密功能,而只是保护密钥交换过程。 openvpn 中使用了该交换协议。 dh算法的整个流程见下文。

openssl dhparam 命令结合了旧版本的 openssl dh 和 openssl gendh。后两者可能已经失效。即使它们存在,也仅表明将来有其他用途。

openssl dhparam [-输入文件名] [-输出文件名] [-dsaparam]  [-无输出]  [-文本] [-rand 文件] [numbits]
选项说明:
-in filename:从filename文件中读取密钥交换协议参数。
-out filename:将密钥交换协议参数输出到filename文件中。
-dsaparam:指定此选项将使用dsa交换协议而不是dh交换协议。虽然生成速度更快,但安全性较差。
-noout:禁止输出任何信息。
-text:以文本格式输出dh协议。
-rand:指定随机数种子文件。
numbits:指定生成的长度。

注意,dh 协议文件的生成速度随着长度的增加而急剧增加。使用随机数种子可以加快生成速度。

例如:生成一个1024长度的交换协议文件耗时不到2秒。

[root@xuexi tmp]#时间openssl dhparam -out dh.pem 1024 生成DH参数,1024long安全启动,生成器2需要时间
.......+...................................... …………………………………………………………………………………………………………………………………………………………………………………… .................+..+..+.. ................................................+
...................................................... ................................................+ ................................+..................+.. .................+.................+.................
...................................................... ...................................................... ...................................................... ……………………+……
...................................................... ...................................................... ……………………+…… ........................................+............................................+................. ...................+........................++*++*++*

真实0m1.762s
用户0m1.608s
系统0m0.017s

但是生成长度为2048的交换协议文件花费了4分钟多的时间,可见长度的增加会导致协议生成时间急剧增加。

[root@xuexi ~]#时间 openssl dhparam -out dh.pem 2048

    …………
    …………
真正的4m36.606s
用户4m14.404s
系统 0m0.538s

使用 64 位随机数种子的相同命令只需要 50 秒。

[root@xuexi tmp]#时间openssl dhparam -rand rand.seed -out dh.pem 2048

    …………
    …………
实 0m50.264s
用户 0m46.039s
系统 0m0.104s

openssl命令实现了各种算法和加密功能,它的CPU占用率会很高。结合dhparam,openssl dhparam可以作为一个很好的CPU压力测试工具,并且可以长时间提高CPU使用率。速度。

DH密钥协商过程:

密钥交换协议(DH)的大致流程如下(了解一下即可,完整详细流程可以网上搜索):

(1)。双方协商并共享一个更大的素数。这个素数就是种子数。

(2)。双方协商了一个加密生成器(通常是AES)。

(3)。双方提出另一个素数。这次双方提出的素数都是互相保密的。这个素数被认为是私钥(不是非对称加密的私钥)。

(4)。双方使用自己的私钥(即各自的秘密素数)、加密生成器和种子数(即共享素数)来派生公钥(源自上面的私钥,而不是非对称加密的公钥)。

(5)。双方交换派生的公钥。

(6)。接收方使用自己的私钥(他们的秘密素数)、种子数(共享素数)和收到的对方公钥来计算共享Key(会话密钥)。虽然双方的会话密钥是使用对方的公钥和自己的私钥计算出来的,但所使用的算法保证了双方计算出的会话密钥是相同的。

(7)。该会话密钥将用于加密后续通信。例如,在ssh连接过程中,使用主机密钥对会话密钥进行签名,然后验证指纹以完成主机身份验证过程(参见 https://www. www.lztongyong.com/f-ck-need-u/p/7129122.html#blog131)。

这里可以看出,在计算会话密钥的过程中,双方使用的公钥和私钥是相反的。但由于DH算法,可以保证双方生成的会话密钥一致。而且由于双方在整个过程中完全平等,任何一方都无法掌控谈判的命脉。此外,会话密钥不在网络上传输,因此使用会话密钥进行对称加密数据传输是安全的。的。

相关文章