非对称加密算法指令
非对称加密算法并非都可以用来进行密钥交换和数字签名的。数字签名和密钥交换对公开密钥算法的要求有一定的区别:
- 密钥交换算法使用公开密钥进行加密,使用私人密钥进行解密;而数字签名算法则使用私人密钥进行加密,使用公开密钥进行解密。
- 密钥交换算法要求从加密密钥(公开密钥)很难推算出解密密钥(私人密钥);而数字签名算法则要求从解密密钥(公开密钥)很难推算出加密密钥(私人密钥)。
OpenSSL支持的三种非对称算法:
算法类型 | 密钥交换 | 数字签名 |
---|---|---|
RSA | 支持 | 支持 |
DH | 支持 | 不建议使用 |
DSA | 不支持 | 支持 |
OpenSSL的非对称加密算法指令:
指令 | 种类 | 描述 |
---|---|---|
genrsa | RSA | 生成并输出一个RSA私钥 |
rsa | RSA | 处理RSA密钥的格式转换等问题 |
rsautl | RSA | 使用RSA密钥进行加密、解密、签名和验证等运算 |
gendh | DH | 生成DH密钥参数 |
dhparam | DH | 用于生成和处理DH密钥参数 |
dh | DH | 处理DH密钥参数的格式转换等 |
dsaparam | DSA | 生成和处理DSA密钥参数,并可以生成DSA密钥 |
gendsa | DSA | 根据DSA参数文件生成一个DSA密钥 |
dsa | DSA | 处理DSA密钥的格式转换和解释等 |
RSA算法与指令
RSA密钥加密的特定是输入数据不能超过RSA密钥长度,而输出数据长度总是与RSA密钥长度相同,所以大数据加密一般需要数据分割。解密的时候RSA输入数据长度总是跟密钥长度相同,如果数据数据长度超过密钥长度,需要进行分割解密后在拼接。
数字签名的RSA算法通常跟信息摘要函数一起使用,对于一个大文件可以先使用摘要算法转换成摘要信息,然后再使用RSA算法进行加密从而完成该文件的数字签名过程。再验签的时候,使用同样的信息值啊要算法对该文件进行运算得到信息摘要值,然后使用RSA算法(通常是公钥)进行解密得到签名方信息摘要值,然后对比摘要值,如果一致,则签名验证成功。
genrsa:生成RSA密钥
参数说明:
参数 | 描述 |
---|---|
out | 指定密钥输出文件名,后缀通常为pem;输出密钥是RSA密钥的私钥 。RSA公钥包含模数n和指数e,私钥包含了d。通常OpenSSL的私钥结构中会把公钥参数包含在一起。所以可以使用rsa指令从私钥文件中提取公钥结构并进行转换。 |
passout | 指定了输出密钥文件的加密保护口令 |
* | 加密算法选项,包括DES、DES3、IDEA、AES128、AES192和AES256,对输出密钥进行加密 |
f4、F4和3 | 指数选项,RSA算法的指数是一个公开参数,术语公钥参数的一部分,常用值为3、17和65537(OpenSSL目前只支持3和65535),使用-f4可以指定使用65535,使用-3则指定使用3,默认使用65535 |
密钥长度 | 512、1024、2048等,密钥使用的周期越长,使用的场合安全性要求越高,密钥要求的长度也就越长,默认为2048 |
engin | 使用第三方加密库或者硬件设备 |
rand | 指定产生随机数的参考种子文件,可以是任意文件 |
应用实例:
- 生成1024位RSA密钥
OpenSSL> genrsa -out RsaPrivateKey.pem 1024
2. 生成1024位RSA密钥,采用DES3加密,输出文件的加密保护口令为12345678
OpenSSL> genrsa -out RsaPrivateKey.pem -des3 -passout pass:12345678 1024
rsa:管理RSA密钥
参数说明:
参数 | 描述 |
---|---|
inform和outform | 密钥格式选项。指定输入输出密钥格式 |
in和out | 输入和输出文件选项, 指定输入输出文件名 |
passin和passout | 输入和输出口令选项,passin指定了获取RSA私钥解密口令的源,passout指定了输出RSA私钥是进行加密的口令的源 |
pubin和pubout | 密钥输入和输出类型选项,使用pubin输入RSA公钥文件,如果RSA私钥,学昂输出一个对应的公钥,使用pubout |
* | 加密算法类型选项,包括DES、DES3、IDEA、AES128、AES192和AES256,对输出密钥进行加密 |
text | 以明文形式输出密钥各个参数的值 |
noout | 不输出任何密钥到文件中,即便使用了out选项 |
modulus | 输出模数值 |
engin |