密码学专题 非对称加密算法指令概述 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格式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446190.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 封装和隐藏 权限修饰符

概念 问题的引入 封装性的体现 权限修饰符 案例 package lesson.l11_oop2;/*** Illustration** author DengQing* version 1.0* datetime 2022/7/3 15:28* function*/ public class Person {private int age;public void setAge(int age) { /* if (age<0||age>…

if __name__ == __main___python中 __name__ == #x27;__main__#x27; 有什么作用?

python中if __name__ ‘__main__’ 的作用&#xff0c;到底干嘛的&#xff1f;有句话经典的概括了这段代码的意义&#xff1a;“Make a script both importable and executable”就是让你写的脚本模块既可以导入到别的模块中用&#xff0c;另外该模块自己也可执行。这句话&…

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

DSA算法和DSA指令概述 DSA算法是美国国家标准的数字签名算法&#xff0c;只具备数字签名的功能不具备密钥交换的功能生成DSA参数然后生成DSA密钥&#xff0c;DSA参数决定了DSA密钥的长度三个指令首先是dsaparam指令&#xff0c;该指令主要用来生成DSA密钥参数&#xff0c;并提…

每天定时打开某个网页_Python科普帖定时通知

0 复习上一关我们学习了selenium&#xff0c;它有可视模式与静默模式这两种浏览器的设置方法&#xff0c;二者各有优势。然后学习了使用.get(URL)获取数据&#xff0c;以及解析与提取数据的方法。在这个过程中&#xff0c;我们操作对象的转换过程&#xff1a;除了上面的方法&am…

java 构造器

概念 案例1 package lesson.l11_oop2;/*** Illustration** author DengQing* version 1.0* datetime 2022/7/3 15:28* function*/ public class Person {private int age;private String name;public Person() {this.age 18;}public Person(int age, String name) {this.age …

密码学专题 信息摘要和数字签名指令

信息摘要 区别于对称加密和非对称加密&#xff0c;信息摘要算数是一种不可逆的操作&#xff0c;无论输入数据的大小输出的数据长度是固定的信息摘要算数对输入很敏感&#xff0c;即使数据变化很细微&#xff0c;输出的结果会出现很大的差异从不同输入得到相同的输出的概率非常…

dataframe 筛选_Spark.DataFrame与Spark.ML简介

本文是PySpark销量预测系列第一篇&#xff0c;后面会陆续通过实战案例详细介绍PySpark销量预测流程&#xff0c;包含特征工程、特征筛选、超参搜索、预测算法。在零售销量预测领域&#xff0c;销售小票数据动辄上千万条&#xff0c;这个量级在单机版上进行数据分析/挖掘是非常困…

密码学专题 证书和CA指令 证书和CA功能概述

为什么需要证书 实现了公钥和私钥的相互验证&#xff0c;但是任何人都可以生成很多的密钥对&#xff0c;密钥对并没有关联实体身份&#xff0c;因此诞生可数字证书前提是CA是所有用户都信任的用户需要将自己的信息和公钥交给CA进行认证生成一个属于自己并被其与用户认可的数字…

python怎么接外活_java和Python两门语言,哪个适合接活单干?

谢邀。 根据知乎规矩&#xff1a;不说需求就挑语言的行为就是耍流氓。 如果接的活倾向于OA系统、管理系统之类的&#xff0c;建议是java&#xff0c;毕竟框架模板都很成熟&#xff0c;也比较好找&#xff0c;快速开发什么的在晚上搜一下&#xff0c;改改样式就可以了。这些项目…

密码学专题 证书和CA指令 申请证书|建立CA|CA操作|使用证书|验证证书

Req指令介绍 功能概述和指令格式 req指令一般来说应该是提供给证书申请用户的工具&#xff0c;用来生成证书请求以便交给CA验证和签发证书。但是&#xff0c;OpenSSL的req指令的功能远比这样的要求强大得多&#xff0c;它不仅可以生成RSA密钥、DSA密钥&#xff0c;以及将它们…

python语言编写一个生成九宫格图片的代码_python实现图片九宫格分割

大家都知道在微信朋友圈或者微博以及QQ动态中&#xff0c;有很多“强迫症患者”发图片都爱发9张&#xff0c;而有些图是一张图片分成的九宫图&#xff0c;对于这种操作&#xff0c;大家知道是怎么做到的吗&#xff1f; 本文就是用Python做的一个九宫格图片生成器&#xff0c;是…

密码学专题 OpenSSL标准转换指令

概述 繁多复杂的各种文件编码格式、证书格式和密钥格式等。事实上&#xff0c;并非OpenSSL开发者想要将数字世界弄得如此令人头疼&#xff0c;只是由于各种原因&#xff0c;数字世界存在各种不同的标准&#xff0c;为了尽量兼容这些不同的标准&#xff0c;OpenSSL开发者才相应…

java pakage、import关键字

package介绍 常用的包 import 案例

python数组初始化_Python Numpy 数组的初始化和基本操作

Python 是一种高级的&#xff0c;动态的&#xff0c;多泛型的编程语言。Python代码很多时候看起来就像是伪代码一样&#xff0c;因此你可以使用很少的几行可读性很高的代码来实现一个非常强大的想法。 一.基础&#xff1a; Numpy的主要数据类型是ndarray&#xff0c;即多维数组…

密码学专题 OpenSSL中SSL相关指令

再谈SSL和OpenSSL 由于SSL协议已经是密码学和PKI技术中非常具体的一个应用协议&#xff0c;为了实现它&#xff0c;OpenSSL在密码学基础应用和PKI技术的基础实现上做了大量的工作&#xff0c;才逐渐形成和奠定了OpenSSL在密码学应用和PKI技术开发中的重要基础软件包地位。Open…

python企业发放的奖金_你公司的年终奖发了吗?

没发, 被裁了. 跨境电商行业, 2017.7 入职,2018.11.19 下午接到裁员通知.. 人事找我聊了下,叫我一个星期之内走,补偿1个月工资.... 我想想有点不对劲.. 于是我百度了下,5分钟之后,提出了我的方案: 1、按照劳动法应该补偿1.5个月,并且提前1月通知 2、补偿2.5个月. 我立马走. 最后…

使用MetaMask实现转账交易时附带Input Data数据

进入如下页面&#xff0c;点击View Assert in Explorer进入Etherscan网站&#xff0c;就可以看到本账户先前所有的交易信息。 字段分析 Txn Hash 是交易的HashMethod&#xff1a;交易的类型&#xff0c;一般是两种&#xff0c;如果是Transfer指定的是合约部署&#xff1b;如…

Ubuntu安装Google浏览器

下载谷歌浏览器 直接使用Ubuntu自带的火狐浏览器进行下载 默认下载到/tmp临时文件夹里面&#xff0c;考虑到权限问题&#xff0c;需要将其移动到 Downloads文件夹下面使用命令 sudo mv ./goo&#xff08;Tab&#xff09;~/Down(Tab)使用命令行的方式进行下载 wget https://dl.g…