CTF集训(7)
MISC & Crypto(2)
MISC(2)
图片进阶
png文件结构包括
- png文件标志
- png数据块
分别是长度、数据块类型码、数据块数据、CRC校验码
一张图片有一个IHDR,包括宽、高、深度、类型、压缩方法
某年西湖论剑
IHDR不完整,需要手动补全
补全以后用foremost分离,得到四张图片
IDAT是主要内容,可以存在多个。可以使用pngcheck进行检测,然后提取异常块进行分析。
pngcheck -v qwq.png
jpg隐写:由于jpg使用DCT(离散余弦变换),基于此方法可能存在JSteg、JPHide、Outguess、F5等
- Stegdetect
- JPHS
- Outguess
例题
先用stegdetect检测
然后JPHS/outguess进行提取
一般敏感度调10
文档隐写
word自带文件隐藏功能/文字颜色为白色
pdf隐写:wbStego4open工具
可以隐藏到BMP、TXT、HTM、PDF中
音频隐写
Morse电码/二进制:高位1,低位0
部分音频使用快速播放的Morse电码传递信息
通过Audacity打开文件,然后用CTFcrack分析即可
频谱图隐藏信息:研究频谱图
也有对单独声道的隐写
MP3:将数据写在MP3的奇偶校验块
利用MP3stego的decode模块即可
视频隐写
将隐写图片嵌入视频
可以用foremost、ffmpeg
流量分析
- wireshark捕获流量数据包,查看流入、流出/http、tcp
- 利用binwalk提取分析,也可以用network miner
常用套路:分析协议,根据协议种类跟踪数据,根据数据提取信息
通常只涉及应用层,传输层比较少
优先查找http,在get/post提取关键信息
其次看tcp,分析连接过程,追踪数据流
现代密码学
古典密码学的安全性依赖于算法的保密性。但是随着密码学的发展,现代密码学有了新的突破。
假如敌人获取到了密码的加密方法,那么破解密码是非常容易的,这也导致这种加密不安全。现代密码学中,算法是公开的,但是我们需要一个 密钥 。如果没有密钥,敌人难以破解密码。
CTF中,古典密码学往往出现在MISC中,缺乏数学、严谨的模型分析。Crypto部分一般考察现代密码学。
常见的算法库有
- OpenSSL http://www.openssl.org/
- Crypto++ http://www.eskimo.com/~weidai/cryptlib.html
- MIRACL http://indigo.ie/~mscott/http://www.shoup.net/ntl/
- 微软的CryptoAPI http://msdn.microsoft.com/
- Maple http://www.maplesoft.com/
- JAVA的相关API
现代密码学可以粗略的分成对称密码学和非对称密码学。对称密码学的加密和解密采用相同密钥,非对称密码则引入了 公钥 的概念。RSA是最典型的非对称密码。
常见的对称密码有DES/3DES、AES、RC4、IDEA等。由于对密钥的需求,导致共享密钥需要一定条件,这个共享过程有其危险性。
非对称密码实质上创造了一个安全的信道。加密密钥是公钥,可以用加密密钥加密,发送信息。但是其他人无私钥,信息只能通过解密密钥进行解密。缺点是速度慢。
现代场景中,一般两种协议结合使用。例如HTTPS就是先用非对称密码传递密钥,然后利用对称密码来解码正文。
群论基础
设$S$是一个非空集合,函数$f:S^n \to S$ 是$S$上一个$n$元运算,$n$成为阶数。那么可以定义$<S, f_1, f_2, \cdots, f_m>$ 是一个代数系统,包括一个集合和在集合上封闭的运算。
一个常见的代数系统是模意义下的运算。设$S={x \in N | 0 \le x < m}$ ,那么$+_m$和$\times _m$都在模意义下封闭,因此$<S, +_m, \times_m>$构成一个代数系统。
如果对于运算$$,$\exists e$使得$e * x = x * e = x$,就称$e$是运算$$的单位元。那么,如果$x * y = y * x = e$,就称$y$是$x$的逆元,常常记作$x^{-1}$。如果$x * \theta = \theta * x = \theta$,则称$\theta$是零元。
如果有一个代数系统,符合结合律、存在单位元、每个元素都存在逆元,那么就称这个代数系统是一个群。对于群$<G, >$,一般称$$为乘法。当$*$满足交换律,则成为阿贝尔群。我们不加证明的给出群的充要条件:
如果$<G, *>$为一个群,则$\forall a, b \in G$,满足
- $\exists x$,$a * x = b$
- $\exists y$,$y * a = b$
并且二者唯一。
接下来我们递归的定义幂:
$$
a^n = \begin{cases} e, & n = 0 \ a^{n-1} * a, &n > 0 \ (a^{-1})^n, & n < 0 \end{cases}
$$
如果有一个元素$g \in G$,使得每个元素$a \in G$都有对应的$i \in I$将$a$表示为$g^i$,则称$<G, *>$为一个循环群。也称群由$g$生成,称$g$为生成元。
由此我们给出重要的Lagrange定理:
如果$G$为阶数$\varphi(n)$的乘法群,$g \in G$,则$g$阶整除$\varphi(n)$
由此我们得到了欧拉定理和费马定理。接下来我们可以引入RSA了。
RSA
设$n = p \cdot q$ ,$p,q$为素数。那么$\varphi(n) = (p-1)(q-1)$。取$w \in N_+$,使得$(w, \varphi(n))=1$,$d = w^{-1} \pmod{ \varphi(n)}$ 。将明文分解为若干长度小于$n$的段$m$,那么
- 加密:$E(m) = m^w \mod n$
- 解密:$D(c) = c^d \mod n$
$w, n, p, q, \varphi(n), d$是保密的。
证明:只需证明$m \equiv c^d \pmod n$
即证明 $m^w \equiv m^{dw} \pmod n$
考虑到$dw \equiv 1 \pmod n$
因而只需证明 $m^w \equiv m \pmod n$
如果$(w, n) = 1$,那么这一形式就是Felmet定理。
否则,设$m = kp$,且$q \not \mid m$ 。则有$m^{q-1} \equiv 1 \pmod q$
进而,$m^{r \varphi(n)} \equiv m^{r (p-1) (q-1)} \equiv 1 \pmod q$
化成$m^{r\varphi(n)} = hq + 1$
同时乘以m,则
$m^{r\varphi(n)+1} = hqkp + m = hkn + m$
亦即 $m^{r \varphi(n)+1} \equiv m \pmod n$
我们知道$dw \equiv 1 \pmod {\varphi(n)}$,则$dw + r\varphi(n) = 1$ ,故而
$m^{dw} \equiv m \pmod n$
那么RSA真的安全吗?其安全性首先要求我们找到两个大质数p、q。这一点和Miller-Rabin有关,我们不展开讨论。
接下来是三个常见的攻击手段。
(1)选择密文攻击
已知$c = m^e \mod n$ 。假如我们已知$\hat{c}$的明文$\hat{c}^d \mod n$,并且能查找到
$$
\left(\frac{c}{\hat{c}}\right)^d \mod n
$$
那么$m$就是二者乘起来。
(2)如果$w$很小
考察到$c \equiv m^w \mod n$即 $m^w = c + kn$,通过枚举$k$可以得到是否由$c+kn$的$w$次方根是整数的情况。
(3)共模
假如有$c_1 = m^{e_1} \mod n, c_2 = m^{e_2} \mod n$ 并且$(e_1, e_2) = 1$
也就是$\exists r,s $ 使得 $re_1 + se_2 = 1$
那么 $(c_1^{-1})^{-r} \cdot c_2 ^s \equiv m \pmod n$