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

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

163次阅读
没有评论

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