一、对称加密和非对称加密入门
1. 如何不被窃听 —— 加密


- 这种加密方案在密码学里称为对称密码,加密方和解密方使用的是相同的密钥。
- 知名的密码算法有 AES(2001)、Blowfish(1993)、DES(1977),再远一点,有二战时期的恩尼格码(转轮机原理,德国)、紫色密码(转轮机原理,日本),以及著名的凯撒密码(没错就是地中海北岸那个凯撒)、栅栏密码等。
2. 如何交换密钥 —— 非对称加密
解决信道安全问题

- Bob 事先生成一对公钥和私钥,私钥 pri 由自己保管,把公钥 pub 发给 Alice。
- Alice 使用 pub 对消息内容进行加密,Bob 用 pri 进行解密。
- 需要注意的是, 只有私钥才可以解密,所以即使 Eve 窃取到了 pub(只有 pub 被传输而容易被窃取),她也无法解密。
- 这种加密方式在密码学里称为非对称密码,所谓“非对称”指的是加密方和解密方用的密钥不一样。
- 知名的非对称算法有:DSA(数字签名算法,只能用于签名,1991)、ECC(椭圆曲线加密,1985)、RSA(公钥加密算法,1977)等。
- 这些算法除了用于加密外,还可以用于 数字签名。非对称算法有个致命弱点: 性能很低。实际应用中一般采用混合加密体制、哈希签名体制。
3. 如何防止数据篡改 —— MAC


图中的 MAC 指的是 消息认证码(Message Authentication Code),你现在不需知道它的原理,只要记住 :(1)传入两个参数 message 和 key,进行一系列计算后得到一个值叫 MAC。(2)只有 message 和 key 相同的情况下,才能得到相同的 MAC。
- 消息认证码有多种实现方式,其中最常见的是 HMAC(Hash MAC),即使用哈希算法来实现 MAC,还有一种是基于分组密码算法的 MAC,不常见。
- 聪明如你,肯定会想到如果 key 被窃取该怎么办?这就涉及到 数字签名了,后文会讲到。
4. 如何校验身份 —— MAC

- MAC包含几种实现方式:基于 HASH 的 MAC 称为 HMAC,应用比较广泛。
- 有些同学应该接触过阿里云的 Access Key,其实就是 HMAC 的原理。
- 有些同学在两个系统之间API调用时,会使用同一个 key 做 md5 计算来实现 API 鉴权,这称为“加盐HASH”,可以简单理解为 HMAC 的简化版。
- 同样的,如果 key 被窃取该怎么办?这可以用 数字签名来解决。
5.更进一步 —— 数字签名
发送方是用 私钥进行签名,而接收方用 公钥 进行验签,这跟加密情况正好相反。

6. 公钥的身份证 —— 数字证书
伪造公钥,Bob 需要事先生成公钥 pub 和私钥 pri ,然后把 pub 分发给 Alice。那么攻击过程就从这入手,Eve 生成自己的一对公钥 pub' 和 私钥 pri',截获 Bob 的 pub,并用自己的 pub' 冒充 Bob 的公钥发给 Alice。


这是个“偷天换日”的过程,Eve 通过伪造公钥(中间人攻击),不光窃听到 Alice 的消息,还能保证整个过程中 Alice 和 Bob 都没有察觉!
Eve 不是喜欢伪造公钥吗,Bob 这次就要请 Trent 为自己的公钥注册一张 “身份证” —— 数字证书。见证如见人,哦不对,见证如见公钥!以下是注册数字证书的过程:

- Bob 请求 Trent 为自己的公钥 pub 注册一个证书。
- Trent 收到请求后,用自己的私钥 pri ' 对 pub(以及身份信息) 进行签名,得到一个 sign。
- Trent 把证书 certificate = pub + sign 颁发给 Bob。
- Bob 把自己的证书 pub + sign 发给 Alice。
- Alice 使用 Trent 的公钥 pub ' 对 sign 进行验签,如果校验成功则说明 pub 的确是 Bob 的公钥,因为她相信 Trent 的权威性。
Eve 不可能找 Trent 为她办一个 Bob 的数字证书,因为 Trent 不会同意的,就像警察蜀黍不会给我办一张别人的身份证一样。所以,Eve 无法伪造 Bob 的公钥。
- 考虑到非对称算法的效率问题,实际应用中一般是先对数据进行哈希,然后才用私钥对哈希值(摘要)进行签名。
- Trent 在密码技术领域中一般称为 认证机构(Certification Authority,即 CA)。
- 以数字证书为基础,业界制定了一系列的规范和规格,比如由谁颁发证书、如何进行颁发、如何作废证书等,称为 公钥基础设施(Public-Key Infrastructure,即 PKI)。
二、对称加密常见密码学
AES,DES,3DES,TDEA,Blowfish,RC5,IDEA
三、非对称加密经典算法
RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)