本文是加密系列中的第二篇,前文请参考如下链接:
1. 引子:密钥配送问题
前文从加解密技术的起源一直说到了常用的对称加密算法,但是不管是DES还是AES,只要是对称加密,那么必然面临一个共同的问题:加密与解密必须使用相同的密钥。这里有一个巨坑,就是密钥的配送问题。如何把密码安全地送到对方手上,而不泄漏? 这也导致密码的保护工作难上加难。人生总有猪队友!
此外,在使用对称加密的情况下,为了保证信息安全,每两个人之间的通信都必须使用一份单独的密钥,假设该公司10个人,那么需要用到排列组合 C(10,2) = 45个不同的密码,如果有100人呢?!!!如此一来,即便是一家小公司,也会有天量的密钥需要配送与保护,因此说是天坑也不为过。
那么如何解决密钥配送问题呢?通常书上有以下几种可选方案:
方案一:事先共享密钥。就是事先用安全的方法将密钥交到对方手上。这...简直就是废话,哪种方法是能确保安全的呢?除非能次次面对面,手把手地传递密钥。
方案二:通过密钥分配中心(KDC: Key Distribution Center)。但是这个方案也不是那么完美,必须保证密钥分配中心无人能攻破,否则泄漏的多半不是一点点密码,而是该KDC所有使用者的密码。
方案三:通过Diffie-Hellman密钥交换。需要加密通信的双方通过交换一些信息,双方可以各自生成相同的密码。即便这些交换的信息被第三方监听了,第三方也无法根据这些信息生成相同的密码。这种方法我们先卖个关子,在不久将来再细说。
方案四:使用非对称加密。非对称加密中,密钥有两把,用其中一把密钥加密的密文,需要用另一把密钥才能解密。这样可以把其中一把密钥公开发布出去(公钥),也就不要对密钥配送进行保密了。
2. 非对称加密技术
上文中提到的方案四:使用非对称加密。所谓非对称加密又叫公钥加密。就是利用特定算法一次生成两把密钥,用其中一把加密,需要用另一把才能解密。生成密钥后,可以任选一把,自己秘密保存下来,叫做私钥,而把另一把发布出去,叫做公钥。想给你发消息的人就可以用你发布的公钥加密,这样加密后的消息只有你自己能用手中的私钥解密。这样就提高了密钥的安全性,也就抹掉了密钥配送问题(当然还会有另外的问题,后续文章再详述)。
通信过程中使用非对称加密的流程如下,总结起来就是:公钥加密,私钥解密。