RSA数据加密与数字签名

RSA算法

RSA是一种非对称公钥加密算法,采用公钥对数据进行加密,用私钥对数据进行解密。通常,公钥是公开的,私钥自己保留不能公开,所以在采用RSA加密算法进行通信时,信息发送者与信息接受者之间互相传递的就是公钥和数据。
要知道,无论是数据加密还是数字签名,都是出于安全性的考虑,两者不同之处在于,数据加密是加密数据,防止数据泄漏,而数字签名是由数据生成签名,防止伪造数据,篡改数据。

数据加密

数据加密过程中,使用公钥加密数据,私钥解密,现如今多使用rsa-OAEP即使用了OAEP填充方案的rsa加密算法来加密数据。
场景一:
A与B通信,A向B发送消息,过程如下:

  • B向A公布自己的公钥
  • A使用B的公钥对需要发送的数据进行加密
  • B收到A发送的加密数据,使用自己的私钥进行解密

在这个A–>B发送消息的过程中,即使A的消息以及B的公钥都被截获,仍旧无法获取A的真实内容。
在这里插入图片描述
此种场景下,保证了消息的安全性,但有一个前提就是B想接收的就是A的消息,加入此时有一名黑客C,使用B公布的公钥伪造假消息发送给B,或者截获A的消息,然后篡改消息,B是无法鉴别的,因此,数字签名就有必要了。

数字签名

数字签名,使用私钥对信息进行加签, 使用公钥对信息进行验签
为了防止消息在网络传输的过程中被篡改,常使用数字签名技术,由数据发送方使用私钥对数据加签,数据接收方在接收到数据后,使用公钥对接收到的签名进行反运算得到信息,然后判断其和接收的数据是否相同。
但是,由于非对称加密对长信息的加密低效性,在实际的使用中不会直接对数据加签,而是使用信息摘要算法对信息做摘要,由于算法具有不可逆与高抗碰撞性(常用的如rsa-sha256),对信息hash运算生成一个hash字符串,因为该hash函数具有不可逆性,所以由结果不能反推出原始信息,同时,由于使用的hash函数具有高抗碰撞性,所以不同的信息经过hash之后得到的结果基本上不会相同,所以用信息摘要来代替信息本身。
场景二:
A向B发送消息,黑客C也向B发送假消息,因为B只想要A的消息,所以过程如下:

  • A公布自己的公钥,B获取A的公钥
  • A使用公布的信息摘要算法F对信息做摘要M’
  • A使用自己的私钥对信息摘要M’进行加签,得到签名S(同时,该消息内容也可以使用数据加密),然后将签名S以及信息M同时发送给B
  • B使用A的公钥对接收道德签名S进行解签,解析出来的内容M’'与实际的消息内容M的信息摘要M’一样,可以证明该消息确实是A发送的

在此过程中,如果C向B发送伪造的消息,B使用A的公钥对伪造消息的签名进行验签,一定是不通过的。
在这里插入图片描述
综上,数据加密和数字签名各司其责,一个保证数据安全,一个保证数据正确,所以在消息传递过程中,为了保证安全性,可以考虑使用两者。

RSA密钥

密钥文件格式

密钥(包括私钥与公钥)格式只有两种,derpem
der:一种特殊的二进制格式
pem:经过base64 ASCII编码的纯文本格式

PEM文件

既然PEM文件是纯文本文件,那么很显然是可以用文本软件直接打开的,只不过看到的是编码过的信息,如果希望看到真实的内容,需要使用openssl 工具打开。

openssl x509 -in baidu.crt -text -noout 

DER文件

der文件是一种二进制文件,如果用一般的文本编辑器如vim打开,会是乱码,需要是用openssl命令来查看具体信息

openssl rsa -inform der baidu.key -text -noout
文本软件openssl
PEM文件在这里插入图片描述在这里插入图片描述
DER文件在这里插入图片描述在这里插入图片描述

密钥文件后缀

常见文件后缀

  • .cer, .cert:window平台下的常见证书文件,格式可以为der,也可以是pem,只包含公钥
  • .crt:Linux平台下的证书文件,格式同上,也只包含公钥
  • .key:私钥文件,格式同上,只包含私钥

其他文件后缀

  • .csr:证书生成请求文件,一般用于向CA机构提交生成证书文件
  • .pfx, .p12:windows平台常用的der格式文件,包含公钥与私钥
  • .jks:java密钥库,包含公钥与私钥
  • .pem, .der即是文件格式,也可以是文件后缀,什么后缀,就表示什么格式文件,一般公钥用该后缀

密钥使用方法

一般情况下,rsa密钥需要**私钥/证书(并非公钥)**配合使用,需要三个步骤:

  1. 本地生成私钥文件private.key
  2. 如果是自签证书(即没有CA机构认证过的),只需根据私钥生成证书,即可使用
  3. 如果是生产环境,一般需要CA机构认证证书,则需要根据私钥生成certificate.csr文件,然后将csr文件提交CA机构生成证书,即可使用

PS:如果需要用到公钥文件,则可以根据私钥生成公钥

公钥与证书的区别

既然数字签名与信息的加/解密都是基于公/私钥的,那么为什么要证书呢。
证书显然是包含公钥的,同时还包含CA的机构信息等,表示该该公钥是一个经过权威机构认证的合格的证书。
证书通常是CA认证机构用自己的私钥对用户的公钥进行数字签名,CA机构向公众公布自己的公钥,然后使用该证书的用户就可以验证该公钥是否是认证过的合法的公钥。

常用openssl命令

操作openssl 命令
生成私钥openssl genrsa -out privkey.pem 2048
生成自签证书openssl req -new -x509 -key privkey.key -out cacert.pem -days 3650
生成CSR文件openssl req -new -key privkey.key -out cert.csr
生成公钥openssl rsa -in privkey.key -pubout -out pubkey.pem
查看key文件openssl rsa -in private.key -text -noout
查看公钥openssl rsa -pubin -in public.pem -text -noout
查看der 格式的证书文件openssl x509 -inform der -in certificate.cer -text -noout添加-inform der命令表示der文件
查看pem格式的证书文件openssl x509 -in certificate.cer -text -noout省略掉-inform选项
pem转换deropenssl x509 -in myserver.pem -outform der -out myserver.crt
der转换pemopenssl x509 -inform der -in myserver.der -out myserver.crt
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值