闲说加解密

首先介绍下加解密和签名的使用场景,后面再介绍下https相关的加解密原理。

签名

使用场景最多的就是保证数据不被外界篡改,保证数据的完整性。常用的签名方式也可以成为hash算法:MD5,SHA1,SHA256等。

在一个场景就是保证数据的唯一性。由于网络的不稳定性,同一个请求可能会发生多次,如果对请求做唯一性的话,通过签名就可以鉴别。比如说转账业务中,对同一个转账行为,不能发生多次。

在服务端对服务端的场景中,签名方式比较常见。在客户端与服务端交互过程中,客户端只可以做验证,在客户端生成的签名都认为是不安全的,即使使用RSA这样的签名方式。

加解密

在数据传输过程中,如果是私密数据,则需要数据的加密。数据加密方式分为对称加密和非对称加密。对称加密使用同一个私钥进行加解密,非对称方式使用一个密钥加密,另一个密钥解密。目前使用最多的是RSA算法。但是非对称加密特别耗cpu性能,而对称加密要小得多。https结合了两者保证了数据的加密传输。

在非对称方式中,一个成为公钥,另一个成为私钥。私钥要保存再服务端,保证不能泄露,而公钥可以是公开的。

如果在服务端加密,由于公钥是公开的,即使是加密数据,也能被破解。如果客户端向服务端传送数据,客户端可以使用公钥加密,由于私钥只有服务端才有,那么加密数据只能由服务端解开,即使这样,也不能这些数据可信的,第三方完全可以利用公钥加密数据传到服务端。

在用户登录场景中,完全可以用公钥加密传输。

两者结合

在很多场景下,上面的两种方式需要结合起来一起使用。传输数据=加密(数据+签名)。

https原理

随着https的普及,更多的网站使用https传输数据。https可以理解为http+TSL。TSL协议在http协议之下,传输层协议之上。http数据经过TSL加密之后传给传输层,同样当接受到数据后,TSL解密后返回至http层。

https交互过程中用到了非对称,对称以及HASH算法。使用对称算法主要为了性能。

http://pic002.cnblogs.com/images/2012/38542/2012072310244445.png

  1. 客户端访问服务器时,服务端会把生成的证书信息返回。这里的证书信息包含数字签名,服务端的公钥等。
  2. 客户端会验证证书信息,证书一般不是免费的,需要向证书机构申请。浏览器内一般会集成了系统提供的证书,如果证书没有通过认证或者伪造的,浏览器会提示
  3. 客户端用证书公钥解密得到服务端的公钥,客户端也会随机生成一个密钥,让后通过服务端公钥加密,传输到服务端。
  4. 服务端私钥解密,获取客户端生成的密钥,后面数据传输时,用这个密钥进行加密,用的是对称加密方式。

https比http慢的原因是多了两次RTT。

中间人攻击是https最常见的威胁。我们用fiddler查看https数据时,用的就是这种手法。中间人会劫持访问,用伪造的证书回复给客户端。如果客户端继续访问,中间人可以获取报文,甚至篡改数据。

当浏览器提示警告时,对不信任的网站不要轻易访问。也不要随意添加证书认证到系统中。最常见的12306网站证书,浏览器会提示不安全的,也就是说12306的网站证书不被操作系统所承认。不受承认的证书,最好不要轻易安装。

http://blog.bruceding.me/wp-content/uploads/2017/01/QQ20170107-0@2x.jpg

此条目发表在WEB开发分类目录,贴了, 标签。将固定链接加入收藏夹。

发表评论

邮箱地址不会被公开。