OpenSSL 非对称加密算法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密钥

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b704a6eff11fbe607cc0a9d51767ea6f.html