这个世界有两种东西就密钥。这个是怎么解释的呢?所谓的钥匙,其实就是一种算法,你看那个钥匙能够打开一扇门,那个算法其实就体现在钥匙上的凸凸凹凹上,门一看这个钥匙所体现的算法与自己的琐其契合的,那么当然就可以信任开门者了。但是呢,这个世界没有什么万能|钥匙的说法,当然你可以选择拿个很大很大的铁锤把门砸碎了破门而入,那你还不如直接去炸计算机算了!那么密钥就是我们用这种算法加工数据,其结果会符合预期,从而实现正确的身份验证。
我们的计算机天才想出了两种机制,一个是对称的公钥加密,一种是非对称的私钥公钥加密。
公钥加密,用一个密钥去加密和解密数据。为什么是对称的呢?为什么密钥可以同时进行加密和解密呢?这不是胡扯吗?其实是这样的,密钥加密是一种算法,比如说是两个素数的成绩,那么它的算法就是这样你难道想不出解密的算法吗?就只要找素数因子就行了。或者是通常的什么a对应b,b对应c……然后z对应a。难道你不能倒推过来吗?所以这个对称就是你知道加密算法那么自然可以推导出解密算法,原来是这个意思。这种算法,有个好处就是快,效率高。但是呢,管理比较困难,为什么呢,比如说甲要和乙通信,则甲与乙之间需要有两个密钥,一个是甲公布给乙的,一个是乙公布给甲的。但是呢,如果一个公司有一千个人,那么他们直接爱呢都要通信的话,我给你发信息,我就要找出我们之间要用那种公钥来加密。整个公司则需要1000*999个密钥,这简直就是噩梦啊!所以管理比较困难。你不要认为,你公布的密钥可以所有的人共用,阿猫阿狗都用,那还加密个屁啊!公钥也是要保密的。至于这里面的算法有3DES算法,Blowfish算法,RC5算法。
那么非对称的呢?这里有一个公钥也有一个私钥,非对称密钥的加密密钥与解密密钥完全不同,并且不可能从任何一个密钥推导出另一个密钥。当明文要通过加密后发送给接收方时,先得到接收端的密钥对产生器产生的一对密钥中的加密公钥,通过这个密钥将明文转变为密文,发送给接收端,而接收端接收到密文后,使用一对密钥中的解密密钥,即私钥,来将密文转变为明文。一般情况下,我们用公钥做为加密密钥,用私钥作为解密密钥,这样就可以实现多个发送者向指定的接受者发送信息了。如果用私钥加密,公钥解密,就可以实现特定的发送者向多个接收者发送信息了。这样N个用户进行通信,只需要N对密钥就可以了。这正是因为加密解密的不对称引起的。常用的非对称密钥算法包括RSA算法、DSA算法、PKCS算法和PGP算法。
这里又有一个数字签名的概念。我们要传一篇机密的信息,比如说是“老婆们,我爱你”。按双方约定的HASH算法如md5计算得到一个固定位数的报文摘要。在数学上保证:只要改动报文中任何一位,重新计算出的报文摘要值就会与原先的值不相符。这样就保证了报文的不可更改性。将该报文摘要值用发送者的私人密钥加密,然后连同原报文(“老婆们,我爱你”)一起发送给接收者,而产生的报文即称数字签名。接收方收到数字签名后,用同样的HASH算法对报文(“老婆们,我爱你”)计算摘要值X,然后我们用发送者的公开密钥进行解密报文摘要得到了另一结果Y。如XY相等则说明报文确实来自所称的发送者。这样,当然可以保证我对她们发的信息足够保密。但是呢,其他人也可以说他是我啊。那怎么办呢?解决方案如下,因此公钥必须向接受者(我的老婆们)信任的人(身份认证机构可以说是婚姻局)来注册。注册后身份认证机构给你发一数字证书。对文件签名后,你把此数字证书连同文件及签名一起发给接受者,接受者向身份认证机构求证是否真地是用我的密钥签发的文件。 这里,就涉及到第三方了,因为第三方是知道我的私钥的,这就需要第三方有足够的威信和保密性。这个私钥我觉得就像我们的签名一样,因为各个人都有自己的笔迹的特点,这个是只有自己才会的,其他人是不会模仿的,虽然你能看到他的字,但是你不知道这到底是在怎么写出来的,这就是我的私钥。当然真实的签名机制和这里的机制还是有许多不同的,我只是打个比方。