由CA证书说起,漫谈怎样实现一次“秘密”的谈话

最近Adreaman在学习IPsec VPN,看到CA这部分内容后,本想总结一下CA的应用,结果一下子就带出了一系列的关于建立一次安全连接的场景和技术点,希望能以这样简明的形式和通俗易懂的语言把自己的一些理解分享给大家。

CA,是certification? authorities 的缩写,中文字面意思为“权威认证”,是一套管理认证请求和发放数字证书的机制,也可以引申为CA的实施机构或一台CA服务器。举例来说,一个“陌生人X先生”向CA申请自己的数字证书,CA在核实它的身份后为他发放了经该CA认证授权的数字证书。这个数字证书中包含了可以识别该用户(或设备或其他实体)的信息,例如它的姓名、设备串号、所属公司、IP地址等等。也就是说,一旦从“X先生”那里拿到CA给它发放的证书,你就可以知道“X先生”的信息并对这些信息坚信不移,当然前提是你绝对信任这家CA机构。

现实世界中的CA举例:VeriSign,这是一家著名的Internet在线CA服务提供商,在它那里申请的证书是受到世界的广泛认可和信赖的,当然申请者将为此付出美刀的代价,大概万元人民币/年。类似的CA服务商还有很多,国内也有,但是可信赖度和认证级别就有差异了。除了服务商之外,用户如果仅需要在一个较小的范围内行使CA认证功能,也可以自己假设私有的CA服务器,要求在一个自己划定的”特定信任区“内绝对信任该CA服务器即可。这类服务器,包括EntrustBaltimore、Microsoft等公司提供的CA服务器和软件产品。

下面具体以一个较真实的场景介绍CA的应用过程。

Alice和Bob希望建立一次”安全“的聊天,所谓”安全“就是聊天内容不被别人看到,要达到这一目的,首先就要将聊天内容加密。

加密就要用到密钥(英文称为Key)。说到密钥,一类是对称式密钥,一类是非对称式密钥。对称密钥是指加密者使用密钥Key加密信息,解密者也使用这个密钥key解密信息。而非对称密钥是指,加密者使用密钥key1加密,而解密者使用密钥key2解密。

如果Alice和Bob要使用对称式密钥加密他们的聊天信息,则前提是两人都知道这个密钥,双方怎么约定这个密钥(更正式的说法叫做密钥的传递)是秘密能否保证的关键,因为一旦密钥在”传递“过程中被别人窃听、盗取,则使用密钥加密也就无异于掩耳盗铃了。Diffie-Hellman密钥交换技术为我们提供了一种很好的交换密钥的方法,这种方法使得我们可以”在完全没有对方任何预先信息的条件下通过不安全信道建立起一个密钥“,也就是说,在一次公开场合的谈话中,Bob和Alice彼此互相知会了一些信息,利用这次交谈的信息,Bob和Alice都可以经过计算得到同一个信息,这个信息就可以作为密钥,而一旁偷听这次谈话的人无法计算到这个密钥信息。具体的算法就不在这里介绍了,维基百科中的介绍很具体很清楚。

而非对称加密则是这样的场景:Alice有一对密匙(两个),用一个密钥加密的信息可以(且仅可以)用另一个解密回来,同样的,Bob也有一套这样的密钥对。这样,Alice可以把自己的其中的一个密钥正大光明的告诉Bob,Bob也可以把自己的一个密钥告诉Alice,而根本不怕别人知道密钥的内容。因为在”安全“的聊天时,Alice把自己要说的话用Bob告诉自己的那个密钥加密后发给Bob,Bob收到后就可以用他自己未公开的那个密钥解密,同样的,Bob也可以把自己要说的话用Alice告诉自己的那个密钥加密后发给Alice,Alice收到后就可以用她自己未公开的那个密钥解密。RSA就是这样的一种非对称加密算法,具体RSA算法还是请你认真查看维基百科的RSA条目

有了这样的对称密钥或非对称密钥,我们的秘密聊天计划是不是很完美呢?

很遗憾,回答是No!Alice和Bob还是很危险!

Alice在开心的用上面的方式和Bob交换密码时,有没有想过一个问题,那就是,对方是Bob吗,真的是吗?

如果一开始跟你协商密码的人就是FBI的特工,厄,那Alice可就危险了。。。

所以,我们前面说到,”所谓‘安全’就是聊天内容不被别人看到,首先的就要将聊天内容加密“,而接下来就是另一个重点,如何保证对方的身份,也就是”身份认证“。

Alice和Bob可以事先协商好”天王盖地虎“之类的口令来认证对方。就好像我们输入Login密码登录计算机一样,这种方式叫做预先共享认证,也就是我们彼此已经事先知道认证口令。这种方式就将安全建立在口未被盗取的前提下了,假如叛徒将Bob的口令泄露给了FBI,噢,可怜的Alice。。。

还好Alice还有别的办法。前面介绍的非对称加密算法在这里也有用武之地,Bob将自己的名字用自己未公开的那个密匙加密后发给Alice,然后Alice用Bob公开的那个密匙解密,解开后一开,是”Bob“。因为这个世界上只有Bob的那把私有密匙加密后的信息是可以用Bob的公开密匙解密的,而且Alice用这把公钥加密的信息只有Bob用他的私钥才能解开。也就是说,非对称加密算法中,用公钥加密用私钥解密就可以用来加密信息,而用私钥加密用公钥解密就可以认证对方是私钥的主人。所以,这下对方应该是Bob无疑了吧。

但是,有一个前提,那就是Alice用来解密的那把Bob公开密匙千真万确、实实在在的是”真正的Bob“拥有的那把。因为,截止目前为止,这把用来解密的公开密匙也是目前这个”Bob“给Alice的。怎么办?

一切的信任都必须建立在另一个信任之上,所以,我们只能”定义“一个可以绝对的信任”机构“,它将是世界上公认的最公正的”机构“,而且NB哄哄的FBI也无法干扰它的公正。这个”机构“会有一个普天皆知公钥,有一个只有它自己才知道的私钥,当它发布信息时用它的私钥加密,然后大家收到信息后如果可以用”普天皆知“的那把公钥解开,就可以信任这确实是该机构发布的信息。

这样,如果该”机构“可以证明Alice手中的那把Bob的公钥确实是Bob的,一切问题就都解决了。怎么证明,就是用我们一开始介绍的”证书“,这家机构的角色,就是CA。(终于绕回来了)

Alice、Bob以及同样需要”安全聊天“的千千万万的人,都向CA申请一个”证书“,证书中记录了自己的公钥,以及一个用这把公钥加密过的自己的信息(这些信息最好能唯一的和该用户关联起来,而CA必须严格保证”证书“中这些用户信息的可靠性),然后这些信息(也会加上一些CA的信息)由CA用CA自己的私钥加密,这样,一个”证书“就做好了。

这样,Alice和Bob的聊天,可以”安全“地开始了。


小花絮:之所以加解密技术的书籍都喜欢用Alice和Bob这两个人来举例,据说是因为当年FBI的密码学者曾经密切监视过两个叫做Alice和Bob的人的秘密联络。:)

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>