第五章:安全算法
这一章节主要讨论的是计算机在网络通信中的安全问题,为了保障你的信息不被各种各样居心叵测的人获取,计算机领域的科学家们提出了很多富有创意并且强大稳定的算法;
1.安全和算法
首先让我们明确四个概念:
- 窃听:A向B传输数据时被C意外获取
- 假冒:A向B传输数据时C谎称自己是A向B发送信息
- 篡改:A向B发送了一条消息,但这条消息被C拦截并修改后重新发给B(人为攻击和设备故障都可能引起篡改)
- 事后否认:A向B发送了消息,但B收到消息后A不承认消息是自己发给B的
这是不同问题的解决方案:
问题 | 解决方案 |
---|---|
窃听 | 加密 |
假冒 | 消息认证码或数字签名 |
篡改 | 消息认证码或数字签名 |
事后否认 | 数字签名 |
2.关于加密
加密需要密钥,也就是说密钥是加密的指导者,根据密钥加密后的数据可以用密钥解密,但没有密钥时几乎不可能成功解密;数据在加密后会变得面目全非,解密后又可以恢复到原来的样子;
3.哈希函数
你可以将哈希函数视为一种精密的搅拌机,输入一些数据后它会生成一个固定长度的无规律数值,这个数值被我们称作哈希值;我们一般用十六进制表示哈希值;
哈希函数有四个特点:
- 无论输入的数据量有多少,输出的哈希值长度恒定
- 同样的数据有唯一且确定的哈希值
- 相似的数据哈希值可能相去甚远,不同的数据也可能有相同的哈希值
- 根据数据求哈希值很容易,但根据哈希值反推原数据则几乎不可能
举个例子,比如服务器可以使用哈希值来存储用户的密码,这样就算服务器被完全控制,黑客拿到哈希值也无法得知用户的密码是什么;
4.共享密钥加密
共享密钥加密在加密和解密过程中都使用相同的密钥,这种加密方式也被称为对称加密;具体的过程是:
当第三方没有加密解密用的密钥时无法获得文件中的信息;不过这也带来了新的问题:密钥不也是通过网络传递的吗?这个问题需要使用“密钥交换协议”和“公开密钥加密”来解决,我们后面会提到;
5.公开密钥加密
公开密钥加密在加密和解密时使用的密钥是不同的,加密时使用的叫公开密钥,解密时使用的叫私有密钥;这种加密方式也被称为非对称加密;
具体的执行逻辑是:
- 由接收数据的一方生成公开密钥和私有密钥,顾名思义前者是公开挂在网上的后者是自己保存的
- 发送数据的人使用公开密钥加密,但是要用私钥才能解密;
由于私钥一直没有在互联网上传递,这种加密方式相对更安全;不过也有这样的问题:**窃听者自己生成了公钥和私钥,并且将自己生成的公钥挂在互联网上,当发送信息的一方错误的采取了窃听者的公钥时,信息就会被窃取;**当窃听完成后,攻击者再将信息重新使用接收方提供的公开密钥加密,发送给接收方;整个过程甚至不会有人意识到攻击已经发生了;
对于这种中途替换公开密钥而窃听数据的攻击,我们称它为中间人攻击;
要提高安全性,必须配合使用数字证书;另外整个加密和解密的工作都比较消耗时间,所以这种方法不适合持续发送零碎的数据;当然这两种情况我们在下文都会尝试解决;
真是道高一尺魔高一丈啊!
6.混合加密
我们在上文提到了这样一件事:共享密钥的运行速度快,但是不安全;公开密钥的安全性相对较高,但是速度慢;有没有什么好的方法呢?
相信你也想到了这个好办法:使用共享密钥加密数据,但是使用公开密钥的加密方式来传递共享密钥要用到的密钥;
这是具体过程: