Crypto101 阅读笔记(1)
Crypto101 是作为非数学专业,入门现代密码学不错的学习资料。本阅读笔记系列主要以一个程序员的视角来看待现代密码学。Crypto101 原文可以从官网下载到 www.crypto101.io。
异或
异或$\oplus$操作是密码学中非常重要的一个运算。
基本运算规则如下:
1 | 0⊕0=0 |
通过以上可以推出一些常用的其他规律:
- 异或运算可以任何顺序 $a \oplus b = b \oplus a$,即交换律
- 自己异或自己都是 0
- 任何比特异或 0 的结果都还是自己
通过上述规律,可以推导出 $a \oplus b \oplus a = b$。通过这个原则,可以认为 a 异或 b 是加密过程,再异或 a 就是解密过程。
完美的加密模式是,明文的每个比特都和一个真随机的比特 key 进行异或。但是这样缺点也很明显,key 会和明文一样长。
块加密
块加密(Block Cipher)即分组加密算法,允许对固定长度的块进行加密。
它使用加密函数 E,通过密钥 k 可以使得明文 P 变成密文 C:
$$ C = E(k, P) $$
明文和密文都是字节序列,这两者通常都拥有相同的长度,并且是被块加密算法规定好的一个长度,叫做块大小(block size)。所有可能的 key 被称为 keyspace,即键空间。
解密的过程相反,使用解密函数 D,通过和上面加密时一样的密钥 k 和密文 C,可以获得明文 P:
$$ P = D(k, C) $$
目前最常用的块加密算法是 AES。