密码学专题 非对称加密算法指令概述 DH算法指令
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算法指令相关推荐
- 密码学专题 非对称加密算法指令概述 DSA算法指令
DSA算法和DSA指令概述 DSA算法是美国国家标准的数字签名算法,只具备数字签名的功能不具备密钥交换的功能 生成DSA参数然后生成DSA密钥,DSA参数决定了DSA密钥的长度 三个指令 首先是dsa ...
- 密码学专题 非对称加密算法指令概述 RSA
非对称加密算法也称为公开密钥算法,其解决了对称加密算法密钥需要预分配的难题,使得现代密码学的研究和应用取得了重大发展. 非对称加密算法的基本特点如下: 加密密钥和解密密钥不相同; 密钥对中的一个密钥可 ...
- 【go密码学】-非对称加密算法
RSA RSA加密 在RSA中,明文.密钥和密文都是数字.加密过程可以用下列公式: 加密公式中出现的E和N的组合就是公钥. RSA解密 公式: 数字D和N组合起来就是RSA的私钥. 生成密钥对 求N ...
- 密码学专题 OpenSSL专题
OpenSSL总体架构 软件包分为三个主要的功能部分:密码算法库 . SSL协议库及应用程序 MacOS,MS,OS/2及 VMS这几个目录,包含了在不同的 平台编译时的环境变量配置文件,在安装编译完 ...
- 非对称加密算法 - Java加密与安全
非对称加密算法我们从DH算法中可以看到密钥对是一种非常有用的加密算法 密钥对中publicKey是可以公开的,而privateKey则是需要保密的,由此奠定了非对称加密的基础 非对称加密就是加密和解密 ...
- openssl 非对称加密算法DSA命令详解
1.DSA算法概述 DSA算法是美国的国家标准数字签名算法,它只能用户数字签名,而不能用户数据加密和密钥交换. DSA与RSA的生成方式不同,RSA是使用openssl提供的指令一次性的生成密钥(包括 ...
- 非对称加密算法——ELGamal
非对称密钥加密概述 前面讲述了对称密钥加密体制.使用对称密钥加密体制进行保密通信时,任意不同的两个用户之间都应该使用互不相同的密钥.这样,如果一个网络中有n个用户,他们之间彼此都可能进行秘密通信,这时 ...
- 非对称加密算法---加密学习笔记(四)
介绍: 非对称加密相对与对称加密算法来说是高级的. 举个双保险的例子: 银行的保险柜,客户往银行的保险柜存贵重东西,这个保险柜的钥匙会有两把,客户有一把,银行有一把.如果想打开保险柜就需要银行的钥匙和 ...
- RSA - 非对称加密算法简要介绍与JAVA实现
[1]RSA简介 RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.1987年 ...
- rsa加密原理数学证明_非对称加密算法——RSA加密原理及数学推导
说明:原创不易,著作权仅归作者本人所有,转载请注明出处. 建议:建议阅读时间15min+.证明过程可能看着枯燥,需要动手. 一. RSA是什么? 看到标题的第一瞬间,先想一下,RSA是什么呢?百度百 ...
最新文章
- CentOS系统环境下安装MongoDB
- sublime 插件
- Emit动态代理.NetCore迁移之旅
- ansible 安不安全_如何向您的安全团队介绍Ansible
- STM8学习笔记---点亮LED灯
- 吴恩达《机器学习》--- Logistic分类
- 编辑器CKEditor
- zbbz加载成功用不了_cad怎么加载zbbz插件(CAD坐标插件ZBBZ自定义怎么用?)
- ssh连接本地虚拟机
- OpenStack之VM东西南北向流量分析
- 生成伪随机数的算法–线性同余法
- 目标检测: 一文读懂 CenterNet (CVPR 2019)
- 新媒体视频导演 - 导演学前班
- 英语语法篇 - 查漏补缺
- java String、Json对象与byte数组转换
- 家庭生活指南杂志家庭生活指南杂志社家庭生活指南编辑部2022年第6期目录
- Linux:TTY串口接收中断
- 超详细的热图绘制教程(5000余字),真正的保姆级教程
- 黄少华接任施振荣就任宏碁董事长
- 开胃甜点.1.-【 游戏编辑器 汇总 目录】