不涉及算法的具体内容,就是白话几个概念之间的关系。
1. 对称加密——密钥你知我知
对称加密算法有DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法。
基本原理可以考虑以下场景:
上图中,三角形表示唯一的密钥。
A和B事先已经约定好了唯一的密钥。
A用事先约定的密钥加密了信息,并发给了B。
B用事先约定的密钥解密了信息。
E:我截取了他们的信息。
路人:人家俩的密钥是商量好的,你有信息没有用啊。
E:看来只要从他俩当中偷到密钥我就可以知道了。
这种方式在生活中非常容易想到,我们要向他人秘密传递某个东西,最直接的方式就是装箱上锁,两个人都有钥匙而其他人都没有钥匙。如此一来,就算有人中间截获了加锁的箱子,由于没有钥匙,也没办法知道箱子里到底是什么。
这种方式的好处在于:算法公开、计算量小、速度快、效率高。
而其弊端在于:
1. 双方都有相同的钥匙,如果有一方的钥匙被窃取复制了,那么传递过程就不再安全了。双方无法确定这个安全的时间有多久。
2. 在秘密传递箱子里的东西之前,首先要安全地交换钥匙。如果说用鸽子传递钥匙是安全的,鸽子却无法传递装在箱子里的东西。
2. 如果要给100个人秘密传递某个东西,就需要上锁100次,而且还需要管理100把钥匙。而这些人如果相互之间都需要秘密传递东西,那么每个人需要管理的钥匙数量将会非常庞大。
2. 非对称加密——私钥我知,公钥天下知
非对称算法有RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。
基本原理可以考虑以下场景:
在上面的图中,三角形表示私有密钥(private key),圆形表示共开密钥(public key)。
A有私钥A和公钥A。
B有私钥B和公钥B。
A和B都把自己的公钥给了对方。
A有私钥A和公钥B。
B有私钥B和公钥A。
他们开始传递信息。
A用公钥B加密了信息,并发给了B。
B用私钥B解密了信息。
E:哈哈,他们刚才传输的公钥B和信息被我截获了!
路人:没有用的,你只有用公钥B加密的信息和公钥B,没有私钥B,你还是不知道他们在说啥。
非对称加密相比对称加密,由于算法复杂,在速度方面毫无优势,也因此拥有更高的安全性。在场景1中提到的,如果许多人互相之间都需要秘密传递东西,对称算法每个人都需要管理数量庞大的钥匙(密钥你知我知),而非对称算法,只需要管理好自己的私钥,把大家的公钥找一个地方放好就行,谁要用来加密就去拿。
3. 密钥交换——安全地传递密钥
从上面可以看出,在对称加密过程中,需要双方事先确定密钥。
我们知道,非对称加密更安全,而对称加密加解密的速度更快。因此,在传输消息的过程中,希望能够用对称加密进行,而在事先交换密钥的过程中,应该用非对称加密。
4. 中间人攻击(MITM)——不能确定对方身份产生的问题
在场景2中,Eve又思考如何才能获取Alice和Bob之间的消息内容,后来,他想到了一个办法。
A、B、E都有自己的公钥和私钥。
E截获双方公钥并向双方发送自己的公钥。
E:我已经截获了他们俩的公钥,公钥A和公钥B是我的啦!我现在把我自己的公钥E发给他们俩,反正他俩也不知情。
A用公钥B(其实是E)加密了信息,并发送给B。
E又拦截了信息,E用私钥E解密了信息,并记录了下来。
E再用手头上的公钥B给信息加密,然后发给了B。
E:他俩完全不知道,他们互相眼中的对方其实都是我呢,哈哈。
这种场景就是Alice和Bob无法确定对方身份时容易出现的问题,Alice以为Eve就是Bob,而Bob以为Eve就是Alice,通讯的两端完全无法意识到他俩中间存在一个知晓一切的中间人。而中间人不仅可以偷窥,甚至可以篡改。
5. 数字签名——确定报文是否被篡改
上面的场景中提到,如果不能确定对方的身份,那么就有可能会出现一个不怀好意却无所不知的“中间人”。那么,我们就要想一个办法来确认对方的身份。在生活中,我们确认文件等最常见的方法就是签名和按手印了,那么,我们是不是可以同样地给要传递的信息签名呢?
我们非对称加密场景中的Alice和Bob这次又要传递信息了,他们可不想再被Eve欺骗了。
A用一个Hash函数对要发送的报文产生一个摘要,然后用私钥A加密该摘要,并把摘要和报文一同发送出去。
B收到之后,用同样的Hash函数对接受的报文产生一个摘要,用公钥A解密收到的摘要,然后对比二者,如果不同的话,证明报文在传输的过程中已经遭到篡改,相同则证明传输过程顺利。
通过上述过程可以看到,数字签名结合了密钥加密和数据摘要。
那么,有了数字签名就可以确定对方身份了吗?
Eve:哈哈哈,你们真是太天真了!难道你们忘了嘛,在中间人攻击的场景中,我手上有你们俩的公钥,而你们手上的公钥都是我的。也就是说,你们的签名并不能到对方手上,到了我手上我可以改完报文重新生成我的签名。通过签名你们只能知道报文生成的摘要和公钥解密得到的摘要一致,可并不能确定这报文有没有被篡改过,也不知道这中间是我在传递信息啊!
6. 数字证书——确定对方的身份
在上面的场景中,Alice和Bob虽然给报文签上了自己的数字签名,但是如果已经有了Eve作为中间人,仍然不能确定对方的身份。
那么Alice就想了,如果是因为Bob错误地把Eve的公钥当成了我的公钥,那我就得让他认准我的公钥啊,那我得找一个权威的第三方机构来认证,我Alice的公钥A就是这个样子的,其他的都是假的。
Eve一看,这证书是公开的啊!在Bob向Alice请求公钥时,中间人Eve把公开的证书A发给Bob。Bob用证书A进行加密,加密所得的信息只有用私钥A才能解密。Bob将加密好的信息发给了Eve,而Eve手上并没有私钥A。
Eve:唉,这次可是真的没有办法充当中间人再欺骗他们了。