加密(encryption)把数据打乱,只有拥有正确密钥的人才能读懂。原始的可读数据叫明文(plaintext),打乱后的结果叫密文(ciphertext),所用的方法叫加密算法。你可能被要求给出这些定义,解释为什么要加密,并追踪一个简单例子。
这一课接在浏览器与服务器如何通信之后,属于网络安全模块。
为什么要加密数据?
数据在网络上传送,会经过好几台发送者无法控制的设备。
加密的意思是:即使数据被截获,没有密钥也读不懂。它保护的是机密性,但不能阻止数据被复制或删除。
HTTPS 在浏览器和服务器之间使用加密,所以以 https 开头的网址,比以 http 开头的更适合用来发送密码。
什么是对称加密和非对称加密?
- 对称: 同一把密钥负责加密和解密。速度快,但发送者和接收者必须在不被别人看到的情况下共享密钥。
- 非对称: 公钥加密,对应的私钥解密。任何人都可以拥有公钥,只有所有者持有私钥,所以不必传送秘密密钥。
追踪例子:移位密码
移位(Caesar)密码把每个字母沿字母表移动若干位,这个数就是密钥。字母编号为 A = 0,B = 1,…… Z = 25。绕回开头用 MOD 26。
FUNCTION Shift(Letter : CHAR, Key : INTEGER) RETURNS CHAR
Pos <- ASC(Letter) - 65
NewPos <- (Pos + Key) MOD 26
RETURN CHR(NewPos + 65)
ENDFUNCTION
这里 ASC('A') 是 65,所以减去 65 就得到 0 到 25 的位置。
例题。 用密钥 3 加密 CAT。
| 字母 | ASC | Pos | Pos + 3 | MOD 26 | CHR(+65) |
|---|---|---|---|---|---|
| C | 67 | 2 | 5 | 5 | F |
| A | 65 | 0 | 3 | 3 | D |
| T | 84 | 19 | 22 | 22 | W |
密文是 FDW。解密时改为减去密钥:F 是 5,5 − 3 = 2,也就是 C。
用 X 和密钥 3 检查绕回:ASC 是 88,Pos = 23,23 + 3 = 26,26 MOD 26 = 0,得到 A。字母表从 Z 绕回到 A。
要避开的错误
错误答案:「加密能阻止黑客拿到数据。」
学生声称加密能防止截获。
加密不能阻止截获。它让被截获的数据没有密钥就无法阅读。要写出入侵者手上剩下什么:密文。
追踪时的第二个失误是忘记 MOD 26。没有它,用密钥 3 加密 X 会得到 26,而 26 不是字母的位置。
自测
1. 用移位密钥 5 加密 ZOO。写出 Pos 的值。
Show answer
Z = 25,25 + 5 = 30,30 MOD 26 = 4,得 E。O = 14,14 + 5 = 19,得 T。第二个 O 同样是 T。密文:ETT。
2. 解密用密钥 5 加密的 MJQQT。
Show answer
每个位置减 5:M(12) 得 7 = H,J(9) 得 4 = E,Q(16) 得 11 = L,Q 得 L,T(19) 得 14 = O。明文是 HELLO。验算:HELLO 移位 5 得 MJQQT。
3. 在非对称加密中,用户要保密的是哪把密钥?
Show answer
私钥。公钥可以分享给任何人。
接下来学什么?
加密保护传输中的数据,但用户仍可能被骗而交出数据,见识别网络钓鱼信号。用综合练习和伪代码追踪训练器练习,后者很适合移位密码的追踪。
如果追踪算法是你丢分的地方,和老师一起逐题做是线上一对一 Computer Science 补习里很好的时间用法。