“天王盖地虎”

  “宝塔镇河妖”

  取自京剧《智取威虎山》中的这段“接头暗号”,你一定不会陌生。

  是不是自己人,接头双方一对就知道,为何,正是由于保密通信中的常用手段——身份认证。

  说起身份认证,古人早已发明了一种很精巧的身份确认方法——对虎符。一个虎符剖分两半,一半在君,一半在将。君要使将,则命使者携自己的一半前往将之所在,虎符一对,纹理相配,则受君命。可见身份认证的问题在很早就被意识到并想出了一定的解决方案。

  我们知道技术都是“应运而生”的——有了应用场景,才会催生出相应的技术方案。

  现代信息技术的发展,特别是互联网的诞生和病毒式的扩散发展,为通信出了很多新的难题。信息的灵活多变、信息量的大增、通信的网络化、并行化、实时性、安全性,是当前通信发展面临的场景。无数的终端设备接入其中,终端背后无数的人在交换信息,其复杂程度超越任何其他人造系统。利用得当,信息可以瞬息传遍全球;利用失当,明星隐私也可以瞬间传遍网络。互联网安全,是伴随其始终的恒久话题。



  在这种应用场景下,一种新的、绝妙的通信方式——公钥系统,或者说非对称加密系统提供了解决方案。

  顾名思义,非对称加密系统中加密方和解密方是不对称的,无论是算法还是密钥。B想从A那里收取信息,他首先用公钥算法生产一对密钥——公钥和私钥,并通过网络向外发出公钥,自己仔细保管好私钥,而算法则是公开的,任何具备相关知识的人,就可以获取算法和公钥,当然,这其中一定包含A和想要截取的E。

  A拿到公钥之后,就可以与B通信了:她用公钥加密信息,然后发布到网络上,B(当然也包括E)接收到信息之后,用私钥轻易地解密并获取了明文信息。而E呢?虽然他可以轻易地获取密文,他也可以轻易地获取密钥——公钥,但很可惜,用公钥加密的信息,用公钥不能解开。反过来,用私钥加密的信息,也只能用公钥才能解开。这一特点,正好完美解决了身份认证的环节,也就是实现所谓数字签名。

  前面已经讲到过身份认证的重要性,其作用不下于加密本身。试想,如果A连通信的对方是B还是E都分不清,怎么能保证通信的安全性?要知道伪装是截获情报最重要的手段之一。除此之外,要想保证通信的安全性,还要考虑信息是否被篡改。

  假如我送的信半路上被人悄悄加几句话,很容易就被误导了。为了防止这种事情发生,在通信中常用的办法就是签名,盖戳,并在信封上加漆印,这样的情节在很多影视剧中相信大家都见过。即便这样,伪造笔迹,伪造签名的事情也难免。

  互联网上身份认证怎么做呢?

  最常用的办法是数字签名,这是公钥密码系统中非常重要的一环。数字签名不仅能进行身份认证,还可以对所传递的信息做校验,保证信息的完整性和不可篡改性。具体的做法是,发信方用一个哈希函数(比如MD5)对信息内容生成一个摘要,然后用私钥加密这个摘要,与加密后的信息(用对方公钥)一同传给对方。

  对方用公钥解开摘要,用自己的私钥解开信息,并用相同的哈希函数生成信息摘要,然后与发送过来的摘要做对比,相同则说明信息没被篡改过且是完整的。由于公钥私钥一定是成对的,因此上述过程就完成了身份验证、信息真实性和完整性验证。

  绝大多数用户在使用互联网的时候,并没有意识到公钥系统在保护着我们,但实际上它无处不在。不知道大家注意到没有,现在的网页已经很少有http开头的(国内很多网站除外),都是https开头了,Chrome浏览器甚至已经不再支持http网页浏览。这里多了个s,就表明网站内容经过加密了,这样你就可以放心在网站上输入个人信息、用户名密码而不用担心被人盗取。

  其中用到的加密技术,正是公钥密码。尽管HTTPS并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击,但HTTPS仍是现行架构下最安全的解决方案。我们用支付宝、微信、银行网银做的每笔交易,背后都是公钥系统在保驾护航。