密码学概述
1. 口令
从密码学角度来看,各种网站、系统、软件的登录密码本质上不是密码,而是口令。
2. 密码学的应用
2.1 安全通信
HTTPS
实时消息加密
WiFi
Bluetooth
2.2 磁盘文件加密
EFS(Encrypting File System)
TrueCrypt
Bitlocker
2.3 内容保护
CSS(Content Scrambling System)
AACS(Advanced Access Control System)
2.4 用户认证
Kerberos
3. 加密
3.1 对称加密 symmetric encryption
生成密钥(Key generation,Gen):根据概率算法从密钥空间 KKK 选择一个密钥 kkk
加密(Encryption,Enc):从消息空间 MMM 中选择一段消息明文 mmm,利用密钥 kkk 进行数据加密,记为 Enc(m,k)Enc(m,k)Enc(m,k)
解密(Decryption,Dec):利用密钥 kkk 对加密密文 ccc 进行解密,记为 Dec(c,k)Dec(c,k)Dec(c,k) ...
AdvancedEncryptionStandard
1. 简化版 AES
Key size = 16 bits (128/192/256 bits for AES)
Number of rounds = 2 (10/12/14 for AES)
Plaintext block = 16 bits (128 bits for AES)
Ciphertext block = 16 bits (128 bits for AES)
数据表示格式如下:
一轮加密流程如下:
Nibble Substitution
Shift Row
Mix Column
Key Expansion
2. AES
在 GF(28)GF(2^8)GF(28) 上进行相应运算操作。
Add Round Key
Byte Substitution
Shift Row
MixColumn
密钥扩展
MD5
1. 简介
MD5算法采用迭代型Hash函数的一般结构,输入消息可以任意长度X,每次迭代处理512bit的消息分组,最终输出散列值为128bit。
2. 步骤
预处理
对消息填充
初始化缓冲区
压缩过程
循环处理L个消息分组
4个轮函数和模加运算,其中每个轮函数有16步
每轮移位步数不同
输出结果
L个分组都被处理完后,最后一个HMD5的输出即为产生的消息摘要。
RC4
1. 简介
RC4 属于同步流密码,同步流密码的加密器分成密钥流产生器和加密变换器两个部分。
2. 特性
密钥长度可变,面向字节操作;
用置换加密(异或)输入消息,每次一个字节;
至少采用 128128128 比特的密钥
3. 加密过程
3.1 密钥调度算法(Key-Scheduling Algorithm, 简称 KSA)
由密钥流决定一个 0∼2550 \sim 2550∼255 的置换
初始化时,状态矢量S被设置为 000 到 255255255, 即 S[0]=0,S[1]=1,⋯ ,S[255]=255S[0]=0, S[1]=1, \cdots, S[255]=255S[0]=0,S[1]=1,⋯,S[255]=255
种子密钥 KKK 为 LLL 个字节,循环填充到矢量 TTT 的 256256256 个字节中
由 T[i]T[i]T[i] 确定将 S[i]S[i]S[i] 置换为 SSS 中的另一个字节
j=(j+S[i]+T[i])mod 256j = (j + S[i] + T[i]) \mod 256j=(j+S[i]+T[i])mod256
由于对S的 ...
伪随机序列
1. 概念
伪随机序列是指统计特性类似随机噪声的序列,但可以重复产生。
2. m 序列
2.1 概念
m 序列是最大长度线性反馈移位寄存器序列的简称。
2.2 线性反馈移位寄存器的一般结构
2.3 线性反馈移位寄存器的特征多项式
m 序列的
\begin{array}{c}
\mbox{重复周期数} = 2^n - 1
\end{array}
2.4 m 序列产生的充要条件
m 序列对应的线性反馈移位寄存器的特征多项式为本原多项式。
2.5 m 序列特性
均衡性:0/1分布等概时,熵最大,随机性最大。
短游程特性
自相关特性:序列与延时序列的相似度
2.6 m 序列的应用
测试噪声源、 加密通信、加扰及平衡。
分组密码模式
1. 电码本 Electronic Codebook (ECB)
将消息划分为独立的块,并独立地进行加密。
1.1 优点:
用于加密短消息
1.2 缺点:
消息中的内容重复可能在密文中显示出来
Weakness :因为各组加密是独立的
不会隐藏数据模式:
易受到延迟攻击
错误传播仅局限于同一组消息,不同组间没有错误传播
2. 密码分组链接 Cipher-Block Chaining (CBC)
需要初始向量(IV)
当前块的加密受前一个块的影响
2.1 优点
每个组加密都依赖于其前面所有的组
一个组的改变会影响到其后面所有的组
2.2 缺点
3. 密码反馈 Cipher Feedback (CFB)
消息被看作为 bits 流
允许返回任何数量的 bit 位
用于数据流加密、认证
3.1 优点
适用于消息以 bits/bytes 传输
最公用的流模式
分组密码在加密模式的两端都使用
错误传输到多个块
3.2 缺点
不支持并行运算
4. 输出反馈 Output Feedback (OFB)
消息被看作为 bits 流
每组输出的密文被加入到密文 ...
古典密码学概述
1. 隐写术 Steganography
隐写术是指首先用传统加密算法对数据进行加密,然后用某种方法将加密后的数据修改为一个伪装文本。
2. 替换密码 Substitution cipher
对数据中的每个字符用另一个字符进行替换。
替换密码依赖与固定的替换结构
对于字母表中的每一个字母的替换都是固定的
【注】
一次替换一个字符显然会在密文中留下太多的明文结构
如果已知明文的性质/结构,则可以通过统计攻击轻松破解任何替换密码
2.1 单字母单表密码 Monoalphabetic cipher
凯撒密码 Caesar cipher
密钥 k∈{0,1,⋯ ,25}k \in \{0,1,\cdots,25\}k∈{0,1,⋯,25},字母表 {a,b,⋯ ,z}\{a,b,\cdots,z\}{a,b,⋯,z} 与集合 {0,1,⋯ ,25}\{0,1,\cdots,25\}{0,1,⋯,25} 对应。
明文空间 = 密文空间 = Σ+\Sigma^+Σ+(其中 Σ\SigmaΣ 为字母表 {a,b,⋯ ,z}\{a,b,\cdots,z\}{a,b,⋯,z}) ...
哈希函数
1. 概述
加密是双向的,即明文可以通过密钥加密为密文,密文也可以通过密钥解密为明文
哈希是单向的,即只能从明文到
2. 用法
3. 特性
3.1 Arbitrary-length message to fixed-length digest
3.2 抗原象 Preimage resistant (One-way property)
3.3 抗第二原象 Second preimage resistant (Weak collision resistant)
3.4 抗冲突 Collision resistant (Strong collision resistance)
现代对称加密和DataEncryptionStandard
1. 现代对称加密
1.1 P 盒(Permutation box 置换盒)
P 盒类似于传统的置换密码,用于置换 bit 位。P 盒分三种类别:
Straight P-box:输入数 = 输出数(只有该 P 盒可逆)
Compress P-box:输入数 > 输出数
Expansion P-box:输入数 < 输出数
1.2 S 盒(Subtitution box 替换盒)
S 盒接受特定数量的输入比特 m,并将其转换为特定数量的输出比特 n,其中 n 不一定等于 m 。一个 m×n 的S盒可以通过包含 2m 条目,每条目 n 比特的查找表实现。
1.3 扩散 Diffusion
隐藏明文和密文之间的联系。
1.4 混淆 Confusion
隐藏密文和密钥之间的联系。
1.5 现代分组密码
现代分组密码都是乘法密码,分为两类:
费斯妥密码 Feistel ciphers
费斯妥网络是一种迭代密码,其中的内部函数称为轮函数。费斯妥密码使用了三种类型的组件:自可逆、可逆、不可逆组件
Non-Feistel ciphers
非费斯妥密码只能使用可逆组件。
2. D ...
群环域以及域上的多项式操作
1. 模运算
1.1 ZnZ_nZn 上模运算的三种运算
模加运算:(a+b)mod n=c(a+b) \mod \ n = c(a+b)mod n=c
模减运算:(a−b)mod n=c(a-b) \mod \ n = c(a−b)mod n=c
模乘运算:(a×b)mod n=c(a \times b) \mod \ n = c(a×b)mod n=c
1.2 ZnZ_nZn 上三种运算的性质
[(amod n)+(bmod n)]mod n=(a+b)mod n[(a \mod \ n) + (b \mod \ n)] \mod \ n = (a + b) \mod \ n[(amod n)+(bmod n)]mod n=(a+b)mod n
[(amod n)−(bmod n)]mod n=(a−b)mod n[(a \mod \ n) - (b \mod \ n)] \mod \ n = (a - b) \mod \ n[(amod n)−(bmod n)]mod n=(a−b)mod n
[(amod n)×(b ...
C++语言打开文件模式
打开模式
只可以读
只可以写
只可以追加
读写兼备
读写兼备
读追加兼备
文本模式
r
w
a
r+
w+
a+
二进制模式
rb
wb
ab
rb+ (r+b)
wb+ (w+b)
ab+ (a+b)
密码分析方式
1. 唯密文攻击(COA)
破译者只知道「加密算法」和「带破译的密文」。
举例:实验一仿射密码的暴力破解就属于唯密文攻击。
2. 已知明文攻击(KPA)
破译者知道「加密算法」和经密钥加密形成的一个或多个「明文——密文对」。
举例:希尔密码依赖唯密文攻击较难破解,但通过已知明文破解攻击则容易破解。
3. 选择明文攻击(CPA)
破译者知道「加密算法」、「选择的明文」和「对应的密文」。
举例:中途岛海战中美军故意透露出假情报(明文)来诱使日军发报(密文),从而得知「AF」指的是中途岛而非阿留申群岛。
4. 选择密文攻击(CCA)
破译者知道「加密算法」、「选择的密文」和「对应解密的明文」。
举例:El Gamal 密码系统在选择明文攻击下在语义上是安全的,但是在选择密文攻击下可以轻而易举地破坏这种语义安全性。
5. 选择文本攻击
破译者知道加密算法、选择的明文和对应的密文、选择的密文和对应解密的明文,选择文本攻击是选择明文攻击和选择密文攻击的结合。