兰州白癜风专科医院 http://m.360xh.com/xinwen/3260/56218.html
HTTP协议发送的信息是明文,如果被拦截,信息就会泄漏,怎样才能让信息不会泄露呢?首先能想到的就是加密,HTTPS确实是这么做的。
加密方式
加密有两种方式:对称加密和非对称加密。相比非对称加密,对称加密的效率非常高,那它的安全性如何呢?
对称加密场景
(1)用户A将密文+对称密钥+加密算法一起发给用户B,用户B拿到这些信息后解密出明文,然后告诉用户A我收到了,整个过程看起来没有任何问题。
(2)假如有用户C截取了用户A的信息,解密出明文,然后再把A的信息发给用户B,用户B收到密文后解密得到明文并告诉用户A我收到了。整个过程中用户A和B都不知道用户C的存在,但是信息都被用户C窃取了。
很显然,对称加密的安全性非常低,形同虚设。那非对称加密的安全性又如何呢?
非对称加密场景
(1)用户A向用户B询问公钥,用户B将自己的公钥KEY_B发给用户A,用户A接收到用户B的公钥后,将信息用用户B的公钥加密后发给用户B,用户B用自己的私钥解密得到明文。
(2)用户A向用户B询问公钥,用户B将自己的公钥KEY_B发给用户A,假如用户C截取到了这条信息,用户C保留了用户B的公钥KEY_B,将自己的公钥KEY_C发给用户A,用户A用KEY_C加密后发给用户B,这时用户C可以获取到这条信息并用自己的私钥解密得到明文,然后将明文用用户B的公钥KEY_B加密后发给用户B,整个过程中用户A和用户B都不知道用户C的存在,但是信息都被用户C窃取了。
非对称加密的安全性同样存在漏洞,无法解决中间人攻击的问题。
HTTPS如何解决中间人攻击?
从非对称加密的流程中不难看出,问题的关键在于中间人C伪造了用户B的公钥,而用户A全然不知。要解决这个问题,就需要一个非常可信的CA(证书颁发机构)来管理这些公钥而不是让用户A去询问用户B的公钥。举个例子:如果把淘宝看作CA,商家想在平台上卖东西就必须提供营业执照,淘宝给商家的资质可以看作证书,买家可以看作用户,淘宝平台统一管理平台上的商家。因此CA就变得非常重要了,它一定是非常有威信且有信用的一个组织,后续的讨论都是建立在CA非常可信的基础上。
CA是如何管理公钥的?
假如用户B的公钥直接提交给CA机构并由CA机构植入用户A的电脑中,看起来很完美?那你低估了黑客的能力,黑客可以把用户A电脑中用户B的公钥KEY_B换成自己的公钥KEY_C,以后用户A和用户B的交互过程就和上面分析的非对称加密场景(2)类似。这里的主要问题是没有对用户B的公钥进行数字签名,导致谁都可以修改。
数字签名
我们知道非对称加密是用公钥加密,私钥解密。如果反过来用私钥加密,公钥解密是否可行呢?实际上是可行的。再仔细想一想,私钥是保密的,而公钥是公开的,用私钥加密,那相当于所有人都可以用公钥解密,这个加密的意义是什么?这个加密的意义就在于防抵赖和伪造,举个例子:张三用自己的私钥加密了一条消息张三要去阿里巴巴了,然后他公开了加密消息,由于这条消息只有张三的公钥才能解密,从而可以确认张三要去阿里巴巴了这条消息肯定是张三发出的,其他人不能伪造这条消息,张三也不能抵赖这条消息不是自己发的。
最后我来详细叙述一下证书签名,证书分发以及证书验证的整个过程。
(1)证书签名。用户B向CA提交自己的公钥、域名等。CA将这些参数转换为一个Hash值,然后用CA私钥对这个Hash值进行加密,并与用户B的公钥绑定在一起,生成数字签名证书并发给用户B。
(2)证书分发。用户A请求用户B的数字签名证书,用户B把CA授权的数字证书发给用户A,用户A获取到证书后,用CA的公钥解密数字证书得到用户B的公钥和Hash值。
(3)证书验证。通过B的公钥和域名生成Hash值,和上一步中解密得到得到Hash进行比较,如果相等,说明用户B的公钥正确。
为什么可以解决中间人攻击?
假如在上面的第(2)步证书分发中,用户C把自己的数字签名证书发给用户A,用户A获取到用户C的证书后,用CA的公钥解密得到用户C的公钥和Hash值。然后在第三步中是无法通过验证的,因为用户C的域名和用户B的域名肯定是不一样的,第三步计算得到的Hash值是由用户C的公钥和用户B的域名生成的,而用户C数字签名中的Hash值是由用户C的公钥和用户C的域名生成的。