Crypto

21078 分钟阅读

授课:城堡

密码学基础

密码学是研究编制密码和破译密码的技术科学

  • 设计加解密算法
  • 破解加解密算法

密码学介绍

为何需要密码学

  • 存储:信息的存储可能是不安全的,会被窃取
  • 传输:信息的传输过程可能也不是隐秘的,会被窃听

不能直接使用明文进行存储和传输!

Crypto in CTF

出题人给定一个有一定缺陷的加密算法,需要选手攻破该加密算法,得到解密后的文字,或者伪造加密信息

比赛中题目虽然常常会涉及许多较新的论文研究结果,但是仍与目前隐私计算等前沿密码学安全研究有一定距离

Crypto学习资源推荐

基本术语

  • 消息被称为明文(Plaintext)。用某种方法伪装消息以隐藏它的内容的过程称为加密 (Encryption),被加密的消息称为密文(Ciphertext),把密文恢复为明文的过程称为密(Decryption)。
  • 密码算法(Cryptography Algorithm):是用于加密和解密的数学函数。
  • 密钥(Key):加密或解密所需要的除密码算法之外的关键信息。
  • 对称加密(Symmetric Cryptography)
    • 特点:在加密和解密时使用同一密钥
    • 例子:流密码(RC4),块密码(AES,DES)
  • 非对称加密(Asymmetric Cryptography)
    • 特点:在加密和解密时使用不同密钥,加密使用公钥,解密使用私钥
    • 例子:RSA,ElGamal,ECC
  • 哈希函数(Hash Function)
    • 特点:把输入内容单向映射到一个短的摘要上
    • 应用:下载文件完整性校验
    • 例子:CRC,MD5,SHA系列
  • 数字签名(Digital Signature)
    • 应用:对消息进行签名(也是一个短的消息),以防消息的冒名伪造或篡改

密码学基本术语

数学基础

OI Wiki 数论部分

整除:aba \mid b

  • aZ ,1a\forall a \in \mathbb{Z}~, 1 \mid a ;若 a0a \neq 0,则 a0a \mid 0aaa \mid a
  • aba \mid bbcb \mid c,则 aca \mid c
  • aba \mid baca \mid c,则 a(sb+tc)a \mid (sb + tc),其中 s,tZs, t \in \mathbb{Z}

最大公因数(Greatest Common Divisor, GCD):gcd(a,b)\gcd(a, b)

  • gcd(a,b)=gcd(b,a)\gcd(a, b) = \gcd(b, a)
  • gcd(a,b)=gcd(a,ba)\gcd(a, b) = \gcd(a, b - a)
  • gcd(a,b)=gcd(a,bmoda)\gcd(a, b) = \gcd(a, b \mod a)

特别的,当 aabb互素,即 gcd(a,b)=1\gcd(a, b) = 1时,一定存在整数 x,yx, y 使得 ax+by=1ax + by = 1

算数基本定理

任何一个大于 11 的自然数 nn 都可以唯一地分解为若干个素数的乘积

n=p1a1×p2a2×pkak n = p_1^{a_1} \times p_2^{a_2} \cdots \times p_k^{a_k}

其中 p1,p2,,pkp_1, p_2, \cdots, p_k 是素数,a1,a2,,aka_1, a_2, \cdots, a_k 是正整数

同余

a,ba,b对于模nn同余:ab(modn)a \equiv b \pmod{n}

a,b,c,d,na, b, c, d, n均为整数,且 n0n \neq 0,则有:

  • naab(modn)n \mid a \Leftrightarrow a \equiv b \pmod{n}
  • aa(modn)a \equiv a \pmod{n}
  • ab(modn)a \equiv b \pmod{n}cd(modn)c \equiv d \pmod{n},则 a±cb±d(modn)a \pm c \equiv b \pm d \pmod{n}acbd(modn)ac \equiv bd \pmod{n}
  • ab(modn)a \equiv b \pmod{n},则 akbk(modn)a^k \equiv b^k \pmod{n}
  • ab(modn)a \equiv b \pmod{n}cd(modn)c \equiv d \pmod{n},则 acbd(modn)a^c \equiv b^d \pmod{n}
  • a+b0(modn)a + b \equiv 0 \pmod{n},则称 aabb 互为加法模 nn 逆元
  • ab1(modn)ab \equiv 1 \pmod{n},则称 aabb 互为乘法模 nn 逆元。aa 的乘法模 nn 逆元记为 a1a^{-1}aa 有乘法模 nn 逆元当且仅当 gcd(a,n)=1\gcd(a, n) = 1

中国剩余定理

m1,m2,,mkm_1, m_2, \cdots, m_k 是两两互质的正整数,则对于任意的整数 a1,a2,,aka_1, a_2, \cdots, a_k,同余方程组 \[

{xa1(modm1)xa2(modm2)xak(modmk)\begin{cases} x \equiv a_1 \pmod{m_1} \\\\ x \equiv a_2 \pmod{m_2} \\\\ \cdots \\\\ x \equiv a_k \pmod{m_k} \end{cases}

\] 对模 m=m1m1m1m = m_{1}m_{1} \cdots m_{1} 有唯一解 xx

Mi=mmiM_i = \frac{m}{m_i},则 MiM_imim_i 互质,存在整数 NiN_i 使得 MiNi1(modmi)M_iN_i \equiv 1 \pmod{m_i}NiN_iMiM_i 的模 mim_i 乘法逆元),则

x=i=1kaiMiNi x = \sum_{i=1}^{k} a_iM_iN_i

欧拉函数

对于正整数 nn,欧拉函数 φ(n)\varphi(n) 定义为小于等于 nn 的正整数中与 nn 互质的数的个数

  • n=p1a1×p2a2×pkakn = p_1^{a_1} \times p_2^{a_2} \cdots \times p_k^{a_k},则 φ(n)=n×(11p1)×(11p2)(11pk)\varphi(n) = n \times (1 - \frac{1}{p_1}) \times (1 - \frac{1}{p_2}) \cdots (1 - \frac{1}{p_k})
  • n=pan = p^a,则 φ(n)=papa1=pa1(p1)\varphi(n) = p^a - p^{a-1} = p^{a-1}(p-1)
  • n=p×qn = p \times q,且 p,qp, q 互质,则 φ(n)=φ(p)×φ(q)\varphi(n) = \varphi(p) \times \varphi(q)
  • n=p×qn = p \times q,且 p,qp, q 为不同的质数,则 φ(n)=(p1)(q1)=φ(p)×φ(q)\varphi(n) = (p-1)(q-1) = \varphi(p) \times \varphi(q)

欧拉定理

a,na, n 互质,则 aφ(n)1(modn)a^{\varphi(n)} \equiv 1 \pmod{n}

费马小定理(欧拉定理的特例):当 nn 为质数时,φ(n)=n1\varphi(n) = n - 1,即 an11(modn)a^{n-1} \equiv 1 \pmod{n}

RSA算法

  • 选择两个大质数 p,qp, q,计算 n=p×qn = p \times qφ(n)=(p1)(q1)\varphi(n) = (p-1)(q-1)
  • 选择 ee,使得 1<e<φ(n)1 < e < \varphi(n),且 gcd(e,φ(n))=1\gcd(e, \varphi(n)) = 1
  • 计算 dd,使得 de1(modφ(n))d \equiv e^{-1} \pmod{\varphi(n)} ,即 d×e1(modφ(n))d \times e \equiv 1 \pmod{\varphi(n)}
  • 于是得到公钥为 (e,n)(e, n),私钥为 (d,n)(d, n), 设明文为 mm,密文为 cc,若消息太长,可将消息分段加密
    • 加密:c=memodnc = m^e \mod n
    • 解密:m=cdmodnm = c^d \mod n

古典密码

  • 代换(substitution)密码——用新的替换原先的内容
  • 置换(permutation)密码——打乱原先的顺序
  • Hill密码

凯撒密码

又称加法密码,是一种最简单的替换密码,是一种使用恒定偏移量的替换密码,将字母表中的每个字母循环移动固定位数得到密文

  • 加密:y=encode(x)=(x+key)mod26y = \text{encode}(x) = (x + key) \mod 26
  • 解密:x=decode(y)=(ykey)mod26x = \text{decode}(y) = (y - key) \mod 26
  • 破解:暴力枚举观察结果(常见编码ROT13,取key=13key = 13

一般的凯撒加密只作用于26个字母,但也可拓展到ASCII码表上(常见编码ROT47,将33~126作为字母表,取key=47key = 47

仿射密码

仿射密码是一种线性替换密码,类似于凯撒加密,但不止进行加法

  • 加密 y=encoude(x)=(x×key1+key2)mod26y = \text{encoude}(x) = (x \times key_1 + key_2) \mod 26
  • 解密 x=decode(y)=(ykey2)×key11mod26x = \text{decode}(y) = (y - key_2) \times key_1^{-1} \mod 26
  • 破解:单表密码加密前后的字符是一一对应的,不会破坏统计规律,根据英文文本中字母出现的频率以及一些常见单词即可轻松破解(如the, and, you a等)

维吉尼亚密码

一种多表加密的替换密码,密钥任意长,并且以循环使用,第 ii 个字符用第 ii 个密钥进行偏移

  • 加密:yi=encode(xi)=(xi+keyi)mod26y_i = \text{encode}(x_i) = (x_i + key_i) \mod 26
  • 解密:xi=decode(yi)=(yikeyi)mod26x_i = \text{decode}(y_i) = (y_i - key_i) \mod 26

维吉尼亚密码表

例:明文CRANE,密钥TONY

  • (C, T) \rightarrow V
  • (R, O) \rightarrow F
  • (A, N) \rightarrow N
  • (N, Y) \rightarrow L
  • (E, T) \rightarrow X

破解:确定密钥长度 \rightarrow 分组爆破加法密码 \rightarrow 得到密钥

置换密码

加密变换使得信息元素只有位置变化而内容不变,比如对于一种置换密码,其置换表为

X 1 2 3 4 5 6
E(X) 3 5 1 6 4 2

对于明文crypto basic\texttt{crypto basic},先进行分组(不足需填充):[crypto]\texttt{[crypto]}[ basic]\texttt{[ basic]},然后对每一组进行置换: 对每一组进行置换: [crypto][yoctrp]\texttt{[crypto]} \rightarrow \texttt{[yoctrp]} [ basic][ac ibs]\texttt{[ basic]} \rightarrow \texttt{[ac ibs]} 最终密文就是yoctrpac ibs\texttt{yoctrpac ibs}

栅栏密码

栅栏密码也是一种置换密码,其将明文分割成k行,然后重新拼接,这里k即为加密的密钥

对于明文crypto basic\texttt{crypto basic},取 k=3k=3 ,将明文分割成三行

c
p
s
r t b i
y o a c

因此得到的密文为cp srtbiyoac\texttt{cp srtbiyoac}

Hill密码

希尔密码是运用基本线性代数原理实现的替换密码

每个字母当作26进制数字,将一串字母当成 nn 维向量,与一个 n×nn \times n 的矩阵相乘,再将得出的结果 mod 26,其中这个 n×nn \times n 矩阵就是密钥

比如明文 IT\texttt{IT} ,转换成26进制为P=[920]P = \begin{bmatrix} 9 & 20 \end{bmatrix} ,加密密钥 K=[11837]K = \begin{bmatrix} 11 & 8 \\\\ 3 & 7 \end{bmatrix}

密文即为C=P×K=[159212]mod26=[34]C = P \times K = \begin{bmatrix} 159 & 212 \end{bmatrix}\mod 26 = \begin{bmatrix} 3 & 4 \end{bmatrix},转回字母即 CD\texttt{CD} 解密只需要计算 KK 的逆矩阵即可,$ P = C \times K^{-1} = \begin{bmatrix} 3 & 4 \end{bmatrix} \times

\begin{bmatrix} 7 & 18 \\\\ 23 & 11 \end{bmatrix} = \begin{bmatrix} 9 & 20 \end{bmatrix} $,再转回字母即 $\texttt{IT} $