misc和取证都是常规题目,仅仅复现一下密码题目。
这道题考察了openssl私钥格式解析和copper构造;比赛时没出主要还是因为对私钥结构不熟悉,觉得难度大就放弃了。
题目给了私钥的首尾两段,我们需要对照格式去解析已知信息,参考这里;弄清楚私钥的格式以后,直接解析已知部分:
1 | import base64 |
已知信息有n,e,q模p的逆,d mod q-1的部分(低位)。根据这些信息,可以构造copper:
这里注意需要控制k的范围,由ed’ - 1 = k*(q-1)可知,k小于e,这个范围足够了,但是sage会跑的比较慢,可以尝试多进程分段:
1 | n = 151036135413139226687867011199700639084856588533884431118047808395603993635242690166659649156476428533386350427603713487259266502837260466348398817558768025404903682189934563578605367223796247470920497617904900418615352839562681665973088711089128789315193951623751145385357347144960284983398745189236464272961 |
最后得到d解rsa需要用他加密这个库,略微麻烦:
1 | n = 151036135413139226687867011199700639084856588533884431118047808395603993635242690166659649156476428533386350427603713487259266502837260466348398817558768025404903682189934563578605367223796247470920497617904900418615352839562681665973088711089128789315193951623751145385357347144960284983398745189236464272961 |
经测试,可以不需要重写PEM文件,直接用RSA.construct建立的key也能解:
1 | n = 151036135413139226687867011199700639084856588533884431118047808395603993635242690166659649156476428533386350427603713487259266502837260466348398817558768025404903682189934563578605367223796247470920497617904900418615352839562681665973088711089128789315193951623751145385357347144960284983398745189236464272961 |
复现完毕,撒花~