子曰:了解密码学相关基础知识,以便更好的了解HTTPs
公主Alice 和搬砖工Bob 恋爱了,国王King 禁止Alice 同Bob 恋爱,Alice 和Bob 只能偷偷的通过书信传递,一开始Alice 和Bob 都是直接将内容I Love you
写在信封里,但是被国王King 发现了。
国王King 说:“你们竟然连简单的密码学都没有学,竟然使用明文(plaintext 或cleartext)通信,而不是使用密文(ciphertext)通信。”
Bob 被惩罚继续搬砖。
从这里看出,我们需要了解密码学的相关知识。从密码学基础开始学起,掌握数字加密的技术和术语。
密码学基础
- 密码学
密码学基于一种名为密码(cipher)的密码代码 - 密码(cipher)
对文本进行编码,使偷窥者无法识别的算法 - 密钥
改变密码行为的数字化参数 - 对称密钥加密系统
编/解码使用相同密钥的算法 - 不对称密钥加密系统
编/解码使用不同密钥的算法 - 数字签名
用来验证报文未被伪造或篡改的校验和 - 数字证书
由一个可信的组织验证和签发的识别信息
密码简史
Bob 通过上述学习了解了密码学基础,还了解了明文通过编码器加密成密文,而密文通过解码器解密成明文。
rot3 密码
Bob 学习使用rot3 密码将信息meet me at the pier at midnight
进行编码,偷偷的同Alice 进行约会。Alice 只要根据字母表中旋转-3 的字符,就可以进行解密。
密码机
Bob 发现rot3 密码很容易被国王King 破解,于是使用密码机进行编码解码。密码机可以使用复杂得多的密码来快速、精准地对报文进行编解码。
使用了密钥的密码
但是密码和密码机都可能落入国王King 的手中,所以通过在密码机上设置密钥值,来改变密码的工作方式。
Bob 使用的加密算法是普通的“旋转-N字符” 密码。N 的值由密钥控制,将同一条信息meet me at the pier at midnight
通过同一台密码机进行便秘,会随密钥的不同产生不同的输出。
这样只要Bob 和Alice 拥有同一台密码机,约定星期一使用“旋转-1字符” 密码、星期二使用“旋转-2字符” 密码、星期三使用“旋转-3字符” 密码,这种使用了密钥的密码使得国王King 更加难破解。
数字密码
数字计算的出现,使得复杂编码/解码称为可能,也使得超大密钥成为可能,从一个加密算法中产生数万亿的虚拟加密算法。
由于数字密钥只是一些数字,数字密钥的值是编/解码算法的输入,编码算法就是一些函数,这些函数就会读取一块数据,并更加算法和密钥值对其进行编/解码。
Bob 和Alice 约定一段明文密码P、一个编码函数E 和一个数字编码密钥e,就可以生成一段经过编码的密文C。
通过解码函数D 和界面密钥d,可以将密文C 解码为原始的明文P。
Bob 和Alice 的通信又升级了,国王King 抓耳挠腮中。
对称密钥加密技术
对称密钥(symmetric-key) 加密技术是指,编码和界面使用相同的密钥值(e=d)。我们就将其统称为密钥k。
流行的对称密钥加密算法包括:DES、Triple-DES、RC2 和RC4。
Bob 发现编/解码算法是公开的,密钥是唯一保密的东西。密钥值的数量取决与密钥中的位数,以及可能的密钥中有多少是有效的。
国王King 想要破解只能使用枚举攻击(enumeration attack)暴力尝试所有的密钥值。
Bob 发现40 位的密钥是不安全的,而长度与Triple-DES 密钥相当的128 位DES 密钥实际上是任何人(包括国王King)任何代价都无法通过暴力攻击破解的。
公开密钥加密技术
公开密钥加密技术使用了两个非对称密钥:一个用来对主机报文编码,另一个用来对主机报文解码。编码密钥是公开的,解密密钥是私有的。
公开密钥加密技术避免了对称密钥技术中成对密钥数目的N^2 扩展问题。
RSA
所有公开密钥非对称加密系统所面临的共同挑战是,要确保即使有人拥有了下面所有的线索,也无法计算出保密的私有密钥:
- 公开密钥(是共有的,所有都可以获得)
- 一下片拦截下来的密文(可通过网络嗅探获取)
- 一条报文与之相关的密文(对任意一段文本运行加密器就可以得到)
RSA 算法就是一个满足了所有这些条件的流行的公开密钥加密系统。破解代码找到响应的私有密钥难度相当于对一个极大数进行质因数分解,如果你发现了一种能够快速地将一个极大的数字分解为质因数的方法,就可以获得图灵奖了。
混合加密系统和会话密钥
Bob 和Alice 通过便捷的公开密钥建立起安全通信,然后在安全通道上发送临时的随机对称密钥,通过更快的对称加密技术对其余的数据进行加密。
数字签名
除了加/解密报文之外,还可以用加密系统对报文进行签名(sign),以说明是谁编写的报文,同时证明报文未被篡改过。这种技术被称为数字签名(digital signing)。
- 签名可以证明是作者编写了这条报文。
- 签名可以防止报文被篡改。
数字签名通常是用非对称公开密钥技术产生的。因为只有其所有者才知道其私有密钥。所以可以将作者的私有密钥当作一种“指纹”使用。
Alice 和Bob 在通信时是使用数字签名
- Alice 将变长的报文提取为定长的摘要。
- Alice 对摘要应用一个“签名”函数,这个函数会将用户的私有密钥作为参数。因为只有Alice 才知道私有密钥,所以正确的签名函数会说明签名者就是其所有者。下图中的解码函数D 中包含了用户的私有密钥,所以我们将其作为签名函数使用。
- 一旦计算出签名,Alice 就将其附加在报文的末尾,并将报文和签名都发给Bob。
- 在接收端Bob 需要确定报文是Alice 写的,而且没有被篡改过,Bob 就可以对签名进行检查。Bob 接受了经私有密钥扰码的签名,并应用了使用公开密钥的反函数。如果拆包后的,摘要与Bob 自己的摘要版本不匹配,要么就是报文在传输过程中被篡改了,要么就是发送端没有Alice 的私有密钥(也就是说不是Alice 发的报文,可能是国王King 发的报文)
数字证书
数字证书(certs)就是网络上的身份证,包含有某个受信任组织担保的用户或公司的相关信息。
下图就是典型的数字证书结构:
用证书对服务器进行认证
通过HTTPS 建立了一个安全Web 事务之后,现代浏览器都会自动获取所连接服务器的数字证书。如果服务器没有证书,安全连接就会失败。
下图就是对签名进行验证:
这里Bob 通过了密码学简史,绕过了国王King,同公主Alice 过上了幸福的生活。但是Bob 并不满足,于是继续了解HTTPS。一日一练-网络 了解HTTPS
参考文档
- 《HTTP 权威指南》第14 章 安全HTTP