之前我们学习了一些密码学的基本概念和原理,接下来我们研究一下密码学技术在实际应用中需要关注的一些问题。
加密效率问题
虽然公钥加密能够确保密钥的安全,然而由于公钥加密运算量庞大,如果需要传递的数据比较多,那么一直使用公钥加密的方式就会使得通讯效率低下。
对于这种情况我们可以结合公钥加密与对称加密进行数据的加密传递,我们可以使用公钥加密去安全地传递用于对称加密的密钥,然后再持续使用对称加密进行快速的加密通讯:
- 使用公钥加密方法加密对称加密的密钥并传递给对方;
- 在之后的通讯中使用对称加密进行加密;
身份验证问题
在使用公钥加密的时候我们会广播自己生成的公钥,并要求对方使用公钥进行加密。这意味着别人也可以通过我们的公钥来加密数据并传递给我们,对我们进行身份欺骗攻击。
对于这种情况我们可以将公钥加密的方式反过来运用进行数字签名:
- 爱丽丝如果要将一串数据发送给鲍伯,首先可以对这串数据使用Hash算法生成一段摘要,然后使用自己的私钥加密这段摘要,最后将数据和加密后的摘要一同使用鲍伯的公钥进行加密并发送给鲍伯;
- 鲍伯在收到数据后先使用自己的私钥进行解密得到数据和该数据的加密摘要,然后使用爱丽丝的公钥对加密的摘要进行解密得到摘要A,同时对数据进行Hash得到摘要B,如果摘要A与摘要B相同则说明该数据来自爱丽丝;
- 由于伊夫没有爱丽丝的私钥,所以如果伊夫也对数据进行Hash并使用不属于爱丽丝的私钥进行加密就会导致鲍伯最终得到的A、B两个摘要不相同,因此无法冒充爱丽丝与鲍伯进行通讯;
维基百科: 散列函数(英语:Hash function)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。