安全 - 加密之签名、验签与https

一. 关于非对称加密

RSA是非对称加密算法
私钥加密--------------------------公钥解密
公钥加密--------------------------私钥解密
私钥加密--------------------------无法用私钥解密
公钥加密--------------------------无法用公钥解密
非对称性

二. 对加签验签的理解

对加签验签的理解https://www.cnblogs.com/gdayq/p/5955756.html

1. 怎么理解:数字签名中的发送方将报文摘要私钥加密后发给接收方,接收方然后公钥解密?

我们说非对称加密都是公钥加密,私钥解密,那么数字签名这里如何理解私钥加密,公钥解密?

非对称加密指加解密使用的密钥不同,与对称密钥相对,因为对称密钥加解密使用的是同一个密钥。
非对称密钥不是指一定用公钥加密,私钥解密,这是错误的理解。

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

"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来实现防骗.

 

肯定时有意义的,只不过PKI应用的场景不一样,首先私钥受介质保护(UKey私钥受PIN码或指纹保护等),只能够自己使用,公钥是公开的。密钥对用于互操作,以下列举加解密的几个场景:

- 私钥加密(也较签名),公钥解密(也叫验签):一般应用于对一段摘要(通过计算原文获取,因为私钥加密长度有限制,而且摘要运算速度比签名快)进行签名,由对方来负责验证是签名,该操作的目的具有验证数据完成性,不可抵赖性,可用于银行转账的报文。签名操作用在终端(手机或电脑),确认操作在银行服务器(验证签名的可靠性)。
- 公钥加密,私钥解密:一般用于加密通信,例如:加密电子邮件,我用B的公钥加密一段数据,然后发送给B,只有B的私钥可以解密我发送的原文,可以在公网上传输,被中间者攻击也无所谓,反正也解不出原文,但是一般使用当中不直接使用公钥加密消息,因为有长度限制,通常会先生成一个对称密钥,用对称密钥加密消息,然后在用公钥加密对称密钥。

3. 数字签名和加密的区别

1. 数字签名和验证:
发送报文时,发送方用一个hash算法从报文中产生固定长度的报文摘要,然后利用自己的私钥对这个摘要进行加密,这个过程就叫签名。这个加密后的摘要作为报文的数字签名和报文一起发送给接收方,接收方用发送方的公钥解密被加密的摘要(报文附加的数字签名)得到结果A,然后用于发送方一样的hash算法从接收到的原始报文中算出报文摘要B。最后,把A和B作比较。如果相同,那么接收方就能确认该数字签名是发送方的。

加密和解密:

发送方利用接收方的公钥对要发送的明文进行加密,接受方利用自己的私钥进行解密,其中公钥和私钥匙相对的,任何一个作为公钥,则另一个就为私钥。

 2.数字签名的功能:

  1. 对签名者进行身份认证;
  2. 保证信息的完整性(在交易过程中,没有被篡改)
  3. 防止交易中的抵赖发生(签名者无法否认信息是由自己发出的)

3. 加密的功能:

  1. 重点在于“数据的安全性”,可以防止数据被监听攻击。
     

 

三. 聊聊HTTPS和SSL/TLS协议

首先明确几个基本概念:

1、密钥对在非对称加密技术中,有两种密钥,分为私钥和公钥,私钥是密钥对所有者持有,不可公布,公钥是密钥对持有者公布给他人的。

2、公钥,公钥用来给数据加密,用公钥加密的数据只能使用私钥解密。

3、私钥,如上,用来解密公钥加密的数据。

4、摘要,对需要传输的文本,做一个HASH计算,一般采用SHA1,SHA2来获得。

5、签名,使用私钥对需要传输的文本的摘要进行加密,得到的密文即被称为该次传输过程的签名。

6、签名验证,数据接收端,拿到传输文本,但是需要确认该文本是否就是发送发出的内容,中途是否曾经被篡改。因此拿自己持有的公钥对签名进行解密(密钥对中的一种密钥加密的数据必定能使用另一种密钥解密。),得到了文本的摘要,然后使用与发送方同样的HASH算法计算摘要值,再与解密得到的摘要做对比,发现二者完全一致,则说明文本没有被篡改过。

公钥、私钥、摘要、签名、数字证书的关系(图文):https://www.jianshu.com/p/3c5212b47bec

上面实际上介绍了加密解密和数字签名两个概念和实现过程,二者的过程正好是相反的。

在签名的过程中,有一点很关键,收到数据的一方,需要自己保管好公钥,但是要知道每一个发送方都有一个公钥,那么接收数据的人需要保存非常多的公钥,这根本就管理不过来。并且本地保存的公钥有可能被篡改替换,无从发现。怎么解决这一问题了?由一个统一的证书管理机构来管理所有需要发送数据方的公钥,对公钥进行认证和加密。这个机构也就是我们常说的CA。认证加密后的公钥,即是证书,又称为CA证书,证书中包含了很多信息,最重要的是申请者的公钥。

CA机构在给公钥加密时,用的是一个统一的密钥对,在加密公钥时,用的是其中的私钥。这样,申请者拿到证书后,在发送数据时,用自己的私钥生成签名,将签名、证书和发送内容一起发给对方,对方拿到了证书后,需要对证书解密以获取到证书中的公钥,解密需要用到CA机构的”统一密钥对“中的公钥,这个公钥也就是我们常说的CA根证书,通常需要我们到证书颁发机构去下载并安装到相应的收取数据的客户端,如浏览器上面。这个公钥只需要安装一次。有了这个公钥之后,就可以解密证书,拿到发送方的公钥,然后解密发送方发过来的签名,获取摘要,重新计算摘要,作对比,以验证数据内容的完整性。

这里纯粹的文字,未免枯燥,可以结合前面提到的文章链接中的图片一起理解,这些文字对图片的理解应该有一些帮助。HTTPS是综合用了加密解密和数字签名的实例,理解了上述概念和过程,结合密钥对交换的过程就不难理解HTTPS

https://www.techug.com/post/https-ssl-tls.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值