---
# System prepended metadata

title: 密码学

---

# 密码学

## 古典密码

### 各种相应的密码

- 凯撒 m=c+3(mod 26)
- 仿射 加密 m=kc+k(mod 26) 解密c=k^-1*m-k(mod 26)
- hill A*M=C A为矩阵
- 维吉利亚 Ci=Mi+Ki(mod 26) Mi=Ci-Ki(mod 26)

### 古典密码的设计缺陷

- 密钥空间通常较小  对应现代密码的密钥须足够长以抵御穷举攻击 
- 明文、密文、密钥三者之间只是简单的代数关系 对应现代密码的混淆性
- 明文的统计特性的隐藏并不好 对应现代密码的扩散性

### 设计方法

- 代换
- 置换

### 相关的时间节点

- 1949 Shannon   保密系统的通信理论
- 1917 Mauborbne和Vernam 一次一密
- 1976  Diffie和Hellman 公钥密码体制概念

### 信息安全的目标

- 机密性 通过aes等加密实现
- 完整性 hash函数，mac码校验完整性
- 认证性 消息认证码和数字签名
- 不可否认性 数字签名
- 可用性 不down

### 加密系统的密码分析

- 唯密文分析：密码分析者取得一个或多个用同一密钥加密的密文
- 已知明文分析：除要破译的密文外，密码分析者还取得一些用同一密钥加密的明密文对
- 选择明文分析：密码分析者可取得他所选择的任何明文所对应的密文
- 选择密文分析：密码分析者可取得他所选择的任何密文所对应的明文，它主要应用于公钥密码体制。

### 常见的攻击

- 被动攻击 对信道的侦听截获然后分析
- 主动攻击 伪造合法的用户，对消息进行篡改、伪造、中断、重放等攻击方式

## 分组密码（对称密码）

### 密码

#### DES

##### 特点

- Feistel结构
- 密钥有效长度 56位，8位校验码
- 1977确定des，第一个广泛应用于商用数据保密
- mac码不可提供不可否认性，原因在于双方有同样的密钥，导致接收方可以否认接收到的消息，发送方也可以否认发送过某消息，mac码不可提供不可否认性，原因在于双方有同样的密钥，导致接收方可以否认接收到的消息，发送方也可以否认发送过某消息

##### 安全性分析

- 56位有效密钥太短
- 弱密钥和半弱密钥
- 代数结构存在互补对称性

##### 流程

1. M=Li+Ri
2. Ri+1=Li xor F(Ri)
3. Li+1=Ri
   其中 F函数为扩展置换（E表），代换（s盒），置换（p盒），其中，S盒实现混淆性，P盒跟E表实现扩散性

#### AES

##### 特点

- SP系统
- 轮数为 分组长度/32+密钥长度/32+2，最大为14轮
- 密钥长度为 128bits 192bits 256bits

#### 流程

- 字节代换 混淆性 S盒代换 非线性部分
- 行移位 扩散性 行移位操作要求第一行不变，第二行循环左移1个字节；第三行循环左移2个字节；第四行循环左移3个字节。
- 列混淆 扩散性
- 轮密钥加 非线性模块
  将128bit的明文转换成4*4的矩阵，元素为字节，并与轮密钥做异或操作，然后经过9轮的4步操作，分别是S盒代换、行移位、列混合、轮密钥加，最后第10轮只3步操作，不做列混合。
  S盒操作通过查表运算，对于输入字节，高4bit表示行数，低4比特表示列数

####  工作模式

- **ECB** 最简单直接分成组然后用原本的方式去加密
- **CBC** 上一组加密完的密文跟本次的明文先进行xor操作后，在进行原本的方式去加密，有初始向量IV
- **OFB** 对IV选取64-j bits长度的进行加密，提取加密后的j bits插入原本的最后重新组成下一组的64bits的IV，并将这j bits的与明文进行xor获取输出的密文
- **CFB** 与OFB类似，区别在于提取到下一组的IV的j bits是输出的密文。

### 序列密码

- 对称密码体系
- m序列---指最大周期的序列密码 n级m序列的周期为2^(n) - 1
- 安全核心问题是序列的产生的设计
- n级线性反馈移位寄存器即an+1与前面n个ai存在关系

#### 与分组密码的区别

- 同属对称密码体系 但序列密码为对字符逐位加密，分组密码为按块加密

#### 工作模式

###### 同步序列密码

- 密钥流的产生与明密文消息流相互独立，也即是跟输出的密文无关

###### 自同步密码

- 密钥流的产生与己经产生的一定数量的密文有关

### HASH函数

#### 性质

- **单向性** 给定散列值H(m),m在计算上不可行
- **弱抗碰撞性** 给定消息m，寻找m'使得在计算上H(m)=H(m')不可行
- **强抗碰撞性** 任意两个m跟m'，使得H(m)=H(m')不可行

#### 分组长度与输出长度

- SHA-1     512bits 160bits
- SHA-256 512bits 256bits
- SHA-384 1024bits 384bits
- SHA-512 1024bits 512bits
- MD5        512bits 128bits

#### MD5

##### 步骤

1. 填充消息，使得lenbits(m)==448(mod 512),填充的第一个bits为1，其他为0
2. 补足长度，最后填充64bits，其中存储原始消息的长度
3. 初始数据
4. 数据处理，其中是进行4轮主循环操作

#### SHA-1

##### 步骤

1. 填充消息
2. 补足长度
3. 数据处理 4回合 共计80次

#### 生日攻击

对输出长度为n位，尝试2^(n) + 1个报文必定存在一个冲突，在1/2的概率下，需要的为2^(n/2)个报文//也就是开平方

#### 消息认证码

- 定义 消息认证码是消息被一密钥控制的公开函数作用后产生的、固定长度的数值，用于提供数据原发认证和数据完整性的密码校验值
- 过程 收发双发共享密钥K，在提供认证性的应用中，消息发送者在发送消息m的同时，计算并发送认证符MAC(K,m)，接收者利用共享密钥K，计算MAC'与接收到的MAC比较即可得到认证。
- 作用 **验证信息来源的正确性** 和 **验证消息的完整性**
- 利用mac码实现 用户首先计算其mac值：MAC(K2,m)，并加密并传送E(K1,m|| MAC(K2,m))；接收端首先用K1对消息解密，并用K2和相关MAC算法验证m的合法性。实现方式除了对称密码的mac码还可以通过hash函数实现

### 公钥密码（非对称密码）

#### 特点

- 基于数学难题，基于思想为陷门单向函数（即已知x，易求f(x),但已知f(x)不易求x)
- 解决了对称密码的**密钥分发问题 、密钥管理问题 和 数字签名问题**

#### 与对称密码的区别

- 使用的密钥等不一样
- 对称密码体制包括加密算法实现机密性，公钥多了不可否认性，解决密钥协商，数字签名问题
- 对称密码体制的设计通常基于置换和代换的结合设计；而公钥密码通常基于数学困难问题

#### RSA

基于大整数分解困难

##### 流程

- 取大素数p跟q，n=pq
- 取e，记欧拉函数为f，使得(e,f(n))=1
- 计算d，d=e^-1(mod f(n))
- 加密 C=M^e(mod n)
- 解密 M=C^d(mod n)

##### 安全性分析

- |q-p|要大，最好相差几个bits位 Attack：q-p=k，如果k较小，(p+q)^2 = k^2 +4n,容易爆破出k满足k^2+4n为完全平方数。
- 共享模数 在同一个模n的情况下，有(e1,e2)=1,则可有re1+se2=1，则有c1^r * c2^s(mod n)=m(mod n)
- e过小 过小直接开方求
- 不同用户生成n时使用同一个素数p (n1,n2)=p
- 安全的密钥长度最少1024bits

##### RSA签名算法

- 签名 s=H(m)^d(mod n)
- 验证 s^e(mod n)是否是H(m)

#### Elgamal

基于离散对数问题

##### 特点

- 非确定性，加密相同明文会出现不同密文
- 密文空间大于明文空间
- 选择密文可以获取(m*m')(mod p)

##### 流程

- 素数p（至少150位的十进制素数）
- g为其中的本原元，共享p g
- 用户挑选随机数x作为私钥，计算y=g^x(mod p),y作为自身公钥
- 加密 c1=g^r(mod p)   c2=m*y^r(mod p),传递(c1,c2)
- 解密 m=c2*(c1^x)^-1(mod p)

##### Elgamal签名

- 签名 选择k，使得(k,p-1)=1,r=g^k(mod p),s=(H(m)-xr)*k^-1(mod p-1),分发(r,s)
- 验证 计算H(m)，验算y^r * r^s = g^H(m) (mod p)是否成立
- 安全性 重用随机数，对m1跟m2使用同样的k，则s1=(H(m1)-xr)*k^-1(mod p-1) s2=(H(m2)-xr) * k^-1(mod p-1)，联立可求私钥x

### 密钥管理

#### 管理的原则

- **全程安全原则** **必须在密钥的产生、存储、备份、分发、组织、使用、更新、终止和销毁等的全过程中对密钥采取妥善的安全管理。**
- **最小权利原则** **应当只分发给用户进行某一事务处理所需的最小的密钥集合。** 
- **责任分离原则** **一个密钥应当专职一种功能** 
- **密钥分级原则** •**可减少受保护的密钥的数量，又可简化密钥的管理工作。一般划分为三级：主密钥，二级密钥，初级密钥** 
- **密钥更新原则**
- **密钥应当有足够的长度**
- **密码体制不同，密钥管理也不相同** **由于传统密码体制与公开密钥密码体制是性质不同的两种密码，因此它们在密钥管理方而有很大的不同。**

#### 分发方式

##### 离线分发方式

- 通过可靠的物理渠道

##### 在线分发方式

- 建立一个密钥分发中心（kdc）实现。每个用户与kdc共享一个保密的密钥，kdc通过这个密钥来鉴别用户。

#### **Diffie-Hellman**

##### 过程

- 选择素数p，g为p的本原元
- a随机选择a，计算g^a(mod p)，发送
- b随机选择b，计算g^b(mod p)，发送
- 分别计算获得共享密钥 g^ab(mod p)

##### 安全性分析

- 安全性基于离散对数问题（非对称密码
- 缺少消息认证机制，可被主动攻击（中间人） 可采用端到端的密钥协商协议，在发送时候，对其进行签名

#### Shamir门限方案

##### 过程

- q为一大素数，满足q>=n+1
- 在GF(q)上构造f(x)=a0+a1 * x+a2 * x^2....+ak-1 * x^k-1
- 分别计算得出f(xi),分发

##### 秘密重构

看书上公式