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

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]outfilewhereoptions 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 1024Generating DSA parameters,1024 bit longprime

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 -outR_DSAP.pem

linuxidc@linuxidc:~/test$ diff DSAP.pem R_DSAP.pem

3、直接生成DSA密钥

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

.../*查看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 incbc mode-des3    - encrypt the generated key with DES in ede cbc mode (168bit 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 inthe directory) into

the random number generator

dsaparam-file- a DSA parameter file as generated by the dsaparam command

示例如下:

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

/*根据密钥参数生成密钥*/linuxidc@linuxidc:~/test$ openssl gendsa -outDSA1.pem  DSAP.pem

Generating DSA key,1024bits

linuxidc@linuxidc:~/test$ openssl gendsa -outDSA2.pem  DSAP.pem

Generating DSA key,1024bits/*相同密钥参数,每次生成的密钥不同*/linuxidc@linuxidc:~/test$ diff DSA1.pem DSA2.pem8,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:123456DSAP.pem

Generating DSA key,1024 bits

2.1 dsa指令说明

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

linuxidc@linuxidc:~/test$ openssl dsa -unknown option-dsa [options]outfilewhereoptions are-inform arg    input format -DER or PEM-outform arg    output format -DER or PEM-inarg        input file-passin arg    input file pass phrase source-outarg        output file-passout arg output file pass phrase source-engine e      use engine e, possibly a hardware device.-des            encrypt PEM output with cbc des-des3          encrypt PEM output with ede cbc des using 168bit 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 intext-noout          don't 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:123456read DSA key

writing DSA key/*解密DSA密钥*/linuxidc@linuxidc:~/test$ openssl dsa -in E_DSA.pem -out DSA1.pem -passin pass:123456read 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 的详细介绍:请点这里OpenSSL 的下载地址:请点这里

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值