加密/解密 公钥/私钥

Posted 赵四司机

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了加密/解密 公钥/私钥相关的知识,希望对你有一定的参考价值。

一:加密/解密

加密:将明文转换成密文的过程
解密:将密文转换成明文的过程

二:秘钥

秘钥的实质是一个字符串,其度量单位为bit(位),按照秘钥的使用方式,加密可以分为两大类,对称加密和非对称加密,对称加密是指加密解密都用同一把秘钥,目前最流行的对称加密算法为AES加密算法,秘钥的长度为128、192或256,安全性较高,性能较好。

  • 加密分组模式:将明文分组加密,微信支付中使用AEAD_AES_256_GCM进行分组加密。

非对称加密指使用公钥加密后只能使用私钥进行解密,反过来,私钥进行加密之后也只能用公钥进行解密,其中RSA加密算法是最著名的非对称加密算法。
举个例子:假如Tom、Jerry要给朋友zhangsan发送消息,zhangsan可以将自己的公钥分发给Tom和Jerry,这样Tom和Jerry就可以用这个公钥进行加密,此时只有拥有私钥的zhangsan能对消息进行解密,保证了消息的机密性。反过来假如zhangsan用私钥进行加密,Tom及Jerry接收到消息之后用zhangsan分发的公钥进行解密,解密成功说明该消息是zhangsan发送的。

三:对称加密VS非对称加密

对称加密:
优点;运算速度快
缺点:秘钥需要信息交换的双方共享,一旦被窃取,消息就会被破解

非对称加密:
优点:私钥严格保密,公钥任意分发,黑客获取公钥无法破解密文
缺点:运算速度很慢

四:HTTPS加密传输过程


在HTTPS传输中,既要保证传输速度也要保证传输安全性,这时候可以对服务器公钥进行非对称加密传输,服务器获取到加密的会话主秘钥之后,再用服务器私钥进行解密获取会话主密钥,然后再用对称加密进行数据传输以保证传输效率。

私钥加密公钥解密或者公钥加密私钥解密有意义吗?

"1、如果是私钥加密,公钥解密的话,因为公钥是公开出来的,所以拿到公钥的人 ,是可以解密报文的,我认为这种加密方式没意义。"

 你理解有误. 这种场景是用作签名的, 就是校验信息发送者身份. 只有通过特定私钥的的信息才能被公开出来的公钥解密. 这就唯一确定了信息发送者, 达到签名(不可抵赖)的目的. 

"2、如果是公钥加密,私钥解密的话,因为公钥是公开出来的,所以系统是无法识别请求就是指定系统发送的,也就是别人是可以模拟你的报文,请求你的系统。"

这种场景是做信息加密用. 发送者A通过公钥加密信息, 只有持有私钥的人C才能解密. 保证了被发送的信息不会被第三方知晓. 而B通过模拟报文的攻击方式并不是修改了A的信息, 而是B"假扮"A向系统发信息. 这种情况并不是A的密文被破解, 而是B在欺骗C, 所以不属于RSA算法漏洞. 

同时, 要预防这类欺骗只需利用场景1的方式, 由A使用另外一套RSA密钥对信息签名即可. 此时B即使知晓了A要发送的原文, 由于没有A的密钥 C也无法使用公钥解密出数据. 达到了既不可篡改, 又不可抵赖的目的.

3.如果我知道你的报文结构,因为公钥是公开的,我可以使用公钥加密模拟报文请求你的系统,并不是说要篡改数据

所以需要签名啊. 使用场景1 的方式签名就可以防止这种欺骗了. 一共有两套密钥. 第一套做签名, 第二套做加密. 这样无论第三者是否知道报文格式, 都无法欺骗到系统了.

即便第三者知道报文格式, 通过公钥仿制一个报文请求系统, 这种情况也不是RSA的问题. RSA还是很好的保护了通信者之间的信息. 第三方如无密钥, 无法得知通信内容. 签名只是对RSA的活用,相当于对密文的再次加密. 要解决这种欺骗问题, 还可以通过诸如约定token来实现. 因为通信内容不可被第三方获取, 故可在报文中加入身份验证信息token来实现防骗.
  

以上是关于加密/解密 公钥/私钥的主要内容,如果未能解决你的问题,请参考以下文章

公钥私钥和HTTPS分析

公钥私钥和HTTPS分析

https提供安全的web通讯

https提供安全的web通讯

​https提供安全的web通讯

HTTPS通信原理