DH概述

  • 用于密钥交换的公开算法,广泛应用于各种安全协议
  • SSL协议同样支持DH算法
  • DH算法使用之前需要预先共享两个参数,本原元g和模n,这两个参数影响到算法的安全性,因此需要预先生成并检测其安全性
  • 生成这些必要参数和管理这些参数的指令dhparam、gendh和dh
  • 注意事项:DH算法本身不定义加密和解密的操作,只是单纯的提供一个安全交换或者生成共同数据加密密钥(用于对称加密的会话密钥)的方法
  • OpenSSL也没有提供利用DH进行加密和解密操作的指令和生成DH的指令,只提供了生成DH参数和对DH管理的指令
  • 虽然OpenSSL目前的版本还保留了三个DH算法相关指令,但是dhparam指令已经集成了gendh和dh两个指令的所有功能,在后续的版本中,gendh和dh指令很可能被取消或者赋予新的功能定义

生成DH算法参数

  • DH算法参数包括本原元g和模n,OpenSSL提供的指令gendh和dhparam都可以生成DH参数,并可以经过编码保存在文件中。gendh指令的功能目前已经集成在dhparam指令中,但是dhparam指令还集成了dh指令的所有功能,在这部分,我们只介绍gendh指令。
  • 首先来看看gendh指令的格式:

  • out选项指定了DH算法参数输出和保存的文件名,可以是标准输出设备,比如Windows下就是当前指令行界面。
  • gendh指令没有输入选项
  • 使用gendh指令输出的DH算法参数都是PEM编码
  • DH算法参数指令的主要目的是产生公共模数n,而本原元g是指定的,目前常用的本原元有2和5,虽然3也偶尔被使用,但是OpenSSL并没有提供支持。默认情况下使用2作为本原元。
  • 产生DH算法参数的时候engine选项的影响体现在两个方面,DH算法产生函数方面随机数生成函数方面。如果engine指定的设备有效并且支持DH算法参数的产生,那么将会调用Engine设备提供的DH参数生成函数而不再使用OpenSSL函数库本身的DH参数产生函数。同时,如果Engine设备支持随机数生成函数,那么在产生DH算法参数需要的随机数的时候,调用的系列随机数函数将直接使用Engine设备提供的相应函数,这时候,rand选项指定的随机数种子文件是否有意义就依具体的Engine接口而定。
  • 随机数文件选项randrand选项指定了产生随机数时使用的随机数种子文件,该文件一般来说可以为任意类型的文件。如果没有指定,指令会从其他途径获取必要的随机数种子。如果使用了engine选项并且该Engine接口支持随机数产生函数,那么该rand选项指定随机数文件的意义及是否被真正使用要根据具体的Engine接口而定。
  • DH密钥长度依据DH算法参数的长度而定,所以,生成的DH算法参数的长度决定了DH密钥的长度。一般来说,现在512位的DH密钥是可以信任的,当然,如果你愿意,也可以采用更长的密钥。密钥越长,生成DH参数的时间越长,而安全性也越高。

例子

管理DH算法参数

dh指令格式

  • 将生成的DH参数保存在某个文件里面,并不需要对其进行加密,因为这个参数原本就是公开的,但是为了使用这个参数需要进行一些管理操作
  • 管理操作:格式转换、安全性测试、转换成C编码等操作
  • dh指令的格式

  • nform和outform选项指定DH参数编码输入和输出文件的格式,默认情况下是PEM编码。目前来说,支持的格式包括PEM编码和DER编码两种格式。如果输出信息不是编码的DH参数,比如-text和-C选项的输出,则不会受到out form格式选项的影响。
  • (3)输入和输出文件选项in和out   in选项指定了输入的DH参数文件,该文件应该保存了PEM编码或者DER编码格式的DH参数,如果你是使用gendh指令生成的DH参数文件,那么肯定就是PEM编码的。如果是DER编码的DH文件,则需要在inform中指定其格式。out选项指定了输出文件,包括输出格式转换后DH参数和text选项输出的明文解析信息。
  • (4)DH参数检测选项check   DH参数文件存放一段时间之后,你如果对该文件产生了怀疑,可以使用check选项对其中的DH参数进行检查。check选项提供的检查包含四个方面:模数是否正确,模数是否安全,本原元g是否正确及本原元是否合适。如果检查有问题,指令会输出提示信息。
  • (5)输出C语言代码选项CDH算法参数在使用的时候,既可以从文件读入,也可以直接集成在代码里面。OpenSSL提供了从DH文件参数转换成相应的C语言代码的方法,就是使用C选项。使用该选项后,输出三部分信息:模数数组、本原元g数组及getdh函数。需要注意的是,C语言的输出代码只输出到标准输出设备,不会输出到out选项指定的文件中
  • 使用C选项后输出的一个512位DH算法参数C代码的例子

  • 其他选项   engine选项指定了要使用的Engine设备,如果该Engine接口支持在使用dh指令中要使用到的某个函数或者操作,那么就会使用Engine设备而不是OpenSSL本身算法库的函数。text选项告诉指令输出DH算法参数的明文解析信息,这包括模数n和本原元g的十六进制编码数据。noout选项的使用会忽略输出选项out,不输出DH编码参数到out选项指定文件或标准输出设备。

更丰富和综合的 DH算法参数指令 dhparam

  • 综合利用了gendh和dh指令的所有功能

  • dsaparam选项是dhparam指令比gendh指令和dh指令唯一多出来的选项,该选项告诉指令生成一个DSA风格的DH参数,而不是使用典型的DH参数生成方式。所谓DSA风格的DH参数是利用DSA参数类型跟DH参数具有相似性的特点,先生成一个DSA参数,然后将其转换为DH参数。
  • DSA参数生成相对于DH参数来说速度更快,而其达到相同安全性能需要的密钥长度更短一些,所以使用DH算法的时候效率就显得更高。但也是有代价的,使用DSA风格的DH算法参数,最好为每一个应用生成一个算法参数,否则容易受到一种称为“小群”(smal-subgroup)的方法的攻击。使用了dsaparam选项之后,如果使用了输入文件,那么输入文件格式都被视作DSA参数文件,dhparam指令将会把DSA参数转换成DH参数。输出则是一个DSA风格的DH参数文件。
  • 输出格式可以由用户进行指定,可以选择是保存成PEM格式还是DER格式,而不再受到gendh指令限制只能保存成PEM格式,然后再使用dh指令才能转换成DER格式

密码学专题 非对称加密算法指令概述 DH算法指令相关推荐

  1. 密码学专题 非对称加密算法指令概述 DSA算法指令

    DSA算法和DSA指令概述 DSA算法是美国国家标准的数字签名算法,只具备数字签名的功能不具备密钥交换的功能 生成DSA参数然后生成DSA密钥,DSA参数决定了DSA密钥的长度 三个指令 首先是dsa ...

  2. 密码学专题 非对称加密算法指令概述 RSA

    非对称加密算法也称为公开密钥算法,其解决了对称加密算法密钥需要预分配的难题,使得现代密码学的研究和应用取得了重大发展. 非对称加密算法的基本特点如下: 加密密钥和解密密钥不相同; 密钥对中的一个密钥可 ...

  3. 【go密码学】-非对称加密算法

    RSA RSA加密 在RSA中,明文.密钥和密文都是数字.加密过程可以用下列公式: 加密公式中出现的E和N的组合就是公钥. RSA解密 公式: 数字D和N组合起来就是RSA的私钥. 生成密钥对 求N ...

  4. 密码学专题 OpenSSL专题

    OpenSSL总体架构 软件包分为三个主要的功能部分:密码算法库 . SSL协议库及应用程序 MacOS,MS,OS/2及 VMS这几个目录,包含了在不同的 平台编译时的环境变量配置文件,在安装编译完 ...

  5. 非对称加密算法 - Java加密与安全

    非对称加密算法我们从DH算法中可以看到密钥对是一种非常有用的加密算法 密钥对中publicKey是可以公开的,而privateKey则是需要保密的,由此奠定了非对称加密的基础 非对称加密就是加密和解密 ...

  6. openssl 非对称加密算法DSA命令详解

    1.DSA算法概述 DSA算法是美国的国家标准数字签名算法,它只能用户数字签名,而不能用户数据加密和密钥交换. DSA与RSA的生成方式不同,RSA是使用openssl提供的指令一次性的生成密钥(包括 ...

  7. 非对称加密算法——ELGamal

    非对称密钥加密概述 前面讲述了对称密钥加密体制.使用对称密钥加密体制进行保密通信时,任意不同的两个用户之间都应该使用互不相同的密钥.这样,如果一个网络中有n个用户,他们之间彼此都可能进行秘密通信,这时 ...

  8. 非对称加密算法---加密学习笔记(四)

    介绍: 非对称加密相对与对称加密算法来说是高级的. 举个双保险的例子: 银行的保险柜,客户往银行的保险柜存贵重东西,这个保险柜的钥匙会有两把,客户有一把,银行有一把.如果想打开保险柜就需要银行的钥匙和 ...

  9. RSA - 非对称加密算法简要介绍与JAVA实现

    [1]RSA简介 RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.1987年 ...

  10. rsa加密原理数学证明_非对称加密算法——RSA加密原理及数学推导

    说明:原创不易,著作权仅归作者本人所有,转载请注明出处. 建议:建议阅读时间15min+.证明过程可能看着枯燥,需要动手. 一.  RSA是什么? 看到标题的第一瞬间,先想一下,RSA是什么呢?百度百 ...

最新文章

  1. CentOS系统环境下安装MongoDB
  2. sublime 插件
  3. Emit动态代理.NetCore迁移之旅
  4. ansible 安不安全_如何向您的安全团队介绍Ansible
  5. STM8学习笔记---点亮LED灯
  6. 吴恩达《机器学习》--- Logistic分类
  7. 编辑器CKEditor
  8. zbbz加载成功用不了_cad怎么加载zbbz插件(CAD坐标插件ZBBZ自定义怎么用?)
  9. ssh连接本地虚拟机
  10. OpenStack之VM东西南北向流量分析
  11. 生成伪随机数的算法–线性同余法
  12. 目标检测: 一文读懂 CenterNet (CVPR 2019)
  13. 新媒体视频导演 - 导演学前班
  14. 英语语法篇 - 查漏补缺
  15. java String、Json对象与byte数组转换
  16. 家庭生活指南杂志家庭生活指南杂志社家庭生活指南编辑部2022年第6期目录
  17. Linux:TTY串口接收中断
  18. 超详细的热图绘制教程(5000余字),真正的保姆级教程
  19. 黄少华接任施振荣就任宏碁董事长
  20. 开胃甜点.1.-【 游戏编辑器 汇总 目录】

热门文章

  1. 菜鸟学做Django--图书管理系统
  2. C51编程25-应用篇(单片机与电脑端实现wifi通讯)
  3. 华为USG6000V防火墙telnet+安全策略
  4. css字体浏览(转)
  5. ccrpipa6.ocx 和mswinsck.ocx 等文件缺失问题解决(用于TCP调试助手)
  6. 基于Python实现网页版之复杂图片去水印
  7. 上位机plc编程入门_零基础自学plc编程怎么入门?
  8. StyleAI:色调、感情色彩量化、色彩交流API-PCCS颜色体系
  9. 怎么做淘宝客赚钱,淘客经验分享。
  10. pr下载与安装(含安装包百度网盘链接)