1. 单向散列函数
当我们在一些大型的软件门户网站下载软件的时候,通常软件发布者会发布软件的同时发布软件的散列值。散列值就是使用单向散列函数计算出来的,比如我们常见的hash。
单向散列函数保证的并不是机密性,而是完整性。
2. 数字签名
数字签名是一种能够确保完整性、提供认证并防止否认的密码技术。
3. 密码学家的工具箱
对称密码、公钥密码、单向散列函数、消息认证码、数字签名、伪随机数生成器

4. 隐写术
隐藏消息本身,比如藏头诗、数字水印。
密码隐藏的是内容,隐写术隐藏的是消息本身。而且他俩是可以结合在一起使用的。
5. 密码的常识
- 不要使用保密的密码算法
- 使用低强度的密码比不进行任何加密更危险
- 任何密码总有一天都会被破解
- 密码知识信息安全的一部分
5.1 不要使用保密的密码算法
密码算法的密码最终无一例外地都会被暴露出来,使用保密的密码算法会整个密码系统都随之土崩瓦解。
开发高强度的密码算法是非常困难的。密码算法的强度并不像数学一样能够进行严密的证明。
如果将密码算法的详细信息以及程序的源代码全部交给专业密码的破译者,并为其提供大量的明文和密文样本,在这样的情况下破译一段密文任然会花上相当一段时间,那么就说明这是高强度密码。
6. 凯撒密码

7. 简单替换密码
将需要加密的内容实用其他字符进行代替。
在解密的时候需要替换表才能进行解密。
8. 一些密码学中经常用到的名词
8.1 密钥空间 (keyspace)
一种密码能够使用的“所有密钥的集合”称为密钥空间。密钥空间越大,密码就越难破解。
8.2 频率分析
是一种密码破译的方法,当你的密文足够多的时候就会产生规律,破译者会根据这个规律去破译密码。
频率分析利用了明文中的字母出现频率与密文中的字母出现频率一致的这一特性。
- 除了高频字母以外,低频字母也能够成为线索
- 搞清开头和结尾能够成为线索,搞清单词之间的分隔也能够成为线索
- 密文越长越容易破译
- 同一个字母连续出现能够成为线索
- 破译的速度会越来越快
8.3 密钥加密密钥 (Key Encrypting Key, KEK)
用来加密通信密码的成为密钥加密密钥。
8.4 编码 encoding
将现实世界中的东西映射为比特序列的操作称为编码
8.5 XOR 异或
XOR的全称是:Exclusive Or
1个比特的异或运算
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0
如果将0理解为偶数,1理解为奇数,就可以将XOR和一般的加法运算联系在一起。
一般用
表示XOR,也可以理解为黑白棋。

比特序列的XOR
如果是长比特序列之间的XOR运算,则只要 对其中每个相对应的比特进行XOR运算就可以了。假设我们将01001100这个比特序列称为 A,将10101010 这个比特序列称为B,那么A与B的XOR运算就可以像下面这样逐一对各个 比特进行计算。和加法运算不同的是,XOR 中不需要进位。

比特序列的解密步骤
- 将明文A用密钥B进行加密,得到密文 A
B
- 将密文 A
B 用密钥B进行解密,得到明文 A
XOR的应用
8.6 一次性密码本
一次性密码本被称为绝对不会被破译的密码
8.7 流密码 stream cipher
根据一次性密码的思路孕育而出。使用的并不是真正的随机比特序列,而是伪随机数生成器产生的比特序列。
8.8 DES (Data Encryption Standard)
DES 是一种将64比特的明文加密成64比特的密文的对称密码算法。
8.9 分组密码 (block cipher)
一般来说,以分组为单位进行处理的密码算法称为分组密。DES就是分组密码的一种。
8.10 密钥的重要性
密钥才是秘密的精华。
每个人都可以拥有相同品牌的锁,但是每个人都有不一样的钥匙。锁的设计是公开的,但是钥匙是秘密的。——《网络信息安全的真相》
9. 一次性密码本
一次性密码本被称为绝对不会被破译的密码。
9.1 原理
将明文与一串随机的比特序列进行XOR运算。
例如:

9.2 为什么一次性密码本是绝对无法进行破译的
我们假设对一次性密码本的密文尝试进行暴力 破解,那么总有一天我们会尝试到和加密时相同的密钥,也就能解密出明文 midnight,这是 毋庸置疑的事实。然而——下面这一点非常重要 即便我们能够解密出 midnight这个字符 串,我们也无法判断它是否是正确的明文。
这是因为在对一次性密码本尝试解密的过程中,所有的64比特的排列组合都会出现,这其 中既会包含像aaaaaaaa、abcdefgh、zzzzzzzz 这样的规则字符串,也会包含 midnight、 onenight、mistress等英文单词,还会包含Ta_AjvX、HY(&JY!z、5)、ER#£6等看不 懂的组合。由于明文中所有可能的排列组合都会出现,因此我们无法判断其中哪一个才是正确 的明文(也就是用哪个密钥才能够正确解密) 所谓暴力破解,就是按顺序将所有的密钥都尝试一遍,并判断所得到的是不是正确的明文 的方法。然而,在一次性密码本中,由于我们无法判断得到的是不是正确的明文,因此一次性密码本是无法破译的。
一次性密码本是由维纳(G.S.Vernam)于1917年提出的,并获得了专利,因此又称为维纳密码(Vernam cipher)(该专利已过有效期)。一次性密码本无法破译这一特性是由香农(C.E.Shannon)于1949年通过数学方法加以证明的。一次性密码本是无条件安全的(unconditionally secure),在理论上是无法破译的(theoretically unbreakable)。
10. 一些密码学上的故事
英国的密码学家对Enigma进行破译,其中现代计算机之父阿兰·图灵也是破译团队的一员。
战胜Engima的是另一台机器:《密码故事:人类智力的另类较量》
《艾伦·图灵传:如迷一样的解密者》