遇见一个RSA的题,http://ctf5.shiyanbar.com/crypto/RSA ,以前见了就跑路,今天想好好搞搞
先百度一波学习资料,
RSA算法描述
RSA算法涉及三个参数,n,e,d,私钥为n,d,公钥为n,e。
其中n是两个大素数p,q的乘积。
d是e模$ varphi(n) $的逆元,$ varphi(n) $是n的欧拉函数。
c为密文,m为明文,则加密过程如下:
$ cequiv m^e mod n $
解密过程如下:
$ mequiv c^d$ $mod$ $n$
n,e是公开的情况下,想要知道d的值,必须要将n分解计算出n的欧拉函数值,而n是两个大素数p,q的乘积,将其分解是困难的。
一般比赛题都是给两个文件,pem格式,pcap文件,PPC模式,
pem文件用OpenSSL,这个工具很强大,可以读取文件内容
openssl rsautl -encrypt -in FLAG -inkey public.pem -pubin -out flag.enc
openssl rsa -pubin -text -modulus -in warmup -in public.pem
pacp文件:wireshark follow
ppc文件:这种模式是上述pcap文件的交互版,会给一个端口进行一些crypto的交互,参数会在交互中给出。
首先
红线部分即为模数,可以看出这是16进制
Modulus 是n的值,Exponent是E的值。
分解大数还有种方法http://factordb.com/
msieve分解N的值,msieve.exe 0xA41006DEFD378B7395B4E2EB1EC9BF56A61CD9C3B5A0A73528521EEB2FB817A7 -v
便得出p和q,E的值,然后知道p,q,,e,写python脚本(此脚本参考大佬 的,不过很适合收藏留着以后打比赛)
总计,这只是到RSA入门题,基本上都是比着题解做的,接下来要多找几道练习