文章目录
一、基本术语
(1)明文(plaintext):原始消息或数据,
(2)密文(ciphertext):已被打乱的消息输出(coded message )
(3)密码(cipher):将明文转换为密文的算法
(4)密钥(key):在密码中使用的信息,只有发送者/接收者知道
(5)加密器(加密) encipher (encrypt):将明文转换为密文;
(6)解密器(解密)decipher (decrypt):从密文恢复明文
(7)密码术(cryptography):加密原理/方法的研究
(8)密码分析(破译密码) cryptanalysis (codebreaking):在不知道密钥的条件下,研究破译密文的原则/方法;
(9)密码学 (cryptology):包含加密技术和密码分析两个部分。
二、对称加密原理
一个对称加密方案由5部分组成:明文、加密算法、私密密钥、密文、解密算法
1)加密算法的输入是明文+私密密钥,输出是密文
2)解密算法的输入是密文+私密密钥,输出是明文
3)解密算法本质是加密算法的反向执行
对称加密安全使用的两个要求:
一个强加密算法
一个密钥,只有发送者/接收者知道
2.1 密码体制
密码体制一般从以下三个方面进行分类:
(1)明文转换为密文的操作类型:替换、换位
(2)使用的密钥数:
发送方和接收方都使用同一密钥:该体制就是对称、单钥、秘密密钥或者说传统加密
发送方和接收方使用不同密钥:该体制就是不对称、双钥或者说公钥加密
(3)明文的处理方法:
分组密码
:一次处理一个分组,输出对应分组
流密码
:连续处理输入元素,每次产生一个输出元素
2.2 密码分析
试图找出明文或者密钥的工作
被称为密码分析或破译
根据攻击者掌握的信息量,对加密信息的攻击类型有:
(1)唯密文(掌握的信息量最少:最容易抵抗)
(2)已知明文
(3)选择明文
(4)选择密文
(5)选择文本
什么样的加密方案是计算安全的:
1、破解密文的代价超出被加密信息的价值
2、破解密文需要的时间超出信息的有用寿命
2.3 Feistel密码结构
Feistel结构是所有对称分组密码都使用的更通用结构的一个特例
划分:划分输入块为两半
代换:右半数据被作用于轮函数F后再与左半数据进行异或运算
置换:代换完成后交换左右两半数据
参数和属性设置:
(1)分组大小:128比特
(2)密钥大小:普遍为128比特
(3)迭代轮数:典型为16
三、对称分组加密算法(对称分组密码)
最常用的对称加密算法是分组密码
三个重要的对称分组密码:数据加密标准
(DES)、三重数据加密标准
(3DES)、高级加密标准
(AES)
3.1 DES
明文长度为64比特
更长的明文被分为64比特的分组来处理
密钥长度为56比特
,还有8比特奇偶校验
结构:Feistel
轮函数:右半部分分别进行
(1)明文拓展(32bit到48bit)
(2)异或(48bit到48bit)
(3)S盒:输出压缩(48bit到32bit):6位输入4位输出
(4)P置换(32bit到32bit)
然后与左半部分异或得到64bit,重复进行十六轮迭代
3.2 3DES
3DES使用3个密钥并执行3次DES算法
因为DES密钥为56比特,所以3DES密钥长度为168比特
但是,3DES也可以用两个密钥
,此时密钥长度为112比特(即两次加密使用的密钥相同)
3.3 AES
分组大小为128比特
密钥长度可以是128、192或256比特,最常用是128比特;分别执行9/11/13轮,每轮执行4个操作(一个是移位,3个是替换)
和DES的比较:
DES面向比特运算,AES面向字节运算
四、流密码和RC4(对称流密码)
流密码连续处理输入的元素,在运行过程中,一次产生一个输出元素
最流行的对称流密码:RC4
4.1 流密码结构
典型的流密码一次加密一个字节
的明文
设计思路:
(1)明文是二元数据流,如11001100(8位一字节)
(2)密钥流也是二元数据流,由伪随机数生成器得到,如01101100(密钥流长度要和明文长度一致)
(3)明文和密钥流按位求异或得到密文
(4)密文和密钥流按位求异或得到明文
注意这里使用的是密钥流,而不是密钥,密钥流是由密钥经过处理后得到的!!!!
4.2 RC4算法(重点、必考)
RC4是密钥大小可变的流密码,使用面向字节的操作
算法流程:
七、思考题
7.1 对称加密方案通常由哪5部分组成?
明文、加密算法、密文、秘密密钥、解密算法
7.2 对称加密算法包含哪两类重要的加密算法?
分组加密算法、流加密算法
7.3 分组密码是一个随机代换,它通常使用哪两种操作实现随机输出?
混淆:不同的输入,导致相同的(或者不同的)输出
扩散:输入数据中的1 bit 变化,将导致其输出的多个 bit 变化
7.4 描述Feistel的密码结构的加密算法和解密操作?
加密过程:
(1)将明文划分为左右两部分
(2)如果迭代次数为16,则由密钥K生成16个不同的轮密钥
(3)在每一轮迭代中,上一轮的右半部分作为当前轮的左半部分;上一轮的右半部分与轮密钥经过轮函数F处理得到的结果,与上一轮的左半部分按位求异或,得到当前轮的右半部分
解密过程就是加密过程的逆过程
7.5 流密码如何实现明文与密钥的加密操作?
7.6 简述RC4设计思想
设计思想围绕状态向量初始化与动态洗牌生成密钥流
(1)状态向量 T 生成:用对称密钥 K ,按T[i] = K[i mod keylen](keylen是 K 字节数 )生成 256 字节的 T,让密钥参与初始化。
(2)状态向量 S 初始化与洗牌:先把 S 初始化为 0 到 255 升序序列,再结合 T 洗牌。通过循环,用 j = (j + S[i] + T[i]) mod 256 计算交换位置,交换 S[i] 和 S[j],打乱 S 初始顺序,让内部状态更随机,为生成密钥流做准备。
(3)生成密钥流与加解密:遍历消息字节时,持续洗牌 S(更新 i、j 并交换 S[i] 和 S[j] ),用 t = (S[i] + S[j]) mod 256) 选 S[t] 作为密钥流字节,与消息字节异或 Ci=( Mi XOR S[t] )实现加解密,利用异或可逆性,解密就是用相同密钥流异或密文还原明文 。
7.7 习题训练
Bob恢复信息m的步骤如下:
(1)接收数据:Bob收到的是比特流(v||c),分离出v和密文c
(2)生成密钥流:发送方和接收方使用的是同一个密钥,也就是128比特的k,将 v 和 k 拼接(即 (v||k) )作为 RC4 的输入,生成密钥流 RC4(v||k)
(3)还原明文:利用异或运算的可逆性
,因为 c = RC4(v||k) ⊕ m,所以对密文 c 和生成的密钥流 RC4(v||k)再次进行异或运算,即 m = RC4(v||k) ⊕ c,从而得到明文 m
攻击者判断相同密钥流加密两个信息的方法:
因为密钥流是由 RC4(v||k) 生成的,如果信息加密使用的是相同的密钥流,那么每次传输中的 v 是一样的,攻击者只需要监测 (v1||c1)、(v2||c2)…中的v1是否等于v2、v3…如果都相等,则说明信息加密使用的都是相同的密钥流