快速入门crypto-RSA 核心笔记

一、加解密核心公式

1. 密钥生成

  1. 选两个大质数 pq
  2. 计算模数 n = p * q
  3. 计算欧拉函数 φ(n) = (p-1) * (q-1)
  4. 选公钥 e,满足 1 < e < φ(n)eφ(n) 互质(最大公约数为 1)
  5. 求私钥 d,满足 (e * d) mod φ(n) = 1de 在模 φ(n) 下的逆元

2. 加密

明文 m → 密文 c

1
c = m^e mod n

3. 解密

密文 c → 明文 m

1
m = c^d mod n

二、常见攻击方式(大白话)

1. 模数可分解攻击(最基础)

  • 适用场景:拿到公钥 (e, n) 和密文 c,且能把 n 拆成 p*q

  • 攻击原理

    1. 分解 n = p*q(CTF 里常用工具:yafu、factordb 网站)
    2. φ(n) = (p-1)*(q-1)
    3. e 的逆元 d → 用 d 解密 cm
  • 关键条件n 能被成功分解(如果 pq 太小,分解很容易)

2. 共模攻击(同一 n 漏洞)

  • 适用场景:同一明文 m,用同一个 n、不同公钥 e1/e2 加密,得到密文 c1/c2

  • 攻击原理

    1. 只要 e1e2 互质,就存在整数 xy,满足 e1*x + e2*y = 1
    2. 明文 m = (c1^x * c2^y) mod n
    3. 遇到负数次幂 → 转成模逆(比如 c1^-k = (c1^k 的逆元) mod n
  • 关键条件:多个公钥共用同一个 n,且公钥之间互质

补充:CTF 里其他常见攻击(拓展)

  1. 低加密指数攻击(e 太小,比如 e=3)
    • 场景:e 很小,密文 c = m^3 mod n
    • 原理:直接对 c 开立方,结果就是 m(不用分解 n
  2. 私钥泄露攻击
    • 场景:不小心泄露了私钥 d
    • 原理:拿到 d 就能直接解密任意用 (e,n) 加密的密文

三、核心总结

操作 公式 关键条件
加密 c = m^e mod n 知道公钥 (e,n)
解密 m = c^d mod n 知道私钥 d
模数分解攻击 分解 n=p*q → 求 d n 可被分解
共模攻击 m=(c1^x*c2^y)mod n n、多 ee1/e2 互质