概论
- 密码系统:$(\mathcal{K}, \mathcal{M}, \mathcal{C})$
- $\mathcal{K}$ 所有可能秘钥组成的集合
- $\mathcal{M}$ 所有可能明文组成的集合
- $\mathcal{C}$ 所有可能密文组成的集合
- 密码:$(E,D)$
- $E$: 加密算法 $\mathcal{M}\times\mathcal{K}\rightarrow\mathcal{C}$
- $D$: 解密算法 $\mathcal{D}\times\mathcal{K}\rightarrow\mathcal{M}$
- 一致性原则:$\forall m\in M,k\in K,D(k,E(k,m))=m$
- 通常 $E$ 是一个随机化算法
- $D$ 一定是一个确定化算法
OTP (One Time Pad)
- $K={0,1}^n$
- $M={0,1}^n$
- $C={0,1}^n=\mathcal{M}$
- $E(m,k)=k\oplus m$
- $D(c,k)=k\oplus c$
PRG 伪随机数生成器
- 高效,确定,不可预测
流密码
A stream cipher is a symmetric key cipher where plaintext digits are combined with a pseudorandom cipher digit stream (keystream). In a stream cipher, each plaintext digit is encrypted one at a time with the corresponding digit of the keystream, to give a digit of the ciphertext stream.
RC4
- 初始化
- 秘钥参与S盒的生成
- 伪随机子密码生成算法
- 按字节操作,每次通过一定算法定位S盒中一个元素,与输入异或得到密文
ChaCha
分组密码
a block cipher is a deterministic algorithm operating on fixed-length groups of bits, called a block, with an unvarying transformation that is specified by a symmetric key
DES
RC5
AES/Rijndael
Rijndael是一个分组密码算法族,其分组长度包括128比特、160比特、192比特、224比特、256比特,密钥长度也包括这五种长度,但是最终AES只选取了分组长度为128比特,密钥长度为128比特、192比特和256比特的三个版本
密码散列函数
单向函数,极其难以由散列函数输出的结果回推输入的数据是什么
MD-5
输出128位
SHA-1
1995,160位,已被攻破
SHA-2
2001, SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256
SHA-3
2015
非对称加密
RSA
ECC
圆锥曲线
代数编码
- maximum-likelihood decoding: $e$ has the least weight
- binary symmetric channel
- $X\sim B(n,p)$
- Block codes
- $(n,m)$-block code
- $[n,m,d]$-code
- encoding function: $E:\mathbb{Z}_2^m\rightarrow\mathbb{Z}_2^n$
- decoding function: $D:\mathbb{Z}_2^n\rightarrow\mathbb{Z}_2^m$
- codeword: element in image of $E$ ($n$)
- Hamming distance: $d(x,y)$
- weight: $w(x)=d(x,0)$
- $w(x+y)=d(x,y)$
- correcting: $t=[\frac{d_{\min}-1}{2}]$
- detecting:$e=d_{\min}-1$
- combined:$d_{\min}\geq t+e+1,(e>t)$
- 冗余度:$\frac{n-m}{m}$
- 编码率:$\frac{m}{n}$
- $(n,m)$-block code
- Group code: code that is also a subgroup of $\mathbb{Z}_2^n$
- $d_{\min}=\min{w(x):x\not=0}$
- Linear code: A linear code $C$ of length n is a linear subspace of the vector space $\mathbb{Z}_2^n$
- $\text{Null}(H), H \in\mathbb{M}_{m\times n}(\mathbb{Z}_2)$
- $C=\text{Null}(H)$ is a group code
- $\text{Col}(G_{n\times k})=\text{Null}(H_{(n-k)\times n})$
- $Gx=y\iff Hy=0$
- $\text{Null}(H), H \in\mathbb{M}_{m\times n}(\mathbb{Z}_2)$
- 循环码:线性码满足任一码字左移或右移一位后,得到的仍然是该码的一个码字
- 码多项式:把码组中各码元作为多项式系数 $T(x)=\sum_{i=0}^{n-1}a_{i}x^i$
- (n,m) 循环码每个码字在以 $x^n+1$ 为模运算的剩余类中某一类
- 生成多项式 $g(x)$
- 常数项为 $1$ 的 $r=n-m$ 次多项式
- $x^n+1$ 的因式
- 其它码多项式为其倍式
- 不唯一
Parity-Check
- canonical parity check matrix: $H=(A|I_m),A_{m\times(n-m)}$
- $H$ give rise to an $(n,n-m)$-block code
- standard generator matrix: $G_{n\times(n-m)}=(\frac{I_{n-m}}{A})$
- $HG=0$
- $d(C)$ equals the minimum number of linearly dependent columns of $H$
- $\text{Null}(H)$ is a single error-detecting code if and only if no column of $H$ consists entirely of zeros
- $\text{Null}(H)$ is a single error-correcting code if and only if $H$ does not contain any zero columns and no two columns of $H$ are identical
- Syndrone Decoding
- syndrone of $x$: $Hx$
- $x=c+e,Hx=He$
- if the syndrome of $r$ is equal to some column of $H$, say the ith column, then the error has occurred in the ith bit
- Coset Decoding (Standard Decoding)
- $(n,m)$-linear code has $2^{n-m}$ cosets
- coset leader: an n-tuple of least weight in a coset
- $x$ and $y$ are in the same coset $\iff Hx=Hy$
- Correcting one error: $[2^r − 1, 2^r − r − 1, 3]_2$-code
- Detecting one error: $[r+1, r, 2]_2$-code
卷积码
- 卷积码 $(n,k,N)$
- 将当前 $k$ 比特信息编码为 $n$ 个比特
- 前 $m=(N-1)$ 信息段
- 解码
- 代数解码:大数逻辑解码
- 概率解码:维特比解码
- 将接收到的信号序列和所有可能的发送信号序列比较,选择其中汉明距离最小的序列认为是当前发送信号序列
- 最大似然
- 动态规划