NCTF 2024 三道 crypto 赛题的题解。
周六白天看完三道题,剩下 AES DFA 的三连题不太熟就没看了。
绮云
题目附件:qiyun.zip
题解
提供一个 RSA 的 Encryption Oracle
1 | class RSA: |
即
并且 rsa = RSA(d ** 4)
,d 是一个 232 比特的素数。我们需要恢复私钥 d ,然后伪造 ECDSA 签名。攻击思路如下:
恢复模数 N : 利用 RSA 的乘法同态,固定输入 ,则密文 满足关系 ,然后恢复足够多 N 的倍数求 GCD 即可恢复 N。
恢复公钥 e : 固定输入 ,取 ,已知 ,恢复得到准确的 , 之后逐比特恢复 。
恢复私钥 d: 虽然很小 ,但是 不满足 Wiener/Boneh 的上界。注意到
这本质就是一个 HNP 方程,我们可以多次复用上述 RSA Encryption Oracle,得到多组 , 构造格求解 SVP 恢复私钥 , 本地测试发现 11 组数据可以稳定恢复私钥。
EXP
1 | from pwn import remote, process, info |
Arcahv
题目附件:arcahv.zip
题解
套娃题,LCG + RSA Byte Oracle,攻击思路如下:
- LCG Oracle :给出了连续 5 个 LCG 的输出,我们可以通过多次访问这个 Oracle ,拼凑重合的 LCG 输出,得到连续 个 LCG 的输出。但是 5 个连续的输出已经足够恢复出 LCG 的所有状态,回溯若干轮直到 state 小于 ,即可恢复 key。
- RSA Byte Oracle:
crystal_trick
函数并不会混淆首字节,因此返回明文的首字节是准确的,加上是小端序,因此该 Oracle 每次泄露了低 8 位。我们需要解密 的密文, 只有 1024 比特,75 次 Oracle 最多泄露 600 比特,因此未知比特数只有 424 比特,利用 Coppersmith 即可分解 。
EXP
1 | from pwn import remote, process |
Sign
题目附件:sign.zip
题解
套娃题:AGCD + MT19937 ,AGCD 思路如下,加密部分
其中 , 恢复私钥 后解密 ,上式即 AGCD 问题的等式,详情参考博客 正交格攻击。
EXP
untwister 源码参考 mersenne_twister.py。
1 | from pwn import remote |