密码学基础

古典加密算法

Vigenere算法:

首先我们有一组密钥:K,对明文M进行加密,得到密文C。

在密钥当中,a表示凯撒前移0位,b表示1位。。。z表示25位。然后对M的对应字符加密。加密完,K用下一个字母,对M的下一个字母加密。可以表示为:

$$
C_i=M_i+K_{i\ mod\ L} \ mod\ 26
$$

$$
M_i=C_i-K_{i\ mod\ L}\ mod\ 26
$$

Playfair加密算法:

选取一个密钥,将其去重。如cryptography -> cryptogah。然后从左到右、从上到下填入5x5的矩阵(注意,i/j视为同一个字母)。剩下的部分则a-z顺序填写。得到密钥矩阵。

接下来把明文两两一组切分。如love -> lo ve。如果有相邻且相同的字符,中间插入x。如killers -> ki lx le rs。如果最后还有落单的字符,配上x。如tom -> to mx。

最后进行加密:对于一组内的两个字符:

  • 如果在矩阵的同一行,各自变成各自右边字符
  • 如果在同一列,各自变成下面的字符
  • 否则,变成对角线的字符。x a | b y -> (x, y) -> (a, b)

解密则是把右下变成左上。

现代加密算法

  • DES算法:
    $$
    L_i=R_{i-1},\
    R_i=L_{i-1}\oplus F(R_{i-1},k_i)
    $$
    总共有16轮加密。

  • CBC加密算法:

$$
C_N=E_K(C_{N-1}\oplus P_N), C_0=IV,\
P_N=D_K(C_N)\oplus C_{N-1},C_0=IV
$$

  • 流密码加密:

    把密钥流与明文数据异或。

  • 线性反馈移位寄存器LFSR:

对于一个特征多项式,$f(x)=1+c_1x+c_2x^2+c_3x^3+…$ 其中, x^n表示离结果寄存器距离为n的寄存器,c_n表示是否参与异或操作。如 $f(x)=1+x^2+x^4$

递归关系为:$a_n=a_{n-2}\oplus a_{n-4}$,表示a_n受到距离为2,4两个寄存器a_{n-2}, a_{n-4}的影响。

  • Diffie-Hellman算法

    • Alice和Bob各自保有a, b。双方都已知p, g

    • Alice生成 $A=g^a\ mod\ p$,将A, p, g发给Bob

    • Bob生成 $B=g^b\ mod\ p$,同时计算得到 $K=A^b=g^{ab}\ mod\ p$。将B发回给Alice

    • Alice计算 $K=B^a=g^{ab}\ mod\ p$

    • 这样,双方共有p, g, K。各自保有a, b。

数学原理

  1. 扩展的欧式算法,求乘法逆元。
  1. 普通欧式算法:求最大公约数

$$
\gcd(a,b) = \gcd(b, a\ mod\ b)
$$

  1. 中国剩余定理:解同余方程。

对于

$$
x\equiv b_i\ mod\ m_i
$$

求取$ m=\Pi m_i, M_i=m/m_i, M’_i=M^{-1}_i\ mod\ m_i, sum = \sum M_iM’_ib_i$

则$x=sum\ mod\ m.$

  1. 费马小定理

$a^{p-1}=1\ mod \ p$

  1. 欧拉定理

欧拉函数:$\varphi(n)$是从[1, n)与n互质的数的数量。显然 $\varphi(p) = p-1.$

定理内容:$a^{\varphi(n)} = 1\ mod\ n$.

可以看到,费马小定理是欧拉定理的一种特殊的情况。

上面两个定理结合模运算的性质,可以解决一些数论问题。

  1. 本原根

例如2是29的一个本原根,这意味着 $2^1, 2^2, …, 2^{28}$可以取遍1~28的所有数。也意味着所有数y都可以写成 $y=2^x$。

离散对数: $x=dlog_{2,29}y$


密码学基础
https://max-wzm.github.io/2022/11/25/course/crypto/
作者
Max Wang
发布于
2022年11月25日
许可协议