楚慧杯密码题第一题
里面有两个文件,先把看一眼py文件,发现是加密过程,并且给了我们密文C
由加密过程可知e,n,d的长度
把公钥文件拖进kali分解
modulus代表N,Exponent代表E
这里是16进制,将E,N转为10进制(注意,空格及冒号别一起拖进去转了,过程略)
n = 116518679305515263290840706715579691213922169271634579327519562902613543582623449606741546472920401997930041388553141909069487589461948798111698856100819163407893673249162209631978914843896272256274862501461321020961958367098759183487116417487922645782638510876609728886007680825340200888068103951956139343723
e = 113449247876071397911206070019495939088171696712182747502133063172021565345788627261740950665891922659340020397229619329204520999096535909867327960323598168596664323692312516466648588320607291284630435682282630745947689431909998401389566081966753438869725583665294310689820290368901166811028660086977458571233
因为E,N都巨大,所以先试试维纳攻击
发现没有用。为什么没用我也不清楚,大佬提的。。。大佬说要用---
博纳攻击
先用记事本打开boneh_durfee.sage,修改E,N的值。
并且 detla要>=0.23, M>=5 .. 这里我是真不知道为什么,大佬说的
用sage shell打开,命令贴图了,具体就是使用(sage命令)boneh_durfee脚本(脚本小子)
解出私钥d为
663822343397699728953336968317794118491145998032244266550694156830036498673227937
已知e,n,c,d,带入使用维纳攻击的脚本,稍微修改一下
DASCTF{6f4fadce-5378-d17f-3c2d-2e064db4af19}
PS:
博纳攻击需要用到sage,sage具体是个啥在这个网站有解释
欢迎使用Sage教程! — Sage 中文文档 1 文档 (osgeo.cn)
然后在sage使用boneh_durfee脚本(使用方法在上面贴有,大概就是用sage shell进入到/RSA-and-LLL-attacks目录,然后使用boneh_durfee脚本)。
boneh_durfee脚本:
GitHub - mimoo/RSA-and-LLL-attacks: attacking RSA via lattice reductions (LLL)
已知e,n,c,d求m脚本
import gmpy2 import binascii import RSAwienerHacker e = 113449247876071397911206070019495939088171696712182747502133063172021565345788627261740950665891922659340020397229619329204520999096535909867327960323598168596664323692312516466648588320607291284630435682282630745947689431909998401389566081966753438869725583665294310689820290368901166811028660086977458571233 n = 116518679305515263290840706715579691213922169271634579327519562902613543582623449606741546472920401997930041388553141909069487589461948798111698856100819163407893673249162209631978914843896272256274862501461321020961958367098759183487116417487922645782638510876609728886007680825340200888068103951956139343723 c = 6838759631922176040297411386959306230064807618456930982742841698524622016849807235726065272136043603027166249075560058232683230155346614429566511309977857815138004298815137913729662337535371277019856193898546849896085411001528569293727010020290576888205244471943227253000727727343731590226737192613447347860 #d = RSAwienerHacker.hack_RSA(e, n) d = 663822343397699728953336968317794118491145998032244266550694156830036498673227937 m = gmpy2.powmod(c, d, n) print(binascii.unhexlify(hex(m)[2:]))