用于解决复杂问题的步骤,通常称为算法。从明文生成密码的步骤,也就是加密的步骤,称为加密算法,而解密的步骤则称为解密算法。加密、解密的算法合在一起统称为密码算法。
第 1 章 周游密码世界(密码)
密码技术所提供的并不仅仅是基于密码的
机密性
,用于检验消息是否被篡改的完整性
、以及用于确定对方是否是本人的认证
等都是密码技术的重要部分。
隐写术和数字水印都与密码技术息息相关,隐写术的目的就是隐藏消息本身,而数字水印就是其在计算机上面的延续。我们对消息本身进行隐写,使攻击者无法获取有用的信息,使其无从下手。这让我想起了 CTF
中常常会出现的题目,就是将一段秘钥放到图片或者切入到网页里面。
- 对称密码
- 指加密和解析时使用同一秘钥(核心)
- 公钥密码
- 指加密和解密时使用不同的秘钥(核心),也称为非对称密码
- 单向散列函数
- 使用单向散列函数生成散列值来保证程序或代码的完整性(防止恶意软件)
- 消息认证码
- 不但可以确定消息是否被篡改(完整性),而且可以辨别来源方(认证)
- 数字签名
- 一种能够保证完整性、提供认证并防止否认的密码技术
- 伪随机数生成器
- 如果随机数的算法不好,窃听者就能够推测出密码(SSL/TLS)
第 2 章 历史上的密码(密码)
结论就是,秘钥才是密码的精华!
这一章节介绍的密码在现代都已经不再使用了,但是在寻求密码弱点的方法、破译密码的思路以及密码算法与秘钥的关系等方面,技术依然是相通的。
- [1] 凯撒密码
- 通过将明文中所使用的字母表按照一定的字数平移来进行加密的
- 加密前:
yoshiko
=> 加密后:BRVKLNR
- [-] 暴力攻击
- 对于凯撒密码是由平移字母表顺序得到的,所以可以通过暴力破解来破译密码
- 由于字母表只有
26
个字母,因此加密用的秘钥只有0-25
共26
种平移加密方式 - 我们尝试一遍之后,就会发现总会有一个或者几个可能推测出加密前的内容
- [2] 简单替代密码
- 凯撒密码的字母表顺序是一成不变的,而简单替代密码则是打乱顺序的
- 简单替代密码的过程是一次将明文中的每一个字母按照替换表替换成另一个字母
- 这个替换表就是秘钥,通过计算秘钥的种类非常多,秘钥空间非常复杂
- 加密前:
yoshiko
=> 加密后:KBLTJSB
- [-] 频率分析
- 虽然用暴力攻击很难破解简单替换密码,但是使用字母频率分析能够破解
- 频率分析利用明文中字母的出现频率与密文字母的出现频率一致的特性进行破解
- 然后推测频可能的字母,又根据字母推测下一个字母,以此类推
- 频率分析的特点就是,明文越长推测的难道越低
- [3] Enigma 密码
- 由德国人发明的一种由键盘、齿轮、电池和灯泡组成的来进行加密和解密的机器
- 由于发送者和接受者必须使用同样的秘钥才能够加密通信,所以秘钥称为国防军密码本
- 因为在 Enigma 的时代,无线电的质量非常差,为了防止通信错误,消息会发送两遍
- 还有就是通讯密码是认为选定的,如果是一个弱密码就很糟糕了
- 最终,由现代计算机之父阿兰图灵的破解的《密码故事》
第 3 章 对称密码(密码)
对称密码:共享秘钥密码,使用相同的秘钥进行加密和解密
- 字符编码
- 现代密码都是建立在计算机的基础上的,因为需要大量的数据计算
- 计算机的操作对象不是文字,而是去识别和操作由
0
和1
组成的比特序列 - 将现实世界中的东西映射成为比特序列的操作称为编码,比如
ASCII
码 - 字符
mid
编码之后则01101101|01101001|01100100
比特序列,八位一组
- 异或运算(XOR)
- 异或运算即两个相同的数进行
XOR
运算结果一定是0
,不同的数字则为1
- 比特序列的异或运算,则是对每一位上面对应的数字进行异或运算
- 比特序列
A
和B
进行异或运算会得到A⊕B
,而A⊕B
和B
异或会得到A
- 异或运算即两个相同的数进行
- 一次性密码本
- 一次性密码的原理就是将明文与一串随机的比特序列进行异或运算得到密文的
- 一次性密码本无法破译并不是指难以破译,而是无法判断它是否是真正的明文
- 其会推测出多个结果,比如
aaaaaaaa
、onengiht
、mistress
等等单词 - 一次性密码本是无条件安全的,在理论上是无法破译的,但是一直没有被使用
- 秘钥的配送:秘钥必须安全的发送,那为什么不使用同样的方法发送明文呢?
- 秘钥的报错:为了保护明文,我们就需要保护和明文一样长的秘钥
- 秘钥的重用:通信过程中是不能重用过去用过的随即比特序列(防止窃听者)
- 秘钥的同步:明文如果是
1G
的文件,秘钥也必须是1G
的文件 - 秘钥的生成:随机数并不是通过计算机程序生成的伪随机数,需要手动生成