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


openssl dhparam用于生成和管理dh文件。dh(Diffie-Hellman)是著名的密钥交换协议,或称为密钥协商协议,它可以保证通信双方安全地交换密钥。但注意,它不是加密算法,所以不提供加密功能,仅仅只是保护密钥交换的过程。在openvpn中就使用了该交换协议。关于dh算法的整个过程,见下文。

openssl dhparam命令集合了老版本的openssl dh和openssl gendh,后两者可能已经失效了,即使存在也仅表示未来另有用途。

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

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

例如:生成1024长度的交换协议文件,其消耗的时间2秒不到。

[root@xuexi tmp]# time openssl dhparam -out dh.pem 1024               

Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
..........+.................................................+....................+..+.................................+.........+..................+.............................................+
...................................................................................................+..................................+............+...................+................+..........
.........................................................................................................................................................................................+.........
................................................................................................................................................+.............................................+....
........................................+......................+.......................++*++*++* real 0m1.762s
user 0m1.608s
sys 0m0.017s

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

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

    .........
.........
real 4m36.606s
user 4m14.404s
sys 0m0.538s

而使用了64位随机数种子的同样命令只需50秒钟。

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

    .........
.........
real 0m50.264s
user 0m46.039s
sys 0m0.104s

openssl命令实现的是各种算法和加密功能,它的cpu的使用率会非常高,再结合dhparam,可以使得openssl dhparam作为一个不错的cpu压力测试工具,并且可以长时间飙高cpu使用率。

DH密钥协商过程:

密钥交换协议(DH)的大概过程是这样的(了解即可,可网上搜索完整详细的过程):

(1).双方协商一个较大的质数并共享,这个质数是种子数。

(2).双方都协商好一个加密生成器(一般是AES)。

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

(4).双方使用自己的私钥(即各自保密的质数)、加密生成器以及种子数(即共享的质数)派生出一个公钥(由上面的私钥派生而来,不是非对称加密的公钥)。

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

(6).接收方使用自己的私钥(各自保密的质数)、种子数(共享的质数)以及接收到的对方公钥计算出共享密钥(session key)。尽管双方的session key是使用对方的公钥以及自己的私钥计算的,但因为使用的算法,能保证双方计算出的session key相同。

(7).这个session key将用于加密后续通信。例如,ssh连接过程中,使用host key对session key进行签名,然后验证指纹来完成主机认证的过程(见https://www.cnblogs.com/f-ck-need-u/p/7129122.html#blog131)。

在此可见,在计算session key过程中,双方使用的公钥、私钥是相反的。但因为DH算法的原因,它能保证双方生成的session key是一致的。而且因为双方在整个过程中是完全平等的,没有任何一方能掌控协商的命脉,再者session key没有在网络上进行传输,使得使用session key做对称加密的数据传输是安全的。

openssl dhparam(密钥交换)的更多相关文章

  1. (10) openssl dhparam(密钥交换)

    openssl dhparam用于生成和管理dh文件.dh(Diffie-Hellman)是著名的密钥交换协议,或称为密钥协商协议,它可以保证通信双方安全地交换密钥. 但注意,它不是加密算法,所以不提 ...

  2. openssl详解

    openssl详解 摘自:https://blog.csdn.net/liguangxianbin/article/details/79665100 目录 目录 第一章 前言 第二章 证书 第三章 加 ...

  3. Nginx 1.10.1 编译、配置文档(支持http_v2,TLSv1.2,openssl v1.0.2)

    1.安装常用工具及基础包: [root@localhost /]# yum -y install wget git vim make gcc gcc-c++ openssl-devel [root@l ...

  4. openssl生成https证书 (转)

    1.首先要生成服务器端的私钥(key文件):openssl genrsa -des3 -out server.key 1024运行时会提示输入密码,此密码用于加密key文件去除key文件口令的命令:o ...

  5. openssl实践总结

    openssl实验总结 OPENSSL简介 OpenSSL项目是一个协作开发一个健壮的,商业级的,全功能的,并且开放源代码工具包,它实现了安全套接字层(SSL v2/v3)和传输层安全(TLS v1) ...

  6. openssl生成https证书

    openssl生成https证书 分类: 其它2009-09-03 16:20 452人阅读 评论(0) 收藏 举报 includemoduleaccessapachessl服务器 openssl生成 ...

  7. ssl Diffie-Hellman弱密码问题

    title: ssl Diffie-Hellman弱密码问题 date: 2017-08-16 16:41:55 categories: 网络安全 tags: ssl Diffie-Hellman - ...

  8. Centos7环境下使用Nginx托管.Net Core应用程序

    一.安装.Net Core 参考官方文档:https://www.microsoft.com/net/core#linuxcentos 1.添加dotnet产品Feed 在安装.NET Core之前, ...

  9. 应用openvpn

    本文目录:1.vpn概述 1.1 vpn应用场景 1.2 隧道协议 1.3 SSL VPN和IPSEC VPN2.openvpn搭建client-to-site的vpn 2.1 安装lzo和openv ...

随机推荐

  1. 挑选队友 (生成函数 + FFT + 分治)

    链接:https://www.nowcoder.com/acm/contest/133/D来源:牛客网 题目描述 Applese打开了m个QQ群,向群友们发出了组队的邀请.作为网红选手,Applese ...

  2. mysql官方的测试数据库employees超30万的数据,安装方法介绍

    安装方法 1.mysql必须开启环境变量 2.shift右键官方数据库打开在命令行运行此窗口 3.进入cmd以后输入mysql -uroot -proot 回车 4.输入 source  employ ...

  3. CentOS 7 nginx 1.8.1安装

    OS版本:CentOS 7.2nginx版本:1.8.1所需包:openssl-1.0.2m.tar.gz zlib-1.2.8.tar.gz pcre-8.36.tar.gz nginx-1.8.1 ...

  4. linux 解压 压缩 常见命令

    压缩命令: .tar tar -cvf 文件名称.tar 文件或者文件夹 .tar.gz tar -zcvf 文件名称.tar.gz 文件或者文件夹 .tar.xz tar -Jcf 文件名称.tar ...

  5. [f]智能获取浏览器版本UA信息的方法

    var browser={ versions:function(){ var u = navigator.userAgent, app = navigator.appVersion; return { ...

  6. Runnable与Callable区别

    相同点: 两者都是接口:(废话) 两者都可用来编写多线程程序: 两者都需要调用Thread.start()启动线程: 不同点: 两者最大的不同点是:实现Callable接口的任务线程能返回执行结果:而 ...

  7. Monkey测试结果分析

    Monkey测试结果分析 什么是monkey Monkey 测试是 Android 自动化测试的手段之一,它通过模拟用户的按键输入.触摸屏输入等,测试设备多长时间出现异常.Monkey 是一个命令行工 ...

  8. 基于面向方面和UML的实时系统建模研究

    一.基本信息 标题:基于面向方面和UML的实时系统建模研究 时间:2010 出版源:计算机技术与发展 领域分类:面向方向:实时系统:横切关注点:统一建模语言: 二.研究背景 问题定义:实时系统建模研究 ...

  9. c++中的const与指针

    const修饰符 使用const修饰变量时,该变量的值不可修改,因此需要初始化. 例如 const int s = 0: 此时s为值不可变的变量. 那么基于此,当const修饰指针时的情况有三种: ( ...

  10. 转:Override vs Overload

    重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说子类 ...