原创:花括号MC(微信公众号:huakuohao-mc)。关注JAVA基础编程及大数据,注重经验分享及我的成长。算法
目前你们常说的信息加密技术就两种,对称加密和非对称加密。编程
所谓的对称加密就是加密和解密用同一份密钥。对称加密的好处就是加密速度快,可是缺点也很明显,必定要保存好这份密钥,若是密钥丢失,就会带来很大的安全风险。并且若是与服务端进行通讯的客户端比较多的话,服务端要管理不少份不一样的密钥。浏览器
为了解决对称加密的缺点,人们提出了非对称加密,非对称加密技术也是目前应用最普遍的加密技术。所谓的非对称加密就是生成一对密钥,分为公钥和私钥。私钥本身保存,公钥发布出去。用私钥加密的信息只能用公钥解密,用公钥加密的信息也只能用私钥解密。安全
假设你的好朋友铁蛋,常常网购。购物网站为了保证信息安全传输,决定生成一对密钥,私钥本身保存,公钥发给铁蛋。铁蛋发给购物网站的信息都是用公钥加密的信息,购物网站收到后,用本身的私钥进行解密。这样即便传输途中,信息被截获,也没办法破解,由于没有私钥。 微信
这个时候有个黑客,作了一个假的购物网站,页面和真的网站一摸同样,连网址都很类似。同时也生成了一对密钥,最重要的是黑客偷偷的把铁蛋电脑里真购物网站的公钥给替换成了假购物网站的公钥。markdown
当铁蛋打开假的网址进行购物操做时,会用假的公钥进行加密而后把消息发给假的网站,整个通讯过程,铁蛋都没有发现本身被骗。 并发
铁蛋之因此被骗,是由于他不知道电脑里的真公钥已经被换成假的了。为了解决这个问题,出现一个认证机构,这个机构会对网站的公钥进行加密签名并造成一个证书,这个证书就是你们常说的CA
证书,这个机构就是CA
。运维
只要铁蛋电脑里面安装的是通过CA
认证的证书,在访问的时候,浏览器就会显示出一把小锁,提示能够安全访问,若是没有通过认证,浏览器就会提示铁蛋有风险。oop
铁蛋常常在多个网站购物,难道须要每一个网站都保存一份证书?其实不用这样,咱们的电脑里面通常都有CA
的根证书,只要有了这个证书,全部通过CA
认证过的网站就都是安全的。大数据
没错,我上面介绍的就是HTTPS
的工做原理,这也是非对称加密技术的典型应用。
非对称加密还有一个应用场景就是双向认证。所谓的双向认证就是不只服务端要验证客户端的身份,客户端也要验证服务端的身份。说白了就是客户端和服务端各自生成一个密钥对,私钥本身保存,公钥发给对方。这种状况通常用在系统与系统的对接上。
假设C
系统要访问S
系统的服务,S
系统对外提供的数据安全级别比较高,只有受信系统才能访问。假设目前只容许C
系统访问。
S
系统为了保证信息安全传输,决定生成一对密钥,私钥本身保存,公钥发给C
系统。C
系统访问S
的时候,会用S
的公钥将消息进行加密发给系统S
,S
用私钥进行解密。
若是这个时候窃密者B
系统偷偷拿到的S
提供给C
的公钥,而后B
用S
的公钥加密消息以后发送给系统S
,获取相应的数据,那么S
是没办法判断出请求的消息是来自C
仍是来自窃密者B
。
如何保证消息来自于受信系统C
呢?通过协商,C
系统也生成一对密钥,私钥本身保存,公钥发给系统S
。
当C
向S
发送请求的时候,C
先将要发的消息,假设为M
,进行一次Hash
运算,获得一个固定长度的Hash
值,这个值通常称为数字摘要。而后C
用本身的私钥对这个数字摘要进行加密,加密后的值称为数字签名,其实跟现实中咱们在文件中进行手写签名是一个意思。
C
系统将数字签名和要发送的消息M
,一块儿用S
的公钥作一次加密以后发送给系统S
。
S
收到消息以后,先用本身的私钥对消息进行解密,解密以后,获得C
的数字签名和消息M
。这个时候关键的一步来了,就是验签,验证消息是不是C
发来的。
首先S
用C
的公钥对签名进行解密操做,解密完成后会获得一个摘要值,咱们称之为D
。能解开就证实消息是C
发来的。S
还会用和C
同样的Hash
算法对消息M
进行Hash
运算,这样将会获得一个摘要值,咱们称之为D‘
,若是D
和D’
相同就证实消息没有被篡改过。
上面的双向认证过程也是有漏洞的,只不过相比于单项认证,下降了被破译的风险而已。注意,世界上不存在绝对安全的系统,即使是如今逐渐流行起来的生物识别系统。咱们所作的各类安全措施都只是在下降系统被破解的风险而已。
就像家里的防盗门,只能防君子不能防小人。
推荐阅读
·END·
Java·大数据·我的成长