阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

OpenSSL 非对称加密算法DSA命令详解

503次阅读
没有评论

共计 6294 个字符,预计需要花费 16 分钟才能阅读完成。

1、DSA 算法概述

DSA 算法是美国的国家标准数字签名算法,它只能用户数字签名,而不能用户数据加密和密钥交换。

DSA 与 RSA 的生成方式不同,RSA 是使用 openssl 提供的指令一次性的生成密钥(包括公钥),而通常情况下,DSA 是先生成 DSA 的密钥参数,然后根据密钥参数生成 DSA 密钥(包括公钥),密钥参数决定了 DSA 密钥的长度,而且一个密钥参数可以生成多对 DSA 密钥对。

DSA 生成的密钥参数是 p、q 和 g,如果要使用一个 DSA 密钥,需要首先共享其密钥参数。关于 DSA 加密的原理,请自行查阅。

2、DSA 算法相关指令及用法

openssl 中 DSA 算法指令主要有三个,分别是

指令 功能
dsaparam 生成、处理 DSA 密钥参数,也可以直接生成 DSA 密钥
dsa 处理 DSA 密钥格式的转换
gendsa 根据 DSA 密钥参数生成一个 DSA 密钥

从上表可以看到,dsa 和 gendsa 和 RSA 相关指令中的 rsa 和 genrsa 用法相似,但是 DSA 相关指令中没有提供签名和验证操作的 dsautl 指令,所以如果需要使用 DSA 进行签名和验证,需要借助 dgst 指令,该指令在后续章节中介绍。

2.1 dsaparam 指令说明

dsaparam 主要用户生成密钥参数,也可以生成 DSA 密钥其用法如下

linuxidc@linuxidc:~/test$ openssl dsaparam –
unknown option

dsaparam [options] [bits]
<infile >outfile
where options are
-inform arg  input format – DER or PEM                          //
-outform arg output format – DER or PEM //
in arg      input file                                        //
out arg      output file                                        //
-text        print as text                                      //
-C            Output C code                                      //
-noout        no output                                          //
-genkey      generate a DSA key                                //
-rand        files to use for random number input              //
-engine e    use engine e, possibly a hardware device.          //
number        number of bits to use for generating private key  //
linuxidc@linuxidc:~/test$

其参数与 RSA 相关指令的参数类似,不再一一说明,下面以实例的方式说明其用法

1、生成密钥参数并查看其各个参数值

/*生成 1024 位的密钥参数*/
linuxidc@linuxidc:
~/test$ openssl dsaparam –out DSAP.pem 1024
Generating DSA parameters,
1024 bit long prime
This could take some time
….
/*明文查看密钥参数的值*/
linuxidc@linuxidc:~/test$ openssl dsaparam -in DSAP.pem -text -noout 

2、密钥参数格式间的转换

/*pem 格式的密钥参数转为 der 格式*/
linuxidc@linuxidc:~/test$ openssl dsaparam -in DSAP.pem -out DSAP.der -outform der
/*der 格式的密钥参数转为 pem 格式*/
linuxidc@linuxidc:~/test$ openssl dsaparam -in DSAP.der -inform der -out R_DSAP.pem
linuxidc@linuxidc:~/test$ diff DSAP.pem R_DSAP.pem

3、直接生成 DSA 密钥

/*直接生成 DSA 密钥 */
linuxidc@linuxidc:
~/test$ openssl dsaparam -genkey –out DSA.pem 1024
Generating DSA parameters,
1024 bit long prime

/* 查看 DSA 密钥,可知参数和密钥都被放在输出文件中,说明本质上还是先生成参数,再利用参数生成密钥*/
linuxidc@linuxidc:
~/test$ cat DSA.pem
—–BEGIN DSA PARAMETERS—–
MIIBHgKBgQDAG1CFQRqKgrDa21dT2SO0OtvR0wtKo4GWEH
+zikTt6eh6S0CdhtqX
PdPiboZdYAJy7HzKHLe0BUkf4dfOOPZBcQrr9sYkJ6q2Zz
/jSSA9EnpuQfstdE8a
2wrhIm8mPzBKuWfvz29O6KlBngLfXSfr8Iy2mNAf7NgAntDBMY8yHQIVAMaCaSge
oBHtVo9cUoA5E69f2VqrAoGAbzC9wFnra1lT8Egak4N7YHkBwObN3T2ue3tRM7wE
uv5rNuIyQrSQnp4vqFcnu3lOrP3ZGEJvEZ0kVo7e6LhfO8V0UOqElfhiuwEaZuzZ
22Sodbu7lUx3YMU1QRvk42IudIevi6LWq4zk
+sxraAZ3h5rvo8/pKayxtRuKq8Ep
5kU
=
—–END DSA PARAMETERS—–
—–BEGIN DSA PRIVATE KEY—–
MIIBugIBAAKBgQDAG1CFQRqKgrDa21dT2SO0OtvR0wtKo4GWEH
+zikTt6eh6S0Cd
htqXPdPiboZdYAJy7HzKHLe0BUkf4dfOOPZBcQrr9sYkJ6q2Zz
/jSSA9EnpuQfst
dE8a2wrhIm8mPzBKuWfvz29O6KlBngLfXSfr8Iy2mNAf7NgAntDBMY8yHQIVAMaC
aSgeoBHtVo9cUoA5E69f2VqrAoGAbzC9wFnra1lT8Egak4N7YHkBwObN3T2ue3tR
M7wEuv5rNuIyQrSQnp4vqFcnu3lOrP3ZGEJvEZ0kVo7e6LhfO8V0UOqElfhiuwEa
ZuzZ22Sodbu7lUx3YMU1QRvk42IudIevi6LWq4zk
+sxraAZ3h5rvo8/pKayxtRuK
q8Ep5kUCgYAh50mq26xMHfVxb
/EkZzH+ouM3zPk6x8f9GFZzuUtGfNCzopTxEmw3
yYPaBwiojhZnK
/LXVdEui97+D/rqAPCXAfwFhXLR9w7oikid+Ai1A1B+lycCJrim
gyF
/dzha7uYGzaA1+rAftE76aeGlZYnoO42CgkxuYsxYxCzTJF8swQIUcrqFkFhN
Z2th
/K4MZwy4QW6xPrA=
—–END DSA PRIVATE KEY—–

2.1 gendsa 指令说明

gendsa 指令功能简单,即利用输入的密钥参数生成 DSA 密钥

linuxidc@linuxidc:~/test$ openssl gendsa –
usage: gendsa [args] dsaparam
file
out file – output the key to file
-des      – encrypt the generated key with DES in cbc mode
-des3    – encrypt the generated key with DES in ede cbc mode (168 bit key)
seed
                encrypt PEM output with cbc seed
-aes128, -aes192, –aes256 encrypt PEM output with cbc aes-camellia128, -camellia192, –camellia256
                encrypt PEM output with cbc camellia
-engine e – use engine e, possibly a hardware device.
rand file:file:…
         
– load the file (or the files in the directory) into
            the random number generator
dsaparam
file
         
– a DSA parameter file as generated by the dsaparam command

示例如下:

1、根据密钥参数生成密钥

/*根据密钥参数生成密钥 */
linuxidc@linuxidc:
~/test$ openssl gendsa –out DSA1.pem  DSAP.pem
Generating DSA key,
1024 bits
linuxidc@linuxidc:
~/test$ openssl gendsa –out DSA2.pem  DSAP.pem
Generating DSA key,
1024 bits
/* 相同密钥参数,每次生成的密钥不同 */
linuxidc@linuxidc:
~/test$ diff DSA1.pem DSA2.pem
8,11c8,11
< TWcw1+XFAoGAEA1DLnv5efzB+ipIQ29q0ZedLVPyxdB44jpZES+esBQtU04HdI2N
< bClgwj8c9M6Y/9rL1uy3NqKaGHM+mjLyAXVceigFx7v15r5LRmWjialdqkcVG/3S
< Qo530ui/tXgFbFV9iA6C8L+nHDMPOf5v6oGyICmxN8DWzhQAsmy9mkICFBeqMbZM
< 9qBeG0BaS/6PucBxObsv

> TWcw1+XFAoGALWkjJeFunfvkiarJ1/pw8Lqvuyu/Glt3g/hURPPlrOIhA0pFXDmC
> UzCM1x6wrHWFc0jmUNk6FtnjGyiCLxVJGzeB7/4MA35aInHkiHwzX7a+B0At8bMq
> WEkWtzxhvTxTqWTAcC02Qr2mNNfJwWWVV0jVzMtm3Gb6YwhNnUvxp0ACFHrXO/8h
> dIwr6pSuj6vdNpHFDlY2
/* 生成密钥并使用 des3 加密存储*/
linuxidc@linuxidc:
~/test$ openssl gendsa –out DSA.pem -des3 -passout pass:123456 DSAP.pem
Generating DSA key,
1024 bits

2.1 dsa 指令说明

dsa 和 rsa 指令功能及其类似,如下

linuxidc@linuxidc:~/test$ openssl dsa –
unknown option

dsa [options]
<infile >outfile
where options are
-inform arg    input format – DER or PEM
-outform arg    output format – DER or PEM
in arg        input file
passin arg    input file pass phrase source
out arg        output file
passout arg output file pass phrase sourceengine e      use engine e, possibly a hardware device.
des            encrypt PEM output with cbc des
-des3          encrypt PEM output with ede cbc des using 168 bit key
-aes128, -aes192, –aes256
                encrypt PEM output with cbc aes
-camellia128, -camellia192, –camellia256
                encrypt PEM output with cbc camellia
seed          encrypt PEM output with cbc seed
-text          print the key in text
-noout          dont print key out
-modulus        print the DSA public value

示例如下:

1、加密密钥和解密密钥

/*生成未加密的 DSA 密钥 */
linuxidc@linuxidc:
~/test$ openssl dsaparam –out DSA.pem -genkey 1024
/* 使用 des3 加密 DSA 密钥 */
linuxidc@linuxidc:
~/test$ openssl dsa –in DSA.pem –out E_DSA.pem -des3 -passout pass:123456
read DSA key
writing DSA key
/* 解密 DSA 密钥*/
linuxidc@linuxidc:
~/test$ openssl dsa –in E_DSA.pem –out DSA1.pem -passin pass:123456
read DSA key
writing DSA key

2、提取 DSA 的公钥

linuxidc@linuxidc:~/test$ openssl dsa -in DSA.pem -out pub.pem -pubout
read DSA key
writing DSA key

3、小结

可以看到,DSA 和 RSA 的指令非常相似,熟悉了其中一种,另外一种也很容易上手。而且 openssl 提供的指令虽多,但参数来来回回就那么多,在多数情况下不同指令的相同参数含义大概一样。

到此为止,介绍了对称加密算法指令,非对称加密算法 RSA 和 DSA 相关指令,这些都是一些基础指令,在实际应用中,我们使用 openssl 做的大多数是与 CA 有关的签名、验证、加密、解密等。所以接下来要写的是和实际应用相关的内容,比如证书自签名、二级证书签发、终端证书签发、证书验证等内容。

更多 OpenSSL 相关内容可以查看以下的有用链接

使用 OpenSSL 命令行构建 CA 及证书  http://www.linuxidc.com/Linux/2015-10/124682.htm

Ubuntu 安装 OpenSSL  http://www.linuxidc.com/Linux/2015-10/124001.htm

通过 OpenSSL 提供 FTP+SSL/TLS 认证功能,并实现安全数据传输 http://www.linuxidc.com/Linux/2013-05/84986.htm

Linux 下使用 OpenSSL 生成证书 http://www.linuxidc.com/Linux/2015-05/117034.htm

利用 OpenSSL 签署多域名证书 http://www.linuxidc.com/Linux/2014-10/108222.htm

在 OpenSSL 中添加自定义加密算法  http://www.linuxidc.com/Linux/2015-08/121749.htm

OpenSSL 的详细介绍:请点这里
OpenSSL 的下载地址
:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-04/130493.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计6294字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7995413
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统 大家好,我是星哥。公司的项目文档存了一堆 ...
飞牛NAS玩转Frpc并且配置,随时随地直连你的私有云

飞牛NAS玩转Frpc并且配置,随时随地直连你的私有云

飞牛 NAS 玩转 Frpc 并且配置,随时随地直连你的私有云 大家好,我是星哥,最近在玩飞牛 NAS。 在数...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装 2026 年最强个人助理 ClawdBot、完整安装教程 一、前言 学不完,根本学不完!近期,一款名...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...