本文主要介绍信息安全的基础知识。

Hash算法

Hash算法可以将任意长度的数据转换为固定长度的数据。
Hash算法是一种不可逆的运算,也就是不能从Hash结果反推输入的数据(有很多可能)。
常用的Hash算法有MD5,SHA等,不过MD5和SHA1已经被破解,建议使用SHA256。
Hash算法可以用来做文件完整性校验、数字签名、密码校验。

一般来说我们并不直接明文存储用户的密码,这样不安全。
简单一点会把用户ID和密码Hash后存储,至少用户实际密码不会泄露。
复杂一点会把密码Hash再加上额外信息(俗称加盐)二次Hash后存储。

对称加密算法

对称加密,是指加密、解密都使用相同的密钥。
对称加密算法很多,包括RC4、DES、3DES、AES、TEA等等。
对称加密除了RC4和DES不是那么安全之外,其他安全性还比较高,不容易暴力破解,加密速度快。
对称加密主要需要考虑的问题是如何安全的协商密码,不被中间人窃取。

非对称加密算法

非对称加密,是指加密、解密使用的是不同的密钥。
这两个密钥,一个是公开的密钥(简称公钥),一个是私有的密钥(简称私钥)。
公钥加密的信息只有私钥才能解开,私钥加密的信息也只有公钥才能解开。
公钥加密主要用于加密通信,而私钥加密可以用于个人身份的证明(签名)。
比较常见的就是RSA加密算法,是基于两大素数乘积难以快速因式分解的原理设计。
非对称加密算法的主要缺点是加密速度比较慢。

DH密钥交换算法

DH是Diffie-Hellman两个人的缩写,该算法可以通过共享信息结合自己私有信息算出共享的密钥。
从上图可以看出Alice通过共享信息 p, g, B 以及私有信息 a 即可算出密钥 K
同理,Bob可以通过共享信息 p, g, A 以及私有信息 b 即可算出 相同的 密钥 K
Alice和Bob通过共享信息协商出了共享的密钥,而窃听者无法根据 p, g, A, B 算出密钥 K
DH密钥交换算法巧妙之处在于利用了不可逆的运算操作(mod),不可以由 A 反推 a,由 B 反推 b

不过DH密钥交换算法只是解决了部分密钥交换问题,还是可能受到 中间人攻击
具体就是C冒充Bob与Alice完成密钥交换,同时冒充Alice与Bob完成密钥交换,通信将被C窃听甚至篡改。
解决方法就是身份证明,这样中间人C就不能冒充别人。

签名与证书

前面提到非对称加密用私钥加密可以证明个人身份(签名),这是因为只有对应公钥才能解开。
但是自己开的证明(签名)没有用,说到底还是需要权威机构认证才行。
权威机构需要验证个人信息,验证通过才颁发证书,包括申请人的公钥和签名。
通过证书和签名,信任链才能建立起来,避免中间人攻击。
这样我们才能通过非对称加密算法交换密钥,再通过共享的密钥和对称加密算法进行加密通信。

参考链接