在前面的文章《写给开发人员的实用密码学 - 对称加密算法》中,介绍了现代密码学中非常重要的加密解密算法。从工程学的角度,选取密钥足够长的加密算法(比如AES 256、AES 512),是无法破解的。但在对称加密算法中,存在明显的薄弱环节,那就是密钥的存储与分发。因为算法是公开的,那么决定加密系统是否安全的因素就是密钥。
然而在开放的互联网环境下,如何高效分发密钥成了一个难题。比如一个服务器,可能会服务千万级的用户,如果为每个用户分配不同的密钥,那密钥的维护是个大问题。密钥发放也是问题,如果是企业内部,还可以通过邮件发送密钥,但在开放的互联网上,这种方式行不通。
公开密钥算法(Public KeyCryptography),也称为非对称加密算法(Asymmetrical Cryptography),可以用于解决这一难题。
顾名思义,非对称加密算法就是加密密钥和解密密钥不是同一个。算法的密钥是一对,分别是公钥(public key)和私钥(private key)。一般私钥由密钥对的生成方(比如服务器端)持有,避免泄露,而公钥任何人都可以持有,也不怕泄露。这里没有使用加密密钥和解密密钥,是因为公钥和私钥