跳转至

Crypto 新手上手操作指南

Crypto 题最重要的第一步是识别题型。不要一拿到数字、密文或脚本就立刻爆破;先判断它是编码、古典密码、RSA、PRNG、对称加密,还是实现漏洞。

这类题先看什么

先问:

  1. 给了什么:密文、源码、参数、交互服务、附件还是多组样本?
  2. 输出像什么:Base64、Hex、大整数、矩阵、随机数序列、分组密文?
  3. 是否给了源码?源码里真正的 secret 是怎么参与计算的?
  4. 目标是解密、伪造、预测随机数,还是恢复私钥/明文?

最小工具集

工具 用途
Python 大整数、字节转换、脚本复现
CyberChef 编码/哈希/简单变换快速试探
SageMath / sympy 数论、矩阵、多项式、格相关计算
openssl 常见对称算法和证书格式检查
RsaCtfTool / 自写脚本 RSA 参数攻击与验证

首轮 10 分钟操作流程

Step 1:先判断数据形态

  • 全是可打印字符:先看 Base64 / Base32 / URL / Morse / 古典密码。
  • 全是十六进制:先转 bytes,看是否可打印或有文件头。
  • 很大的整数:优先考虑 RSA、模运算或离散对数。
  • 多组输出:考虑 PRNG、同 key 多次加密、广播攻击、nonce 重用。
  • 有源码:直接读 secret 参与的位置,不要只看变量名。

Step 2:整理参数

把题目给出的内容整理成表:

名称 含义 是否已知
n RSA modulus 已知
e public exponent 已知
c ciphertext 已知
p/q/d/m 私钥或明文 待求

整理参数能避免把“看起来像密钥”的东西误当成真正密钥。

Step 3:先试最常见弱点

  • RSA:小指数、共模、广播、n 可分解、p/q 太近、e/d 异常。
  • CBC/CTR/GCM:IV/nonce 是否重用,是否有 padding oracle,是否可控明文。
  • Hash/MAC:是否存在长度扩展、CBC-MAC 使用场景错误。
  • PRNG:是否是 LCG、MT19937、时间种子或弱随机。
  • 古典密码:频率、周期、已知 flag 格式。

典型突破口

现象 优先尝试
e = 3 且明文短 RSA low exponent
多个不同 n 加密同一明文 Håstad broadcast
同一个 n 不同 e common modulus
pq 很接近 Fermat 分解
nonce/IV 重用 XOR 两个密文或恢复 keystream
给了加密 oracle 构造可控明文观察差异
随机数递推明显 还原 PRNG 参数

新手常见误区

  • 不整理参数,直接乱套脚本。
  • 把编码当加密,或把哈希当可逆加密。
  • 只看密文,不读源码里真实的加密流程。
  • 忽略 flag 格式,它常常是已知明文的一部分。
  • 没有验证中间结果是否能重新加密回原密文。

仓库内参考阅读

一页式检查清单

  • 判断了数据是编码、密文、大整数还是源码逻辑
  • 整理了所有参数和待求量
  • 识别了算法或至少缩小到一类算法
  • 检查了常见弱点:小指数、共模、nonce 重用、弱随机
  • 利用了 flag 格式作为已知明文或验证条件
  • 写脚本前先手算/小样本验证了公式
  • 最终结果能通过重新加密、校验或格式检查

评论