Coppersmith Method 学习
学习资料
Coppersmith, D. (1996). "Finding a Small Root of a Univariate Modular Equation". Advances in Cryptology — EUROCRYPT '96. Lecture Notes in Computer Science. Vol. 1070. pp. 155–165. doi:10.1007/3-540-68339-9_14. ISBN 978-3-540-61186-8.
Chapter 19: Coppersmith’s Method and Related Applications. Mathematics of Public Key Cryptography by Steven Galbraith ch19.pdf
NSSCTF工坊[RSA4] P2 最基础的用法
题目
1 | from Crypto.Util.number import * |
分析
最基础的用法,求模多项式的小根
1 | from Crypto.Util.number import long_to_bytes |
NSSCTF工坊[RSA4] P3 代换降次
题目
1 | from Crypto.Util.number import * |
分析
\[ m_2= am_1+b\\ c_1 \equiv m_1^3 \pmod{n}\\ c_2 \equiv m_2^3\equiv(am_1+b)^3 \equiv a^3m_1^3+3a^2m_1^2b+ 3am_1b^2+ b^3\pmod{n} \]
注意到
Integer(bytes_to_long(f"NSSCTF{{{uuid4()}}}".encode())).nbits()
长度 351bit
因此直接 copper \(c_2 \equiv a^3m_1^3+3a^2m_1^2b+ 3am_1b^2+ b^3\) 这个度 \(3\) 的多项式是 copper 不出来的,考虑使用 \(c_1\) 代换 \(m_1^3\) 以降次 \[ c_2 \equiv a^3c_1+3a^2m_1^2b+ 3am_1b^2+ b^3\pmod{n} \]
1 | from Crypto.Util.number import long_to_bytes |
NSSCTF工坊[RSA4] P4 Franklin-Reiter 相关消息攻击
题目
1 | from Crypto.Util.number import * |
分析
正常解 coppersmith 肯定是没法子了,得找找别的方法
介绍:Franklin-Reiter 相关消息攻击! \[ c_1 \equiv m_1 ^ e\\ c_2 \equiv m_2 ^ e\\ m_2 = am_1 + b \] 易知 \(0 \equiv m_1^e - c_1\) 且 \(0 \equiv m_2^e - c_2 \equiv (am_1+b)^e - c_2\)
所以 \(f(x) \equiv x^e-c_1\) 和
\(g(x) \equiv (ax+b)^e - c_2\) 有公共根
\(x \equiv m_1\) 即有公因式 \((x - m_1)\) \[
x - m_1 = \gcd(f, g)
\] \(\mathbb{Z}\) 下的
gcd 函数是这样的
1 | def gcd(a, b): |
改成 \(\mathbb{Z}/n\mathbb{Z}[x]\) 下的一样能用
1 | def gcd(f, g): |
最后算出来的gcd 要记得 monic
1 | from Crypto.Util.number import long_to_bytes |
NSSCTF工坊[RSA4] P7 Franklin-Reiter 相关消息攻击
题目
1 | from Crypto.Util.number import * |
分析
同 NSSCTF工坊[RSA4] P4 Franklin-Reiter 相关消息攻击
1 | from Crypto.Util.number import long_to_bytes |
NSSCTF工坊[RSA4] P5 Håstad 广播攻击
题目
1 | import random |
分析
Håstad 广播攻击,参考代码:4.8. 低加密指数广播攻击 - 4.8.4 扩展 | 独奏の小屋
类似中国剩余定理 CRT
1 | from Crypto.Util.number import long_to_bytes |
NSSCTF工坊[RSA4] P6 SMUPE 问题
题目
1 | import random |
分析
\(e\) 不一样大,可以取前两个或者后三个来进行 Hastad (非预期)
1 | from Crypto.Util.number import long_to_bytes |
也可以将每个式子配好相同的次数,即 SMUPE 问题 (预期解)
1 | from Crypto.Util.number import long_to_bytes |
NSSCTF工坊[RSA4] P8 m高位泄露
题目
1 | from Crypto.Util.number import * |
分析
\(e\) 小,\(m\) 大部分高位泄露,设 \(m = m_{high} + m_{low}\),则 \(c \equiv m ^ e \equiv (m_{high} + m_{low})^3\)
1 | reset() |
NSSCTF工坊[RSA4] P9 把 \(n\) 的因数 \(b \ge N^\beta\) 当作模数
题目
1 | from Crypto.Util.number import * |
分析
\[ n = pq = q(p_h + p_l) \]
\(p\) 和 \(q\) 的位数约为 \(n\) 的一半,利用"给定 \(\beta\),快速求出模某个 \(b\) 意义下较小的根,其中 \(b \ge n^\beta\),是 \(n\) 的因数"。 small_roots
时设 beta<.5
1 | reset() |
NSSCTF工坊[RSA4] P10 已知 d 低位,求 p, q
题目
1 | from Crypto.Util.number import * |
分析
参考 phase 4: 已知 d 低位,求 p, q | Pion1eer
已知 \(d\) 的低 \(410\) 位,即已知 \(d_{low} = d \bmod 2^{410}\) \[ ed \equiv 1 \pmod {(p-1)(q-1)}\\ 7d = 1 + k (p-1)(q-1) \space (\text{where } k < 7) \] 两边取 \(\bmod{2^{410}}\) \[ 7d_{low} \equiv 1 + k (p-1)(q-1) \pmod{2^{410}} \] 以 \(\frac{n}{p}\) 代替 \(q\),化为单变量等式: \[ 7d_{low}p \equiv 1 + k(pn - p^2 - n - p) \pmod{2^{410}} \] 模意义下一元二次方程,解完可以得到 \(p_{low} = p \bmod {2^{410}}\)
然后再利用 P9 解出完整的 \(p\) 即可
1 | from Crypto.Util.number import long_to_bytes |
NSSCTF工坊[RSA4] P11 Boneh and Durfee Attack
题目
1 | from Crypto.Util.number import * |
分析
由 \[ d \approx N^{0.27} \] 估算得: \[ ed^2 \ge \frac{1}{2} N^{3/2} \] 不满足 weiner attack 的条件 \(ed^2 \lessapprox \frac{1}{2} N^{3/2}\)
参考:
拿到新的板板
1 | from Crypto.Util.number import * |
__END__