dp就是私钥dmod(p-1),即dp = d mod(p-1)。dp泄露的原理如下:
由于得到了X的范围,可以遍历X (65537种可能),利用(p-1)为整数这一限制条件求出( p − 1 ),此时的p不一定正确,还需要验证是否为n的因数,如果是,则说明p无误。得到正确的p以后,可还原明文。
1 | for i in range(1,65538): |
示例:
1 | e = 65537 |
解密脚本:
1 | import gmpy2 |
wctf2020{dp_leaking_1s_very_d@angerous}